diff options
author | Simon Hausmann <simon.hausmann@nokia.com> | 2012-01-06 14:44:00 +0100 |
---|---|---|
committer | Simon Hausmann <simon.hausmann@nokia.com> | 2012-01-06 14:44:00 +0100 |
commit | 40736c5763bf61337c8c14e16d8587db021a87d4 (patch) | |
tree | b17a9c00042ad89cb1308e2484491799aa14e9f8 /Tools/MiniBrowser | |
download | qtwebkit-40736c5763bf61337c8c14e16d8587db021a87d4.tar.gz |
Imported WebKit commit 2ea9d364d0f6efa8fa64acf19f451504c59be0e4 (http://svn.webkit.org/repository/webkit/trunk@104285)
Diffstat (limited to 'Tools/MiniBrowser')
92 files changed, 13600 insertions, 0 deletions
diff --git a/Tools/MiniBrowser/Configurations/Base.xcconfig b/Tools/MiniBrowser/Configurations/Base.xcconfig new file mode 100644 index 000000000..7c3e8afab --- /dev/null +++ b/Tools/MiniBrowser/Configurations/Base.xcconfig @@ -0,0 +1,59 @@ +// Copyright (C) 2010 Apple Inc. All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. 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 APPLE INC. ``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 APPLE INC. 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. + +#include "CompilerVersion.xcconfig" + +DEBUG_INFORMATION_FORMAT = dwarf +PREBINDING = NO +GCC_C_LANGUAGE_STANDARD = gnu99 +GCC_ENABLE_CPP_EXCEPTIONS = NO; +GCC_PRECOMPILE_PREFIX_HEADER = YES +GCC_TREAT_WARNINGS_AS_ERRORS = YES +GCC_WARN_UNUSED_FUNCTION = YES +GCC_WARN_UNUSED_VARIABLE = YES +GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO +WARNING_CFLAGS = -Wall -W -Wno-unused-parameter +LINKER_DISPLAYS_MANGLED_NAMES = YES; +VALID_ARCHS = i386 x86_64; + + +REAL_PLATFORM_NAME = $(REAL_PLATFORM_NAME_$(PLATFORM_NAME)); +REAL_PLATFORM_NAME_ = $(REAL_PLATFORM_NAME_macosx); +REAL_PLATFORM_NAME_iphoneos = iphoneos; +REAL_PLATFORM_NAME_iphonesimulator = iphonesimulator; +REAL_PLATFORM_NAME_macosx = macosx; + +TARGET_MAC_OS_X_VERSION_MAJOR = $(MAC_OS_X_VERSION_MAJOR); + +// If the target Mac OS X version does not match the current Mac OS X version then we'll want to build using the target version's SDK. +SDKROOT = $(SDKROOT_$(MAC_OS_X_VERSION_MAJOR)_$(TARGET_MAC_OS_X_VERSION_MAJOR)); +SDKROOT_1060_1050 = macosx10.5; +SDKROOT_1070_1050 = macosx10.5; +SDKROOT_1080_1050 = macosx10.5; +SDKROOT_1090_1050 = macosx10.5; +SDKROOT_1070_1060 = macosx10.6; +SDKROOT_1080_1060 = macosx10.6; +SDKROOT_1090_1060 = macosx10.6; +SDKROOT_1080_1070 = macosx10.7; +SDKROOT_1090_1070 = macosx10.7; +SDKROOT_1090_1080 = macosx10.8; diff --git a/Tools/MiniBrowser/Configurations/CompilerVersion.xcconfig b/Tools/MiniBrowser/Configurations/CompilerVersion.xcconfig new file mode 100644 index 000000000..a8c7f75a0 --- /dev/null +++ b/Tools/MiniBrowser/Configurations/CompilerVersion.xcconfig @@ -0,0 +1,84 @@ +// Copyright (C) 2009, 2010, 2011 Apple Inc. All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. 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 APPLE INC. ``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 APPLE INC. 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. + +IS_XCODE_0400 = $(IS_XCODE_0400_$(XCODE_VERSION_MINOR)); +IS_XCODE_0400_0400 = YES; + +IS_XCODE_0400_OR_0410 = $(IS_XCODE_0400_OR_0410_$(XCODE_VERSION_MINOR)); +IS_XCODE_0400_OR_0410_0400 = YES; +IS_XCODE_0400_OR_0410_0410 = YES; + +// The version of the LLVM Compiler in Xcode 4.0 and earlier have difficulty compiling our code. +LLVM_COMPILER_UNSUITABLE_FOR_DEBUG_BUILDS = $(LLVM_COMPILER_UNSUITABLE_FOR_DEBUG_BUILDS_$(XCODE_VERSION_MAJOR)); +LLVM_COMPILER_UNSUITABLE_FOR_DEBUG_BUILDS_0300 = YES; +LLVM_COMPILER_UNSUITABLE_FOR_DEBUG_BUILDS_0400 = $(LLVM_COMPILER_UNSUITABLE_FOR_DEBUG_BUILDS_IS_XCODE_0400_$(IS_XCODE_0400)); +LLVM_COMPILER_UNSUITABLE_FOR_DEBUG_BUILDS_IS_XCODE_0400_YES = YES; + +// The version of the LLVM Compiler in Xcode 4.1 and earlier do not generate fast enough code. +LLVM_COMPILER_UNSUITABLE_FOR_OPTIMIZED_BUILDS = $(LLVM_COMPILER_UNSUITABLE_FOR_OPTIMIZED_BUILDS_$(XCODE_VERSION_MAJOR)); +LLVM_COMPILER_UNSUITABLE_FOR_OPTIMIZED_BUILDS_0300 = YES; +LLVM_COMPILER_UNSUITABLE_FOR_OPTIMIZED_BUILDS_0400 = $(LLVM_COMPILER_UNSUITABLE_FOR_OPTIMIZED_BUILDS_IS_XCODE_0400_OR_0410_$(IS_XCODE_0400_OR_0410)); +LLVM_COMPILER_UNSUITABLE_FOR_OPTIMIZED_BUILDS_IS_XCODE_0400_OR_0410_YES = YES; + +LLVM_COMPILER_SUITABLE_FOR_DEBUG_BUILDS = $(LLVM_COMPILER_SUITABLE_FOR_DEBUG_BUILDS_$(LLVM_COMPILER_UNSUITABLE_FOR_DEBUG_BUILDS)); +LLVM_COMPILER_SUITABLE_FOR_DEBUG_BUILDS_ = YES; +LLVM_COMPILER_SUITABLE_FOR_DEBUG_BUILDS_YES = NO; + +LLVM_COMPILER_SUITABLE_FOR_OPTIMIZED_BUILDS = $(LLVM_COMPILER_SUITABLE_FOR_OPTIMIZED_BUILDS_$(LLVM_COMPILER_UNSUITABLE_FOR_OPTIMIZED_BUILDS)); +LLVM_COMPILER_SUITABLE_FOR_OPTIMIZED_BUILDS_ = YES; +LLVM_COMPILER_SUITABLE_FOR_OPTIMIZED_BUILDS_YES = NO; + + +// Use GCC 4.2 with Xcode 3.1, which includes GCC 4.2 but defaults to GCC 4.0. +// Note that Xcode versions as new as 3.1.2 use XCODE_VERSION_ACTUAL for the minor version +// number. Newer versions of Xcode use XCODE_VERSION_MINOR for the minor version, and +// XCODE_VERSION_ACTUAL for the full version number. +TARGET_GCC_VERSION = $(TARGET_GCC_VERSION_$(REAL_PLATFORM_NAME)); +TARGET_GCC_VERSION_iphoneos = LLVM_GCC_42; +TARGET_GCC_VERSION_iphonesimulator = GCC_42; +TARGET_GCC_VERSION_macosx = $(TARGET_GCC_VERSION_macosx_$(TARGET_MAC_OS_X_VERSION_MAJOR)); + +TARGET_GCC_VERSION_macosx_1050 = $(TARGET_GCC_VERSION_macosx_1050_$(XCODE_VERSION_MINOR)); +TARGET_GCC_VERSION_macosx_1050_ = $(TARGET_GCC_VERSION_macosx_1050_$(XCODE_VERSION_ACTUAL)); +TARGET_GCC_VERSION_macosx_1050_0310 = GCC_42; +TARGET_GCC_VERSION_macosx_1050_0320 = GCC_42; + +TARGET_GCC_VERSION_macosx_1060 = $(TARGET_GCC_VERSION_macosx_1060_AND_1070_$(CONFIGURATION)); +TARGET_GCC_VERSION_macosx_1070 = $(TARGET_GCC_VERSION_macosx_1060_AND_1070_$(CONFIGURATION)); +TARGET_GCC_VERSION_macosx_1060_AND_1070_Debug = $(TARGET_GCC_VERSION_macosx_USE_LLVM_COMPILER_$(LLVM_COMPILER_SUITABLE_FOR_DEBUG_BUILDS)); +TARGET_GCC_VERSION_macosx_1060_AND_1070_Release = $(TARGET_GCC_VERSION_macosx_USE_LLVM_COMPILER_$(LLVM_COMPILER_SUITABLE_FOR_OPTIMIZED_BUILDS)); +TARGET_GCC_VERSION_macosx_1060_AND_1070_Production = $(TARGET_GCC_VERSION_macosx_USE_LLVM_COMPILER_$(LLVM_COMPILER_SUITABLE_FOR_OPTIMIZED_BUILDS)); +TARGET_GCC_VERSION_macosx_1060_NON_LLVM_FALLBACK = GCC_42; +TARGET_GCC_VERSION_macosx_1070_NON_LLVM_FALLBACK = LLVM_GCC_42; + +TARGET_GCC_VERSION_macosx_USE_LLVM_COMPILER_YES = LLVM_COMPILER; +TARGET_GCC_VERSION_macosx_USE_LLVM_COMPILER_NO = $(TARGET_GCC_VERSION_macosx_$(TARGET_MAC_OS_X_VERSION_MAJOR)_NON_LLVM_FALLBACK); + +TARGET_GCC_VERSION_macosx_1080 = LLVM_COMPILER; +TARGET_GCC_VERSION_macosx_1090 = LLVM_COMPILER; + +GCC_VERSION = $(GCC_VERSION_$(TARGET_GCC_VERSION)); +GCC_VERSION_GCC_40 = 4.0; +GCC_VERSION_GCC_42 = 4.2; +GCC_VERSION_LLVM_GCC_42 = com.apple.compilers.llvmgcc42; +GCC_VERSION_LLVM_COMPILER = com.apple.compilers.llvm.clang.1_0; diff --git a/Tools/MiniBrowser/Configurations/DebugRelease.xcconfig b/Tools/MiniBrowser/Configurations/DebugRelease.xcconfig new file mode 100644 index 000000000..0d6374f3b --- /dev/null +++ b/Tools/MiniBrowser/Configurations/DebugRelease.xcconfig @@ -0,0 +1,40 @@ +// Copyright (C) 2010 Apple Inc. All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. 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 APPLE INC. ``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 APPLE INC. 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. + +#include "Base.xcconfig" + +ARCHS = $(ARCHS_$(TARGET_MAC_OS_X_VERSION_MAJOR)); +ARCHS_1050 = $(NATIVE_ARCH); +ARCHS_1060 = $(ARCHS_STANDARD_32_64_BIT); +ARCHS_1070 = $(ARCHS_STANDARD_32_64_BIT); +ARCHS_1080 = $(ARCHS_STANDARD_32_64_BIT); +ARCHS_1090 = $(ARCHS_STANDARD_32_64_BIT); + +ONLY_ACTIVE_ARCH = YES; + +MACOSX_DEPLOYMENT_TARGET = $(MACOSX_DEPLOYMENT_TARGET_$(TARGET_MAC_OS_X_VERSION_MAJOR)) +MACOSX_DEPLOYMENT_TARGET_1050 = 10.5; +MACOSX_DEPLOYMENT_TARGET_1060 = 10.6; +MACOSX_DEPLOYMENT_TARGET_1070 = 10.7; +MACOSX_DEPLOYMENT_TARGET_1080 = 10.8; +MACOSX_DEPLOYMENT_TARGET_1090 = 10.9; diff --git a/Tools/MiniBrowser/Configurations/MiniBrowser.xcconfig b/Tools/MiniBrowser/Configurations/MiniBrowser.xcconfig new file mode 100644 index 000000000..cf5ad849a --- /dev/null +++ b/Tools/MiniBrowser/Configurations/MiniBrowser.xcconfig @@ -0,0 +1,26 @@ +// Copyright (C) 2010 Apple Inc. All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. 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 APPLE INC. ``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 APPLE INC. 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. + +PRODUCT_NAME = MiniBrowser +GCC_PREFIX_HEADER = mac/MiniBrowser_Prefix.pch +INFOPLIST_FILE = mac/Info.plist diff --git a/Tools/MiniBrowser/Configurations/MiniBrowserCFLite.vsprops b/Tools/MiniBrowser/Configurations/MiniBrowserCFLite.vsprops new file mode 100644 index 000000000..be2d869d3 --- /dev/null +++ b/Tools/MiniBrowser/Configurations/MiniBrowserCFLite.vsprops @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="Windows-1252"?> +<VisualStudioPropertySheet + ProjectType="Visual C++" + Version="8.00" + Name="MiniBrowserCFLite" + > + <Tool + Name="VCLinkerTool" + AdditionalDependencies="shlwapi.lib WebKit$(WebKitDLLConfigSuffix).lib CFLite$(LibraryConfigSuffix).lib" + /> +</VisualStudioPropertySheet> diff --git a/Tools/MiniBrowser/Configurations/MiniBrowserCommon.vsprops b/Tools/MiniBrowser/Configurations/MiniBrowserCommon.vsprops new file mode 100644 index 000000000..c86035d3a --- /dev/null +++ b/Tools/MiniBrowser/Configurations/MiniBrowserCommon.vsprops @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="Windows-1252"?> +<VisualStudioPropertySheet + ProjectType="Visual C++" + Version="8.00" + Name="MiniBrowserCommon" + > + <Tool + Name="VCCLCompilerTool" + AdditionalIncludeDirectories=""$(ConfigurationBuildDir)\Include";"$(WebKitLibrariesDir)\Include"" + UsePrecompiledHeader="2" + /> + <Tool + Name="VCLinkerTool" + OutputFile="$(OutDir)\$(ProjectName)$(WebKitConfigSuffix).dll" + /> +</VisualStudioPropertySheet> diff --git a/Tools/MiniBrowser/Configurations/MiniBrowserCoreFoundation.vsprops b/Tools/MiniBrowser/Configurations/MiniBrowserCoreFoundation.vsprops new file mode 100644 index 000000000..6d5105bb1 --- /dev/null +++ b/Tools/MiniBrowser/Configurations/MiniBrowserCoreFoundation.vsprops @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="Windows-1252"?> +<VisualStudioPropertySheet + ProjectType="Visual C++" + Version="8.00" + Name="MiniBrowserCoreFoundation" + > + <Tool + Name="VCLinkerTool" + AdditionalDependencies="shlwapi.lib WebKit$(WebKitDLLConfigSuffix).lib CoreFoundation$(LibraryConfigSuffix).lib CFNetwork$(LibraryConfigSuffix).lib" + /> +</VisualStudioPropertySheet> diff --git a/Tools/MiniBrowser/Configurations/MiniBrowserDebug.vsprops b/Tools/MiniBrowser/Configurations/MiniBrowserDebug.vsprops new file mode 100644 index 000000000..6448f6faa --- /dev/null +++ b/Tools/MiniBrowser/Configurations/MiniBrowserDebug.vsprops @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="Windows-1252"?> +<VisualStudioPropertySheet + ProjectType="Visual C++" + Version="8.00" + Name="MiniBrowserDebug" + InheritedPropertySheets="$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\common.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\debug.vsprops;.\MiniBrowserCoreFoundation.vsprops;.\MiniBrowserCommon.vsprops" + > +</VisualStudioPropertySheet> diff --git a/Tools/MiniBrowser/Configurations/MiniBrowserDebugAll.vsprops b/Tools/MiniBrowser/Configurations/MiniBrowserDebugAll.vsprops new file mode 100644 index 000000000..635a0c725 --- /dev/null +++ b/Tools/MiniBrowser/Configurations/MiniBrowserDebugAll.vsprops @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="Windows-1252"?> +<VisualStudioPropertySheet + ProjectType="Visual C++" + Version="8.00" + Name="MiniBrowserDebugAll" + InheritedPropertySheets="$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\common.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\debug.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\debug_all.vsprops;.\MiniBrowserCoreFoundation.vsprops;.\MiniBrowserCommon.vsprops" + > +</VisualStudioPropertySheet> diff --git a/Tools/MiniBrowser/Configurations/MiniBrowserDebugCairoCFLite.vsprops b/Tools/MiniBrowser/Configurations/MiniBrowserDebugCairoCFLite.vsprops new file mode 100644 index 000000000..cb2a20b9e --- /dev/null +++ b/Tools/MiniBrowser/Configurations/MiniBrowserDebugCairoCFLite.vsprops @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="Windows-1252"?> +<VisualStudioPropertySheet + ProjectType="Visual C++" + Version="8.00" + Name="MiniBrowserDebugCairoCFLite" + InheritedPropertySheets="$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\common.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\debug.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\debug_wincairo.vsprops;.\MiniBrowserCFLite.vsprops;.\MiniBrowserCommon.vsprops" + > +</VisualStudioPropertySheet> diff --git a/Tools/MiniBrowser/Configurations/MiniBrowserLauncherCommon.vsprops b/Tools/MiniBrowser/Configurations/MiniBrowserLauncherCommon.vsprops new file mode 100644 index 000000000..e86688aed --- /dev/null +++ b/Tools/MiniBrowser/Configurations/MiniBrowserLauncherCommon.vsprops @@ -0,0 +1,13 @@ +<?xml version="1.0" encoding="Windows-1252"?> +<VisualStudioPropertySheet + ProjectType="Visual C++" + Version="8.00" + Name="MiniBrowserLauncherCommon" + > + <Tool + Name="VCLinkerTool" + AdditionalDependencies="shlwapi.lib" + OutputFile="$(OutDir)\MiniBrowser$(WebKitConfigSuffix).exe" + ProgramDatabaseFile="$(TargetDir)$(TargetName)Launcher.pdb" + /> +</VisualStudioPropertySheet> diff --git a/Tools/MiniBrowser/Configurations/MiniBrowserLauncherDebug.vsprops b/Tools/MiniBrowser/Configurations/MiniBrowserLauncherDebug.vsprops new file mode 100644 index 000000000..6731dc756 --- /dev/null +++ b/Tools/MiniBrowser/Configurations/MiniBrowserLauncherDebug.vsprops @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="Windows-1252"?> +<VisualStudioPropertySheet + ProjectType="Visual C++" + Version="8.00" + Name="MiniBrowserLauncherDebug" + InheritedPropertySheets="$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\common.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\debug.vsprops;.\MiniBrowserLauncherCommon.vsprops" + > +</VisualStudioPropertySheet> diff --git a/Tools/MiniBrowser/Configurations/MiniBrowserLauncherDebugAll.vsprops b/Tools/MiniBrowser/Configurations/MiniBrowserLauncherDebugAll.vsprops new file mode 100644 index 000000000..40a5686ca --- /dev/null +++ b/Tools/MiniBrowser/Configurations/MiniBrowserLauncherDebugAll.vsprops @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="Windows-1252"?> +<VisualStudioPropertySheet + ProjectType="Visual C++" + Version="8.00" + Name="MiniBrowserLauncherDebugAll" + InheritedPropertySheets="$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\common.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\debug.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\debug_all.vsprops;.\MiniBrowserLauncherCommon.vsprops" + > +</VisualStudioPropertySheet> diff --git a/Tools/MiniBrowser/Configurations/MiniBrowserLauncherDebugCairoCFLite.vsprops b/Tools/MiniBrowser/Configurations/MiniBrowserLauncherDebugCairoCFLite.vsprops new file mode 100644 index 000000000..f03f9acc3 --- /dev/null +++ b/Tools/MiniBrowser/Configurations/MiniBrowserLauncherDebugCairoCFLite.vsprops @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="Windows-1252"?> +<VisualStudioPropertySheet + ProjectType="Visual C++" + Version="8.00" + Name="MiniBrowserDebugCairoCFLite" + InheritedPropertySheets="$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\common.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\debug.vsprops" + > +</VisualStudioPropertySheet> diff --git a/Tools/MiniBrowser/Configurations/MiniBrowserLauncherProduction.vsprops b/Tools/MiniBrowser/Configurations/MiniBrowserLauncherProduction.vsprops new file mode 100644 index 000000000..5d243558b --- /dev/null +++ b/Tools/MiniBrowser/Configurations/MiniBrowserLauncherProduction.vsprops @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="Windows-1252"?> +<VisualStudioPropertySheet + ProjectType="Visual C++" + Version="8.00" + Name="MiniBrowserLauncherProduction" + InheritedPropertySheets="$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\common.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\releaseproduction.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\production.vsprops;.\MiniBrowserLauncherCommon.vsprops" + > +</VisualStudioPropertySheet> diff --git a/Tools/MiniBrowser/Configurations/MiniBrowserLauncherRelease.vsprops b/Tools/MiniBrowser/Configurations/MiniBrowserLauncherRelease.vsprops new file mode 100644 index 000000000..58d1f38ea --- /dev/null +++ b/Tools/MiniBrowser/Configurations/MiniBrowserLauncherRelease.vsprops @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="Windows-1252"?> +<VisualStudioPropertySheet + ProjectType="Visual C++" + Version="8.00" + Name="MiniBrowserLauncherRelease" + InheritedPropertySheets="$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\common.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\releaseproduction.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\release.vsprops;.\MiniBrowserLauncherCommon.vsprops" + > +</VisualStudioPropertySheet> diff --git a/Tools/MiniBrowser/Configurations/MiniBrowserLauncherReleaseCairoCFLite.vsprops b/Tools/MiniBrowser/Configurations/MiniBrowserLauncherReleaseCairoCFLite.vsprops new file mode 100644 index 000000000..43062ff2b --- /dev/null +++ b/Tools/MiniBrowser/Configurations/MiniBrowserLauncherReleaseCairoCFLite.vsprops @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="Windows-1252"?> +<VisualStudioPropertySheet + ProjectType="Visual C++" + Version="8.00" + Name="MiniBrowserLauncherReleaseCairoCFLite" + InheritedPropertySheets="$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\common.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\releaseproduction.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\release.vsprops;.\MiniBrowserLauncherCommon.vsprops" + > +</VisualStudioPropertySheet> diff --git a/Tools/MiniBrowser/Configurations/MiniBrowserProduction.vsprops b/Tools/MiniBrowser/Configurations/MiniBrowserProduction.vsprops new file mode 100644 index 000000000..46a62eedc --- /dev/null +++ b/Tools/MiniBrowser/Configurations/MiniBrowserProduction.vsprops @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="Windows-1252"?> +<VisualStudioPropertySheet + ProjectType="Visual C++" + Version="8.00" + Name="MiniBrowserProduction" + InheritedPropertySheets="$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\common.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\releaseproduction.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\production.vsprops;.\MiniBrowserCoreFoundation.vsprops;.\MiniBrowserCommon.vsprops" + > +</VisualStudioPropertySheet> diff --git a/Tools/MiniBrowser/Configurations/MiniBrowserRelease.vsprops b/Tools/MiniBrowser/Configurations/MiniBrowserRelease.vsprops new file mode 100644 index 000000000..4fa4555da --- /dev/null +++ b/Tools/MiniBrowser/Configurations/MiniBrowserRelease.vsprops @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="Windows-1252"?> +<VisualStudioPropertySheet + ProjectType="Visual C++" + Version="8.00" + Name="MiniBrowserRelease" + InheritedPropertySheets="$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\common.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\releaseproduction.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\release.vsprops;.\MiniBrowserCoreFoundation.vsprops;.\MiniBrowserCommon.vsprops" + > +</VisualStudioPropertySheet> diff --git a/Tools/MiniBrowser/Configurations/MiniBrowserReleaseCairoCFLite.vsprops b/Tools/MiniBrowser/Configurations/MiniBrowserReleaseCairoCFLite.vsprops new file mode 100644 index 000000000..87d847972 --- /dev/null +++ b/Tools/MiniBrowser/Configurations/MiniBrowserReleaseCairoCFLite.vsprops @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="Windows-1252"?> +<VisualStudioPropertySheet + ProjectType="Visual C++" + Version="8.00" + Name="MiniBrowserReleaseCairoCFLite" + InheritedPropertySheets="$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\common.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\releaseproduction.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\release.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\WinCairo.vsprops;.\MiniBrowserCFLite.vsprops;.\MiniBrowserCommon.vsprops" + > +</VisualStudioPropertySheet> diff --git a/Tools/MiniBrowser/Configurations/WebBundle.xcconfig b/Tools/MiniBrowser/Configurations/WebBundle.xcconfig new file mode 100644 index 000000000..253fdf769 --- /dev/null +++ b/Tools/MiniBrowser/Configurations/WebBundle.xcconfig @@ -0,0 +1,26 @@ +// Copyright (C) 2010 Apple Inc. All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. 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 APPLE INC. ``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 APPLE INC. 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. + +PRODUCT_NAME = WebBundle +GCC_PREFIX_HEADER = mac/MiniBrowser_Prefix.pch +INFOPLIST_FILE = mac/WebBundle/Info.plist diff --git a/Tools/MiniBrowser/MBToolbarItem.h b/Tools/MiniBrowser/MBToolbarItem.h new file mode 100644 index 000000000..cc5a4b4cf --- /dev/null +++ b/Tools/MiniBrowser/MBToolbarItem.h @@ -0,0 +1,28 @@ +/* + * Copyright (C) 2010 Apple Inc. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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 APPLE INC. AND ITS 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 APPLE INC. OR ITS 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. + */ + +@interface MBToolbarItem : NSToolbarItem +{ } +@end diff --git a/Tools/MiniBrowser/MBToolbarItem.m b/Tools/MiniBrowser/MBToolbarItem.m new file mode 100644 index 000000000..56f777891 --- /dev/null +++ b/Tools/MiniBrowser/MBToolbarItem.m @@ -0,0 +1,35 @@ +/* + * Copyright (C) 2010 Apple Inc. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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 APPLE INC. AND ITS 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 APPLE INC. OR ITS 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. + */ + +#import "MBToolbarItem.h" + +@implementation MBToolbarItem + +- (void)validate +{ + [self setEnabled:[[self target] validateUserInterfaceItem:self]]; +} + +@end diff --git a/Tools/MiniBrowser/Makefile b/Tools/MiniBrowser/Makefile new file mode 100644 index 000000000..61cd4756b --- /dev/null +++ b/Tools/MiniBrowser/Makefile @@ -0,0 +1,21 @@ +# Build MiniBrowser only on SnowLeopard and later. + +OSX_VERSION ?= $(shell sw_vers -productVersion | cut -d. -f 2) +BUILD_MINIBROWSER = $(shell (( $(OSX_VERSION) >= 6 )) && echo "YES" ) + +ifeq "$(BUILD_MINIBROWSER)" "YES" + +SCRIPTS_PATH = ../Scripts +include ../../Makefile.shared + +else + +all: ; + +debug d development dev develop: ; + +release r deployment dep deploy: ; + +clean: ; + +endif diff --git a/Tools/MiniBrowser/MiniBrowser.vcproj b/Tools/MiniBrowser/MiniBrowser.vcproj new file mode 100644 index 000000000..a52e222ab --- /dev/null +++ b/Tools/MiniBrowser/MiniBrowser.vcproj @@ -0,0 +1,508 @@ +<?xml version="1.0" encoding="Windows-1252"?> +<VisualStudioProject + ProjectType="Visual C++" + Version="8.00" + Name="MiniBrowser" + ProjectGUID="{1480CF5F-4160-47B5-A0E6-96AEC8258FB5}" + RootNamespace="MiniBrowser" + Keyword="Win32Proj" + > + <Platforms> + <Platform + Name="Win32" + /> + </Platforms> + <ToolFiles> + </ToolFiles> + <Configurations> + <Configuration + Name="Debug|Win32" + ConfigurationType="2" + InheritedPropertySheets=".\Configurations\MiniBrowserDebug.vsprops" + UseOfATL="1" + CharacterSet="1" + > + <Tool + Name="VCPreBuildEventTool" + /> + <Tool + Name="VCCustomBuildTool" + /> + <Tool + Name="VCXMLDataGeneratorTool" + /> + <Tool + Name="VCWebServiceProxyGeneratorTool" + /> + <Tool + Name="VCMIDLTool" + /> + <Tool + Name="VCCLCompilerTool" + /> + <Tool + Name="VCManagedResourceCompilerTool" + /> + <Tool + Name="VCResourceCompilerTool" + /> + <Tool + Name="VCPreLinkEventTool" + /> + <Tool + Name="VCLinkerTool" + /> + <Tool + Name="VCALinkTool" + /> + <Tool + Name="VCManifestTool" + /> + <Tool + Name="VCXDCMakeTool" + /> + <Tool + Name="VCBscMakeTool" + /> + <Tool + Name="VCFxCopTool" + /> + <Tool + Name="VCAppVerifierTool" + /> + <Tool + Name="VCWebDeploymentTool" + /> + <Tool + Name="VCPostBuildEventTool" + /> + </Configuration> + <Configuration + Name="Release|Win32" + ConfigurationType="2" + InheritedPropertySheets=".\Configurations\MiniBrowserRelease.vsprops" + UseOfATL="1" + CharacterSet="1" + > + <Tool + Name="VCPreBuildEventTool" + /> + <Tool + Name="VCCustomBuildTool" + /> + <Tool + Name="VCXMLDataGeneratorTool" + /> + <Tool + Name="VCWebServiceProxyGeneratorTool" + /> + <Tool + Name="VCMIDLTool" + /> + <Tool + Name="VCCLCompilerTool" + /> + <Tool + Name="VCManagedResourceCompilerTool" + /> + <Tool + Name="VCResourceCompilerTool" + /> + <Tool + Name="VCPreLinkEventTool" + /> + <Tool + Name="VCLinkerTool" + /> + <Tool + Name="VCALinkTool" + /> + <Tool + Name="VCManifestTool" + /> + <Tool + Name="VCXDCMakeTool" + /> + <Tool + Name="VCBscMakeTool" + /> + <Tool + Name="VCFxCopTool" + /> + <Tool + Name="VCAppVerifierTool" + /> + <Tool + Name="VCWebDeploymentTool" + /> + <Tool + Name="VCPostBuildEventTool" + /> + </Configuration> + <Configuration + Name="Debug_All|Win32" + ConfigurationType="2" + InheritedPropertySheets=".\Configurations\MiniBrowserDebugAll.vsprops" + UseOfATL="1" + CharacterSet="1" + > + <Tool + Name="VCPreBuildEventTool" + /> + <Tool + Name="VCCustomBuildTool" + /> + <Tool + Name="VCXMLDataGeneratorTool" + /> + <Tool + Name="VCWebServiceProxyGeneratorTool" + /> + <Tool + Name="VCMIDLTool" + /> + <Tool + Name="VCCLCompilerTool" + /> + <Tool + Name="VCManagedResourceCompilerTool" + /> + <Tool + Name="VCResourceCompilerTool" + /> + <Tool + Name="VCPreLinkEventTool" + /> + <Tool + Name="VCLinkerTool" + /> + <Tool + Name="VCALinkTool" + /> + <Tool + Name="VCManifestTool" + /> + <Tool + Name="VCXDCMakeTool" + /> + <Tool + Name="VCBscMakeTool" + /> + <Tool + Name="VCFxCopTool" + /> + <Tool + Name="VCAppVerifierTool" + /> + <Tool + Name="VCWebDeploymentTool" + /> + <Tool + Name="VCPostBuildEventTool" + /> + </Configuration> + <Configuration + Name="Debug_Cairo_CFLite|Win32" + ConfigurationType="2" + InheritedPropertySheets=".\Configurations\MiniBrowserDebugCairoCFLite.vsprops" + UseOfATL="1" + CharacterSet="1" + > + <Tool + Name="VCPreBuildEventTool" + /> + <Tool + Name="VCCustomBuildTool" + /> + <Tool + Name="VCXMLDataGeneratorTool" + /> + <Tool + Name="VCWebServiceProxyGeneratorTool" + /> + <Tool + Name="VCMIDLTool" + /> + <Tool + Name="VCCLCompilerTool" + /> + <Tool + Name="VCManagedResourceCompilerTool" + /> + <Tool + Name="VCResourceCompilerTool" + /> + <Tool + Name="VCPreLinkEventTool" + /> + <Tool + Name="VCLinkerTool" + /> + <Tool + Name="VCALinkTool" + /> + <Tool + Name="VCManifestTool" + /> + <Tool + Name="VCXDCMakeTool" + /> + <Tool + Name="VCBscMakeTool" + /> + <Tool + Name="VCFxCopTool" + /> + <Tool + Name="VCAppVerifierTool" + /> + <Tool + Name="VCWebDeploymentTool" + /> + <Tool + Name="VCPostBuildEventTool" + /> + </Configuration> + <Configuration + Name="Release_Cairo_CFLite|Win32" + ConfigurationType="2" + InheritedPropertySheets=".\Configurations\MiniBrowserReleaseCairoCFLite.vsprops" + UseOfATL="1" + CharacterSet="1" + > + <Tool + Name="VCPreBuildEventTool" + /> + <Tool + Name="VCCustomBuildTool" + /> + <Tool + Name="VCXMLDataGeneratorTool" + /> + <Tool + Name="VCWebServiceProxyGeneratorTool" + /> + <Tool + Name="VCMIDLTool" + /> + <Tool + Name="VCCLCompilerTool" + /> + <Tool + Name="VCManagedResourceCompilerTool" + /> + <Tool + Name="VCResourceCompilerTool" + /> + <Tool + Name="VCPreLinkEventTool" + /> + <Tool + Name="VCLinkerTool" + /> + <Tool + Name="VCALinkTool" + /> + <Tool + Name="VCManifestTool" + /> + <Tool + Name="VCXDCMakeTool" + /> + <Tool + Name="VCBscMakeTool" + /> + <Tool + Name="VCFxCopTool" + /> + <Tool + Name="VCAppVerifierTool" + /> + <Tool + Name="VCWebDeploymentTool" + /> + <Tool + Name="VCPostBuildEventTool" + /> + </Configuration> + <Configuration + Name="Production|Win32" + ConfigurationType="2" + InheritedPropertySheets=".\Configurations\MiniBrowserProduction.vsprops" + UseOfATL="1" + CharacterSet="1" + WholeProgramOptimization="1" + > + <Tool + Name="VCPreBuildEventTool" + /> + <Tool + Name="VCCustomBuildTool" + /> + <Tool + Name="VCXMLDataGeneratorTool" + /> + <Tool + Name="VCWebServiceProxyGeneratorTool" + /> + <Tool + Name="VCMIDLTool" + /> + <Tool + Name="VCCLCompilerTool" + /> + <Tool + Name="VCManagedResourceCompilerTool" + /> + <Tool + Name="VCResourceCompilerTool" + /> + <Tool + Name="VCPreLinkEventTool" + /> + <Tool + Name="VCLinkerTool" + /> + <Tool + Name="VCALinkTool" + /> + <Tool + Name="VCManifestTool" + /> + <Tool + Name="VCXDCMakeTool" + /> + <Tool + Name="VCBscMakeTool" + /> + <Tool + Name="VCFxCopTool" + /> + <Tool + Name="VCAppVerifierTool" + /> + <Tool + Name="VCWebDeploymentTool" + /> + <Tool + Name="VCPostBuildEventTool" + /> + </Configuration> + </Configurations> + <References> + </References> + <Files> + <Filter + Name="Source Files" + Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx" + UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}" + > + <File + RelativePath=".\win\BrowserView.cpp" + > + </File> + <File + RelativePath=".\win\BrowserWindow.cpp" + > + </File> + <File + RelativePath=".\win\main.cpp" + > + </File> + <File + RelativePath=".\win\MiniBrowser.cpp" + > + </File> + <File + RelativePath=".\win\stdafx.cpp" + > + <FileConfiguration + Name="Debug|Win32" + > + <Tool + Name="VCCLCompilerTool" + UsePrecompiledHeader="1" + /> + </FileConfiguration> + <FileConfiguration + Name="Release|Win32" + > + <Tool + Name="VCCLCompilerTool" + UsePrecompiledHeader="1" + /> + </FileConfiguration> + <FileConfiguration + Name="Debug_All|Win32" + > + <Tool + Name="VCCLCompilerTool" + UsePrecompiledHeader="1" + /> + </FileConfiguration> + <FileConfiguration + Name="Debug_Cairo_CFLite|Win32" + > + <Tool + Name="VCCLCompilerTool" + UsePrecompiledHeader="1" + /> + </FileConfiguration> + <FileConfiguration + Name="Release_Cairo_CFLite|Win32" + > + <Tool + Name="VCCLCompilerTool" + UsePrecompiledHeader="1" + /> + </FileConfiguration> + <FileConfiguration + Name="Production|Win32" + > + <Tool + Name="VCCLCompilerTool" + UsePrecompiledHeader="1" + /> + </FileConfiguration> + </File> + </Filter> + <Filter + Name="Header Files" + Filter="h;hpp;hxx;hm;inl;inc;xsd" + UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}" + > + <File + RelativePath=".\win\BrowserView.h" + > + </File> + <File + RelativePath=".\win\BrowserWindow.h" + > + </File> + <File + RelativePath=".\win\MiniBrowser.h" + > + </File> + <File + RelativePath=".\win\Resource.h" + > + </File> + <File + RelativePath=".\win\stdafx.h" + > + </File> + </Filter> + <Filter + Name="Resource Files" + Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav" + UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}" + > + <File + RelativePath=".\win\MiniBrowser.rc" + > + </File> + </Filter> + </Files> + <Globals> + </Globals> +</VisualStudioProject> diff --git a/Tools/MiniBrowser/MiniBrowser.xcodeproj/project.pbxproj b/Tools/MiniBrowser/MiniBrowser.xcodeproj/project.pbxproj new file mode 100644 index 000000000..fb69e89f6 --- /dev/null +++ b/Tools/MiniBrowser/MiniBrowser.xcodeproj/project.pbxproj @@ -0,0 +1,397 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 45; + objects = { + +/* Begin PBXBuildFile section */ + 0F7EB6E3134113C300F4D865 /* WebKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0F7EB6E2134113C300F4D865 /* WebKit.framework */; }; + 0F7EB879134113F200F4D865 /* WebKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0F7EB6E2134113C300F4D865 /* WebKit.framework */; }; + 256AC3DA0F4B6AC300CF3369 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 256AC3D90F4B6AC300CF3369 /* AppDelegate.m */; }; + 51E244FA11EFCE07008228D1 /* MBToolbarItem.m in Sources */ = {isa = PBXBuildFile; fileRef = 51E244F911EFCE07008228D1 /* MBToolbarItem.m */; }; + 8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; + BC20545E11C96C92008F3375 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; + BC329487116A92E2008635D0 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = BC329486116A92E2008635D0 /* main.m */; }; + BC329498116A941B008635D0 /* BrowserWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = BC329497116A941B008635D0 /* BrowserWindowController.m */; }; + BC72B89511E57E07001EB4EA /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1DDD58150DA1D0A300B32029 /* MainMenu.xib */; }; + BC72B89611E57E0F001EB4EA /* BrowserWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC3294A2116A9852008635D0 /* BrowserWindow.xib */; }; + BC8FB5A8116AA1FE0080D413 /* WebKit2.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BC8FB5A7116AA1FE0080D413 /* WebKit2.framework */; }; + BCBD384011B08A6800E01E54 /* WebBundleMain.m in Sources */ = {isa = PBXBuildFile; fileRef = BCBD383D11B08A3100E01E54 /* WebBundleMain.m */; }; + BCBD384411B08AAD00E01E54 /* WebKit2.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BC8FB5A7116AA1FE0080D413 /* WebKit2.framework */; }; + BCBD38D011B08C0200E01E54 /* WebBundle.bundle in Copy WebBundle */ = {isa = PBXBuildFile; fileRef = BCBD381D11B0898200E01E54 /* WebBundle.bundle */; }; + BCE625EE117FC80E00572433 /* BrowserStatisticsWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = BCE625ED117FC80E00572433 /* BrowserStatisticsWindow.xib */; }; + BCE625F1117FC82700572433 /* BrowserStatisticsWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = BCE625F0117FC82700572433 /* BrowserStatisticsWindowController.m */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + BCBD38C511B08BA400E01E54 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; + proxyType = 1; + remoteGlobalIDString = BCBD381C11B0898200E01E54; + remoteInfo = WebBundle; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + BCBD38CF11B08C0100E01E54 /* Copy WebBundle */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = Contents; + dstSubfolderSpec = 1; + files = ( + BCBD38D011B08C0200E01E54 /* WebBundle.bundle in Copy WebBundle */, + ); + name = "Copy WebBundle"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 0F7EB6E2134113C300F4D865 /* WebKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = WebKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = "<absolute>"; }; + 1DDD58150DA1D0A300B32029 /* MainMenu.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = MainMenu.xib; path = mac/MainMenu.xib; sourceTree = "<group>"; }; + 256AC3D80F4B6AC300CF3369 /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = mac/AppDelegate.h; sourceTree = "<group>"; }; + 256AC3D90F4B6AC300CF3369 /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AppDelegate.m; path = mac/AppDelegate.m; sourceTree = "<group>"; }; + 256AC3F00F4B6AF500CF3369 /* MiniBrowser_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MiniBrowser_Prefix.pch; path = mac/MiniBrowser_Prefix.pch; sourceTree = "<group>"; }; + 29B97324FDCFA39411CA2CEA /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = "<absolute>"; }; + 29B97325FDCFA39411CA2CEA /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = "<absolute>"; }; + 51E244F811EFCE07008228D1 /* MBToolbarItem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MBToolbarItem.h; sourceTree = "<group>"; }; + 51E244F911EFCE07008228D1 /* MBToolbarItem.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MBToolbarItem.m; sourceTree = "<group>"; }; + 8D1107320486CEB800E47090 /* MiniBrowser.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = MiniBrowser.app; sourceTree = BUILT_PRODUCTS_DIR; }; + BC329486116A92E2008635D0 /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = mac/main.m; sourceTree = "<group>"; }; + BC329496116A941B008635D0 /* BrowserWindowController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = BrowserWindowController.h; path = mac/BrowserWindowController.h; sourceTree = "<group>"; }; + BC329497116A941B008635D0 /* BrowserWindowController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = BrowserWindowController.m; path = mac/BrowserWindowController.m; sourceTree = "<group>"; }; + BC3294A2116A9852008635D0 /* BrowserWindow.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = BrowserWindow.xib; path = mac/BrowserWindow.xib; sourceTree = "<group>"; }; + BC72B89711E57E6E001EB4EA /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; }; + BC72B89A11E57E8A001EB4EA /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = mac/Info.plist; sourceTree = "<group>"; }; + BC8FB5A7116AA1FE0080D413 /* WebKit2.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = WebKit2.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + BCA8CBDD11E578A000812FB7 /* Base.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Base.xcconfig; sourceTree = "<group>"; }; + BCA8CBDE11E578A000812FB7 /* DebugRelease.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = DebugRelease.xcconfig; sourceTree = "<group>"; }; + BCA8CBDF11E578A000812FB7 /* MiniBrowser.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = MiniBrowser.xcconfig; sourceTree = "<group>"; }; + BCA8CBE011E578A000812FB7 /* WebBundle.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = WebBundle.xcconfig; sourceTree = "<group>"; }; + BCBD381D11B0898200E01E54 /* WebBundle.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = WebBundle.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; + BCBD383D11B08A3100E01E54 /* WebBundleMain.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WebBundleMain.m; sourceTree = "<group>"; }; + BCE625ED117FC80E00572433 /* BrowserStatisticsWindow.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = BrowserStatisticsWindow.xib; path = mac/BrowserStatisticsWindow.xib; sourceTree = "<group>"; }; + BCE625EF117FC82700572433 /* BrowserStatisticsWindowController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = BrowserStatisticsWindowController.h; path = mac/BrowserStatisticsWindowController.h; sourceTree = "<group>"; }; + BCE625F0117FC82700572433 /* BrowserStatisticsWindowController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = BrowserStatisticsWindowController.m; path = mac/BrowserStatisticsWindowController.m; sourceTree = "<group>"; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 8D11072E0486CEB800E47090 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */, + BC8FB5A8116AA1FE0080D413 /* WebKit2.framework in Frameworks */, + 0F7EB6E3134113C300F4D865 /* WebKit.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + BCBD381B11B0898200E01E54 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 0F7EB879134113F200F4D865 /* WebKit.framework in Frameworks */, + BC20545E11C96C92008F3375 /* Cocoa.framework in Frameworks */, + BCBD384411B08AAD00E01E54 /* WebKit2.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 080E96DDFE201D6D7F000001 /* MiniBrowser */ = { + isa = PBXGroup; + children = ( + BC72B89A11E57E8A001EB4EA /* Info.plist */, + BC329486116A92E2008635D0 /* main.m */, + 256AC3D80F4B6AC300CF3369 /* AppDelegate.h */, + 256AC3D90F4B6AC300CF3369 /* AppDelegate.m */, + BC329496116A941B008635D0 /* BrowserWindowController.h */, + BC329497116A941B008635D0 /* BrowserWindowController.m */, + BCE625EF117FC82700572433 /* BrowserStatisticsWindowController.h */, + BCE625F0117FC82700572433 /* BrowserStatisticsWindowController.m */, + 51E244F811EFCE07008228D1 /* MBToolbarItem.h */, + 51E244F911EFCE07008228D1 /* MBToolbarItem.m */, + ); + name = MiniBrowser; + sourceTree = "<group>"; + }; + 1058C7A0FEA54F0111CA2CBB /* Linked Frameworks */ = { + isa = PBXGroup; + children = ( + 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */, + 0F7EB6E2134113C300F4D865 /* WebKit.framework */, + BC8FB5A7116AA1FE0080D413 /* WebKit2.framework */, + ); + name = "Linked Frameworks"; + sourceTree = "<group>"; + }; + 1058C7A2FEA54F0111CA2CBB /* Other Frameworks */ = { + isa = PBXGroup; + children = ( + 29B97324FDCFA39411CA2CEA /* AppKit.framework */, + 29B97325FDCFA39411CA2CEA /* Foundation.framework */, + ); + name = "Other Frameworks"; + sourceTree = "<group>"; + }; + 19C28FACFE9D520D11CA2CBB /* Products */ = { + isa = PBXGroup; + children = ( + 8D1107320486CEB800E47090 /* MiniBrowser.app */, + BCBD381D11B0898200E01E54 /* WebBundle.bundle */, + ); + name = Products; + sourceTree = "<group>"; + }; + 29B97314FDCFA39411CA2CEA /* MiniBrowser */ = { + isa = PBXGroup; + children = ( + 256AC3F00F4B6AF500CF3369 /* MiniBrowser_Prefix.pch */, + 080E96DDFE201D6D7F000001 /* MiniBrowser */, + BCBD382B11B089F700E01E54 /* WebBundle */, + 29B97317FDCFA39411CA2CEA /* Resources */, + BCA8CBDA11E5787800812FB7 /* Configurations */, + 29B97323FDCFA39411CA2CEA /* Frameworks */, + 19C28FACFE9D520D11CA2CBB /* Products */, + ); + name = MiniBrowser; + sourceTree = "<group>"; + }; + 29B97317FDCFA39411CA2CEA /* Resources */ = { + isa = PBXGroup; + children = ( + BC3294A2116A9852008635D0 /* BrowserWindow.xib */, + 1DDD58150DA1D0A300B32029 /* MainMenu.xib */, + BCE625ED117FC80E00572433 /* BrowserStatisticsWindow.xib */, + ); + name = Resources; + sourceTree = "<group>"; + }; + 29B97323FDCFA39411CA2CEA /* Frameworks */ = { + isa = PBXGroup; + children = ( + 1058C7A0FEA54F0111CA2CBB /* Linked Frameworks */, + 1058C7A2FEA54F0111CA2CBB /* Other Frameworks */, + ); + name = Frameworks; + sourceTree = "<group>"; + }; + BCA8CBDA11E5787800812FB7 /* Configurations */ = { + isa = PBXGroup; + children = ( + BCA8CBDD11E578A000812FB7 /* Base.xcconfig */, + BCA8CBDE11E578A000812FB7 /* DebugRelease.xcconfig */, + BCA8CBDF11E578A000812FB7 /* MiniBrowser.xcconfig */, + BCA8CBE011E578A000812FB7 /* WebBundle.xcconfig */, + ); + path = Configurations; + sourceTree = "<group>"; + }; + BCBD382B11B089F700E01E54 /* WebBundle */ = { + isa = PBXGroup; + children = ( + BC72B89711E57E6E001EB4EA /* Info.plist */, + BCBD383D11B08A3100E01E54 /* WebBundleMain.m */, + ); + name = WebBundle; + path = mac/WebBundle; + sourceTree = "<group>"; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 8D1107260486CEB800E47090 /* MiniBrowser */ = { + isa = PBXNativeTarget; + buildConfigurationList = C01FCF4A08A954540054247B /* Build configuration list for PBXNativeTarget "MiniBrowser" */; + buildPhases = ( + 8D1107290486CEB800E47090 /* Resources */, + BCBD38CF11B08C0100E01E54 /* Copy WebBundle */, + 8D11072C0486CEB800E47090 /* Sources */, + 8D11072E0486CEB800E47090 /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + BCBD38C611B08BA400E01E54 /* PBXTargetDependency */, + ); + name = MiniBrowser; + productInstallPath = "$(HOME)/Applications"; + productName = MiniBrowser; + productReference = 8D1107320486CEB800E47090 /* MiniBrowser.app */; + productType = "com.apple.product-type.application"; + }; + BCBD381C11B0898200E01E54 /* WebBundle */ = { + isa = PBXNativeTarget; + buildConfigurationList = BCBD382111B0898300E01E54 /* Build configuration list for PBXNativeTarget "WebBundle" */; + buildPhases = ( + BCBD381911B0898200E01E54 /* Resources */, + BCBD381A11B0898200E01E54 /* Sources */, + BCBD381B11B0898200E01E54 /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = WebBundle; + productName = WebBundle; + productReference = BCBD381D11B0898200E01E54 /* WebBundle.bundle */; + productType = "com.apple.product-type.bundle"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 29B97313FDCFA39411CA2CEA /* Project object */ = { + isa = PBXProject; + buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "MiniBrowser" */; + compatibilityVersion = "Xcode 3.1"; + developmentRegion = English; + hasScannedForEncodings = 1; + knownRegions = ( + English, + Japanese, + French, + German, + ); + mainGroup = 29B97314FDCFA39411CA2CEA /* MiniBrowser */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 8D1107260486CEB800E47090 /* MiniBrowser */, + BCBD381C11B0898200E01E54 /* WebBundle */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 8D1107290486CEB800E47090 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + BC72B89511E57E07001EB4EA /* MainMenu.xib in Resources */, + BC72B89611E57E0F001EB4EA /* BrowserWindow.xib in Resources */, + BCE625EE117FC80E00572433 /* BrowserStatisticsWindow.xib in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + BCBD381911B0898200E01E54 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 8D11072C0486CEB800E47090 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 256AC3DA0F4B6AC300CF3369 /* AppDelegate.m in Sources */, + BC329487116A92E2008635D0 /* main.m in Sources */, + BC329498116A941B008635D0 /* BrowserWindowController.m in Sources */, + BCE625F1117FC82700572433 /* BrowserStatisticsWindowController.m in Sources */, + 51E244FA11EFCE07008228D1 /* MBToolbarItem.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + BCBD381A11B0898200E01E54 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + BCBD384011B08A6800E01E54 /* WebBundleMain.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + BCBD38C611B08BA400E01E54 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = BCBD381C11B0898200E01E54 /* WebBundle */; + targetProxy = BCBD38C511B08BA400E01E54 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin XCBuildConfiguration section */ + BCBD381F11B0898300E01E54 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = BCA8CBE011E578A000812FB7 /* WebBundle.xcconfig */; + buildSettings = { + }; + name = Debug; + }; + BCBD382011B0898300E01E54 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = BCA8CBE011E578A000812FB7 /* WebBundle.xcconfig */; + buildSettings = { + }; + name = Release; + }; + C01FCF4B08A954540054247B /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = BCA8CBDF11E578A000812FB7 /* MiniBrowser.xcconfig */; + buildSettings = { + }; + name = Debug; + }; + C01FCF4C08A954540054247B /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = BCA8CBDF11E578A000812FB7 /* MiniBrowser.xcconfig */; + buildSettings = { + }; + name = Release; + }; + C01FCF4F08A954540054247B /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = BCA8CBDE11E578A000812FB7 /* DebugRelease.xcconfig */; + buildSettings = { + }; + name = Debug; + }; + C01FCF5008A954540054247B /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = BCA8CBDE11E578A000812FB7 /* DebugRelease.xcconfig */; + buildSettings = { + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + BCBD382111B0898300E01E54 /* Build configuration list for PBXNativeTarget "WebBundle" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + BCBD381F11B0898300E01E54 /* Debug */, + BCBD382011B0898300E01E54 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + C01FCF4A08A954540054247B /* Build configuration list for PBXNativeTarget "MiniBrowser" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + C01FCF4B08A954540054247B /* Debug */, + C01FCF4C08A954540054247B /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + C01FCF4E08A954540054247B /* Build configuration list for PBXProject "MiniBrowser" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + C01FCF4F08A954540054247B /* Debug */, + C01FCF5008A954540054247B /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 29B97313FDCFA39411CA2CEA /* Project object */; +} diff --git a/Tools/MiniBrowser/MiniBrowserLauncher.vcproj b/Tools/MiniBrowser/MiniBrowserLauncher.vcproj new file mode 100644 index 000000000..330ffad14 --- /dev/null +++ b/Tools/MiniBrowser/MiniBrowserLauncher.vcproj @@ -0,0 +1,396 @@ +<?xml version="1.0" encoding="Windows-1252"?> +<VisualStudioProject + ProjectType="Visual C++" + Version="8.00" + Name="MiniBrowserLauncher" + ProjectGUID="{7AF4EBFB-CCBC-448F-A36A-8210E08D6A7D}" + RootNamespace="MiniBrowserLauncher" + Keyword="Win32Proj" + > + <Platforms> + <Platform + Name="Win32" + /> + </Platforms> + <ToolFiles> + </ToolFiles> + <Configurations> + <Configuration + Name="Debug|Win32" + ConfigurationType="1" + InheritedPropertySheets=".\Configurations\MiniBrowserLauncherDebug.vsprops" + CharacterSet="1" + > + <Tool + Name="VCPreBuildEventTool" + /> + <Tool + Name="VCCustomBuildTool" + /> + <Tool + Name="VCXMLDataGeneratorTool" + /> + <Tool + Name="VCWebServiceProxyGeneratorTool" + /> + <Tool + Name="VCMIDLTool" + /> + <Tool + Name="VCCLCompilerTool" + /> + <Tool + Name="VCManagedResourceCompilerTool" + /> + <Tool + Name="VCResourceCompilerTool" + /> + <Tool + Name="VCPreLinkEventTool" + /> + <Tool + Name="VCLinkerTool" + /> + <Tool + Name="VCALinkTool" + /> + <Tool + Name="VCManifestTool" + /> + <Tool + Name="VCXDCMakeTool" + /> + <Tool + Name="VCBscMakeTool" + /> + <Tool + Name="VCFxCopTool" + /> + <Tool + Name="VCAppVerifierTool" + /> + <Tool + Name="VCWebDeploymentTool" + /> + <Tool + Name="VCPostBuildEventTool" + /> + </Configuration> + <Configuration + Name="Release|Win32" + ConfigurationType="1" + InheritedPropertySheets=".\Configurations\MiniBrowserLauncherRelease.vsprops" + CharacterSet="1" + > + <Tool + Name="VCPreBuildEventTool" + /> + <Tool + Name="VCCustomBuildTool" + /> + <Tool + Name="VCXMLDataGeneratorTool" + /> + <Tool + Name="VCWebServiceProxyGeneratorTool" + /> + <Tool + Name="VCMIDLTool" + /> + <Tool + Name="VCCLCompilerTool" + /> + <Tool + Name="VCManagedResourceCompilerTool" + /> + <Tool + Name="VCResourceCompilerTool" + /> + <Tool + Name="VCPreLinkEventTool" + /> + <Tool + Name="VCLinkerTool" + /> + <Tool + Name="VCALinkTool" + /> + <Tool + Name="VCManifestTool" + /> + <Tool + Name="VCXDCMakeTool" + /> + <Tool + Name="VCBscMakeTool" + /> + <Tool + Name="VCFxCopTool" + /> + <Tool + Name="VCAppVerifierTool" + /> + <Tool + Name="VCWebDeploymentTool" + /> + <Tool + Name="VCPostBuildEventTool" + /> + </Configuration> + <Configuration + Name="Debug_Cairo_CFLite|Win32" + ConfigurationType="1" + InheritedPropertySheets=".\Configurations\MiniBrowserLauncherDebugCairoCFLite.vsprops" + CharacterSet="1" + > + <Tool + Name="VCPreBuildEventTool" + /> + <Tool + Name="VCCustomBuildTool" + /> + <Tool + Name="VCXMLDataGeneratorTool" + /> + <Tool + Name="VCWebServiceProxyGeneratorTool" + /> + <Tool + Name="VCMIDLTool" + /> + <Tool + Name="VCCLCompilerTool" + /> + <Tool + Name="VCManagedResourceCompilerTool" + /> + <Tool + Name="VCResourceCompilerTool" + /> + <Tool + Name="VCPreLinkEventTool" + /> + <Tool + Name="VCLinkerTool" + /> + <Tool + Name="VCALinkTool" + /> + <Tool + Name="VCManifestTool" + /> + <Tool + Name="VCXDCMakeTool" + /> + <Tool + Name="VCBscMakeTool" + /> + <Tool + Name="VCFxCopTool" + /> + <Tool + Name="VCAppVerifierTool" + /> + <Tool + Name="VCWebDeploymentTool" + /> + <Tool + Name="VCPostBuildEventTool" + /> + </Configuration> + <Configuration + Name="Debug_All|Win32" + ConfigurationType="1" + InheritedPropertySheets=".\Configurations\MiniBrowserLauncherDebugAll.vsprops" + CharacterSet="1" + > + <Tool + Name="VCPreBuildEventTool" + /> + <Tool + Name="VCCustomBuildTool" + /> + <Tool + Name="VCXMLDataGeneratorTool" + /> + <Tool + Name="VCWebServiceProxyGeneratorTool" + /> + <Tool + Name="VCMIDLTool" + /> + <Tool + Name="VCCLCompilerTool" + /> + <Tool + Name="VCManagedResourceCompilerTool" + /> + <Tool + Name="VCResourceCompilerTool" + /> + <Tool + Name="VCPreLinkEventTool" + /> + <Tool + Name="VCLinkerTool" + /> + <Tool + Name="VCALinkTool" + /> + <Tool + Name="VCManifestTool" + /> + <Tool + Name="VCXDCMakeTool" + /> + <Tool + Name="VCBscMakeTool" + /> + <Tool + Name="VCFxCopTool" + /> + <Tool + Name="VCAppVerifierTool" + /> + <Tool + Name="VCWebDeploymentTool" + /> + <Tool + Name="VCPostBuildEventTool" + /> + </Configuration> + <Configuration + Name="Production|Win32" + ConfigurationType="1" + InheritedPropertySheets=".\Configurations\MiniBrowserLauncherProduction.vsprops" + CharacterSet="1" + WholeProgramOptimization="1" + > + <Tool + Name="VCPreBuildEventTool" + /> + <Tool + Name="VCCustomBuildTool" + /> + <Tool + Name="VCXMLDataGeneratorTool" + /> + <Tool + Name="VCWebServiceProxyGeneratorTool" + /> + <Tool + Name="VCMIDLTool" + /> + <Tool + Name="VCCLCompilerTool" + /> + <Tool + Name="VCManagedResourceCompilerTool" + /> + <Tool + Name="VCResourceCompilerTool" + /> + <Tool + Name="VCPreLinkEventTool" + /> + <Tool + Name="VCLinkerTool" + /> + <Tool + Name="VCALinkTool" + /> + <Tool + Name="VCManifestTool" + /> + <Tool + Name="VCXDCMakeTool" + /> + <Tool + Name="VCBscMakeTool" + /> + <Tool + Name="VCFxCopTool" + /> + <Tool + Name="VCAppVerifierTool" + /> + <Tool + Name="VCWebDeploymentTool" + /> + <Tool + Name="VCPostBuildEventTool" + /> + </Configuration> + <Configuration + Name="Release_Cairo_CFLite|Win32" + ConfigurationType="1" + InheritedPropertySheets=".\Configurations\MiniBrowserLauncherReleaseCairoCFLite.vsprops" + CharacterSet="1" + > + <Tool + Name="VCPreBuildEventTool" + /> + <Tool + Name="VCCustomBuildTool" + /> + <Tool + Name="VCXMLDataGeneratorTool" + /> + <Tool + Name="VCWebServiceProxyGeneratorTool" + /> + <Tool + Name="VCMIDLTool" + /> + <Tool + Name="VCCLCompilerTool" + /> + <Tool + Name="VCManagedResourceCompilerTool" + /> + <Tool + Name="VCResourceCompilerTool" + /> + <Tool + Name="VCPreLinkEventTool" + /> + <Tool + Name="VCLinkerTool" + /> + <Tool + Name="VCALinkTool" + /> + <Tool + Name="VCManifestTool" + /> + <Tool + Name="VCXDCMakeTool" + /> + <Tool + Name="VCBscMakeTool" + /> + <Tool + Name="VCFxCopTool" + /> + <Tool + Name="VCAppVerifierTool" + /> + <Tool + Name="VCWebDeploymentTool" + /> + <Tool + Name="VCPostBuildEventTool" + /> + </Configuration> + </Configurations> + <References> + </References> + <Files> + <File + RelativePath="..\win\DLLLauncher\DLLLauncherMain.cpp" + > + </File> + </Files> + <Globals> + </Globals> +</VisualStudioProject> diff --git a/Tools/MiniBrowser/MiniBrowserPostBuild.cmd b/Tools/MiniBrowser/MiniBrowserPostBuild.cmd new file mode 100644 index 000000000..6eb4e327d --- /dev/null +++ b/Tools/MiniBrowser/MiniBrowserPostBuild.cmd @@ -0,0 +1,29 @@ +mkdir 2>NUL "%CONFIGURATIONBUILDDIR%\bin" + +xcopy /y /d "%WEBKITLIBRARIESDIR%\bin\CoreFoundation%LIBRARYCONFIGSUFFIX%.dll" "%CONFIGURATIONBUILDDIR%\bin" +xcopy /y /d "%WEBKITLIBRARIESDIR%\bin\CoreFoundation%LIBRARYCONFIGSUFFIX%.pdb" "%CONFIGURATIONBUILDDIR%\bin" +xcopy /y /d "%WEBKITLIBRARIESDIR%\bin\CFNetwork%LIBRARYCONFIGSUFFIX%.dll" "%CONFIGURATIONBUILDDIR%\bin" +xcopy /y /d "%WEBKITLIBRARIESDIR%\bin\CFNetwork%LIBRARYCONFIGSUFFIX%.pdb" "%CONFIGURATIONBUILDDIR%\bin" +xcopy /y /d /e /i "%WEBKITLIBRARIESDIR%\bin\CFNetwork.resources" "%CONFIGURATIONBUILDDIR%\bin\CFNetwork.resources" +xcopy /y /d /e /i "%WEBKITLIBRARIESDIR%\bin\CoreFoundation.resources" "%CONFIGURATIONBUILDDIR%\bin\CoreFoundation.resources" +xcopy /y /d "%WEBKITLIBRARIESDIR%\bin\CoreGraphics%LIBRARYCONFIGSUFFIX%.dll" "%CONFIGURATIONBUILDDIR%\bin" +xcopy /y /d "%WEBKITLIBRARIESDIR%\bin\CoreGraphics%LIBRARYCONFIGSUFFIX%.pdb" "%CONFIGURATIONBUILDDIR%\bin" +xcopy /y /d "%WEBKITLIBRARIESDIR%\bin\icuin40%LIBRARYCONFIGSUFFIX%.dll" "%CONFIGURATIONBUILDDIR%\bin" +xcopy /y /d "%WEBKITLIBRARIESDIR%\bin\icuin40%LIBRARYCONFIGSUFFIX%.pdb" "%CONFIGURATIONBUILDDIR%\bin" +xcopy /y /d "%WEBKITLIBRARIESDIR%\bin\icuuc40%LIBRARYCONFIGSUFFIX%.dll" "%CONFIGURATIONBUILDDIR%\bin" +xcopy /y /d "%WEBKITLIBRARIESDIR%\bin\icuuc40%LIBRARYCONFIGSUFFIX%.pdb" "%CONFIGURATIONBUILDDIR%\bin" +xcopy /y /d "%WEBKITLIBRARIESDIR%\bin\libxml2%LIBRARYCONFIGSUFFIX%.dll" "%CONFIGURATIONBUILDDIR%\bin" +xcopy /y /d "%WEBKITLIBRARIESDIR%\bin\libxslt%LIBRARYCONFIGSUFFIX%.dll" "%CONFIGURATIONBUILDDIR%\bin" +xcopy /y /d "%WEBKITLIBRARIESDIR%\bin\pthreadVC2%LIBRARYCONFIGSUFFIX%.dll" "%CONFIGURATIONBUILDDIR%\bin" +xcopy /y /d "%WEBKITLIBRARIESDIR%\bin\pthreadVC2%LIBRARYCONFIGSUFFIX%.pdb" "%CONFIGURATIONBUILDDIR%\bin" +xcopy /y /d "%WEBKITLIBRARIESDIR%\bin\SQLite3%LIBRARYCONFIGSUFFIX%.dll" "%CONFIGURATIONBUILDDIR%\bin" +xcopy /y /d "%WEBKITLIBRARIESDIR%\bin\SQLite3%LIBRARYCONFIGSUFFIX%.pdb" "%CONFIGURATIONBUILDDIR%\bin" +xcopy /y /d "%WEBKITLIBRARIESDIR%\bin\zlib1%LIBRARYCONFIGSUFFIX%.dll" "%CONFIGURATIONBUILDDIR%\bin" +xcopy /y /d "%WEBKITLIBRARIESDIR%\bin\zlib1%LIBRARYCONFIGSUFFIX%.pdb" "%CONFIGURATIONBUILDDIR%\bin" +xcopy /y /d "%WEBKITLIBRARIESDIR%\bin\objc%LIBRARYCONFIGSUFFIX%.dll" "%CONFIGURATIONBUILDDIR%\bin" +xcopy /y /d "%WEBKITLIBRARIESDIR%\bin\objc%LIBRARYCONFIGSUFFIX%.pdb" "%CONFIGURATIONBUILDDIR%\bin" + +if exist "%WEBKITLIBRARIESDIR%\bin\QuartzCore%LIBRARYCONFIGSUFFIX%.dll" xcopy /y /d "%WEBKITLIBRARIESDIR%\bin\QuartzCore%LIBRARYCONFIGSUFFIX%.dll" "%CONFIGURATIONBUILDDIR%\bin" +if exist "%WEBKITLIBRARIESDIR%\bin\QuartzCore%LIBRARYCONFIGSUFFIX%.pdb" xcopy /y /d "%WEBKITLIBRARIESDIR%\bin\QuartzCore%LIBRARYCONFIGSUFFIX%.pdb" "%CONFIGURATIONBUILDDIR%\bin" + +if exist "%CONFIGURATIONBUILDDIR%\buildfailed" del "%CONFIGURATIONBUILDDIR%\buildfailed" diff --git a/Tools/MiniBrowser/MiniBrowserPreBuild.cmd b/Tools/MiniBrowser/MiniBrowserPreBuild.cmd new file mode 100644 index 000000000..833ae5bfc --- /dev/null +++ b/Tools/MiniBrowser/MiniBrowserPreBuild.cmd @@ -0,0 +1,5 @@ +set PATH=%SystemDrive%\cygwin\bin;%PATH% + +if exist "%CONFIGURATIONBUILDDIR%\buildfailed" grep XX%PROJECTNAME%XX "%CONFIGURATIONBUILDDIR%\buildfailed" +if errorlevel 1 exit 1 +echo XX%PROJECTNAME%XX > "%CONFIGURATIONBUILDDIR%\buildfailed" diff --git a/Tools/MiniBrowser/gtk/BrowserCellRendererVariant.c b/Tools/MiniBrowser/gtk/BrowserCellRendererVariant.c new file mode 100644 index 000000000..cb2caa35b --- /dev/null +++ b/Tools/MiniBrowser/gtk/BrowserCellRendererVariant.c @@ -0,0 +1,346 @@ +/* + * Copyright (C) 2011 Igalia S.L. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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 APPLE INC. AND ITS 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 APPLE INC. OR ITS 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. + */ + +#include "BrowserCellRendererVariant.h" +#include "BrowserMarshal.h" +#include <errno.h> + +enum { + PROP_0, + + PROP_VALUE, + PROP_ADJUSTMENT +}; + +enum { + CHANGED, + + LAST_SIGNAL +}; + +struct _BrowserCellRendererVariant { + GtkCellRenderer parent; + + GValue *value; + + GtkCellRenderer *textRenderer; + GtkCellRenderer *toggleRenderer; + GtkCellRenderer *spinRenderer; +}; + +struct _BrowserCellRendererVariantClass { + GtkCellRendererClass parent; +}; + +static guint signals[LAST_SIGNAL] = { 0 }; + +G_DEFINE_TYPE(BrowserCellRendererVariant, browser_cell_renderer_variant, GTK_TYPE_CELL_RENDERER) + +static void browserCellRendererVariantFinalize(GObject *object) +{ + BrowserCellRendererVariant *renderer = BROWSER_CELL_RENDERER_VARIANT(object); + + g_object_unref(renderer->toggleRenderer); + g_object_unref(renderer->spinRenderer); + g_object_unref(renderer->textRenderer); + if (renderer->value) + g_boxed_free(G_TYPE_VALUE, renderer->value); + + G_OBJECT_CLASS(browser_cell_renderer_variant_parent_class)->finalize(object); +} + +static void browserCellRendererVariantGetProperty(GObject *object, guint propId, GValue *value, GParamSpec *pspec) +{ + BrowserCellRendererVariant *renderer = BROWSER_CELL_RENDERER_VARIANT(object); + + switch (propId) { + case PROP_VALUE: + g_value_set_boxed(value, renderer->value); + break; + case PROP_ADJUSTMENT: { + GtkAdjustment *adjustment = NULL; + g_object_get(G_OBJECT(renderer->spinRenderer), "adjustment", &adjustment, NULL); + if (adjustment) { + g_value_set_object(value, adjustment); + g_object_unref(adjustment); + } + break; + } + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID(object, propId, pspec); + } +} + +static void browserCellRendererVariantSetModeForValue(BrowserCellRendererVariant *renderer) +{ + if (!renderer->value) + return; + + GtkCellRendererMode mode; + if (G_VALUE_HOLDS_BOOLEAN(renderer->value)) + mode = GTK_CELL_RENDERER_MODE_ACTIVATABLE; + else if (G_VALUE_HOLDS_STRING(renderer->value) || G_VALUE_HOLDS_UINT(renderer->value)) + mode = GTK_CELL_RENDERER_MODE_EDITABLE; + else + return; + + g_object_set(G_OBJECT(renderer), "mode", mode, NULL); +} + +static void browserCellRendererVariantSetProperty(GObject *object, guint propId, const GValue *value, GParamSpec *pspec) +{ + BrowserCellRendererVariant *renderer = BROWSER_CELL_RENDERER_VARIANT(object); + + switch (propId) { + case PROP_VALUE: + if (renderer->value) + g_boxed_free(G_TYPE_VALUE, renderer->value); + renderer->value = g_value_dup_boxed(value); + browserCellRendererVariantSetModeForValue(renderer); + break; + case PROP_ADJUSTMENT: + g_object_set(G_OBJECT(renderer->spinRenderer), "adjustment", g_value_get_object(value), NULL); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID(object, propId, pspec); + } +} + +static GtkCellRenderer *browserCellRendererVariantGetRendererForValue(BrowserCellRendererVariant *renderer) +{ + if (!renderer->value) + return NULL; + + if (G_VALUE_HOLDS_BOOLEAN(renderer->value)) { + g_object_set(G_OBJECT(renderer->toggleRenderer), + "active", g_value_get_boolean(renderer->value), + NULL); + return renderer->toggleRenderer; + } + + if (G_VALUE_HOLDS_STRING(renderer->value)) { + g_object_set(G_OBJECT(renderer->textRenderer), + "text", g_value_get_string(renderer->value), + NULL); + return renderer->textRenderer; + } + + if (G_VALUE_HOLDS_UINT(renderer->value)) { + gchar *text = g_strdup_printf("%u", g_value_get_uint(renderer->value)); + g_object_set(G_OBJECT(renderer->spinRenderer), "text", text, NULL); + g_free(text); + return renderer->spinRenderer; + } + + return NULL; +} + +static void browserCellRendererVariantCellRendererTextEdited(BrowserCellRendererVariant *renderer, const gchar *path, const gchar *newText) +{ + if (!renderer->value) + return; + + if (!G_VALUE_HOLDS_STRING(renderer->value)) + return; + + g_value_set_string(renderer->value, newText); + g_signal_emit(renderer, signals[CHANGED], 0, path, renderer->value); +} + +static void browserCellRendererVariantCellRendererSpinEdited(BrowserCellRendererVariant *renderer, const gchar *path, const gchar *newText) +{ + if (!renderer->value) + return; + + if (!G_VALUE_HOLDS_UINT(renderer->value)) + return; + + GtkAdjustment *adjustment; + g_object_get(G_OBJECT(renderer->spinRenderer), "adjustment", &adjustment, NULL); + if (!adjustment) + return; + + errno = 0; + gchar *endPtr; + gdouble value = g_strtod(newText, &endPtr); + if (errno || value > gtk_adjustment_get_upper(adjustment) || value < gtk_adjustment_get_lower(adjustment) || endPtr == newText) { + g_warning("Invalid input for cell: %s\n", newText); + return; + } + + g_value_set_uint(renderer->value, (guint)value); + g_signal_emit(renderer, signals[CHANGED], 0, path, renderer->value); +} + +static gboolean browserCellRendererVariantCellRendererActivate(GtkCellRenderer *cell, GdkEvent *event, GtkWidget *widget, const gchar *path, const GdkRectangle *bgArea, const GdkRectangle *cellArea, GtkCellRendererState flags) +{ + BrowserCellRendererVariant *renderer = BROWSER_CELL_RENDERER_VARIANT(cell); + + if (!renderer->value) + return TRUE; + + if (!G_VALUE_HOLDS_BOOLEAN(renderer->value)) + return TRUE; + + g_value_set_boolean(renderer->value, !g_value_get_boolean(renderer->value)); + g_signal_emit(renderer, signals[CHANGED], 0, path, renderer->value); + + return TRUE; +} + +static void browserCellRendererVariantCellRendererRender(GtkCellRenderer *cell, cairo_t *cr, GtkWidget *widget, const GdkRectangle *bgArea, const GdkRectangle *cellArea, GtkCellRendererState flags) +{ + GtkCellRenderer *renderer = browserCellRendererVariantGetRendererForValue(BROWSER_CELL_RENDERER_VARIANT(cell)); + if (!renderer) + return; + + GTK_CELL_RENDERER_GET_CLASS(renderer)->render(renderer, cr, widget, bgArea, cellArea, flags); +} + +static GtkCellEditable *browserCellRendererVariantCellRendererStartEditing(GtkCellRenderer *cell, GdkEvent *event, GtkWidget *widget, const gchar *path, const GdkRectangle *bgArea, const GdkRectangle *cellArea, GtkCellRendererState flags) +{ + GtkCellRenderer *renderer = browserCellRendererVariantGetRendererForValue(BROWSER_CELL_RENDERER_VARIANT(cell)); + if (!renderer) + return NULL; + + if (!GTK_CELL_RENDERER_GET_CLASS(renderer)->start_editing) + return NULL; + + return GTK_CELL_RENDERER_GET_CLASS(renderer)->start_editing(renderer, event, widget, path, bgArea, cellArea, flags); +} + +static void browserCellRendererVariantCellRendererGetPreferredWidth(GtkCellRenderer *cell, GtkWidget *widget, gint *minimumWidth, gint *naturalWidth) +{ + GtkCellRenderer *renderer = browserCellRendererVariantGetRendererForValue(BROWSER_CELL_RENDERER_VARIANT(cell)); + if (!renderer) + return; + + GTK_CELL_RENDERER_GET_CLASS(renderer)->get_preferred_width(renderer, widget, minimumWidth, naturalWidth); +} + +static void browserCellRendererVariantCellRendererGetPreferredHeight(GtkCellRenderer *cell, GtkWidget *widget, gint *minimumHeight, gint *naturalHeight) +{ + GtkCellRenderer *renderer = browserCellRendererVariantGetRendererForValue(BROWSER_CELL_RENDERER_VARIANT(cell)); + if (!renderer) + return; + + GTK_CELL_RENDERER_GET_CLASS(renderer)->get_preferred_height(renderer, widget, minimumHeight, naturalHeight); +} + +static void browserCellRendererVariantCellRendererGetPreferredWidthForHeight(GtkCellRenderer *cell, GtkWidget *widget, gint height, gint *minimumWidth, gint *naturalWidth) +{ + GtkCellRenderer *renderer = browserCellRendererVariantGetRendererForValue(BROWSER_CELL_RENDERER_VARIANT(cell)); + if (!renderer) + return; + + GTK_CELL_RENDERER_GET_CLASS(renderer)->get_preferred_width_for_height(renderer, widget, height, minimumWidth, naturalWidth); +} + +static void browserCellRendererVariantCellRendererGetPreferredHeightForWidth(GtkCellRenderer *cell, GtkWidget *widget, gint width, gint *minimumHeight, gint *naturalHeight) +{ + GtkCellRenderer *renderer = browserCellRendererVariantGetRendererForValue(BROWSER_CELL_RENDERER_VARIANT(cell)); + if (!renderer) + return; + + GTK_CELL_RENDERER_GET_CLASS(renderer)->get_preferred_height_for_width(renderer, widget, width, minimumHeight, naturalHeight); +} + +static void browserCellRendererVariantCellRendererGetAlignedArea(GtkCellRenderer *cell, GtkWidget *widget, GtkCellRendererState flags, const GdkRectangle *cellArea, GdkRectangle *alignedArea) +{ + GtkCellRenderer *renderer = browserCellRendererVariantGetRendererForValue(BROWSER_CELL_RENDERER_VARIANT(cell)); + if (!renderer) + return; + + GTK_CELL_RENDERER_GET_CLASS(renderer)->get_aligned_area(renderer, widget, flags, cellArea, alignedArea); +} + +static void browser_cell_renderer_variant_init(BrowserCellRendererVariant *renderer) +{ + g_object_set(renderer, "mode", GTK_CELL_RENDERER_MODE_ACTIVATABLE, NULL); + + renderer->toggleRenderer = gtk_cell_renderer_toggle_new(); + g_object_set(G_OBJECT(renderer->toggleRenderer), "xalign", 0.0, NULL); + g_object_ref_sink(renderer->toggleRenderer); + + renderer->textRenderer = gtk_cell_renderer_text_new(); + g_signal_connect_swapped(renderer->textRenderer, "edited", + G_CALLBACK(browserCellRendererVariantCellRendererTextEdited), renderer); + g_object_set(G_OBJECT(renderer->textRenderer), "editable", TRUE, NULL); + g_object_ref_sink(renderer->textRenderer); + + renderer->spinRenderer = gtk_cell_renderer_spin_new(); + g_signal_connect_swapped(renderer->spinRenderer, "edited", + G_CALLBACK(browserCellRendererVariantCellRendererSpinEdited), renderer); + g_object_set(G_OBJECT(renderer->spinRenderer), "editable", TRUE, NULL); +} + +static void browser_cell_renderer_variant_class_init(BrowserCellRendererVariantClass *klass) +{ + GObjectClass *gobjectClass = G_OBJECT_CLASS(klass); + GtkCellRendererClass *cellRendererClass = GTK_CELL_RENDERER_CLASS(klass); + + gobjectClass->get_property = browserCellRendererVariantGetProperty; + gobjectClass->set_property = browserCellRendererVariantSetProperty; + gobjectClass->finalize = browserCellRendererVariantFinalize; + + cellRendererClass->activate = browserCellRendererVariantCellRendererActivate; + cellRendererClass->render = browserCellRendererVariantCellRendererRender; + cellRendererClass->start_editing = browserCellRendererVariantCellRendererStartEditing; + cellRendererClass->get_preferred_width = browserCellRendererVariantCellRendererGetPreferredWidth; + cellRendererClass->get_preferred_height = browserCellRendererVariantCellRendererGetPreferredHeight; + cellRendererClass->get_preferred_width_for_height = browserCellRendererVariantCellRendererGetPreferredWidthForHeight; + cellRendererClass->get_preferred_height_for_width = browserCellRendererVariantCellRendererGetPreferredHeightForWidth; + cellRendererClass->get_aligned_area = browserCellRendererVariantCellRendererGetAlignedArea; + + g_object_class_install_property(gobjectClass, + PROP_VALUE, + g_param_spec_boxed("value", + "Value", + "The cell renderer value", + G_TYPE_VALUE, + G_PARAM_READWRITE)); + g_object_class_install_property(gobjectClass, + PROP_ADJUSTMENT, + g_param_spec_object("adjustment", + "Adjustment", + "The adjustment that holds the value of the spin button", + GTK_TYPE_ADJUSTMENT, + G_PARAM_READWRITE)); + + signals[CHANGED] = + g_signal_new("changed", + G_TYPE_FROM_CLASS(gobjectClass), + G_SIGNAL_RUN_LAST, + 0, NULL, NULL, + browser_marshal_VOID__STRING_BOXED, + G_TYPE_NONE, 2, + G_TYPE_STRING, G_TYPE_VALUE); +} + +GtkCellRenderer *browser_cell_renderer_variant_new(void) +{ + return GTK_CELL_RENDERER(g_object_new(BROWSER_TYPE_CELL_RENDERER_VARIANT, NULL)); +} + diff --git a/Tools/MiniBrowser/gtk/BrowserCellRendererVariant.h b/Tools/MiniBrowser/gtk/BrowserCellRendererVariant.h new file mode 100644 index 000000000..4fce3bb60 --- /dev/null +++ b/Tools/MiniBrowser/gtk/BrowserCellRendererVariant.h @@ -0,0 +1,49 @@ +/* + * Copyright (C) 2011 Igalia S.L. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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 APPLE INC. AND ITS 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 APPLE INC. OR ITS 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. + */ + +#ifndef BrowserCellRendererVariant_h +#define BrowserCellRendererVariant_h + +#include <gtk/gtk.h> + +G_BEGIN_DECLS + +#define BROWSER_TYPE_CELL_RENDERER_VARIANT (browser_cell_renderer_variant_get_type()) +#define BROWSER_CELL_RENDERER_VARIANT(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), BROWSER_TYPE_CELL_RENDERER_VARIANT, BrowserCellRendererVariant)) +#define BROWSER_CELL_RENDERER_VARIANT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), BROWSER_TYPE_CELL_RENDERER_VARIANT, BrowserCellRendererVariantClass)) +#define BROWSER_IS_CELL_RENDERER_VARIANT(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), BROWSER_TYPE_CELL_RENDERER_VARIANT)) +#define BROWSER_IS_CELL_RENDERER_VARIANT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), BROWSER_TYPE_CELL_RENDERER_VARIANT)) +#define BROWSER_CELL_RENDERER_VARIANT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), BROWSER_TYPE_CELL_RENDERER_VARIANT, BrowserCellRendererVariantClass)) + +typedef struct _BrowserCellRendererVariant BrowserCellRendererVariant; +typedef struct _BrowserCellRendererVariantClass BrowserCellRendererVariantClass; + +GType browser_cell_renderer_variant_get_type(void); + +GtkCellRenderer* browser_cell_renderer_variant_new(void); + +G_END_DECLS + +#endif diff --git a/Tools/MiniBrowser/gtk/BrowserSettingsDialog.c b/Tools/MiniBrowser/gtk/BrowserSettingsDialog.c new file mode 100644 index 000000000..1e4dcd804 --- /dev/null +++ b/Tools/MiniBrowser/gtk/BrowserSettingsDialog.c @@ -0,0 +1,190 @@ +/* + * Copyright (C) 2011 Igalia S.L. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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 APPLE INC. AND ITS 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 APPLE INC. OR ITS 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. + */ + +#include "BrowserSettingsDialog.h" +#include "BrowserCellRendererVariant.h" + +enum { + PROP_0, + + PROP_SETTINGS +}; + +enum { + SETTINGS_LIST_COLUMN_NAME, + SETTINGS_LIST_COLUMN_NICK, + SETTINGS_LIST_COLUMN_BLURB, + SETTINGS_LIST_COLUMN_VALUE, + SETTINGS_LIST_COLUMN_ADJUSTMENT, + + SETTINGS_LIST_N_COLUMNS +}; + +struct _BrowserSettingsDialog { + GtkDialog parent; + + GtkWidget *settingsList; + WebKitSettings *settings; +}; + +struct _BrowserSettingsDialogClass { + GtkDialogClass parent; +}; + +G_DEFINE_TYPE(BrowserSettingsDialog, browser_settings_dialog, GTK_TYPE_DIALOG) + +static void cellRendererChanged(GtkCellRenderer *renderer, const char *path, const GValue *value, BrowserSettingsDialog *dialog) +{ + GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(dialog->settingsList)); + GtkTreePath *treePath = gtk_tree_path_new_from_string(path); + GtkTreeIter iter; + gtk_tree_model_get_iter(model, &iter, treePath); + + char *name; + gtk_tree_model_get(model, &iter, SETTINGS_LIST_COLUMN_NAME, &name, -1); + g_object_set_property(G_OBJECT(dialog->settings), name, value); + g_free(name); + + gtk_list_store_set(GTK_LIST_STORE(model), &iter, SETTINGS_LIST_COLUMN_VALUE, value, -1); + gtk_tree_path_free(treePath); +} + +static void browserSettingsDialogSetProperty(GObject *object, guint propId, const GValue *value, GParamSpec *pspec) +{ + BrowserSettingsDialog *dialog = BROWSER_SETTINGS_DIALOG(object); + + switch (propId) { + case PROP_SETTINGS: + dialog->settings = g_value_get_object(value); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID(object, propId, pspec); + } +} + +static void browser_settings_dialog_init(BrowserSettingsDialog *dialog) +{ + GtkBox *contentArea = GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog))); + gtk_box_set_spacing(contentArea, 2); + + gtk_window_set_default_size(GTK_WINDOW(dialog), 400, 300); + gtk_window_set_title(GTK_WINDOW(dialog), "WebKit View Settings"); + gtk_window_set_destroy_with_parent(GTK_WINDOW(dialog), TRUE); + gtk_container_set_border_width(GTK_CONTAINER(dialog), 5); + gtk_dialog_add_button(GTK_DIALOG(dialog), GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE); + gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_CLOSE); + + GtkWidget *scrolledWindow = gtk_scrolled_window_new(NULL, NULL); + dialog->settingsList = gtk_tree_view_new(); + GtkCellRenderer *renderer = gtk_cell_renderer_text_new(); + gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(dialog->settingsList), + 0, "Name", renderer, + "text", SETTINGS_LIST_COLUMN_NICK, + NULL); + renderer = browser_cell_renderer_variant_new(); + g_signal_connect(renderer, "changed", G_CALLBACK(cellRendererChanged), dialog); + gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(dialog->settingsList), + 1, "Value", renderer, + "value", SETTINGS_LIST_COLUMN_VALUE, + "adjustment", SETTINGS_LIST_COLUMN_ADJUSTMENT, + NULL); + gtk_tree_view_set_tooltip_column(GTK_TREE_VIEW(dialog->settingsList), SETTINGS_LIST_COLUMN_BLURB); + + gtk_container_add(GTK_CONTAINER(scrolledWindow), dialog->settingsList); + gtk_widget_show(dialog->settingsList); + + gtk_box_pack_start(contentArea, scrolledWindow, TRUE, TRUE, 0); + gtk_widget_show(scrolledWindow); + + g_signal_connect(dialog, "response", G_CALLBACK(gtk_widget_destroy), NULL); +} + +static void browserSettingsDialogConstructed(GObject *object) +{ + BrowserSettingsDialog *dialog = BROWSER_SETTINGS_DIALOG(object); + WebKitSettings *settings = dialog->settings; + GtkListStore *model = gtk_list_store_new(SETTINGS_LIST_N_COLUMNS, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, + G_TYPE_VALUE, G_TYPE_OBJECT); + guint propertiesCount; + GParamSpec **properties = g_object_class_list_properties(G_OBJECT_GET_CLASS(settings), &propertiesCount); + guint i; + for (i = 0; i < propertiesCount; i++) { + GParamSpec *property = properties[i]; + const char *name = g_param_spec_get_name(property); + const char *nick = g_param_spec_get_nick(property); + + GValue value = { 0, { { 0 } } }; + g_value_init(&value, G_PARAM_SPEC_VALUE_TYPE(property)); + g_object_get_property(G_OBJECT(settings), name, &value); + + GtkAdjustment *adjustment = NULL; + if (G_PARAM_SPEC_VALUE_TYPE(property) == G_TYPE_UINT) { + GParamSpecUInt *uIntProperty = G_PARAM_SPEC_UINT(property); + adjustment = gtk_adjustment_new(uIntProperty->default_value, uIntProperty->minimum, + uIntProperty->maximum, 1, 1, 1); + } + + char *blurb = g_markup_escape_text(g_param_spec_get_blurb(property), -1); + GtkTreeIter iter; + gtk_list_store_append(model, &iter); + gtk_list_store_set(model, &iter, + SETTINGS_LIST_COLUMN_NAME, name, + SETTINGS_LIST_COLUMN_NICK, nick, + SETTINGS_LIST_COLUMN_BLURB, blurb, + SETTINGS_LIST_COLUMN_VALUE, &value, + SETTINGS_LIST_COLUMN_ADJUSTMENT, adjustment, + -1); + g_free(blurb); + g_value_unset(&value); + } + g_free(properties); + + gtk_tree_view_set_model(GTK_TREE_VIEW(dialog->settingsList), GTK_TREE_MODEL(model)); + g_object_unref(model); +} + +static void browser_settings_dialog_class_init(BrowserSettingsDialogClass *klass) +{ + GObjectClass *gobjectClass = G_OBJECT_CLASS(klass); + + gobjectClass->constructed = browserSettingsDialogConstructed; + gobjectClass->set_property = browserSettingsDialogSetProperty; + + g_object_class_install_property(gobjectClass, + PROP_SETTINGS, + g_param_spec_object("settings", + "Settings", + "The WebKitSettings", + WEBKIT_TYPE_SETTINGS, + G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)); +} + +GtkWidget *browser_settings_dialog_new(WebKitSettings *settings) +{ + g_return_val_if_fail(WEBKIT_IS_SETTINGS(settings), NULL); + + return GTK_WIDGET(g_object_new(BROWSER_TYPE_SETTINGS_DIALOG, "settings", settings, NULL)); +} + diff --git a/Tools/MiniBrowser/gtk/BrowserSettingsDialog.h b/Tools/MiniBrowser/gtk/BrowserSettingsDialog.h new file mode 100644 index 000000000..f3dbcd042 --- /dev/null +++ b/Tools/MiniBrowser/gtk/BrowserSettingsDialog.h @@ -0,0 +1,50 @@ +/* + * Copyright (C) 2011 Igalia S.L. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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 APPLE INC. AND ITS 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 APPLE INC. OR ITS 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. + */ + +#ifndef BrowserSettingsDialog_h +#define BrowserSettingsDialog_h + +#include <gtk/gtk.h> +#include <webkit2/webkit2.h> + +G_BEGIN_DECLS + +#define BROWSER_TYPE_SETTINGS_DIALOG (browser_settings_dialog_get_type()) +#define BROWSER_SETTINGS_DIALOG(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), BROWSER_TYPE_SETTINGS_DIALOG, BrowserSettingsDialog)) +#define BROWSER_SETTINGS_DIALOG_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), BROWSER_TYPE_SETTINGS_DIALOG, BrowserSettingsDialogClass)) +#define BROWSER_IS_SETTINGS_DIALOG(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), BROWSER_TYPE_SETTINGS_DIALOG)) +#define BROWSER_IS_SETTINGS_DIALOG_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), BROWSER_TYPE_SETTINGS_DIALOG)) +#define BROWSER_SETTINGS_DIALOG_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), BROWSER_TYPE_SETTINGS_DIALOG, BrowserSettingsDialogClass)) + +typedef struct _BrowserSettingsDialog BrowserSettingsDialog; +typedef struct _BrowserSettingsDialogClass BrowserSettingsDialogClass; + +GType browser_settings_dialog_get_type(void); + +GtkWidget* browser_settings_dialog_new(WebKitSettings *settings); + +G_END_DECLS + +#endif diff --git a/Tools/MiniBrowser/gtk/BrowserWindow.c b/Tools/MiniBrowser/gtk/BrowserWindow.c new file mode 100644 index 000000000..e04ab0b06 --- /dev/null +++ b/Tools/MiniBrowser/gtk/BrowserWindow.c @@ -0,0 +1,394 @@ +/* + * Copyright (C) 2006, 2007 Apple Inc. + * Copyright (C) 2007 Alp Toker <alp@atoker.com> + * Copyright (C) 2011 Igalia S.L. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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 APPLE INC. AND ITS 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 APPLE INC. OR ITS 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. + */ + +#include "BrowserWindow.h" +#include "BrowserSettingsDialog.h" + +enum { + PROP_0, + + PROP_VIEW +}; + +struct _BrowserWindow { + GtkWindow parent; + + GtkWidget *mainBox; + GtkWidget *toolbar; + GtkWidget *uriEntry; + GtkWidget *backItem; + GtkWidget *forwardItem; + GtkWidget *statusLabel; + GtkWidget *settingsDialog; + WebKitWebView *webView; + +}; + +struct _BrowserWindowClass { + GtkWindowClass parent; +}; + +static const char *defaultWindowTitle = "WebKitGTK+ MiniBrwoser"; +static gint windowCount = 0; + +G_DEFINE_TYPE(BrowserWindow, browser_window, GTK_TYPE_WINDOW) + +static void browserWindowSetStatusText(BrowserWindow *window, const char *text) +{ +#if GTK_CHECK_VERSION(3, 2, 0) + gtk_label_set_text(GTK_LABEL(window->statusLabel), text); + gtk_widget_set_visible(window->statusLabel, !!text); +#endif +} + +static void resetStatusText(GtkWidget *widget, BrowserWindow *window) +{ + browserWindowSetStatusText(window, NULL); +} + +static void activateUriEntryCallback(BrowserWindow *window) +{ + webkit_web_view_load_uri(window->webView, gtk_entry_get_text(GTK_ENTRY(window->uriEntry))); +} + +static void goBackCallback(BrowserWindow *window) +{ + webkit_web_view_go_back(window->webView); +} + +static void goForwardCallback(BrowserWindow *window) +{ + webkit_web_view_go_forward(window->webView); +} + +static void settingsCallback(BrowserWindow *window) +{ + if (window->settingsDialog) { + gtk_window_present(GTK_WINDOW(window->settingsDialog)); + return; + } + + window->settingsDialog = browser_settings_dialog_new(webkit_web_view_get_settings(window->webView)); + gtk_window_set_transient_for(GTK_WINDOW(window->settingsDialog), GTK_WINDOW(window)); + g_object_add_weak_pointer(G_OBJECT(window->settingsDialog), (gpointer *)&window->settingsDialog); + gtk_widget_show(window->settingsDialog); +} + +static void webViewURIChanged(WebKitWebView *webView, GParamSpec *pspec, BrowserWindow *window) +{ + gtk_entry_set_text(GTK_ENTRY(window->uriEntry), webkit_web_view_get_uri(webView)); +} + +static void webViewTitleChanged(WebKitWebView *webView, GParamSpec *pspec, BrowserWindow *window) +{ + const char *title = webkit_web_view_get_title(webView); + gtk_window_set_title(GTK_WINDOW(window), title ? title : defaultWindowTitle); +} + +static gboolean resetEntryProgress(GtkEntry *entry) +{ + gtk_entry_set_progress_fraction(entry, 0); + return FALSE; +} + +static void webViewLoadProgressChanged(WebKitWebView *webView, GParamSpec *pspec, BrowserWindow *window) +{ + gdouble progress = webkit_web_view_get_estimated_load_progress(webView); + gtk_entry_set_progress_fraction(GTK_ENTRY(window->uriEntry), progress); + if (progress == 1.0) + g_timeout_add(500, (GSourceFunc)resetEntryProgress, window->uriEntry); +} + +static void browserWindowHistoryItemSelected(BrowserWindow *window, GtkMenuItem *item) +{ + GtkAction *action = gtk_activatable_get_related_action(GTK_ACTIVATABLE(item)); + browserWindowSetStatusText(window, action ? gtk_action_get_name(action) : NULL); +} + +static void browserWindowHistoryItemActivated(BrowserWindow *window, GtkAction *action) +{ + WebKitBackForwardListItem *item = g_object_get_data(G_OBJECT(action), "back-forward-list-item"); + if (!item) + return; + + webkit_web_view_go_to_back_forward_list_item(window->webView, item); +} + +static GtkWidget *browserWindowCreateBackForwardMenu(BrowserWindow *window, GList *list) +{ + if (!list) + return NULL; + + GtkWidget *menu = gtk_menu_new(); + GList *listItem; + for (listItem = list; listItem; listItem = g_list_next(listItem)) { + WebKitBackForwardListItem *item = (WebKitBackForwardListItem *)listItem->data; + const char *uri = webkit_back_forward_list_item_get_uri(item); + const char *title = webkit_back_forward_list_item_get_title(item); + + GtkAction *action = gtk_action_new(uri, title, NULL, NULL); + g_object_set_data_full(G_OBJECT(action), "back-forward-list-item", g_object_ref(item), g_object_unref); + g_signal_connect_swapped(action, "activate", G_CALLBACK(browserWindowHistoryItemActivated), window); + + GtkWidget *menuItem = gtk_action_create_menu_item(action); + g_signal_connect_swapped(menuItem, "select", G_CALLBACK(browserWindowHistoryItemSelected), window); + g_object_unref(action); + + gtk_menu_shell_prepend(GTK_MENU_SHELL(menu), menuItem); + gtk_widget_show(menuItem); + } + + /* FIXME: This shoulnd't be necessary when didMouseMoveOverElement + * is implemented in WebKit2 GTK+ API. + */ + g_signal_connect(menu, "hide", G_CALLBACK(resetStatusText), window); + + return menu; +} + +static void browserWindowUpdateNavigationActions(BrowserWindow *window, WebKitBackForwardList *backForwadlist) +{ + gtk_widget_set_sensitive(window->backItem, webkit_web_view_can_go_back(window->webView)); + gtk_widget_set_sensitive(window->forwardItem, webkit_web_view_can_go_forward(window->webView)); + + GList *list = webkit_back_forward_list_get_back_list_with_limit(backForwadlist, 10); + gtk_menu_tool_button_set_menu(GTK_MENU_TOOL_BUTTON(window->backItem), + browserWindowCreateBackForwardMenu(window, list)); + g_list_free(list); + + list = webkit_back_forward_list_get_forward_list_with_limit(backForwadlist, 10); + gtk_menu_tool_button_set_menu(GTK_MENU_TOOL_BUTTON(window->forwardItem), + browserWindowCreateBackForwardMenu(window, list)); + g_list_free(list); +} + +static void backForwadlistChanged(WebKitBackForwardList *backForwadlist, WebKitBackForwardListItem *itemAdded, GList *itemsRemoved, BrowserWindow *window) +{ + browserWindowUpdateNavigationActions(window, backForwadlist); +} + +static void webViewClose(WebKitWebView *webView, BrowserWindow *window) +{ + gtk_widget_destroy(GTK_WIDGET(window)); +} + +static void webViewReadyToShow(WebKitWebView *webView, BrowserWindow *window) +{ + WebKitWindowProperties *windowProperties = webkit_web_view_get_window_properties(webView); + + GdkRectangle geometry; + webkit_window_properties_get_geometry(windowProperties, &geometry); + if (geometry.x >= 0 && geometry.y >= 0) + gtk_window_move(GTK_WINDOW(window), geometry.x, geometry.y); + if (geometry.width > 0 && geometry.height > 0) + gtk_window_resize(GTK_WINDOW(window), geometry.width, geometry.height); + + if (!webkit_window_properties_get_toolbar_visible(windowProperties)) + gtk_widget_hide(window->toolbar); + else if (!webkit_window_properties_get_locationbar_visible(windowProperties)) + gtk_widget_hide(window->uriEntry); + + if (!webkit_window_properties_get_resizable(windowProperties)) + gtk_window_set_resizable(GTK_WINDOW(window), FALSE); + + gtk_widget_show(GTK_WIDGET(window)); +} + +static GtkWidget *webViewCreate(WebKitWebView *webView, BrowserWindow *window) +{ + WebKitWebView *newWebView = WEBKIT_WEB_VIEW(webkit_web_view_new_with_context(webkit_web_view_get_context(webView))); + webkit_web_view_set_settings(newWebView, webkit_web_view_get_settings(webView)); + + GtkWidget *newWindow = browser_window_new(newWebView); + g_signal_connect(newWebView, "ready-to-show", G_CALLBACK(webViewReadyToShow), newWindow); + g_signal_connect(newWebView, "close", G_CALLBACK(webViewClose), newWindow); + return GTK_WIDGET(newWebView); +} + +static gboolean webViewLoadFailed(WebKitWebView *webView, WebKitLoadEvent loadEvent, const char *failingURI, GError *error, BrowserWindow *window) +{ + gtk_entry_set_progress_fraction(GTK_ENTRY(window->uriEntry), 0.); + return FALSE; +} + +static void browserWindowFinalize(GObject *gObject) +{ + G_OBJECT_CLASS(browser_window_parent_class)->finalize(gObject); + + if (g_atomic_int_dec_and_test(&windowCount)) + gtk_main_quit(); +} + +static void browserWindowGetProperty(GObject *object, guint propId, GValue *value, GParamSpec *pspec) +{ + BrowserWindow *window = BROWSER_WINDOW(object); + + switch (propId) { + case PROP_VIEW: + g_value_set_object(value, browser_window_get_view(window)); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID(object, propId, pspec); + } +} + +static void browserWindowSetProperty(GObject *object, guint propId, const GValue *value, GParamSpec *pspec) +{ + BrowserWindow* window = BROWSER_WINDOW(object); + + switch (propId) { + case PROP_VIEW: + window->webView = g_value_get_object(value); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID(object, propId, pspec); + } +} + +static void browser_window_init(BrowserWindow *window) +{ + g_atomic_int_inc(&windowCount); + + gtk_window_set_title(GTK_WINDOW(window), defaultWindowTitle); + gtk_window_set_default_size(GTK_WINDOW(window), 800, 600); + + window->uriEntry = gtk_entry_new(); + g_signal_connect_swapped(window->uriEntry, "activate", G_CALLBACK(activateUriEntryCallback), (gpointer)window); + + GtkWidget *toolbar = gtk_toolbar_new(); + window->toolbar = toolbar; + gtk_orientable_set_orientation(GTK_ORIENTABLE(toolbar), GTK_ORIENTATION_HORIZONTAL); + gtk_toolbar_set_style(GTK_TOOLBAR(toolbar), GTK_TOOLBAR_BOTH_HORIZ); + + GtkToolItem *item = gtk_menu_tool_button_new_from_stock(GTK_STOCK_GO_BACK); + window->backItem = GTK_WIDGET(item); + gtk_menu_tool_button_set_menu(GTK_MENU_TOOL_BUTTON(item), 0); + g_signal_connect_swapped(item, "clicked", G_CALLBACK(goBackCallback), (gpointer)window); + gtk_toolbar_insert(GTK_TOOLBAR(toolbar), item, -1); + gtk_widget_show(GTK_WIDGET(item)); + + item = gtk_menu_tool_button_new_from_stock(GTK_STOCK_GO_FORWARD); + window->forwardItem = GTK_WIDGET(item); + gtk_menu_tool_button_set_menu(GTK_MENU_TOOL_BUTTON(item), 0); + g_signal_connect_swapped(G_OBJECT(item), "clicked", G_CALLBACK(goForwardCallback), (gpointer)window); + gtk_toolbar_insert(GTK_TOOLBAR(toolbar), item, -1); + gtk_widget_show(GTK_WIDGET(item)); + + item = gtk_tool_button_new_from_stock(GTK_STOCK_PREFERENCES); + g_signal_connect_swapped(G_OBJECT(item), "clicked", G_CALLBACK(settingsCallback), window); + gtk_toolbar_insert(GTK_TOOLBAR(toolbar), item, -1); + gtk_widget_show(GTK_WIDGET(item)); + + item = gtk_tool_item_new(); + gtk_tool_item_set_expand(item, TRUE); + gtk_container_add(GTK_CONTAINER(item), window->uriEntry); + gtk_widget_show(window->uriEntry); + gtk_toolbar_insert(GTK_TOOLBAR(toolbar), item, -1); + gtk_widget_show(GTK_WIDGET(item)); + + item = gtk_tool_button_new_from_stock(GTK_STOCK_OK); + g_signal_connect_swapped(item, "clicked", G_CALLBACK(activateUriEntryCallback), (gpointer)window); + gtk_toolbar_insert(GTK_TOOLBAR(toolbar), item, -1); + gtk_widget_show(GTK_WIDGET(item)); + + GtkWidget *vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); + window->mainBox = vbox; + gtk_box_pack_start(GTK_BOX(vbox), toolbar, FALSE, FALSE, 0); + gtk_widget_show(toolbar); + + gtk_container_add(GTK_CONTAINER(window), vbox); + gtk_widget_show(vbox); +} + +static void browserWindowConstructed(GObject *gObject) +{ + BrowserWindow *window = BROWSER_WINDOW(gObject); + + g_signal_connect(window->webView, "notify::uri", G_CALLBACK(webViewURIChanged), window); + g_signal_connect(window->webView, "notify::estimated-load-progress", G_CALLBACK(webViewLoadProgressChanged), window); + g_signal_connect(window->webView, "notify::title", G_CALLBACK(webViewTitleChanged), window); + g_signal_connect(window->webView, "create", G_CALLBACK(webViewCreate), window); + g_signal_connect(window->webView, "load-failed", G_CALLBACK(webViewLoadFailed), window); + + WebKitBackForwardList *backForwadlist = webkit_web_view_get_back_forward_list(window->webView); + g_signal_connect(backForwadlist, "changed", G_CALLBACK(backForwadlistChanged), window); + +#if GTK_CHECK_VERSION(3, 2, 0) + GtkWidget *overlay = gtk_overlay_new(); + gtk_box_pack_start(GTK_BOX(window->mainBox), overlay, TRUE, TRUE, 0); + gtk_widget_show(overlay); + + window->statusLabel = gtk_label_new(NULL); + gtk_widget_set_halign(window->statusLabel, GTK_ALIGN_START); + gtk_widget_set_valign(window->statusLabel, GTK_ALIGN_END); + gtk_widget_set_margin_left(window->statusLabel, 1); + gtk_widget_set_margin_right(window->statusLabel, 1); + gtk_widget_set_margin_top(window->statusLabel, 1); + gtk_widget_set_margin_bottom(window->statusLabel, 1); + gtk_overlay_add_overlay(GTK_OVERLAY(overlay), window->statusLabel); + + gtk_container_add(GTK_CONTAINER(overlay), GTK_WIDGET(window->webView)); +#else + gtk_box_pack_start(GTK_BOX(window->mainBox), GTK_WIDGET(window->webView), TRUE, TRUE, 0); +#endif + gtk_widget_show(GTK_WIDGET(window->webView)); +} + +static void browser_window_class_init(BrowserWindowClass *klass) +{ + GObjectClass *gobjectClass = G_OBJECT_CLASS(klass); + + gobjectClass->constructed = browserWindowConstructed; + gobjectClass->get_property = browserWindowGetProperty; + gobjectClass->set_property = browserWindowSetProperty; + gobjectClass->finalize = browserWindowFinalize; + + g_object_class_install_property(gobjectClass, + PROP_VIEW, + g_param_spec_object("view", + "View", + "The web view of this window", + WEBKIT_TYPE_WEB_VIEW, + G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); +} + +// Public API. +GtkWidget *browser_window_new(WebKitWebView *view) +{ + g_return_val_if_fail(WEBKIT_IS_WEB_VIEW(view), 0); + + return GTK_WIDGET(g_object_new(BROWSER_TYPE_WINDOW, + "type", GTK_WINDOW_TOPLEVEL, + "view", view, NULL)); +} + +WebKitWebView *browser_window_get_view(BrowserWindow *window) +{ + g_return_val_if_fail(BROWSER_IS_WINDOW(window), 0); + + return window->webView; +} diff --git a/Tools/MiniBrowser/gtk/BrowserWindow.h b/Tools/MiniBrowser/gtk/BrowserWindow.h new file mode 100644 index 000000000..46a06c21c --- /dev/null +++ b/Tools/MiniBrowser/gtk/BrowserWindow.h @@ -0,0 +1,51 @@ +/* + * Copyright (C) 2011 Igalia S.L. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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 APPLE INC. AND ITS 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 APPLE INC. OR ITS 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. + */ + +#ifndef BrowserWindow_h +#define BrowserWindow_h + +#include <webkit2/webkit2.h> +#include <gtk/gtk.h> + +G_BEGIN_DECLS + +#define BROWSER_TYPE_WINDOW (browser_window_get_type()) +#define BROWSER_WINDOW(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), BROWSER_TYPE_WINDOW, BrowserWindow)) +#define BROWSER_WINDOW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), BROWSER_TYPE_WINDOW, BrowserWindowClass)) +#define BROWSER_IS_WINDOW(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), BROWSER_TYPE_WINDOW)) +#define BROWSER_IS_WINDOW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), BROWSER_TYPE_WINDOW)) +#define BROWSER_WINDOW_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), BROWSER_TYPE_WINDOW, BrowserWindowClass)) + +typedef struct _BrowserWindow BrowserWindow; +typedef struct _BrowserWindowClass BrowserWindowClass; + +GType browser_window_get_type(void); + +GtkWidget* browser_window_new(WebKitWebView*); +WebKitWebView* browser_window_get_view(BrowserWindow*); + +G_END_DECLS + +#endif diff --git a/Tools/MiniBrowser/gtk/GNUmakefile.am b/Tools/MiniBrowser/gtk/GNUmakefile.am new file mode 100644 index 000000000..cf3994a57 --- /dev/null +++ b/Tools/MiniBrowser/gtk/GNUmakefile.am @@ -0,0 +1,61 @@ +noinst_PROGRAMS += \ + Programs/MiniBrowser + +minibrowser_built_sources += \ + DerivedSources/WebKit2/BrowserMarshal.h \ + DerivedSources/WebKit2/BrowserMarshal.c + +Programs_MiniBrowser_CPPFLAGS = \ + -I$(srcdir)/Source \ + -I$(top_builddir)/DerivedSources/WebKit2 \ + -I$(top_builddir)/DerivedSources/WebKit2/webkit2gtk \ + -I$(top_builddir)/DerivedSources/WebKit2/webkit2gtk/include \ + -DWEBKIT_EXEC_PATH=\"${shell pwd}/$(top_builddir)/Programs/\" \ + $(global_cppflags) \ + $(GLIB_CFLAGS) \ + $(GTK_CFLAGS) + +Programs_MiniBrowser_SOURCES = \ + $(minibrowser_built_sources) \ + Tools/MiniBrowser/gtk/BrowserCellRendererVariant.h \ + Tools/MiniBrowser/gtk/BrowserCellRendererVariant.c \ + Tools/MiniBrowser/gtk/BrowserSettingsDialog.h \ + Tools/MiniBrowser/gtk/BrowserSettingsDialog.c \ + Tools/MiniBrowser/gtk/BrowserWindow.h \ + Tools/MiniBrowser/gtk/BrowserWindow.c \ + Tools/MiniBrowser/gtk/main.c + +Programs_MiniBrowser_LDADD = \ + libwebkit2gtk-@WEBKITGTK_API_MAJOR_VERSION@.@WEBKITGTK_API_MINOR_VERSION@.la \ + $(GLIB_LIBS) \ + $(GTK_LIBS) + +Programs_MiniBrowser_LDFLAGS = \ + -no-fast-install \ + -no-install + +CLEANFILES += \ + $(top_builddir)/Programs/MiniBrowser \ + $(minibrowser_built_sources) \ + $(top_builddir)/stamp-mini-browser-marshal.h \ + $(top_builddir)/stamp-mini-browser-marshal.c + +BUILT_SOURCES += $(minibrowser_built_sources) + +minibrowser_marshal_list = $(srcdir)/Tools/MiniBrowser/gtk/browser-marshal.list + +$(GENSOURCES_WEBKIT2)/BrowserMarshal.h: stamp-mini-browser-marshal.h + @true +$(GENSOURCES_WEBKIT2)/BrowserMarshal.c: stamp-mini-browser-marshal.c + @true + +stamp-mini-browser-marshal.c: $(minibrowser_marshal_list) + $(AM_V_GEN)$(GLIB_GENMARSHAL) --prefix=browser_marshal $(minibrowser_marshal_list) --body > $(GENSOURCES_WEBKIT2)/BrowserMarshal.c && \ + echo timestamp > $(@F) + +stamp-mini-browser-marshal.h: $(MiniBrowser_marshal_list) + $(AM_V_GEN)$(GLIB_GENMARSHAL) --prefix=browser_marshal $(minibrowser_marshal_list) --header > $(GENSOURCES_WEBKIT2)/BrowserMarshal.h && \ + echo timestamp > $(@F) + +EXTRA_DIST += \ + $(minibrowser_marshal_list) diff --git a/Tools/MiniBrowser/gtk/browser-marshal.list b/Tools/MiniBrowser/gtk/browser-marshal.list new file mode 100644 index 000000000..e72aa4bc3 --- /dev/null +++ b/Tools/MiniBrowser/gtk/browser-marshal.list @@ -0,0 +1 @@ +VOID:STRING,BOXED diff --git a/Tools/MiniBrowser/gtk/main.c b/Tools/MiniBrowser/gtk/main.c new file mode 100644 index 000000000..96748a627 --- /dev/null +++ b/Tools/MiniBrowser/gtk/main.c @@ -0,0 +1,236 @@ +/* + * Copyright (C) 2006, 2007 Apple Inc. + * Copyright (C) 2007 Alp Toker <alp@atoker.com> + * Copyright (C) 2011 Igalia S.L. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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 APPLE COMPUTER, INC. ``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 APPLE COMPUTER, INC. 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. + */ + +#include "BrowserWindow.h" +#include <errno.h> +#include <gtk/gtk.h> +#include <string.h> +#include <webkit2/webkit2.h> + +static const gchar **uriArguments = NULL; + +static gchar *argumentToURL(const char *filename) +{ + GFile *gfile = g_file_new_for_commandline_arg(filename); + gchar *fileURL = g_file_get_uri(gfile); + g_object_unref(gfile); + + return fileURL; +} + +static void createBrowserWindow(const gchar *uri, WebKitSettings *webkitSettings) +{ + GtkWidget *webView = webkit_web_view_new(); + GtkWidget *mainWindow = browser_window_new(WEBKIT_WEB_VIEW(webView)); + gchar *url = argumentToURL(uri); + + if (webkitSettings) { + webkit_web_view_set_settings(WEBKIT_WEB_VIEW(webView), webkitSettings); + g_object_unref(webkitSettings); + } + + webkit_web_view_load_uri(WEBKIT_WEB_VIEW(webView), url); + g_free(url); + + gtk_widget_grab_focus(webView); + gtk_widget_show(mainWindow); +} + +static const GOptionEntry commandLineOptions[] = +{ + { G_OPTION_REMAINING, 0, 0, G_OPTION_ARG_FILENAME_ARRAY, &uriArguments, 0, "[URL…]" }, + { 0, 0, 0, 0, 0, 0, 0 } +}; + +static gboolean parseOptionEntryCallback(const gchar *optionNameFull, const gchar *value, WebKitSettings *webSettings, GError **error) +{ + if (strlen(optionNameFull) <= 2) { + g_set_error(error, G_OPTION_ERROR, G_OPTION_ERROR_FAILED, "Invalid option %s", optionNameFull); + return FALSE; + } + + /* We have two -- in option name so remove them. */ + const gchar *optionName = optionNameFull + 2; + GParamSpec *spec = g_object_class_find_property(G_OBJECT_GET_CLASS(webSettings), optionName); + if (!spec) { + g_set_error(error, G_OPTION_ERROR, G_OPTION_ERROR_FAILED, "Cannot find web settings for option %s", optionNameFull); + return FALSE; + } + + switch (G_PARAM_SPEC_VALUE_TYPE(spec)) { + case G_TYPE_BOOLEAN: { + gboolean propertyValue = !(value && g_ascii_strcasecmp(value, "true") && strcmp(value, "1")); + g_object_set(G_OBJECT(webSettings), optionName, propertyValue, NULL); + break; + } + case G_TYPE_STRING: + g_object_set(G_OBJECT(webSettings), optionName, value, NULL); + break; + case G_TYPE_INT: { + glong propertyValue; + gchar *end; + + errno = 0; + propertyValue = g_ascii_strtoll(value, &end, 0); + if (errno == ERANGE || propertyValue > G_MAXINT || propertyValue < G_MININT) { + g_set_error(error, G_OPTION_ERROR, G_OPTION_ERROR_BAD_VALUE, "Integer value '%s' for %s out of range", value, optionNameFull); + return FALSE; + } + if (errno || value == end) { + g_set_error(error, G_OPTION_ERROR, G_OPTION_ERROR_BAD_VALUE, "Cannot parse integer value '%s' for %s", value, optionNameFull); + return FALSE; + } + g_object_set(G_OBJECT(webSettings), optionName, propertyValue, NULL); + break; + } + case G_TYPE_FLOAT: { + gdouble propertyValue; + gchar *end; + + errno = 0; + propertyValue = g_ascii_strtod(value, &end); + if (errno == ERANGE || propertyValue > G_MAXFLOAT || propertyValue < G_MINFLOAT) { + g_set_error(error, G_OPTION_ERROR, G_OPTION_ERROR_BAD_VALUE, "Float value '%s' for %s out of range", value, optionNameFull); + return FALSE; + } + if (errno || value == end) { + g_set_error(error, G_OPTION_ERROR, G_OPTION_ERROR_BAD_VALUE, "Cannot parse float value '%s' for %s", value, optionNameFull); + return FALSE; + } + g_object_set(G_OBJECT(webSettings), optionName, propertyValue, NULL); + break; + } + default: + g_assert_not_reached(); + } + + return TRUE; +} + +static gboolean isValidParameterType(GType gParamType) +{ + return (gParamType == G_TYPE_BOOLEAN || gParamType == G_TYPE_STRING || gParamType == G_TYPE_INT + || gParamType == G_TYPE_FLOAT); +} + +static GOptionEntry* getOptionEntriesFromWebKitSettings(WebKitSettings *webSettings) +{ + GParamSpec **propertySpecs; + GOptionEntry *optionEntries; + guint numProperties, numEntries, i; + + propertySpecs = g_object_class_list_properties(G_OBJECT_GET_CLASS(webSettings), &numProperties); + if (!propertySpecs) + return NULL; + + optionEntries = g_new0(GOptionEntry, numProperties + 1); + numEntries = 0; + for (i = 0; i < numProperties; i++) { + GParamSpec *param = propertySpecs[i]; + + /* Fill in structures only for writable and not construct-only properties. */ + if (!param || !(param->flags & G_PARAM_WRITABLE) || (param->flags & G_PARAM_CONSTRUCT_ONLY)) + continue; + + GType gParamType = G_PARAM_SPEC_VALUE_TYPE(param); + if (!isValidParameterType(gParamType)) + continue; + + GOptionEntry *optionEntry = &optionEntries[numEntries++]; + optionEntry->long_name = g_param_spec_get_name(param); + + /* There is no easy way to figure our short name for generated option entries. + optionEntry.short_name=*/ + /* For bool arguments "enable" type make option argument not required. */ + if (gParamType == G_TYPE_BOOLEAN && (strstr(optionEntry->long_name, "enable"))) + optionEntry->flags = G_OPTION_FLAG_OPTIONAL_ARG; + optionEntry->arg = G_OPTION_ARG_CALLBACK; + optionEntry->arg_data = parseOptionEntryCallback; + optionEntry->description = g_param_spec_get_blurb(param); + optionEntry->arg_description = g_type_name(gParamType); + } + g_free(propertySpecs); + + return optionEntries; +} + +static gboolean addSettingsGroupToContext(GOptionContext *context, WebKitSettings* webkitSettings) +{ + GOptionEntry *optionEntries = getOptionEntriesFromWebKitSettings(webkitSettings); + if (!optionEntries) + return FALSE; + + GOptionGroup *webSettingsGroup = g_option_group_new("websettings", + "WebKitSettings writable properties for default WebKitWebView", + "WebKitSettings properties", + webkitSettings, + NULL); + g_option_group_add_entries(webSettingsGroup, optionEntries); + g_free(optionEntries); + + /* Option context takes ownership of the group. */ + g_option_context_add_group(context, webSettingsGroup); + + return TRUE; +} + +int main(int argc, char *argv[]) +{ + gtk_init(&argc, &argv); + + GOptionContext *context = g_option_context_new(NULL); + g_option_context_add_main_entries(context, commandLineOptions, 0); + g_option_context_add_group(context, gtk_get_option_group(TRUE)); + + WebKitSettings *webkitSettings = webkit_settings_new(); + if (!addSettingsGroupToContext(context, webkitSettings)) { + g_object_unref(webkitSettings); + webkitSettings = 0; + } + + GError *error = 0; + if (!g_option_context_parse(context, &argc, &argv, &error)) { + g_printerr("Cannot parse arguments: %s\n", error->message); + g_error_free(error); + g_option_context_free(context); + + return 1; + } + g_option_context_free (context); + + if (uriArguments) { + int i; + + for (i = 0; uriArguments[i]; i++) + createBrowserWindow(uriArguments[i], webkitSettings); + } else + createBrowserWindow("http://www.webkitgtk.org/", webkitSettings); + + gtk_main(); + + return 0; +} diff --git a/Tools/MiniBrowser/mac/AppDelegate.h b/Tools/MiniBrowser/mac/AppDelegate.h new file mode 100644 index 000000000..5d7855014 --- /dev/null +++ b/Tools/MiniBrowser/mac/AppDelegate.h @@ -0,0 +1,45 @@ +/* + * Copyright (C) 2010 Apple Inc. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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 APPLE INC. AND ITS 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 APPLE INC. OR ITS 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. + */ + +enum ProcessModel { + kProcessModelSharedSecondaryThread, + kProcessModelSharedSecondaryProcess +}; +typedef unsigned long ProcessModel; + +@interface BrowserAppDelegate : NSObject <NSApplicationDelegate> { + ProcessModel _currentProcessModel; + WKContextRef _threadContext; + WKContextRef _processContext; + WKPageGroupRef _pageGroup; +} + +- (WKContextRef)getCurrentContext; + +- (IBAction)setSharedProcessProcessModel:(id)sender; +- (IBAction)setSharedThreadProcessModel:(id)sender; +- (IBAction)showStatisticsWindow:(id)sender; + +@end diff --git a/Tools/MiniBrowser/mac/AppDelegate.m b/Tools/MiniBrowser/mac/AppDelegate.m new file mode 100644 index 000000000..03a751123 --- /dev/null +++ b/Tools/MiniBrowser/mac/AppDelegate.m @@ -0,0 +1,270 @@ +/* + * Copyright (C) 2010 Apple Inc. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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 APPLE INC. AND ITS 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 APPLE INC. OR ITS 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. + */ + +#import "AppDelegate.h" + +#import "BrowserWindowController.h" +#import "BrowserStatisticsWindowController.h" + +#import <WebKit2/WKContextPrivate.h> +#import <WebKit2/WKStringCF.h> +#import <WebKit2/WKURLCF.h> + +static NSString *defaultURL = @"http://www.webkit.org/"; + +@implementation BrowserAppDelegate + +void didRecieveMessageFromInjectedBundle(WKContextRef context, WKStringRef messageName, WKTypeRef messageBody, const void *clientInfo) +{ + CFStringRef cfMessageName = WKStringCopyCFString(0, messageName); + + WKTypeID typeID = WKGetTypeID(messageBody); + if (typeID == WKStringGetTypeID()) { + CFStringRef cfMessageBody = WKStringCopyCFString(0, (WKStringRef)messageBody); + LOG(@"ContextInjectedBundleClient - didRecieveMessage - MessageName: %@ MessageBody %@", cfMessageName, cfMessageBody); + CFRelease(cfMessageBody); + } else { + LOG(@"ContextInjectedBundleClient - didRecieveMessage - MessageName: %@ (MessageBody Unhandeled)\n", cfMessageName); + } + + CFRelease(cfMessageName); + + WKStringRef newMessageName = WKStringCreateWithCFString(CFSTR("Response")); + WKStringRef newMessageBody = WKStringCreateWithCFString(CFSTR("Roger that!")); + + WKContextPostMessageToInjectedBundle(context, newMessageName, newMessageBody); + + WKRelease(newMessageName); + WKRelease(newMessageBody); +} + +// MARK: History Client Callbacks + +static void didNavigateWithNavigationData(WKContextRef context, WKPageRef page, WKNavigationDataRef navigationData, WKFrameRef frame, const void *clientInfo) +{ + WKStringRef wkTitle = WKNavigationDataCopyTitle(navigationData); + CFStringRef title = WKStringCopyCFString(0, wkTitle); + WKRelease(wkTitle); + + WKURLRef wkURL = WKNavigationDataCopyURL(navigationData); + CFURLRef url = WKURLCopyCFURL(0, wkURL); + WKRelease(wkURL); + + LOG(@"HistoryClient - didNavigateWithNavigationData - title: %@ - url: %@", title, url); + CFRelease(title); + CFRelease(url); +} + +static void didPerformClientRedirect(WKContextRef context, WKPageRef page, WKURLRef sourceURL, WKURLRef destinationURL, WKFrameRef frame, const void *clientInfo) +{ + CFURLRef cfSourceURL = WKURLCopyCFURL(0, sourceURL); + CFURLRef cfDestinationURL = WKURLCopyCFURL(0, destinationURL); + LOG(@"HistoryClient - didPerformClientRedirect - sourceURL: %@ - destinationURL: %@", cfSourceURL, cfDestinationURL); + CFRelease(cfSourceURL); + CFRelease(cfDestinationURL); +} + +static void didPerformServerRedirect(WKContextRef context, WKPageRef page, WKURLRef sourceURL, WKURLRef destinationURL, WKFrameRef frame, const void *clientInfo) +{ + CFURLRef cfSourceURL = WKURLCopyCFURL(0, sourceURL); + CFURLRef cfDestinationURL = WKURLCopyCFURL(0, destinationURL); + LOG(@"HistoryClient - didPerformServerRedirect - sourceURL: %@ - destinationURL: %@", cfSourceURL, cfDestinationURL); + CFRelease(cfSourceURL); + CFRelease(cfDestinationURL); +} + +static void didUpdateHistoryTitle(WKContextRef context, WKPageRef page, WKStringRef title, WKURLRef URL, WKFrameRef frame, const void *clientInfo) +{ + CFStringRef cfTitle = WKStringCopyCFString(0, title); + CFURLRef cfURL = WKURLCopyCFURL(0, URL); + LOG(@"HistoryClient - didUpdateHistoryTitle - title: %@ - URL: %@", cfTitle, cfURL); + CFRelease(cfTitle); + CFRelease(cfURL); +} + +static void populateVisitedLinks(WKContextRef context, const void *clientInfo) +{ + LOG(@"HistoryClient - populateVisitedLinks"); +} + +- (id)init +{ + self = [super init]; + if (self) { + if ([NSEvent modifierFlags] & NSShiftKeyMask) + _currentProcessModel = kProcessModelSharedSecondaryThread; + else + _currentProcessModel = kProcessModelSharedSecondaryProcess; + + WKContextHistoryClient historyClient = { + kWKContextHistoryClientCurrentVersion, + self, + didNavigateWithNavigationData, + didPerformClientRedirect, + didPerformServerRedirect, + didUpdateHistoryTitle, + populateVisitedLinks + }; + + _threadContext = WKContextGetSharedThreadContext(); + WKContextSetHistoryClient(_threadContext, &historyClient); + WKContextSetCacheModel(_threadContext, kWKCacheModelPrimaryWebBrowser); + + CFStringRef bundlePathCF = (CFStringRef)[[NSBundle mainBundle] pathForAuxiliaryExecutable:@"WebBundle.bundle"]; + WKStringRef bundlePath = WKStringCreateWithCFString(bundlePathCF); + + _processContext = WKContextCreateWithInjectedBundlePath(bundlePath); + + WKContextInjectedBundleClient bundleClient = { + kWKContextInjectedBundleClientCurrentVersion, + 0, /* clientInfo */ + didRecieveMessageFromInjectedBundle, + 0 + }; + WKContextSetInjectedBundleClient(_processContext, &bundleClient); + WKContextSetHistoryClient(_processContext, &historyClient); + WKContextSetCacheModel(_processContext, kWKCacheModelPrimaryWebBrowser); + + WKRelease(bundlePath); + + WKStringRef pageGroupIdentifier = WKStringCreateWithCFString(CFSTR("MiniBrowser")); + _pageGroup = WKPageGroupCreateWithIdentifier(pageGroupIdentifier); + WKRelease(pageGroupIdentifier); + } + + return self; +} + +- (IBAction)newWindow:(id)sender +{ + BrowserWindowController *controller = [[BrowserWindowController alloc] initWithContext:[self getCurrentContext] pageGroup:_pageGroup]; + [[controller window] makeKeyAndOrderFront:sender]; + + [controller loadURLString:defaultURL]; +} + +- (WKContextRef)getCurrentContext +{ + return (_currentProcessModel == kProcessModelSharedSecondaryThread) ? _threadContext : _processContext; +} + +- (BOOL)validateMenuItem:(NSMenuItem *)menuItem +{ + if ([menuItem action] == @selector(setSharedProcessProcessModel:)) + [menuItem setState:_currentProcessModel == kProcessModelSharedSecondaryProcess ? NSOnState : NSOffState]; + else if ([menuItem action] == @selector(setSharedThreadProcessModel:)) + [menuItem setState:_currentProcessModel == kProcessModelSharedSecondaryThread ? NSOnState : NSOffState]; + return YES; +} + +- (void)_setProcessModel:(ProcessModel)processModel +{ + if (processModel == _currentProcessModel) + return; + + _currentProcessModel = processModel; +} + +- (IBAction)setSharedProcessProcessModel:(id)sender +{ + [self _setProcessModel:kProcessModelSharedSecondaryProcess]; +} + +- (IBAction)setSharedThreadProcessModel:(id)sender +{ + [self _setProcessModel:kProcessModelSharedSecondaryThread]; +} + +- (IBAction)showStatisticsWindow:(id)sender +{ + static BrowserStatisticsWindowController* windowController; + if (!windowController) + windowController = [[BrowserStatisticsWindowController alloc] initWithThreadedWKContextRef:_threadContext + processWKContextRef:_processContext]; + + [[windowController window] makeKeyAndOrderFront:self]; +} + +- (void)applicationDidFinishLaunching:(NSNotification *)aNotification +{ + [self newWindow:self]; +} + +- (void)applicationWillTerminate:(NSNotification *)notification +{ + NSArray* windows = [NSApp windows]; + for (NSWindow* window in windows) { + id delegate = [window delegate]; + if ([delegate isKindOfClass:[BrowserWindowController class]]) { + BrowserWindowController *controller = (BrowserWindowController *)delegate; + [controller applicationTerminating]; + } + } + + WKRelease(_processContext); + _processContext = 0; +} + +- (BrowserWindowController *)frontmostBrowserWindowController +{ + NSArray* windows = [NSApp windows]; + for (NSWindow* window in windows) { + id delegate = [window delegate]; + if ([delegate isKindOfClass:[BrowserWindowController class]]) + return (BrowserWindowController *)delegate; + } + + return 0; +} + +- (IBAction)openDocument:(id)sender +{ + NSOpenPanel *openPanel = [[NSOpenPanel openPanel] retain]; + [openPanel beginForDirectory:nil + file:nil + types:nil + modelessDelegate:self + didEndSelector:@selector(openPanelDidEnd:returnCode:contextInfo:) + contextInfo:0]; +} + +- (void)openPanelDidEnd:(NSOpenPanel *)sheet returnCode:(int)returnCode contextInfo:(void *)contextInfo +{ + [sheet autorelease]; + if (returnCode != NSOKButton || ![[sheet filenames] count]) + return; + + NSString* filePath = [[sheet filenames] objectAtIndex:0]; + + BrowserWindowController *controller = [self frontmostBrowserWindowController]; + if (!controller) { + controller = [[BrowserWindowController alloc] initWithContext:[self getCurrentContext] pageGroup:_pageGroup]; + [[controller window] makeKeyAndOrderFront:self]; + } + + [controller loadURLString:[[NSURL fileURLWithPath:filePath] absoluteString]]; +} + +@end diff --git a/Tools/MiniBrowser/mac/BrowserStatisticsWindow.xib b/Tools/MiniBrowser/mac/BrowserStatisticsWindow.xib new file mode 100644 index 000000000..ae2b5f8c7 --- /dev/null +++ b/Tools/MiniBrowser/mac/BrowserStatisticsWindow.xib @@ -0,0 +1,974 @@ +<?xml version="1.0" encoding="UTF-8"?> +<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="7.10"> + <data> + <int key="IBDocument.SystemTarget">1060</int> + <string key="IBDocument.SystemVersion">10D573</string> + <string key="IBDocument.InterfaceBuilderVersion">762</string> + <string key="IBDocument.AppKitVersion">1038.29</string> + <string key="IBDocument.HIToolboxVersion">460.00</string> + <object class="NSMutableDictionary" key="IBDocument.PluginVersions"> + <string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin</string> + <string key="NS.object.0">762</string> + </object> + <object class="NSMutableArray" key="IBDocument.EditedObjectIDs"> + <bool key="EncodedWithXMLCoder">YES</bool> + <integer value="2"/> + </object> + <object class="NSArray" key="IBDocument.PluginDependencies"> + <bool key="EncodedWithXMLCoder">YES</bool> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + </object> + <object class="NSMutableDictionary" key="IBDocument.Metadata"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSArray" key="dict.sortedKeys" id="0"> + <bool key="EncodedWithXMLCoder">YES</bool> + </object> + <object class="NSMutableArray" key="dict.values"> + <bool key="EncodedWithXMLCoder">YES</bool> + </object> + </object> + <object class="NSMutableArray" key="IBDocument.RootObjects" id="1000"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSCustomObject" id="1001"> + <string key="NSClassName">BrowserStatisticsWindowController</string> + </object> + <object class="NSCustomObject" id="1003"> + <string key="NSClassName">FirstResponder</string> + </object> + <object class="NSCustomObject" id="1004"> + <string key="NSClassName">NSApplication</string> + </object> + <object class="NSWindowTemplate" id="1005"> + <int key="NSWindowStyleMask">15</int> + <int key="NSWindowBacking">2</int> + <string key="NSWindowRect">{{196, 352}, {398, 158}}</string> + <int key="NSWTFlags">544735232</int> + <string key="NSWindowTitle">Window</string> + <string key="NSWindowClass">NSWindow</string> + <nil key="NSViewClass"/> + <string key="NSWindowContentMaxSize">{1.79769e+308, 1.79769e+308}</string> + <object class="NSView" key="NSWindowView" id="1006"> + <reference key="NSNextResponder"/> + <int key="NSvFlags">256</int> + <object class="NSMutableArray" key="NSSubviews"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSBox" id="349928848"> + <reference key="NSNextResponder" ref="1006"/> + <int key="NSvFlags">45</int> + <object class="NSMutableArray" key="NSSubviews"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSView" id="737205069"> + <reference key="NSNextResponder" ref="349928848"/> + <int key="NSvFlags">256</int> + <object class="NSMutableArray" key="NSSubviews"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSMatrix" id="840724334"> + <reference key="NSNextResponder" ref="737205069"/> + <int key="NSvFlags">256</int> + <string key="NSFrame">{{18, 14}, {318, 42}}</string> + <reference key="NSSuperview" ref="737205069"/> + <bool key="NSEnabled">YES</bool> + <int key="NSNumRows">3</int> + <int key="NSNumCols">3</int> + <object class="NSMutableArray" key="NSCells"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSTextFieldCell" id="66669903"> + <int key="NSCellFlags">68288064</int> + <int key="NSCellFlags2">71435264</int> + <string key="NSContents"/> + <object class="NSFont" key="NSSupport" id="57559"> + <string key="NSName">LucidaGrande-Bold</string> + <double key="NSSize">11</double> + <int key="NSfFlags">16</int> + </object> + <reference key="NSControlView" ref="840724334"/> + <object class="NSColor" key="NSBackgroundColor" id="159766406"> + <int key="NSColorSpace">6</int> + <string key="NSCatalogName">System</string> + <string key="NSColorName">controlColor</string> + <object class="NSColor" key="NSColor"> + <int key="NSColorSpace">3</int> + <bytes key="NSWhite">MC42NjY2NjY2NjY3AA</bytes> + </object> + </object> + <object class="NSColor" key="NSTextColor" id="822671316"> + <int key="NSColorSpace">6</int> + <string key="NSCatalogName">System</string> + <string key="NSColorName">controlTextColor</string> + <object class="NSColor" key="NSColor"> + <int key="NSColorSpace">3</int> + <bytes key="NSWhite">MAA</bytes> + </object> + </object> + </object> + <object class="NSTextFieldCell" id="792638244"> + <int key="NSCellFlags">68288064</int> + <int key="NSCellFlags2">71435264</int> + <string key="NSContents">Shared Process</string> + <reference key="NSSupport" ref="57559"/> + <reference key="NSControlView" ref="840724334"/> + <int key="NSTag">1</int> + <reference key="NSBackgroundColor" ref="159766406"/> + <reference key="NSTextColor" ref="822671316"/> + </object> + <object class="NSTextFieldCell" id="220500282"> + <int key="NSCellFlags">68288064</int> + <int key="NSCellFlags2">71435264</int> + <string key="NSContents">Shared Thread</string> + <reference key="NSSupport" ref="57559"/> + <reference key="NSControlView" ref="840724334"/> + <reference key="NSBackgroundColor" ref="159766406"/> + <reference key="NSTextColor" ref="822671316"/> + </object> + <object class="NSTextFieldCell" id="822378002"> + <int key="NSCellFlags">68288064</int> + <int key="NSCellFlags2">71435264</int> + <string key="NSContents">Pages</string> + <reference key="NSSupport" ref="57559"/> + <reference key="NSControlView" ref="840724334"/> + <reference key="NSBackgroundColor" ref="159766406"/> + <reference key="NSTextColor" ref="822671316"/> + </object> + <object class="NSTextFieldCell" id="665973187"> + <int key="NSCellFlags">68288064</int> + <int key="NSCellFlags2">71435264</int> + <string key="NSContents">-100</string> + <object class="NSFont" key="NSSupport" id="422232155"> + <string key="NSName">LucidaGrande</string> + <double key="NSSize">11</double> + <int key="NSfFlags">16</int> + </object> + <reference key="NSControlView" ref="840724334"/> + <int key="NSTag">11</int> + <reference key="NSBackgroundColor" ref="159766406"/> + <reference key="NSTextColor" ref="822671316"/> + </object> + <object class="NSTextFieldCell" id="534624797"> + <int key="NSCellFlags">68288064</int> + <int key="NSCellFlags2">71435264</int> + <string key="NSContents">-100</string> + <reference key="NSSupport" ref="422232155"/> + <reference key="NSControlView" ref="840724334"/> + <int key="NSTag">21</int> + <reference key="NSBackgroundColor" ref="159766406"/> + <reference key="NSTextColor" ref="822671316"/> + </object> + <object class="NSTextFieldCell" id="576107244"> + <int key="NSCellFlags">68288064</int> + <int key="NSCellFlags2">71435264</int> + <string key="NSContents">Frames</string> + <reference key="NSSupport" ref="57559"/> + <reference key="NSControlView" ref="840724334"/> + <reference key="NSBackgroundColor" ref="159766406"/> + <reference key="NSTextColor" ref="822671316"/> + </object> + <object class="NSTextFieldCell" id="775125133"> + <int key="NSCellFlags">68288064</int> + <int key="NSCellFlags2">71435264</int> + <string key="NSContents">-100</string> + <reference key="NSSupport" ref="422232155"/> + <reference key="NSControlView" ref="840724334"/> + <int key="NSTag">12</int> + <reference key="NSBackgroundColor" ref="159766406"/> + <reference key="NSTextColor" ref="822671316"/> + </object> + <object class="NSTextFieldCell" id="1058484862"> + <int key="NSCellFlags">68288064</int> + <int key="NSCellFlags2">71435264</int> + <string key="NSContents">-100</string> + <reference key="NSSupport" ref="422232155"/> + <reference key="NSControlView" ref="840724334"/> + <int key="NSTag">22</int> + <reference key="NSBackgroundColor" ref="159766406"/> + <reference key="NSTextColor" ref="822671316"/> + </object> + </object> + <string key="NSCellSize">{106, 14}</string> + <string key="NSIntercellSpacing">{0, 0}</string> + <int key="NSMatrixFlags">-2080374784</int> + <nil key="NSCellClass"/> + <object class="NSTextFieldCell" key="NSProtoCell" id="609012621"> + <int key="NSCellFlags">68288064</int> + <int key="NSCellFlags2">71435264</int> + <string key="NSContents">Page Namespaces</string> + <reference key="NSSupport" ref="57559"/> + <reference key="NSBackgroundColor" ref="159766406"/> + <reference key="NSTextColor" ref="822671316"/> + </object> + <int key="NSSelectedRow">-1</int> + <int key="NSSelectedCol">-1</int> + <reference key="NSBackgroundColor" ref="159766406"/> + <reference key="NSCellBackgroundColor" ref="159766406"/> + </object> + </object> + <string key="NSFrame">{{1, 1}, {354, 66}}</string> + <reference key="NSSuperview" ref="349928848"/> + </object> + </object> + <string key="NSFrame">{{25, 56}, {356, 82}}</string> + <reference key="NSSuperview" ref="1006"/> + <string key="NSOffsets">{0, 0}</string> + <object class="NSTextFieldCell" key="NSTitleCell"> + <int key="NSCellFlags">67239424</int> + <int key="NSCellFlags2">0</int> + <string key="NSContents">Statistics</string> + <object class="NSFont" key="NSSupport"> + <string key="NSName">LucidaGrande</string> + <double key="NSSize">11</double> + <int key="NSfFlags">3100</int> + </object> + <object class="NSColor" key="NSBackgroundColor"> + <int key="NSColorSpace">6</int> + <string key="NSCatalogName">System</string> + <string key="NSColorName">textBackgroundColor</string> + <object class="NSColor" key="NSColor"> + <int key="NSColorSpace">3</int> + <bytes key="NSWhite">MQA</bytes> + </object> + </object> + <object class="NSColor" key="NSTextColor"> + <int key="NSColorSpace">3</int> + <bytes key="NSWhite">MCAwLjgwMDAwMDAxMTkAA</bytes> + </object> + </object> + <reference key="NSContentView" ref="737205069"/> + <int key="NSBorderType">1</int> + <int key="NSBoxType">0</int> + <int key="NSTitlePosition">2</int> + <bool key="NSTransparent">NO</bool> + </object> + <object class="NSButton" id="913385411"> + <reference key="NSNextResponder" ref="1006"/> + <int key="NSvFlags">268</int> + <string key="NSFrame">{{288, 12}, {96, 32}}</string> + <reference key="NSSuperview" ref="1006"/> + <bool key="NSEnabled">YES</bool> + <object class="NSButtonCell" key="NSCell" id="465163606"> + <int key="NSCellFlags">67239424</int> + <int key="NSCellFlags2">134217728</int> + <string key="NSContents">Refresh</string> + <object class="NSFont" key="NSSupport"> + <string key="NSName">LucidaGrande</string> + <double key="NSSize">13</double> + <int key="NSfFlags">1044</int> + </object> + <reference key="NSControlView" ref="913385411"/> + <int key="NSButtonFlags">-2038284033</int> + <int key="NSButtonFlags2">129</int> + <string key="NSAlternateContents"/> + <string key="NSKeyEquivalent"/> + <int key="NSPeriodicDelay">200</int> + <int key="NSPeriodicInterval">25</int> + </object> + </object> + </object> + <string key="NSFrameSize">{398, 158}</string> + <reference key="NSSuperview"/> + </object> + <string key="NSScreenRect">{{0, 0}, {1680, 1028}}</string> + <string key="NSMaxSize">{1.79769e+308, 1.79769e+308}</string> + </object> + </object> + <object class="IBObjectContainer" key="IBDocument.Objects"> + <object class="NSMutableArray" key="connectionRecords"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="IBConnectionRecord"> + <object class="IBOutletConnection" key="connection"> + <string key="label">window</string> + <reference key="source" ref="1001"/> + <reference key="destination" ref="1005"/> + </object> + <int key="connectionID">3</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBOutletConnection" key="connection"> + <string key="label">delegate</string> + <reference key="source" ref="1005"/> + <reference key="destination" ref="1001"/> + </object> + <int key="connectionID">4</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">refreshStatistics:</string> + <reference key="source" ref="1001"/> + <reference key="destination" ref="913385411"/> + </object> + <int key="connectionID">83</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBOutletConnection" key="connection"> + <string key="label">_basicStatsMatrix</string> + <reference key="source" ref="1001"/> + <reference key="destination" ref="840724334"/> + </object> + <int key="connectionID">84</int> + </object> + </object> + <object class="IBMutableOrderedSet" key="objectRecords"> + <object class="NSArray" key="orderedObjects"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="IBObjectRecord"> + <int key="objectID">0</int> + <reference key="object" ref="0"/> + <reference key="children" ref="1000"/> + <nil key="parent"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">-2</int> + <reference key="object" ref="1001"/> + <reference key="parent" ref="0"/> + <string key="objectName">File's Owner</string> + </object> + <object class="IBObjectRecord"> + <int key="objectID">-1</int> + <reference key="object" ref="1003"/> + <reference key="parent" ref="0"/> + <string key="objectName">First Responder</string> + </object> + <object class="IBObjectRecord"> + <int key="objectID">-3</int> + <reference key="object" ref="1004"/> + <reference key="parent" ref="0"/> + <string key="objectName">Application</string> + </object> + <object class="IBObjectRecord"> + <int key="objectID">1</int> + <reference key="object" ref="1005"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="1006"/> + </object> + <reference key="parent" ref="0"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">2</int> + <reference key="object" ref="1006"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="349928848"/> + <reference ref="913385411"/> + </object> + <reference key="parent" ref="1005"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">5</int> + <reference key="object" ref="349928848"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="840724334"/> + </object> + <reference key="parent" ref="1006"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">37</int> + <reference key="object" ref="913385411"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="465163606"/> + </object> + <reference key="parent" ref="1006"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">38</int> + <reference key="object" ref="465163606"/> + <reference key="parent" ref="913385411"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">75</int> + <reference key="object" ref="840724334"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="1058484862"/> + <reference ref="534624797"/> + <reference ref="220500282"/> + <reference ref="792638244"/> + <reference ref="66669903"/> + <reference ref="665973187"/> + <reference ref="822378002"/> + <reference ref="775125133"/> + <reference ref="576107244"/> + <reference ref="609012621"/> + </object> + <reference key="parent" ref="349928848"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">87</int> + <reference key="object" ref="1058484862"/> + <reference key="parent" ref="840724334"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">86</int> + <reference key="object" ref="534624797"/> + <reference key="parent" ref="840724334"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">85</int> + <reference key="object" ref="220500282"/> + <reference key="parent" ref="840724334"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">48</int> + <reference key="object" ref="792638244"/> + <reference key="parent" ref="840724334"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">42</int> + <reference key="object" ref="66669903"/> + <reference key="parent" ref="840724334"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">46</int> + <reference key="object" ref="665973187"/> + <reference key="parent" ref="840724334"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">43</int> + <reference key="object" ref="822378002"/> + <reference key="parent" ref="840724334"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">47</int> + <reference key="object" ref="775125133"/> + <reference key="parent" ref="840724334"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">44</int> + <reference key="object" ref="576107244"/> + <reference key="parent" ref="840724334"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">82</int> + <reference key="object" ref="609012621"/> + <reference key="parent" ref="840724334"/> + </object> + </object> + </object> + <object class="NSMutableDictionary" key="flattenedProperties"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSArray" key="dict.sortedKeys"> + <bool key="EncodedWithXMLCoder">YES</bool> + <string>1.IBEditorWindowLastContentRect</string> + <string>1.IBPluginDependency</string> + <string>1.IBWindowTemplateEditedContentRect</string> + <string>1.NSWindowTemplate.visibleAtLaunch</string> + <string>1.WindowOrigin</string> + <string>1.editorWindowContentRectSynchronizationRect</string> + <string>2.IBPluginDependency</string> + <string>37.IBPluginDependency</string> + <string>38.IBPluginDependency</string> + <string>5.IBPluginDependency</string> + </object> + <object class="NSMutableArray" key="dict.values"> + <bool key="EncodedWithXMLCoder">YES</bool> + <string>{{362, 638}, {398, 158}}</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>{{362, 638}, {398, 158}}</string> + <integer value="1"/> + <string>{196, 240}</string> + <string>{{202, 428}, {480, 270}}</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + </object> + </object> + <object class="NSMutableDictionary" key="unlocalizedProperties"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference key="dict.sortedKeys" ref="0"/> + <object class="NSMutableArray" key="dict.values"> + <bool key="EncodedWithXMLCoder">YES</bool> + </object> + </object> + <nil key="activeLocalization"/> + <object class="NSMutableDictionary" key="localizations"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference key="dict.sortedKeys" ref="0"/> + <object class="NSMutableArray" key="dict.values"> + <bool key="EncodedWithXMLCoder">YES</bool> + </object> + </object> + <nil key="sourceID"/> + <int key="maxID">88</int> + </object> + <object class="IBClassDescriber" key="IBDocument.Classes"> + <object class="NSMutableArray" key="referencedPartialClassDescriptions"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="IBPartialClassDescription"> + <string key="className">BrowserStatisticsWindowController</string> + <string key="superclassName">NSWindowController</string> + <object class="NSMutableDictionary" key="actions"> + <string key="NS.key.0">refreshStatistics:</string> + <string key="NS.object.0">id</string> + </object> + <object class="NSMutableDictionary" key="outlets"> + <string key="NS.key.0">_basicStatsMatrix</string> + <string key="NS.object.0">NSMatrix</string> + </object> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBProjectSource</string> + <string key="minorKey">mac/BrowserStatisticsWindowController.h</string> + </object> + </object> + </object> + <object class="NSMutableArray" key="referencedPartialClassDescriptionsV3.2+"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="IBPartialClassDescription"> + <string key="className">NSActionCell</string> + <string key="superclassName">NSCell</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSActionCell.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSApplication</string> + <string key="superclassName">NSResponder</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier" id="580408357"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSApplication.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSApplication</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier" id="153722584"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSApplicationScripting.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSApplication</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier" id="814670282"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSColorPanel.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSApplication</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSHelpManager.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSApplication</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSPageLayout.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSApplication</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSUserInterfaceItemSearching.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSBox</string> + <string key="superclassName">NSView</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSBox.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSButton</string> + <string key="superclassName">NSControl</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSButton.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSButtonCell</string> + <string key="superclassName">NSActionCell</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSButtonCell.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSCell</string> + <string key="superclassName">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSCell.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSControl</string> + <string key="superclassName">NSView</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier" id="423015697"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSControl.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSFormatter</string> + <string key="superclassName">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">Foundation.framework/Headers/NSFormatter.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSMatrix</string> + <string key="superclassName">NSControl</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSMatrix.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSMenu</string> + <string key="superclassName">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier" id="571428989"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSMenu.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSAccessibility.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <reference key="sourceIdentifier" ref="580408357"/> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <reference key="sourceIdentifier" ref="153722584"/> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <reference key="sourceIdentifier" ref="814670282"/> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <reference key="sourceIdentifier" ref="423015697"/> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSDictionaryController.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSDragging.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSFontManager.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSFontPanel.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSKeyValueBinding.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <reference key="sourceIdentifier" ref="571428989"/> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSNibLoading.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSOutlineView.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSPasteboard.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSSavePanel.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSTableView.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSToolbarItem.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier" id="214998123"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSView.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">Foundation.framework/Headers/NSArchiver.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">Foundation.framework/Headers/NSClassDescription.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">Foundation.framework/Headers/NSError.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">Foundation.framework/Headers/NSFileManager.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">Foundation.framework/Headers/NSKeyValueCoding.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">Foundation.framework/Headers/NSKeyValueObserving.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">Foundation.framework/Headers/NSKeyedArchiver.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">Foundation.framework/Headers/NSObject.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">Foundation.framework/Headers/NSObjectScripting.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">Foundation.framework/Headers/NSPortCoder.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">Foundation.framework/Headers/NSRunLoop.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">Foundation.framework/Headers/NSScriptClassDescription.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">Foundation.framework/Headers/NSScriptKeyValueCoding.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">Foundation.framework/Headers/NSScriptObjectSpecifiers.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">Foundation.framework/Headers/NSScriptWhoseTests.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">Foundation.framework/Headers/NSThread.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">Foundation.framework/Headers/NSURL.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">Foundation.framework/Headers/NSURLConnection.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">Foundation.framework/Headers/NSURLDownload.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSResponder</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSInterfaceStyle.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSResponder</string> + <string key="superclassName">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSResponder.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSTextFieldCell</string> + <string key="superclassName">NSActionCell</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSTextFieldCell.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSView</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSClipView.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSView</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSMenuItem.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSView</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSRulerView.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSView</string> + <string key="superclassName">NSResponder</string> + <reference key="sourceIdentifier" ref="214998123"/> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSWindow</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSDrawer.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSWindow</string> + <string key="superclassName">NSResponder</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSWindow.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSWindow</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSWindowScripting.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSWindowController</string> + <string key="superclassName">NSResponder</string> + <object class="NSMutableDictionary" key="actions"> + <string key="NS.key.0">showWindow:</string> + <string key="NS.object.0">id</string> + </object> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSWindowController.h</string> + </object> + </object> + </object> + </object> + <int key="IBDocument.localizationMode">0</int> + <string key="IBDocument.TargetRuntimeIdentifier">IBCocoaFramework</string> + <object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencyDefaults"> + <string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.macosx</string> + <integer value="1060" key="NS.object.0"/> + </object> + <object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDevelopmentDependencies"> + <string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3</string> + <integer value="3000" key="NS.object.0"/> + </object> + <bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool> + <string key="IBDocument.LastKnownRelativeProjectPath">../MiniBrowser.xcodeproj</string> + <int key="IBDocument.defaultPropertyAccessControl">3</int> + </data> +</archive> diff --git a/Tools/MiniBrowser/mac/BrowserStatisticsWindowController.h b/Tools/MiniBrowser/mac/BrowserStatisticsWindowController.h new file mode 100644 index 000000000..6b4438f47 --- /dev/null +++ b/Tools/MiniBrowser/mac/BrowserStatisticsWindowController.h @@ -0,0 +1,20 @@ +// +// BrowserStatisticsWindowController.h +// MiniBrowser +// +// Created by Sam Weinig on 4/21/10. +// Copyright 2010 Apple Inc. All rights reserved. +// + +@interface BrowserStatisticsWindowController : NSWindowController { + IBOutlet NSMatrix *_basicStatsMatrix; + + WKContextRef _threadContext; + WKContextRef _processContext; +} + +- (id)initWithThreadedWKContextRef:(WKContextRef)threadContext processWKContextRef:(WKContextRef)processContext; + +- (IBAction)refreshStatistics:(id)sender; + +@end diff --git a/Tools/MiniBrowser/mac/BrowserStatisticsWindowController.m b/Tools/MiniBrowser/mac/BrowserStatisticsWindowController.m new file mode 100644 index 000000000..878821a86 --- /dev/null +++ b/Tools/MiniBrowser/mac/BrowserStatisticsWindowController.m @@ -0,0 +1,47 @@ +// +// BrowserStatisticsWindowController.m +// MiniBrowser +// +// Created by Sam Weinig on 4/21/10. +// Copyright 2010 Apple Inc. All rights reserved. +// + +#import "BrowserStatisticsWindowController.h" + +#import <WebKit2/WKContextPrivate.h> + +@implementation BrowserStatisticsWindowController + +- (id)initWithThreadedWKContextRef:(WKContextRef)threadContext processWKContextRef:(WKContextRef)processContext +{ + if ((self = [super initWithWindowNibName:@"BrowserStatisticsWindow"])) { + _threadContext = WKRetain(threadContext); + _processContext = WKRetain(processContext); + } + + return self; +} + +- (void)dealloc +{ + WKRelease(_threadContext); + _threadContext = 0; + + WKRelease(_processContext); + _processContext = 0; + + [super dealloc]; +} + +- (void)windowDidLoad +{ + [super windowDidLoad]; + [self refreshStatistics:nil]; +} + +- (IBAction)refreshStatistics:(id)sender +{ + // FIXME: (Re-)implement. +} + +@end diff --git a/Tools/MiniBrowser/mac/BrowserWindow.xib b/Tools/MiniBrowser/mac/BrowserWindow.xib new file mode 100644 index 000000000..5984fe5d4 --- /dev/null +++ b/Tools/MiniBrowser/mac/BrowserWindow.xib @@ -0,0 +1,1558 @@ +<?xml version="1.0" encoding="UTF-8"?> +<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="7.10"> + <data> + <int key="IBDocument.SystemTarget">1060</int> + <string key="IBDocument.SystemVersion">10H545</string> + <string key="IBDocument.InterfaceBuilderVersion">820</string> + <string key="IBDocument.AppKitVersion">1038.35</string> + <string key="IBDocument.HIToolboxVersion">461.00</string> + <object class="NSMutableDictionary" key="IBDocument.PluginVersions"> + <string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin</string> + <string key="NS.object.0">820</string> + </object> + <object class="NSMutableArray" key="IBDocument.EditedObjectIDs"> + <bool key="EncodedWithXMLCoder">YES</bool> + <integer value="9"/> + <integer value="71"/> + </object> + <object class="NSArray" key="IBDocument.PluginDependencies"> + <bool key="EncodedWithXMLCoder">YES</bool> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + </object> + <object class="NSMutableDictionary" key="IBDocument.Metadata"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSArray" key="dict.sortedKeys" id="0"> + <bool key="EncodedWithXMLCoder">YES</bool> + </object> + <object class="NSMutableArray" key="dict.values"> + <bool key="EncodedWithXMLCoder">YES</bool> + </object> + </object> + <object class="NSMutableArray" key="IBDocument.RootObjects" id="1000"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSCustomObject" id="1001"> + <string key="NSClassName">BrowserWindowController</string> + </object> + <object class="NSCustomObject" id="1003"> + <string key="NSClassName">FirstResponder</string> + </object> + <object class="NSCustomObject" id="1004"> + <string key="NSClassName">NSApplication</string> + </object> + <object class="NSWindowTemplate" id="1005"> + <int key="NSWindowStyleMask">4111</int> + <int key="NSWindowBacking">2</int> + <string key="NSWindowRect">{{517, 330}, {776, 608}}</string> + <int key="NSWTFlags">544735232</int> + <string key="NSWindowTitle">Window</string> + <string key="NSWindowClass">NSWindow</string> + <object class="NSToolbar" key="NSViewClass" id="726585754"> + <object class="NSMutableString" key="NSToolbarIdentifier"> + <characters key="NS.bytes">994A0CB1-7575-4F39-A65B-7165AB1E8015</characters> + </object> + <nil key="NSToolbarDelegate"/> + <bool key="NSToolbarPrefersToBeShown">YES</bool> + <bool key="NSToolbarShowsBaselineSeparator">YES</bool> + <bool key="NSToolbarAllowsUserCustomization">YES</bool> + <bool key="NSToolbarAutosavesConfiguration">NO</bool> + <int key="NSToolbarDisplayMode">2</int> + <int key="NSToolbarSizeMode">1</int> + <object class="NSMutableDictionary" key="NSToolbarIBIdentifiedItems"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSArray" key="dict.sortedKeys"> + <bool key="EncodedWithXMLCoder">YES</bool> + <string>255D29F2-C9AA-4B4B-BB43-B38FCD6A0BBB</string> + <string>6BDC61B7-F1A8-425A-A212-9CAC59C56385</string> + <string>73DE9F4B-73E2-4036-A134-2D9E029DA980</string> + <string>88C16109-D40F-4682-BCE4-CBEE2EDE32D2</string> + <string>E1A9D32A-59E3-467B-9ABA-A95780416E69</string> + </object> + <object class="NSMutableArray" key="dict.values"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSToolbarItem" id="16289946"> + <object class="NSMutableString" key="NSToolbarItemIdentifier"> + <characters key="NS.bytes">255D29F2-C9AA-4B4B-BB43-B38FCD6A0BBB</characters> + </object> + <string key="NSToolbarItemLabel">Location</string> + <string key="NSToolbarItemPaletteLabel">Location</string> + <nil key="NSToolbarItemToolTip"/> + <object class="NSTextField" key="NSToolbarItemView" id="690456651"> + <nil key="NSNextResponder"/> + <int key="NSvFlags">266</int> + <string key="NSFrame">{{0, 14}, {565, 22}}</string> + <int key="NSViewLayerContentsRedrawPolicy">2</int> + <bool key="NSEnabled">YES</bool> + <object class="NSTextFieldCell" key="NSCell" id="1023147716"> + <int key="NSCellFlags">-1804468671</int> + <int key="NSCellFlags2">268436480</int> + <string key="NSContents"/> + <object class="NSFont" key="NSSupport" id="1064395332"> + <string key="NSName">LucidaGrande</string> + <double key="NSSize">13</double> + <int key="NSfFlags">1044</int> + </object> + <reference key="NSControlView" ref="690456651"/> + <bool key="NSDrawsBackground">YES</bool> + <object class="NSColor" key="NSBackgroundColor" id="1032961300"> + <int key="NSColorSpace">6</int> + <string key="NSCatalogName">System</string> + <string key="NSColorName">textBackgroundColor</string> + <object class="NSColor" key="NSColor"> + <int key="NSColorSpace">3</int> + <bytes key="NSWhite">MQA</bytes> + </object> + </object> + <object class="NSColor" key="NSTextColor"> + <int key="NSColorSpace">6</int> + <string key="NSCatalogName">System</string> + <string key="NSColorName">textColor</string> + <object class="NSColor" key="NSColor" id="365730878"> + <int key="NSColorSpace">3</int> + <bytes key="NSWhite">MAA</bytes> + </object> + </object> + </object> + </object> + <nil key="NSToolbarItemImage"/> + <nil key="NSToolbarItemTarget"/> + <nil key="NSToolbarItemAction"/> + <string key="NSToolbarItemMinSize">{200, 22}</string> + <string key="NSToolbarItemMaxSize">{800, 22}</string> + <bool key="NSToolbarItemEnabled">YES</bool> + <bool key="NSToolbarItemAutovalidates">YES</bool> + <int key="NSToolbarItemTag">0</int> + <bool key="NSToolbarIsUserRemovable">YES</bool> + <int key="NSToolbarItemVisibilityPriority">0</int> + </object> + <object class="NSToolbarItem" id="457655522"> + <object class="NSMutableString" key="NSToolbarItemIdentifier"> + <characters key="NS.bytes">6BDC61B7-F1A8-425A-A212-9CAC59C56385</characters> + </object> + <string key="NSToolbarItemLabel">Progress</string> + <string key="NSToolbarItemPaletteLabel">Progress</string> + <nil key="NSToolbarItemToolTip"/> + <object class="NSProgressIndicator" key="NSToolbarItemView" id="128750774"> + <nil key="NSNextResponder"/> + <int key="NSvFlags">1289</int> + <object class="NSPSMatrix" key="NSDrawMatrix"/> + <string key="NSFrame">{{19, 14}, {16, 16}}</string> + <int key="NSpiFlags">28936</int> + <double key="NSMaxValue">1</double> + </object> + <nil key="NSToolbarItemImage"/> + <nil key="NSToolbarItemTarget"/> + <nil key="NSToolbarItemAction"/> + <string key="NSToolbarItemMinSize">{16, 16}</string> + <string key="NSToolbarItemMaxSize">{16, 16}</string> + <bool key="NSToolbarItemEnabled">YES</bool> + <bool key="NSToolbarItemAutovalidates">YES</bool> + <int key="NSToolbarItemTag">-1</int> + <bool key="NSToolbarIsUserRemovable">YES</bool> + <int key="NSToolbarItemVisibilityPriority">0</int> + </object> + <object class="NSToolbarItem" id="332491395"> + <object class="NSMutableString" key="NSToolbarItemIdentifier"> + <characters key="NS.bytes">73DE9F4B-73E2-4036-A134-2D9E029DA980</characters> + </object> + <string key="NSToolbarItemLabel">Go Back</string> + <string key="NSToolbarItemPaletteLabel">Go Back</string> + <nil key="NSToolbarItemToolTip"/> + <object class="NSButton" key="NSToolbarItemView" id="777930419"> + <nil key="NSNextResponder"/> + <int key="NSvFlags">268</int> + <string key="NSFrame">{{9, 14}, {32, 25}}</string> + <bool key="NSEnabled">YES</bool> + <object class="NSButtonCell" key="NSCell" id="663899880"> + <int key="NSCellFlags">-2080244224</int> + <int key="NSCellFlags2">134217728</int> + <string key="NSContents"/> + <reference key="NSSupport" ref="1064395332"/> + <reference key="NSControlView" ref="777930419"/> + <int key="NSButtonFlags">-2033434369</int> + <int key="NSButtonFlags2">163</int> + <object class="NSCustomResource" key="NSNormalImage" id="206098440"> + <string key="NSClassName">NSImage</string> + <string key="NSResourceName">NSGoLeftTemplate</string> + </object> + <string key="NSAlternateContents"/> + <string key="NSKeyEquivalent"/> + <int key="NSPeriodicDelay">400</int> + <int key="NSPeriodicInterval">75</int> + </object> + </object> + <reference key="NSToolbarItemImage" ref="206098440"/> + <nil key="NSToolbarItemTarget"/> + <nil key="NSToolbarItemAction"/> + <string key="NSToolbarItemMinSize">{32, 25}</string> + <string key="NSToolbarItemMaxSize">{32, 25}</string> + <bool key="NSToolbarItemEnabled">YES</bool> + <bool key="NSToolbarItemAutovalidates">YES</bool> + <int key="NSToolbarItemTag">0</int> + <bool key="NSToolbarIsUserRemovable">YES</bool> + <int key="NSToolbarItemVisibilityPriority">0</int> + </object> + <object class="NSToolbarItem" id="818723416"> + <object class="NSMutableString" key="NSToolbarItemIdentifier"> + <characters key="NS.bytes">88C16109-D40F-4682-BCE4-CBEE2EDE32D2</characters> + </object> + <string key="NSToolbarItemLabel">Refresh</string> + <string key="NSToolbarItemPaletteLabel">Refresh</string> + <nil key="NSToolbarItemToolTip"/> + <object class="NSButton" key="NSToolbarItemView" id="35464578"> + <nil key="NSNextResponder"/> + <int key="NSvFlags">268</int> + <string key="NSFrame">{{10, 14}, {29, 25}}</string> + <bool key="NSEnabled">YES</bool> + <object class="NSButtonCell" key="NSCell" id="366486485"> + <int key="NSCellFlags">-2080244224</int> + <int key="NSCellFlags2">134217728</int> + <string key="NSContents"/> + <reference key="NSSupport" ref="1064395332"/> + <reference key="NSControlView" ref="35464578"/> + <int key="NSButtonFlags">-2033434369</int> + <int key="NSButtonFlags2">163</int> + <object class="NSCustomResource" key="NSNormalImage" id="443763357"> + <string key="NSClassName">NSImage</string> + <string key="NSResourceName">NSRefreshTemplate</string> + </object> + <string key="NSAlternateContents"/> + <string key="NSKeyEquivalent"/> + <int key="NSPeriodicDelay">400</int> + <int key="NSPeriodicInterval">75</int> + </object> + </object> + <reference key="NSToolbarItemImage" ref="443763357"/> + <nil key="NSToolbarItemTarget"/> + <nil key="NSToolbarItemAction"/> + <string key="NSToolbarItemMinSize">{29, 25}</string> + <string key="NSToolbarItemMaxSize">{29, 25}</string> + <bool key="NSToolbarItemEnabled">YES</bool> + <bool key="NSToolbarItemAutovalidates">YES</bool> + <int key="NSToolbarItemTag">0</int> + <bool key="NSToolbarIsUserRemovable">YES</bool> + <int key="NSToolbarItemVisibilityPriority">0</int> + </object> + <object class="NSToolbarItem" id="928383107"> + <object class="NSMutableString" key="NSToolbarItemIdentifier"> + <characters key="NS.bytes">E1A9D32A-59E3-467B-9ABA-A95780416E69</characters> + </object> + <string key="NSToolbarItemLabel">Go Forward</string> + <string key="NSToolbarItemPaletteLabel">Go Forward</string> + <nil key="NSToolbarItemToolTip"/> + <object class="NSButton" key="NSToolbarItemView" id="95415629"> + <nil key="NSNextResponder"/> + <int key="NSvFlags">268</int> + <string key="NSFrame">{{19, 14}, {32, 25}}</string> + <bool key="NSEnabled">YES</bool> + <object class="NSButtonCell" key="NSCell" id="767612038"> + <int key="NSCellFlags">-2080244224</int> + <int key="NSCellFlags2">134217728</int> + <string key="NSContents"/> + <reference key="NSSupport" ref="1064395332"/> + <reference key="NSControlView" ref="95415629"/> + <int key="NSButtonFlags">-2033434369</int> + <int key="NSButtonFlags2">163</int> + <object class="NSCustomResource" key="NSNormalImage" id="163672266"> + <string key="NSClassName">NSImage</string> + <string key="NSResourceName">NSGoRightTemplate</string> + </object> + <string key="NSAlternateContents"/> + <string key="NSKeyEquivalent"/> + <int key="NSPeriodicDelay">400</int> + <int key="NSPeriodicInterval">75</int> + </object> + </object> + <reference key="NSToolbarItemImage" ref="163672266"/> + <nil key="NSToolbarItemTarget"/> + <nil key="NSToolbarItemAction"/> + <string key="NSToolbarItemMinSize">{32, 25}</string> + <string key="NSToolbarItemMaxSize">{32, 25}</string> + <bool key="NSToolbarItemEnabled">YES</bool> + <bool key="NSToolbarItemAutovalidates">YES</bool> + <int key="NSToolbarItemTag">0</int> + <bool key="NSToolbarIsUserRemovable">YES</bool> + <int key="NSToolbarItemVisibilityPriority">0</int> + </object> + </object> + </object> + <object class="NSArray" key="NSToolbarIBAllowedItems"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="332491395"/> + <reference ref="928383107"/> + <reference ref="818723416"/> + <reference ref="457655522"/> + <reference ref="16289946"/> + </object> + <object class="NSMutableArray" key="NSToolbarIBDefaultItems"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="332491395"/> + <reference ref="928383107"/> + <reference ref="818723416"/> + <reference ref="16289946"/> + <reference ref="457655522"/> + </object> + <object class="NSMutableArray" key="NSToolbarIBSelectableItems"> + <bool key="EncodedWithXMLCoder">YES</bool> + </object> + </object> + <string key="NSWindowContentMaxSize">{1.79769e+308, 1.79769e+308}</string> + <object class="NSView" key="NSWindowView" id="1006"> + <reference key="NSNextResponder"/> + <int key="NSvFlags">256</int> + <object class="NSMutableArray" key="NSSubviews"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSCustomView" id="877383975"> + <reference key="NSNextResponder" ref="1006"/> + <int key="NSvFlags">274</int> + <string key="NSFrameSize">{776, 608}</string> + <reference key="NSSuperview" ref="1006"/> + <int key="NSViewLayerContentsRedrawPolicy">2</int> + <string key="NSClassName">NSView</string> + </object> + </object> + <string key="NSFrameSize">{776, 608}</string> + <reference key="NSSuperview"/> + <int key="NSViewLayerContentsRedrawPolicy">2</int> + </object> + <string key="NSScreenRect">{{0, 0}, {1920, 1178}}</string> + <string key="NSMaxSize">{1.79769e+308, 1.79769e+308}</string> + <string key="NSFrameAutosaveName">Main Window</string> + </object> + <object class="NSWindowTemplate" id="833876351"> + <int key="NSWindowStyleMask">147</int> + <int key="NSWindowBacking">2</int> + <string key="NSWindowRect">{{230, 479}, {452, 62}}</string> + <int key="NSWTFlags">-461897728</int> + <string key="NSWindowTitle">Find</string> + <string key="NSWindowClass">NSPanel</string> + <nil key="NSViewClass"/> + <string key="NSWindowContentMaxSize">{1.79769e+308, 1.79769e+308}</string> + <object class="NSView" key="NSWindowView" id="585866018"> + <reference key="NSNextResponder"/> + <int key="NSvFlags">256</int> + <object class="NSMutableArray" key="NSSubviews"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSSearchField" id="841639270"> + <reference key="NSNextResponder" ref="585866018"/> + <int key="NSvFlags">268</int> + <string key="NSFrame">{{20, 20}, {412, 22}}</string> + <reference key="NSSuperview" ref="585866018"/> + <bool key="NSEnabled">YES</bool> + <object class="NSSearchFieldCell" key="NSCell" id="41426839"> + <int key="NSCellFlags">343014976</int> + <int key="NSCellFlags2">268436544</int> + <string key="NSContents"/> + <reference key="NSSupport" ref="1064395332"/> + <reference key="NSControlView" ref="841639270"/> + <bool key="NSDrawsBackground">YES</bool> + <int key="NSTextBezelStyle">1</int> + <reference key="NSBackgroundColor" ref="1032961300"/> + <object class="NSColor" key="NSTextColor"> + <int key="NSColorSpace">6</int> + <string key="NSCatalogName">System</string> + <string key="NSColorName">controlTextColor</string> + <reference key="NSColor" ref="365730878"/> + </object> + <object class="NSButtonCell" key="NSSearchButtonCell"> + <int key="NSCellFlags">130560</int> + <int key="NSCellFlags2">0</int> + <string key="NSContents">search</string> + <reference key="NSControlView" ref="841639270"/> + <string key="NSAction">_searchFieldSearch:</string> + <reference key="NSTarget" ref="41426839"/> + <int key="NSButtonFlags">138690815</int> + <int key="NSButtonFlags2">0</int> + <string key="NSKeyEquivalent"/> + <int key="NSPeriodicDelay">400</int> + <int key="NSPeriodicInterval">75</int> + </object> + <object class="NSButtonCell" key="NSCancelButtonCell"> + <int key="NSCellFlags">130560</int> + <int key="NSCellFlags2">0</int> + <string key="NSContents">clear</string> + <object class="NSMutableArray" key="NSAccessibilityOverriddenAttributes"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSMutableDictionary"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSArray" key="dict.sortedKeys"> + <bool key="EncodedWithXMLCoder">YES</bool> + <string>AXDescription</string> + <string>NSAccessibilityEncodedAttributesValueType</string> + </object> + <object class="NSMutableArray" key="dict.values"> + <bool key="EncodedWithXMLCoder">YES</bool> + <string>cancel</string> + <integer value="1"/> + </object> + </object> + </object> + <reference key="NSControlView" ref="841639270"/> + <string key="NSAction">_searchFieldCancel:</string> + <reference key="NSTarget" ref="41426839"/> + <int key="NSButtonFlags">138690815</int> + <int key="NSButtonFlags2">0</int> + <string key="NSKeyEquivalent"/> + <int key="NSPeriodicDelay">400</int> + <int key="NSPeriodicInterval">75</int> + </object> + <int key="NSMaximumRecents">255</int> + </object> + </object> + </object> + <string key="NSFrameSize">{452, 62}</string> + <reference key="NSSuperview"/> + </object> + <string key="NSScreenRect">{{0, 0}, {1920, 1178}}</string> + <string key="NSMaxSize">{1.79769e+308, 1.79769e+308}</string> + </object> + </object> + <object class="IBObjectContainer" key="IBDocument.Objects"> + <object class="NSMutableArray" key="connectionRecords"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="IBConnectionRecord"> + <object class="IBOutletConnection" key="connection"> + <string key="label">window</string> + <reference key="source" ref="1001"/> + <reference key="destination" ref="1005"/> + </object> + <int key="connectionID">3</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBOutletConnection" key="connection"> + <string key="label">delegate</string> + <reference key="source" ref="1005"/> + <reference key="destination" ref="1001"/> + </object> + <int key="connectionID">4</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBOutletConnection" key="connection"> + <string key="label">urlText</string> + <reference key="source" ref="1001"/> + <reference key="destination" ref="690456651"/> + </object> + <int key="connectionID">32</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBOutletConnection" key="connection"> + <string key="label">progressIndicator</string> + <reference key="source" ref="1001"/> + <reference key="destination" ref="128750774"/> + </object> + <int key="connectionID">33</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBOutletConnection" key="connection"> + <string key="label">reloadButton</string> + <reference key="source" ref="1001"/> + <reference key="destination" ref="35464578"/> + </object> + <int key="connectionID">34</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">reload:</string> + <reference key="source" ref="1001"/> + <reference key="destination" ref="35464578"/> + </object> + <int key="connectionID">35</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">fetch:</string> + <reference key="source" ref="1001"/> + <reference key="destination" ref="690456651"/> + </object> + <int key="connectionID">36</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBOutletConnection" key="connection"> + <string key="label">containerView</string> + <reference key="source" ref="1001"/> + <reference key="destination" ref="877383975"/> + </object> + <int key="connectionID">37</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBOutletConnection" key="connection"> + <string key="label">backButton</string> + <reference key="source" ref="1001"/> + <reference key="destination" ref="777930419"/> + </object> + <int key="connectionID">46</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBOutletConnection" key="connection"> + <string key="label">forwardButton</string> + <reference key="source" ref="1001"/> + <reference key="destination" ref="95415629"/> + </object> + <int key="connectionID">47</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">goBack:</string> + <reference key="source" ref="1001"/> + <reference key="destination" ref="332491395"/> + </object> + <int key="connectionID">61</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">goForward:</string> + <reference key="source" ref="1001"/> + <reference key="destination" ref="928383107"/> + </object> + <int key="connectionID">62</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBOutletConnection" key="connection"> + <string key="label">toolbar</string> + <reference key="source" ref="1001"/> + <reference key="destination" ref="726585754"/> + </object> + <int key="connectionID">67</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">find:</string> + <reference key="source" ref="1001"/> + <reference key="destination" ref="841639270"/> + </object> + <int key="connectionID">76</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBOutletConnection" key="connection"> + <string key="label">findPanelWindow</string> + <reference key="source" ref="1001"/> + <reference key="destination" ref="833876351"/> + </object> + <int key="connectionID">77</int> + </object> + </object> + <object class="IBMutableOrderedSet" key="objectRecords"> + <object class="NSArray" key="orderedObjects"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="IBObjectRecord"> + <int key="objectID">0</int> + <reference key="object" ref="0"/> + <reference key="children" ref="1000"/> + <nil key="parent"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">-2</int> + <reference key="object" ref="1001"/> + <reference key="parent" ref="0"/> + <string key="objectName">File's Owner</string> + </object> + <object class="IBObjectRecord"> + <int key="objectID">-1</int> + <reference key="object" ref="1003"/> + <reference key="parent" ref="0"/> + <string key="objectName">First Responder</string> + </object> + <object class="IBObjectRecord"> + <int key="objectID">-3</int> + <reference key="object" ref="1004"/> + <reference key="parent" ref="0"/> + <string key="objectName">Application</string> + </object> + <object class="IBObjectRecord"> + <int key="objectID">1</int> + <reference key="object" ref="1005"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="1006"/> + <reference ref="726585754"/> + </object> + <reference key="parent" ref="0"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">2</int> + <reference key="object" ref="1006"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="877383975"/> + </object> + <reference key="parent" ref="1005"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">9</int> + <reference key="object" ref="877383975"/> + <reference key="parent" ref="1006"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">48</int> + <reference key="object" ref="726585754"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="332491395"/> + <reference ref="928383107"/> + <reference ref="818723416"/> + <reference ref="16289946"/> + <reference ref="457655522"/> + </object> + <reference key="parent" ref="1005"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">56</int> + <reference key="object" ref="332491395"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="777930419"/> + </object> + <reference key="parent" ref="726585754"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">40</int> + <reference key="object" ref="777930419"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="663899880"/> + </object> + <reference key="parent" ref="332491395"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">41</int> + <reference key="object" ref="663899880"/> + <reference key="parent" ref="777930419"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">57</int> + <reference key="object" ref="928383107"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="95415629"/> + </object> + <reference key="parent" ref="726585754"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">42</int> + <reference key="object" ref="95415629"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="767612038"/> + </object> + <reference key="parent" ref="928383107"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">43</int> + <reference key="object" ref="767612038"/> + <reference key="parent" ref="95415629"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">58</int> + <reference key="object" ref="818723416"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="35464578"/> + </object> + <reference key="parent" ref="726585754"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">23</int> + <reference key="object" ref="35464578"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="366486485"/> + </object> + <reference key="parent" ref="818723416"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">24</int> + <reference key="object" ref="366486485"/> + <reference key="parent" ref="35464578"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">59</int> + <reference key="object" ref="16289946"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="690456651"/> + </object> + <reference key="parent" ref="726585754"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">10</int> + <reference key="object" ref="690456651"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="1023147716"/> + </object> + <reference key="parent" ref="16289946"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">11</int> + <reference key="object" ref="1023147716"/> + <reference key="parent" ref="690456651"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">60</int> + <reference key="object" ref="457655522"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="128750774"/> + </object> + <reference key="parent" ref="726585754"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">21</int> + <reference key="object" ref="128750774"/> + <reference key="parent" ref="457655522"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">70</int> + <reference key="object" ref="833876351"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="585866018"/> + </object> + <reference key="parent" ref="0"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">71</int> + <reference key="object" ref="585866018"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="841639270"/> + </object> + <reference key="parent" ref="833876351"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">74</int> + <reference key="object" ref="841639270"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="41426839"/> + </object> + <reference key="parent" ref="585866018"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">75</int> + <reference key="object" ref="41426839"/> + <reference key="parent" ref="841639270"/> + </object> + </object> + </object> + <object class="NSMutableDictionary" key="flattenedProperties"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSArray" key="dict.sortedKeys"> + <bool key="EncodedWithXMLCoder">YES</bool> + <string>1.IBEditorWindowLastContentRect</string> + <string>1.IBPluginDependency</string> + <string>1.IBWindowTemplateEditedContentRect</string> + <string>1.NSWindowTemplate.visibleAtLaunch</string> + <string>1.WindowOrigin</string> + <string>1.editorWindowContentRectSynchronizationRect</string> + <string>10.IBPluginDependency</string> + <string>11.IBPluginDependency</string> + <string>2.IBPluginDependency</string> + <string>21.IBPluginDependency</string> + <string>21.IBViewIntegration.shadowBlurRadius</string> + <string>21.IBViewIntegration.shadowColor</string> + <string>21.IBViewIntegration.shadowOffsetHeight</string> + <string>21.IBViewIntegration.shadowOffsetWidth</string> + <string>23.IBPluginDependency</string> + <string>24.IBPluginDependency</string> + <string>40.IBPluginDependency</string> + <string>41.IBPluginDependency</string> + <string>42.IBPluginDependency</string> + <string>43.IBPluginDependency</string> + <string>48.IBEditorWindowLastContentRect</string> + <string>48.IBPluginDependency</string> + <string>56.CustomClassName</string> + <string>57.CustomClassName</string> + <string>58.CustomClassName</string> + <string>70.IBEditorWindowLastContentRect</string> + <string>70.IBPluginDependency</string> + <string>70.IBWindowTemplateEditedContentRect</string> + <string>70.NSWindowTemplate.visibleAtLaunch</string> + <string>71.IBPluginDependency</string> + <string>74.IBPluginDependency</string> + <string>75.IBPluginDependency</string> + <string>9.IBPluginDependency</string> + <string>9.IBViewBoundsToFrameTransform</string> + </object> + <object class="NSMutableArray" key="dict.values"> + <bool key="EncodedWithXMLCoder">YES</bool> + <string>{{404, 157}, {776, 608}}</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>{{404, 157}, {776, 608}}</string> + <integer value="1"/> + <string>{196, 240}</string> + <string>{{202, 428}, {480, 270}}</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <real value="0.0"/> + <reference ref="365730878"/> + <real value="0.0"/> + <real value="0.0"/> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>{{422, 781}, {616, 0}}</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>MBToolbarItem</string> + <string>MBToolbarItem</string> + <string>MBToolbarItem</string> + <string>{{558, 468}, {452, 62}}</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>{{558, 468}, {452, 62}}</string> + <boolean value="NO"/> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <object class="NSAffineTransform"/> + </object> + </object> + <object class="NSMutableDictionary" key="unlocalizedProperties"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference key="dict.sortedKeys" ref="0"/> + <object class="NSMutableArray" key="dict.values"> + <bool key="EncodedWithXMLCoder">YES</bool> + </object> + </object> + <nil key="activeLocalization"/> + <object class="NSMutableDictionary" key="localizations"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference key="dict.sortedKeys" ref="0"/> + <object class="NSMutableArray" key="dict.values"> + <bool key="EncodedWithXMLCoder">YES</bool> + </object> + </object> + <nil key="sourceID"/> + <int key="maxID">77</int> + </object> + <object class="IBClassDescriber" key="IBDocument.Classes"> + <object class="NSMutableArray" key="referencedPartialClassDescriptions"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="IBPartialClassDescription"> + <string key="className">BrowserWindowController</string> + <string key="superclassName">NSWindowController</string> + <object class="NSMutableDictionary" key="actions"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSArray" key="dict.sortedKeys"> + <bool key="EncodedWithXMLCoder">YES</bool> + <string>dumpSourceToConsole:</string> + <string>fetch:</string> + <string>find:</string> + <string>forceRepaint:</string> + <string>goBack:</string> + <string>goForward:</string> + <string>reload:</string> + <string>removeReinsertWebView:</string> + <string>resetZoom:</string> + <string>showHideWebView:</string> + <string>toggleZoomMode:</string> + <string>zoomIn:</string> + <string>zoomOut:</string> + </object> + <object class="NSMutableArray" key="dict.values"> + <bool key="EncodedWithXMLCoder">YES</bool> + <string>id</string> + <string>id</string> + <string>id</string> + <string>id</string> + <string>id</string> + <string>id</string> + <string>id</string> + <string>id</string> + <string>id</string> + <string>id</string> + <string>id</string> + <string>id</string> + <string>id</string> + </object> + </object> + <object class="NSMutableDictionary" key="actionInfosByName"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSArray" key="dict.sortedKeys"> + <bool key="EncodedWithXMLCoder">YES</bool> + <string>dumpSourceToConsole:</string> + <string>fetch:</string> + <string>find:</string> + <string>forceRepaint:</string> + <string>goBack:</string> + <string>goForward:</string> + <string>reload:</string> + <string>removeReinsertWebView:</string> + <string>resetZoom:</string> + <string>showHideWebView:</string> + <string>toggleZoomMode:</string> + <string>zoomIn:</string> + <string>zoomOut:</string> + </object> + <object class="NSMutableArray" key="dict.values"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="IBActionInfo"> + <string key="name">dumpSourceToConsole:</string> + <string key="candidateClassName">id</string> + </object> + <object class="IBActionInfo"> + <string key="name">fetch:</string> + <string key="candidateClassName">id</string> + </object> + <object class="IBActionInfo"> + <string key="name">find:</string> + <string key="candidateClassName">id</string> + </object> + <object class="IBActionInfo"> + <string key="name">forceRepaint:</string> + <string key="candidateClassName">id</string> + </object> + <object class="IBActionInfo"> + <string key="name">goBack:</string> + <string key="candidateClassName">id</string> + </object> + <object class="IBActionInfo"> + <string key="name">goForward:</string> + <string key="candidateClassName">id</string> + </object> + <object class="IBActionInfo"> + <string key="name">reload:</string> + <string key="candidateClassName">id</string> + </object> + <object class="IBActionInfo"> + <string key="name">removeReinsertWebView:</string> + <string key="candidateClassName">id</string> + </object> + <object class="IBActionInfo"> + <string key="name">resetZoom:</string> + <string key="candidateClassName">id</string> + </object> + <object class="IBActionInfo"> + <string key="name">showHideWebView:</string> + <string key="candidateClassName">id</string> + </object> + <object class="IBActionInfo"> + <string key="name">toggleZoomMode:</string> + <string key="candidateClassName">id</string> + </object> + <object class="IBActionInfo"> + <string key="name">zoomIn:</string> + <string key="candidateClassName">id</string> + </object> + <object class="IBActionInfo"> + <string key="name">zoomOut:</string> + <string key="candidateClassName">id</string> + </object> + </object> + </object> + <object class="NSMutableDictionary" key="outlets"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSArray" key="dict.sortedKeys"> + <bool key="EncodedWithXMLCoder">YES</bool> + <string>backButton</string> + <string>containerView</string> + <string>findPanelWindow</string> + <string>forwardButton</string> + <string>progressIndicator</string> + <string>reloadButton</string> + <string>toolbar</string> + <string>urlText</string> + </object> + <object class="NSMutableArray" key="dict.values"> + <bool key="EncodedWithXMLCoder">YES</bool> + <string>NSButton</string> + <string>NSView</string> + <string>NSWindow</string> + <string>NSButton</string> + <string>NSProgressIndicator</string> + <string>NSButton</string> + <string>NSToolbar</string> + <string>NSTextField</string> + </object> + </object> + <object class="NSMutableDictionary" key="toOneOutletInfosByName"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSArray" key="dict.sortedKeys"> + <bool key="EncodedWithXMLCoder">YES</bool> + <string>backButton</string> + <string>containerView</string> + <string>findPanelWindow</string> + <string>forwardButton</string> + <string>progressIndicator</string> + <string>reloadButton</string> + <string>toolbar</string> + <string>urlText</string> + </object> + <object class="NSMutableArray" key="dict.values"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="IBToOneOutletInfo"> + <string key="name">backButton</string> + <string key="candidateClassName">NSButton</string> + </object> + <object class="IBToOneOutletInfo"> + <string key="name">containerView</string> + <string key="candidateClassName">NSView</string> + </object> + <object class="IBToOneOutletInfo"> + <string key="name">findPanelWindow</string> + <string key="candidateClassName">NSWindow</string> + </object> + <object class="IBToOneOutletInfo"> + <string key="name">forwardButton</string> + <string key="candidateClassName">NSButton</string> + </object> + <object class="IBToOneOutletInfo"> + <string key="name">progressIndicator</string> + <string key="candidateClassName">NSProgressIndicator</string> + </object> + <object class="IBToOneOutletInfo"> + <string key="name">reloadButton</string> + <string key="candidateClassName">NSButton</string> + </object> + <object class="IBToOneOutletInfo"> + <string key="name">toolbar</string> + <string key="candidateClassName">NSToolbar</string> + </object> + <object class="IBToOneOutletInfo"> + <string key="name">urlText</string> + <string key="candidateClassName">NSTextField</string> + </object> + </object> + </object> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBProjectSource</string> + <string key="minorKey">mac/BrowserWindowController.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">BrowserWindowController</string> + <string key="superclassName">NSWindowController</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBUserSource</string> + <string key="minorKey"/> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">MBToolbarItem</string> + <string key="superclassName">NSToolbarItem</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBProjectSource</string> + <string key="minorKey">MBToolbarItem.h</string> + </object> + </object> + </object> + <object class="NSMutableArray" key="referencedPartialClassDescriptionsV3.2+"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="IBPartialClassDescription"> + <string key="className">NSActionCell</string> + <string key="superclassName">NSCell</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSActionCell.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSApplication</string> + <string key="superclassName">NSResponder</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier" id="558771426"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSApplication.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSApplication</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier" id="344596456"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSApplicationScripting.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSApplication</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier" id="428409299"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSColorPanel.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSApplication</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSHelpManager.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSApplication</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSPageLayout.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSApplication</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSUserInterfaceItemSearching.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSButton</string> + <string key="superclassName">NSControl</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSButton.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSButtonCell</string> + <string key="superclassName">NSActionCell</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSButtonCell.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSCell</string> + <string key="superclassName">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSCell.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSControl</string> + <string key="superclassName">NSView</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier" id="297186634"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSControl.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSFormatter</string> + <string key="superclassName">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">Foundation.framework/Headers/NSFormatter.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSMenu</string> + <string key="superclassName">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier" id="808053469"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSMenu.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSAccessibility.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <reference key="sourceIdentifier" ref="558771426"/> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <reference key="sourceIdentifier" ref="344596456"/> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <reference key="sourceIdentifier" ref="428409299"/> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <reference key="sourceIdentifier" ref="297186634"/> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSDictionaryController.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSDragging.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSFontManager.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSFontPanel.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSKeyValueBinding.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <reference key="sourceIdentifier" ref="808053469"/> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSNibLoading.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSOutlineView.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSPasteboard.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSSavePanel.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSTableView.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier" id="335804019"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSToolbarItem.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier" id="555757547"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSView.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">Foundation.framework/Headers/NSArchiver.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">Foundation.framework/Headers/NSClassDescription.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">Foundation.framework/Headers/NSError.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">Foundation.framework/Headers/NSFileManager.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">Foundation.framework/Headers/NSKeyValueCoding.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">Foundation.framework/Headers/NSKeyValueObserving.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">Foundation.framework/Headers/NSKeyedArchiver.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">Foundation.framework/Headers/NSObject.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">Foundation.framework/Headers/NSObjectScripting.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">Foundation.framework/Headers/NSPortCoder.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">Foundation.framework/Headers/NSRunLoop.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">Foundation.framework/Headers/NSScriptClassDescription.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">Foundation.framework/Headers/NSScriptKeyValueCoding.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">Foundation.framework/Headers/NSScriptObjectSpecifiers.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">Foundation.framework/Headers/NSScriptWhoseTests.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">Foundation.framework/Headers/NSThread.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">Foundation.framework/Headers/NSURL.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">Foundation.framework/Headers/NSURLConnection.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">Foundation.framework/Headers/NSURLDownload.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSPanel</string> + <string key="superclassName">NSWindow</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSPanel.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSProgressIndicator</string> + <string key="superclassName">NSView</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSProgressIndicator.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSResponder</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSInterfaceStyle.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSResponder</string> + <string key="superclassName">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSResponder.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSSearchField</string> + <string key="superclassName">NSTextField</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSSearchField.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSSearchFieldCell</string> + <string key="superclassName">NSTextFieldCell</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSSearchFieldCell.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSTextField</string> + <string key="superclassName">NSControl</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSTextField.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSTextFieldCell</string> + <string key="superclassName">NSActionCell</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSTextFieldCell.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSToolbar</string> + <string key="superclassName">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSToolbar.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSToolbarItem</string> + <string key="superclassName">NSObject</string> + <reference key="sourceIdentifier" ref="335804019"/> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSView</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSClipView.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSView</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSMenuItem.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSView</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSRulerView.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSView</string> + <string key="superclassName">NSResponder</string> + <reference key="sourceIdentifier" ref="555757547"/> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSWindow</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSDrawer.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSWindow</string> + <string key="superclassName">NSResponder</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSWindow.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSWindow</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSWindowScripting.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSWindowController</string> + <string key="superclassName">NSResponder</string> + <object class="NSMutableDictionary" key="actions"> + <string key="NS.key.0">showWindow:</string> + <string key="NS.object.0">id</string> + </object> + <object class="NSMutableDictionary" key="actionInfosByName"> + <string key="NS.key.0">showWindow:</string> + <object class="IBActionInfo" key="NS.object.0"> + <string key="name">showWindow:</string> + <string key="candidateClassName">id</string> + </object> + </object> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSWindowController.h</string> + </object> + </object> + </object> + </object> + <int key="IBDocument.localizationMode">0</int> + <string key="IBDocument.TargetRuntimeIdentifier">IBCocoaFramework</string> + <object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDevelopmentDependencies"> + <string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3</string> + <integer value="3000" key="NS.object.0"/> + </object> + <bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool> + <string key="IBDocument.LastKnownRelativeProjectPath">../MiniBrowser.xcodeproj</string> + <int key="IBDocument.defaultPropertyAccessControl">3</int> + <object class="NSMutableDictionary" key="IBDocument.LastKnownImageSizes"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSArray" key="dict.sortedKeys"> + <bool key="EncodedWithXMLCoder">YES</bool> + <string>NSGoLeftTemplate</string> + <string>NSGoRightTemplate</string> + <string>NSRefreshTemplate</string> + </object> + <object class="NSMutableArray" key="dict.values"> + <bool key="EncodedWithXMLCoder">YES</bool> + <string>{9, 9}</string> + <string>{9, 9}</string> + <string>{10, 12}</string> + </object> + </object> + </data> +</archive> diff --git a/Tools/MiniBrowser/mac/BrowserWindowController.h b/Tools/MiniBrowser/mac/BrowserWindowController.h new file mode 100644 index 000000000..ddc195084 --- /dev/null +++ b/Tools/MiniBrowser/mac/BrowserWindowController.h @@ -0,0 +1,68 @@ +/* + * Copyright (C) 2010 Apple Inc. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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 APPLE INC. AND ITS 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 APPLE INC. OR ITS 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. + */ + +@interface BrowserWindowController : NSWindowController { + IBOutlet NSProgressIndicator *progressIndicator; + IBOutlet NSButton *reloadButton; + IBOutlet NSButton *backButton; + IBOutlet NSButton *forwardButton; + IBOutlet NSToolbar *toolbar; + IBOutlet NSTextField *urlText; + IBOutlet NSView *containerView; + + IBOutlet NSWindow *findPanelWindow; + + WKContextRef _context; + WKPageGroupRef _pageGroup; + WKView *_webView; + BOOL _zoomTextOnly; +} +- (IBAction)fetch:(id)sender; +- (IBAction)reload:(id)sender; +- (IBAction)forceRepaint:(id)sender; +- (IBAction)goBack:(id)sender; +- (IBAction)goForward:(id)sender; + +- (IBAction)showHideWebView:(id)sender; +- (IBAction)removeReinsertWebView:(id)sender; + +- (id)initWithContext:(WKContextRef)context pageGroup:(WKPageGroupRef)pageGroup; +- (void)loadURLString:(NSString *)urlString; +- (void)applicationTerminating; + +- (IBAction)zoomIn:(id)sender; +- (IBAction)zoomOut:(id)sender; +- (IBAction)resetZoom:(id)sender; +- (BOOL)canZoomIn; +- (BOOL)canZoomOut; +- (BOOL)canResetZoom; + +- (IBAction)toggleZoomMode:(id)sender; + +- (IBAction)dumpSourceToConsole:(id)sender; + +- (IBAction)find:(id)sender; + +@end diff --git a/Tools/MiniBrowser/mac/BrowserWindowController.m b/Tools/MiniBrowser/mac/BrowserWindowController.m new file mode 100644 index 000000000..8ba4eee57 --- /dev/null +++ b/Tools/MiniBrowser/mac/BrowserWindowController.m @@ -0,0 +1,772 @@ +/* + * Copyright (C) 2010 Apple Inc. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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 APPLE INC. AND ITS 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 APPLE INC. OR ITS 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. + */ + +#import "BrowserWindowController.h" + +#import <WebKit2/WKPagePrivate.h> +#import <WebKit2/WKStringCF.h> +#import <WebKit2/WKURLCF.h> +#import <WebKit2/WKViewPrivate.h> + +@interface BrowserWindowController () +- (void)didStartProgress; +- (void)didChangeProgress:(double)value; +- (void)didFinishProgress; +- (void)didStartProvisionalLoadForFrame:(WKFrameRef)frame; +- (void)didCommitLoadForFrame:(WKFrameRef)frame; +- (void)didReceiveServerRedirectForProvisionalLoadForFrame:(WKFrameRef)frame; +- (void)didFailProvisionalLoadWithErrorForFrame:(WKFrameRef)frame; +- (void)didFailLoadWithErrorForFrame:(WKFrameRef)frame; +- (void)didSameDocumentNavigationForFrame:(WKFrameRef)frame; +@end + +@implementation BrowserWindowController + +- (id)initWithContext:(WKContextRef)context pageGroup:(WKPageGroupRef)pageGroup +{ + if ((self = [super initWithWindowNibName:@"BrowserWindow"])) { + _context = WKRetain(context); + _pageGroup = WKRetain(pageGroup); + _zoomTextOnly = NO; + } + + return self; +} + +- (void)dealloc +{ + assert(!_context); + [super dealloc]; +} + +- (IBAction)fetch:(id)sender +{ + CFURLRef cfURL = CFURLCreateWithString(0, (CFStringRef)[urlText stringValue], 0); + if (!cfURL) + return; + + WKURLRef url = WKURLCreateWithCFURL(cfURL); + CFRelease(cfURL); + + WKPageLoadURL(_webView.pageRef, url); + WKRelease(url); +} + +- (IBAction)showHideWebView:(id)sender +{ + BOOL hidden = ![_webView isHidden]; + + [_webView setHidden:hidden]; +} + +- (IBAction)removeReinsertWebView:(id)sender +{ + if ([_webView window]) { + [_webView retain]; + [_webView removeFromSuperview]; + } else { + [containerView addSubview:_webView]; + [_webView release]; + } +} + +- (BOOL)validateMenuItem:(NSMenuItem *)menuItem +{ + SEL action = [menuItem action]; + + if (action == @selector(zoomIn:)) + return [self canZoomIn]; + if (action == @selector(zoomOut:)) + return [self canZoomOut]; + if (action == @selector(resetZoom:)) + return [self canResetZoom]; + + if (action == @selector(showHideWebView:)) + [menuItem setTitle:[_webView isHidden] ? @"Show Web View" : @"Hide Web View"]; + else if (action == @selector(removeReinsertWebView:)) + [menuItem setTitle:[_webView window] ? @"Remove Web View" : @"Insert Web View"]; + else if (action == @selector(toggleZoomMode:)) + [menuItem setState:_zoomTextOnly ? NSOnState : NSOffState]; + return YES; +} + +- (IBAction)reload:(id)sender +{ + WKPageReload(_webView.pageRef); +} + +- (IBAction)forceRepaint:(id)sender +{ + [_webView setNeedsDisplay:YES]; +} + +- (IBAction)goBack:(id)sender +{ + WKPageGoBack(_webView.pageRef); +} + +- (IBAction)goForward:(id)sender +{ + WKPageGoForward(_webView.pageRef); +} + +- (BOOL)validateUserInterfaceItem:(id <NSValidatedUserInterfaceItem>)item +{ + SEL action = [item action]; + + if (action == @selector(goBack:)) + return _webView && WKPageCanGoBack(_webView.pageRef); + + if (action == @selector(goForward:)) + return _webView && WKPageCanGoForward(_webView.pageRef); + + return YES; +} + +- (void)validateToolbar +{ + [toolbar validateVisibleItems]; +} + +- (BOOL)windowShouldClose:(id)sender +{ + LOG(@"windowShouldClose"); + BOOL canCloseImmediately = WKPageTryClose(_webView.pageRef); + return canCloseImmediately; +} + +- (void)windowWillClose:(NSNotification *)notification +{ + WKRelease(_context); + _context = 0; + WKRelease(_pageGroup); + _pageGroup = 0; +} + +- (void)applicationTerminating +{ + WKPageClose(_webView.pageRef); + WKRelease(_webView.pageRef); +} + +#define DefaultMinimumZoomFactor (.5) +#define DefaultMaximumZoomFactor (3.0) +#define DefaultZoomFactorRatio (1.2) + +- (double)currentZoomFactor +{ + return _zoomTextOnly ? WKPageGetTextZoomFactor(_webView.pageRef) : WKPageGetPageZoomFactor(_webView.pageRef); +} + +- (void)setCurrentZoomFactor:(double)factor +{ + _zoomTextOnly ? WKPageSetTextZoomFactor(_webView.pageRef, factor) : WKPageSetPageZoomFactor(_webView.pageRef, factor); +} + +- (BOOL)canZoomIn +{ + return [self currentZoomFactor] * DefaultZoomFactorRatio < DefaultMaximumZoomFactor; +} + +- (void)zoomIn:(id)sender +{ + if (![self canZoomIn]) + return; + + double factor = [self currentZoomFactor] * DefaultZoomFactorRatio; + [self setCurrentZoomFactor:factor]; +} + +- (BOOL)canZoomOut +{ + return [self currentZoomFactor] / DefaultZoomFactorRatio > DefaultMinimumZoomFactor; +} + +- (void)zoomOut:(id)sender +{ + if (![self canZoomIn]) + return; + + double factor = [self currentZoomFactor] / DefaultZoomFactorRatio; + [self setCurrentZoomFactor:factor]; +} + +- (BOOL)canResetZoom +{ + return _zoomTextOnly ? (WKPageGetTextZoomFactor(_webView.pageRef) != 1) : (WKPageGetPageZoomFactor(_webView.pageRef) != 1); +} + +- (void)resetZoom:(id)sender +{ + if (![self canResetZoom]) + return; + + if (_zoomTextOnly) + WKPageSetTextZoomFactor(_webView.pageRef, 1); + else + WKPageSetPageZoomFactor(_webView.pageRef, 1); +} + +- (IBAction)toggleZoomMode:(id)sender +{ + if (_zoomTextOnly) { + _zoomTextOnly = NO; + double currentTextZoom = WKPageGetTextZoomFactor(_webView.pageRef); + WKPageSetPageAndTextZoomFactors(_webView.pageRef, currentTextZoom, 1); + } else { + _zoomTextOnly = YES; + double currentPageZoom = WKPageGetPageZoomFactor(_webView.pageRef); + WKPageSetPageAndTextZoomFactors(_webView.pageRef, 1, currentPageZoom); + } +} + +- (IBAction)dumpSourceToConsole:(id)sender +{ + WKPageGetSourceForFrame_b(_webView.pageRef, WKPageGetMainFrame(_webView.pageRef), ^(WKStringRef result, WKErrorRef error) { + CFStringRef cfResult = WKStringCopyCFString(0, result); + LOG(@"Main frame source\n \"%@\"", (NSString *)cfResult); + CFRelease(cfResult); + }); +} + +// MARK: Loader Client Callbacks + +static void didStartProvisionalLoadForFrame(WKPageRef page, WKFrameRef frame, WKTypeRef userData, const void *clientInfo) +{ + [(BrowserWindowController *)clientInfo didStartProvisionalLoadForFrame:frame]; +} + +static void didReceiveServerRedirectForProvisionalLoadForFrame(WKPageRef page, WKFrameRef frame, WKTypeRef userData, const void *clientInfo) +{ + [(BrowserWindowController *)clientInfo didReceiveServerRedirectForProvisionalLoadForFrame:frame]; +} + +static void didFailProvisionalLoadWithErrorForFrame(WKPageRef page, WKFrameRef frame, WKErrorRef error, WKTypeRef userData, const void *clientInfo) +{ + [(BrowserWindowController *)clientInfo didFailProvisionalLoadWithErrorForFrame:frame]; +} + +static void didCommitLoadForFrame(WKPageRef page, WKFrameRef frame, WKTypeRef userData, const void *clientInfo) +{ + [(BrowserWindowController *)clientInfo didCommitLoadForFrame:frame]; +} + +static void didFinishDocumentLoadForFrame(WKPageRef page, WKFrameRef frame, WKTypeRef userData, const void *clientInfo) +{ + LOG(@"didFinishDocumentLoadForFrame"); +} + +static void didFinishLoadForFrame(WKPageRef page, WKFrameRef frame, WKTypeRef userData, const void *clientInfo) +{ + LOG(@"didFinishLoadForFrame"); +} + +static void didFailLoadWithErrorForFrame(WKPageRef page, WKFrameRef frame, WKErrorRef error, WKTypeRef userData, const void *clientInfo) +{ + [(BrowserWindowController *)clientInfo didFailLoadWithErrorForFrame:frame]; +} + +static void didSameDocumentNavigationForFrame(WKPageRef page, WKFrameRef frame, WKSameDocumentNavigationType type, WKTypeRef userData, const void *clientInfo) +{ + [(BrowserWindowController *)clientInfo didSameDocumentNavigationForFrame:frame]; +} + +static void didReceiveTitleForFrame(WKPageRef page, WKStringRef title, WKFrameRef frame, WKTypeRef userData, const void *clientInfo) +{ + CFStringRef cfTitle = WKStringCopyCFString(0, title); + LOG(@"didReceiveTitleForFrame \"%@\"", (NSString *)cfTitle); + CFRelease(cfTitle); +} + +static void didFirstLayoutForFrame(WKPageRef page, WKFrameRef frame, WKTypeRef userData, const void *clientInfo) +{ + LOG(@"didFirstLayoutForFrame"); +} + +static void didFirstVisuallyNonEmptyLayoutForFrame(WKPageRef page, WKFrameRef frame, WKTypeRef userData, const void *clientInfo) +{ + LOG(@"didFirstVisuallyNonEmptyLayoutForFrame"); +} + +static void didRemoveFrameFromHierarchy(WKPageRef page, WKFrameRef frame, WKTypeRef userData, const void *clientInfo) +{ + LOG(@"didRemoveFrameFromHierarchy"); +} + +static void didDisplayInsecureContentForFrame(WKPageRef page, WKFrameRef frame, WKTypeRef userData, const void *clientInfo) +{ + LOG(@"didDisplayInsecureContentForFrame"); +} + +static void didRunInsecureContentForFrame(WKPageRef page, WKFrameRef frame, WKTypeRef userData, const void *clientInfo) +{ + LOG(@"didRunInsecureContentForFrame"); +} + +static void didDetectXSSForFrame(WKPageRef page, WKFrameRef frame, WKTypeRef userData, const void *clientInfo) +{ + LOG(@"didDetectXSSForFrame"); +} + +static void didStartProgress(WKPageRef page, const void *clientInfo) +{ + [(BrowserWindowController *)clientInfo didStartProgress]; +} + +static void didChangeProgress(WKPageRef page, const void *clientInfo) +{ + [(BrowserWindowController *)clientInfo didChangeProgress:WKPageGetEstimatedProgress(page)]; +} + +static void didFinishProgress(WKPageRef page, const void *clientInfo) +{ + [(BrowserWindowController *)clientInfo didFinishProgress]; +} + +static void didBecomeUnresponsive(WKPageRef page, const void *clientInfo) +{ + LOG(@"didBecomeUnresponsive"); +} + +static void didBecomeResponsive(WKPageRef page, const void *clientInfo) +{ + LOG(@"didBecomeResponsive"); +} + +static void processDidExit(WKPageRef page, const void *clientInfo) +{ + LOG(@"processDidExit"); +} + +static void didChangeBackForwardList(WKPageRef page, WKBackForwardListItemRef addedItem, WKArrayRef removedItems, const void *clientInfo) +{ + [(BrowserWindowController *)clientInfo validateToolbar]; +} + +// MARK: Policy Client Callbacks + +static void decidePolicyForNavigationAction(WKPageRef page, WKFrameRef frame, WKFrameNavigationType navigationType, WKEventModifiers modifiers, WKEventMouseButton mouseButton, WKURLRequestRef request, WKFramePolicyListenerRef listener, WKTypeRef userData, const void* clientInfo) +{ + LOG(@"decidePolicyForNavigationAction"); + WKFramePolicyListenerUse(listener); +} + +static void decidePolicyForNewWindowAction(WKPageRef page, WKFrameRef frame, WKFrameNavigationType navigationType, WKEventModifiers modifiers, WKEventMouseButton mouseButton, WKURLRequestRef request, WKStringRef frameName, WKFramePolicyListenerRef listener, WKTypeRef userData, const void* clientInfo) +{ + LOG(@"decidePolicyForNewWindowAction"); + WKFramePolicyListenerUse(listener); +} + +static void decidePolicyForResponse(WKPageRef page, WKFrameRef frame, WKURLResponseRef response, WKURLRequestRef request, WKFramePolicyListenerRef listener, WKTypeRef userData, const void* clientInfo) +{ + WKFramePolicyListenerUse(listener); +} + +// MARK: UI Client Callbacks + +static WKPageRef createNewPage(WKPageRef page, WKURLRequestRef request, WKDictionaryRef features, WKEventModifiers modifiers, WKEventMouseButton button, const void* clientInfo) +{ + LOG(@"createNewPage"); + BrowserWindowController *controller = [[BrowserWindowController alloc] initWithContext:WKPageGetContext(page) pageGroup:WKPageGetPageGroup(page)]; + [controller loadWindow]; + + return controller->_webView.pageRef; +} + +static void showPage(WKPageRef page, const void *clientInfo) +{ + LOG(@"showPage"); + [[(BrowserWindowController *)clientInfo window] orderFront:nil]; +} + +static void closePage(WKPageRef page, const void *clientInfo) +{ + LOG(@"closePage"); + WKPageClose(page); + [[(BrowserWindowController *)clientInfo window] close]; + WKRelease(page); +} + +static void runJavaScriptAlert(WKPageRef page, WKStringRef message, WKFrameRef frame, const void* clientInfo) +{ + NSAlert* alert = [[NSAlert alloc] init]; + + WKURLRef wkURL = WKFrameCopyURL(frame); + CFURLRef cfURL = WKURLCopyCFURL(0, wkURL); + WKRelease(wkURL); + + [alert setMessageText:[NSString stringWithFormat:@"JavaScript alert dialog from %@.", [(NSURL *)cfURL absoluteString]]]; + CFRelease(cfURL); + + CFStringRef cfMessage = WKStringCopyCFString(0, message); + [alert setInformativeText:(NSString *)cfMessage]; + CFRelease(cfMessage); + + [alert addButtonWithTitle:@"OK"]; + + [alert runModal]; + [alert release]; +} + +static bool runJavaScriptConfirm(WKPageRef page, WKStringRef message, WKFrameRef frame, const void* clientInfo) +{ + NSAlert* alert = [[NSAlert alloc] init]; + + WKURLRef wkURL = WKFrameCopyURL(frame); + CFURLRef cfURL = WKURLCopyCFURL(0, wkURL); + WKRelease(wkURL); + + [alert setMessageText:[NSString stringWithFormat:@"JavaScript confirm dialog from %@.", [(NSURL *)cfURL absoluteString]]]; + CFRelease(cfURL); + + CFStringRef cfMessage = WKStringCopyCFString(0, message); + [alert setInformativeText:(NSString *)cfMessage]; + CFRelease(cfMessage); + + [alert addButtonWithTitle:@"OK"]; + [alert addButtonWithTitle:@"Cancel"]; + + NSInteger button = [alert runModal]; + [alert release]; + + return button == NSAlertFirstButtonReturn; +} + +static WKStringRef runJavaScriptPrompt(WKPageRef page, WKStringRef message, WKStringRef defaultValue, WKFrameRef frame, const void* clientInfo) +{ + NSAlert* alert = [[NSAlert alloc] init]; + + WKURLRef wkURL = WKFrameCopyURL(frame); + CFURLRef cfURL = WKURLCopyCFURL(0, wkURL); + WKRelease(wkURL); + + [alert setMessageText:[NSString stringWithFormat:@"JavaScript prompt dialog from %@.", [(NSURL *)cfURL absoluteString]]]; + CFRelease(cfURL); + + CFStringRef cfMessage = WKStringCopyCFString(0, message); + [alert setInformativeText:(NSString *)cfMessage]; + CFRelease(cfMessage); + + [alert addButtonWithTitle:@"OK"]; + [alert addButtonWithTitle:@"Cancel"]; + + NSTextField* input = [[NSTextField alloc] initWithFrame:NSMakeRect(0, 0, 200, 24)]; + CFStringRef cfDefaultValue = WKStringCopyCFString(0, defaultValue); + [input setStringValue:(NSString *)cfDefaultValue]; + CFRelease(cfDefaultValue); + + [alert setAccessoryView:input]; + + NSInteger button = [alert runModal]; + + NSString* result = nil; + if (button == NSAlertFirstButtonReturn) { + [input validateEditing]; + result = [input stringValue]; + } + + [alert release]; + + if (!result) + return 0; + return WKStringCreateWithCFString((CFStringRef)result); +} + +static void setStatusText(WKPageRef page, WKStringRef text, const void* clientInfo) +{ + LOG(@"setStatusText"); +} + +static void mouseDidMoveOverElement(WKPageRef page, WKHitTestResultRef hitTestResult, WKEventModifiers modifiers, WKTypeRef userData, const void *clientInfo) +{ + LOG(@"mouseDidMoveOverElement"); +} + +static WKRect getWindowFrame(WKPageRef page, const void* clientInfo) +{ + NSRect rect = [[(BrowserWindowController *)clientInfo window] frame]; + WKRect wkRect; + wkRect.origin.x = rect.origin.x; + wkRect.origin.y = rect.origin.y; + wkRect.size.width = rect.size.width; + wkRect.size.height = rect.size.height; + return wkRect; +} + +static void setWindowFrame(WKPageRef page, WKRect rect, const void* clientInfo) +{ + [[(BrowserWindowController *)clientInfo window] setFrame:NSMakeRect(rect.origin.x, rect.origin.y, rect.size.width, rect.size.height) display:YES]; +} + +static bool runBeforeUnloadConfirmPanel(WKPageRef page, WKStringRef message, WKFrameRef frame, const void* clientInfo) +{ + NSAlert *alert = [[NSAlert alloc] init]; + + WKURLRef wkURL = WKFrameCopyURL(frame); + CFURLRef cfURL = WKURLCopyCFURL(0, wkURL); + WKRelease(wkURL); + + [alert setMessageText:[NSString stringWithFormat:@"BeforeUnload confirm dialog from %@.", [(NSURL *)cfURL absoluteString]]]; + CFRelease(cfURL); + + CFStringRef cfMessage = WKStringCopyCFString(0, message); + [alert setInformativeText:(NSString *)cfMessage]; + CFRelease(cfMessage); + + [alert addButtonWithTitle:@"OK"]; + [alert addButtonWithTitle:@"Cancel"]; + + NSInteger button = [alert runModal]; + [alert release]; + + return button == NSAlertFirstButtonReturn; +} + +static void runOpenPanel(WKPageRef page, WKFrameRef frame, WKOpenPanelParametersRef parameters, WKOpenPanelResultListenerRef listener, const void* clientInfo) +{ + NSOpenPanel *openPanel = [NSOpenPanel openPanel]; + [openPanel setAllowsMultipleSelection:WKOpenPanelParametersGetAllowsMultipleFiles(parameters)]; + + WKRetain(listener); + + [openPanel beginSheetModalForWindow:[(BrowserWindowController *)clientInfo window] completionHandler:^(NSInteger result) { + if (result == NSFileHandlingPanelOKButton) { + WKMutableArrayRef fileURLs = WKMutableArrayCreate(); + + NSURL *nsURL; + for (nsURL in [openPanel URLs]) { + WKURLRef wkURL = WKURLCreateWithCFURL((CFURLRef)nsURL); + WKArrayAppendItem(fileURLs, wkURL); + WKRelease(wkURL); + } + + WKOpenPanelResultListenerChooseFiles(listener, fileURLs); + + WKRelease(fileURLs); + } else + WKOpenPanelResultListenerCancel(listener); + + WKRelease(listener); + }]; +} + +- (void)awakeFromNib +{ + _webView = [[WKView alloc] initWithFrame:[containerView bounds] contextRef:_context pageGroupRef:_pageGroup]; + + [_webView setAutoresizingMask:(NSViewWidthSizable | NSViewHeightSizable)]; + [containerView addSubview:_webView]; + + WKPageLoaderClient loadClient = { + kWKPageLoaderClientCurrentVersion, + self, /* clientInfo */ + didStartProvisionalLoadForFrame, + didReceiveServerRedirectForProvisionalLoadForFrame, + didFailProvisionalLoadWithErrorForFrame, + didCommitLoadForFrame, + didFinishDocumentLoadForFrame, + didFinishLoadForFrame, + didFailLoadWithErrorForFrame, + didSameDocumentNavigationForFrame, + didReceiveTitleForFrame, + didFirstLayoutForFrame, + didFirstVisuallyNonEmptyLayoutForFrame, + didRemoveFrameFromHierarchy, + didDisplayInsecureContentForFrame, + didRunInsecureContentForFrame, + 0, // canAuthenticateAgainstProtectionSpaceInFrame + 0, // didReceiveAuthenticationChallengeInFrame + didStartProgress, + didChangeProgress, + didFinishProgress, + didBecomeUnresponsive, + didBecomeResponsive, + processDidExit, + didChangeBackForwardList, + 0, // shouldGoToBackForwardItem + 0, // didFailToInitializePlugin + didDetectXSSForFrame, + }; + WKPageSetPageLoaderClient(_webView.pageRef, &loadClient); + + WKPagePolicyClient policyClient = { + kWKPagePolicyClientCurrentVersion, + self, /* clientInfo */ + decidePolicyForNavigationAction, + decidePolicyForNewWindowAction, + decidePolicyForResponse, + 0 /* unableToImplementPolicy */ + }; + WKPageSetPagePolicyClient(_webView.pageRef, &policyClient); + + WKPageUIClient uiClient = { + kWKPageUIClientCurrentVersion, + self, /* clientInfo */ + 0, /* createNewPage_deprecatedForUseWithV0 */ + showPage, + closePage, + 0, /* takeFocus */ + 0, /* focus */ + 0, /* unfocus */ + runJavaScriptAlert, + runJavaScriptConfirm, + runJavaScriptPrompt, + setStatusText, + 0, /* mouseDidMoveOverElement_deprecatedForUseWithV0 */ + 0, /* missingPluginButtonClicked */ + 0, /* didNotHandleKeyEvent */ + 0, /* didNotHandleWheelEvent */ + 0, /* toolbarsAreVisible */ + 0, /* setToolbarsAreVisible */ + 0, /* menuBarIsVisible */ + 0, /* setMenuBarIsVisible */ + 0, /* statusBarIsVisible */ + 0, /* setStatusBarIsVisible */ + 0, /* isResizable */ + 0, /* setIsResizable */ + getWindowFrame, + setWindowFrame, + runBeforeUnloadConfirmPanel, + 0, /* didDraw */ + 0, /* pageDidScroll */ + 0, /* exceededDatabaseQuota */ + runOpenPanel, + 0, /* decidePolicyForGeolocationPermissionRequest */ + 0, // headerHeight + 0, // footerHeight + 0, // drawHeader + 0, // drawFooter + 0, // printFrame + 0, // showModal + 0, // didCompleteRubberBandForMainFrame + 0, // saveDataToFileInDownloadsFolder + 0, // shouldInterruptJavaScript + createNewPage, + mouseDidMoveOverElement, + 0, // decidePolicyForNotificationPermissionRequest + }; + WKPageSetPageUIClient(_webView.pageRef, &uiClient); +} + +- (void)didStartProgress +{ + [progressIndicator setDoubleValue:0.0]; + [progressIndicator setHidden:NO]; +} + +- (void)didChangeProgress:(double)value +{ + [progressIndicator setDoubleValue:value]; +} + +- (void)didFinishProgress +{ + [progressIndicator setHidden:YES]; + [progressIndicator setDoubleValue:1.0]; +} + +- (void)updateProvisionalURLForFrame:(WKFrameRef)frame +{ + static WKURLRef emptyURL = 0; + if (!emptyURL) + emptyURL = WKURLCreateWithUTF8CString(""); + + WKURLRef url = WKFrameCopyProvisionalURL(frame); + + if (!url) + return; + + if (WKURLIsEqual(url, emptyURL)) { + WKRelease(url); + return; + } + + CFURLRef cfSourceURL = WKURLCopyCFURL(0, url); + WKRelease(url); + + [urlText setStringValue:(NSString*)CFURLGetString(cfSourceURL)]; + CFRelease(cfSourceURL); +} + +- (void)didStartProvisionalLoadForFrame:(WKFrameRef)frame +{ + if (!WKFrameIsMainFrame(frame)) + return; + + [self updateProvisionalURLForFrame:frame]; +} + +- (void)didReceiveServerRedirectForProvisionalLoadForFrame:(WKFrameRef)frame +{ + if (!WKFrameIsMainFrame(frame)) + return; + + [self updateProvisionalURLForFrame:frame]; +} + +- (void)didFailProvisionalLoadWithErrorForFrame:(WKFrameRef)frame +{ + if (!WKFrameIsMainFrame(frame)) + return; + + [self updateProvisionalURLForFrame:frame]; +} + +- (void)didFailLoadWithErrorForFrame:(WKFrameRef)frame +{ + if (!WKFrameIsMainFrame(frame)) + return; + + [self updateProvisionalURLForFrame:frame]; +} + +- (void)didSameDocumentNavigationForFrame:(WKFrameRef)frame +{ +} + +- (void)didCommitLoadForFrame:(WKFrameRef)frame +{ +} + +- (void)loadURLString:(NSString *)urlString +{ + // FIXME: We shouldn't have to set the url text here. + [urlText setStringValue:urlString]; + [self fetch:nil]; +} + +- (IBAction)performFindPanelAction:(id)sender +{ + [findPanelWindow makeKeyAndOrderFront:sender]; +} + +- (IBAction)find:(id)sender +{ + WKStringRef string = WKStringCreateWithCFString((CFStringRef)[sender stringValue]); + + WKPageFindString(_webView.pageRef, string, kWKFindOptionsCaseInsensitive | kWKFindOptionsWrapAround | kWKFindOptionsShowFindIndicator | kWKFindOptionsShowOverlay, 100); +} + +@end diff --git a/Tools/MiniBrowser/mac/Info.plist b/Tools/MiniBrowser/mac/Info.plist new file mode 100644 index 000000000..7564a7eb7 --- /dev/null +++ b/Tools/MiniBrowser/mac/Info.plist @@ -0,0 +1,32 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<dict> + <key>CFBundleDevelopmentRegion</key> + <string>English</string> + <key>CFBundleExecutable</key> + <string>${EXECUTABLE_NAME}</string> + <key>CFBundleIconFile</key> + <string>MiniBrowser</string> + <key>CFBundleIdentifier</key> + <string>com.yourcompany.${PRODUCT_NAME:rfc1034identifier}</string> + <key>CFBundleInfoDictionaryVersion</key> + <string>6.0</string> + <key>CFBundleName</key> + <string>${PRODUCT_NAME}</string> + <key>CFBundlePackageType</key> + <string>APPL</string> + <key>CFBundleSignature</key> + <string>????</string> + <key>CFBundleShortVersionString</key> + <string>1.0</string> + <key>LSMinimumSystemVersion</key> + <string>${MACOSX_DEPLOYMENT_TARGET}</string> + <key>CFBundleVersion</key> + <string>1</string> + <key>NSMainNibFile</key> + <string>MainMenu</string> + <key>NSPrincipalClass</key> + <string>NSApplication</string> +</dict> +</plist> diff --git a/Tools/MiniBrowser/mac/MainMenu.xib b/Tools/MiniBrowser/mac/MainMenu.xib new file mode 100644 index 000000000..634f615b4 --- /dev/null +++ b/Tools/MiniBrowser/mac/MainMenu.xib @@ -0,0 +1,3623 @@ +<?xml version="1.0" encoding="UTF-8"?> +<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="7.10"> + <data> + <int key="IBDocument.SystemTarget">1060</int> + <string key="IBDocument.SystemVersion">10F569</string> + <string key="IBDocument.InterfaceBuilderVersion">788</string> + <string key="IBDocument.AppKitVersion">1038.29</string> + <string key="IBDocument.HIToolboxVersion">461.00</string> + <object class="NSMutableDictionary" key="IBDocument.PluginVersions"> + <string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin</string> + <string key="NS.object.0">788</string> + </object> + <object class="NSMutableArray" key="IBDocument.EditedObjectIDs"> + <bool key="EncodedWithXMLCoder">YES</bool> + <integer value="535"/> + </object> + <object class="NSArray" key="IBDocument.PluginDependencies"> + <bool key="EncodedWithXMLCoder">YES</bool> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + </object> + <object class="NSMutableDictionary" key="IBDocument.Metadata"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSArray" key="dict.sortedKeys" id="0"> + <bool key="EncodedWithXMLCoder">YES</bool> + </object> + <object class="NSMutableArray" key="dict.values"> + <bool key="EncodedWithXMLCoder">YES</bool> + </object> + </object> + <object class="NSMutableArray" key="IBDocument.RootObjects" id="1048"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSCustomObject" id="1021"> + <string key="NSClassName">NSApplication</string> + </object> + <object class="NSCustomObject" id="1014"> + <string key="NSClassName">FirstResponder</string> + </object> + <object class="NSCustomObject" id="1050"> + <string key="NSClassName">NSApplication</string> + </object> + <object class="NSMenu" id="649796088"> + <string key="NSTitle">AMainMenu</string> + <object class="NSMutableArray" key="NSMenuItems"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSMenuItem" id="694149608"> + <reference key="NSMenu" ref="649796088"/> + <string key="NSTitle">MiniBrowser</string> + <string key="NSKeyEquiv"/> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <object class="NSCustomResource" key="NSOnImage" id="35465992"> + <string key="NSClassName">NSImage</string> + <string key="NSResourceName">NSMenuCheckmark</string> + </object> + <object class="NSCustomResource" key="NSMixedImage" id="502551668"> + <string key="NSClassName">NSImage</string> + <string key="NSResourceName">NSMenuMixedState</string> + </object> + <string key="NSAction">submenuAction:</string> + <object class="NSMenu" key="NSSubmenu" id="110575045"> + <string key="NSTitle">MiniBrowser</string> + <object class="NSMutableArray" key="NSMenuItems"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSMenuItem" id="238522557"> + <reference key="NSMenu" ref="110575045"/> + <string key="NSTitle">About MiniBrowser</string> + <string key="NSKeyEquiv"/> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="35465992"/> + <reference key="NSMixedImage" ref="502551668"/> + </object> + <object class="NSMenuItem" id="304266470"> + <reference key="NSMenu" ref="110575045"/> + <bool key="NSIsDisabled">YES</bool> + <bool key="NSIsSeparator">YES</bool> + <string key="NSTitle"/> + <string key="NSKeyEquiv"/> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="35465992"/> + <reference key="NSMixedImage" ref="502551668"/> + </object> + <object class="NSMenuItem" id="609285721"> + <reference key="NSMenu" ref="110575045"/> + <string key="NSTitle">Preferences…</string> + <string key="NSKeyEquiv">,</string> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="35465992"/> + <reference key="NSMixedImage" ref="502551668"/> + </object> + <object class="NSMenuItem" id="481834944"> + <reference key="NSMenu" ref="110575045"/> + <bool key="NSIsDisabled">YES</bool> + <bool key="NSIsSeparator">YES</bool> + <string key="NSTitle"/> + <string key="NSKeyEquiv"/> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="35465992"/> + <reference key="NSMixedImage" ref="502551668"/> + </object> + <object class="NSMenuItem" id="1046388886"> + <reference key="NSMenu" ref="110575045"/> + <string key="NSTitle">Services</string> + <string key="NSKeyEquiv"/> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="35465992"/> + <reference key="NSMixedImage" ref="502551668"/> + <string key="NSAction">submenuAction:</string> + <object class="NSMenu" key="NSSubmenu" id="752062318"> + <string key="NSTitle">Services</string> + <object class="NSMutableArray" key="NSMenuItems"> + <bool key="EncodedWithXMLCoder">YES</bool> + </object> + <string key="NSName">_NSServicesMenu</string> + </object> + </object> + <object class="NSMenuItem" id="646227648"> + <reference key="NSMenu" ref="110575045"/> + <bool key="NSIsDisabled">YES</bool> + <bool key="NSIsSeparator">YES</bool> + <string key="NSTitle"/> + <string key="NSKeyEquiv"/> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="35465992"/> + <reference key="NSMixedImage" ref="502551668"/> + </object> + <object class="NSMenuItem" id="755159360"> + <reference key="NSMenu" ref="110575045"/> + <string key="NSTitle">Hide MiniBrowser</string> + <string key="NSKeyEquiv">h</string> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="35465992"/> + <reference key="NSMixedImage" ref="502551668"/> + </object> + <object class="NSMenuItem" id="342932134"> + <reference key="NSMenu" ref="110575045"/> + <string key="NSTitle">Hide Others</string> + <string key="NSKeyEquiv">h</string> + <int key="NSKeyEquivModMask">1572864</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="35465992"/> + <reference key="NSMixedImage" ref="502551668"/> + </object> + <object class="NSMenuItem" id="908899353"> + <reference key="NSMenu" ref="110575045"/> + <string key="NSTitle">Show All</string> + <string key="NSKeyEquiv"/> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="35465992"/> + <reference key="NSMixedImage" ref="502551668"/> + </object> + <object class="NSMenuItem" id="1056857174"> + <reference key="NSMenu" ref="110575045"/> + <bool key="NSIsDisabled">YES</bool> + <bool key="NSIsSeparator">YES</bool> + <string key="NSTitle"/> + <string key="NSKeyEquiv"/> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="35465992"/> + <reference key="NSMixedImage" ref="502551668"/> + </object> + <object class="NSMenuItem" id="632727374"> + <reference key="NSMenu" ref="110575045"/> + <string key="NSTitle">Quit MiniBrowser</string> + <string key="NSKeyEquiv">q</string> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="35465992"/> + <reference key="NSMixedImage" ref="502551668"/> + </object> + </object> + <string key="NSName">_NSAppleMenu</string> + </object> + </object> + <object class="NSMenuItem" id="379814623"> + <reference key="NSMenu" ref="649796088"/> + <string key="NSTitle">File</string> + <string key="NSKeyEquiv"/> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="35465992"/> + <reference key="NSMixedImage" ref="502551668"/> + <string key="NSAction">submenuAction:</string> + <object class="NSMenu" key="NSSubmenu" id="720053764"> + <string key="NSTitle">File</string> + <object class="NSMutableArray" key="NSMenuItems"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSMenuItem" id="705341025"> + <reference key="NSMenu" ref="720053764"/> + <string key="NSTitle">New Window</string> + <string key="NSKeyEquiv">n</string> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="35465992"/> + <reference key="NSMixedImage" ref="502551668"/> + </object> + <object class="NSMenuItem" id="722745758"> + <reference key="NSMenu" ref="720053764"/> + <string key="NSTitle">Open…</string> + <string key="NSKeyEquiv">o</string> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="35465992"/> + <reference key="NSMixedImage" ref="502551668"/> + </object> + <object class="NSMenuItem" id="1025936716"> + <reference key="NSMenu" ref="720053764"/> + <string key="NSTitle">Open Recent</string> + <string key="NSKeyEquiv"/> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="35465992"/> + <reference key="NSMixedImage" ref="502551668"/> + <string key="NSAction">submenuAction:</string> + <object class="NSMenu" key="NSSubmenu" id="1065607017"> + <string key="NSTitle">Open Recent</string> + <object class="NSMutableArray" key="NSMenuItems"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSMenuItem" id="759406840"> + <reference key="NSMenu" ref="1065607017"/> + <string key="NSTitle">Clear Menu</string> + <string key="NSKeyEquiv"/> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="35465992"/> + <reference key="NSMixedImage" ref="502551668"/> + </object> + </object> + <string key="NSName">_NSRecentDocumentsMenu</string> + </object> + </object> + <object class="NSMenuItem" id="425164168"> + <reference key="NSMenu" ref="720053764"/> + <bool key="NSIsDisabled">YES</bool> + <bool key="NSIsSeparator">YES</bool> + <string key="NSTitle"/> + <string key="NSKeyEquiv"/> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="35465992"/> + <reference key="NSMixedImage" ref="502551668"/> + </object> + <object class="NSMenuItem" id="776162233"> + <reference key="NSMenu" ref="720053764"/> + <string key="NSTitle">Close</string> + <string key="NSKeyEquiv">w</string> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="35465992"/> + <reference key="NSMixedImage" ref="502551668"/> + </object> + <object class="NSMenuItem" id="1023925487"> + <reference key="NSMenu" ref="720053764"/> + <string key="NSTitle">Save</string> + <string key="NSKeyEquiv">s</string> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="35465992"/> + <reference key="NSMixedImage" ref="502551668"/> + </object> + <object class="NSMenuItem" id="117038363"> + <reference key="NSMenu" ref="720053764"/> + <string key="NSTitle">Save As…</string> + <string key="NSKeyEquiv">S</string> + <int key="NSKeyEquivModMask">1179648</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="35465992"/> + <reference key="NSMixedImage" ref="502551668"/> + </object> + <object class="NSMenuItem" id="579971712"> + <reference key="NSMenu" ref="720053764"/> + <string key="NSTitle">Revert to Saved</string> + <string key="NSKeyEquiv"/> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="35465992"/> + <reference key="NSMixedImage" ref="502551668"/> + </object> + <object class="NSMenuItem" id="1010469920"> + <reference key="NSMenu" ref="720053764"/> + <bool key="NSIsDisabled">YES</bool> + <bool key="NSIsSeparator">YES</bool> + <string key="NSTitle"/> + <string key="NSKeyEquiv"/> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="35465992"/> + <reference key="NSMixedImage" ref="502551668"/> + </object> + <object class="NSMenuItem" id="294629803"> + <reference key="NSMenu" ref="720053764"/> + <string key="NSTitle">Page Setup...</string> + <string key="NSKeyEquiv">P</string> + <int key="NSKeyEquivModMask">1179648</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="35465992"/> + <reference key="NSMixedImage" ref="502551668"/> + <string key="NSToolTip"/> + </object> + <object class="NSMenuItem" id="49223823"> + <reference key="NSMenu" ref="720053764"/> + <string key="NSTitle">Print…</string> + <string key="NSKeyEquiv">p</string> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="35465992"/> + <reference key="NSMixedImage" ref="502551668"/> + </object> + </object> + </object> + </object> + <object class="NSMenuItem" id="952259628"> + <reference key="NSMenu" ref="649796088"/> + <string key="NSTitle">Edit</string> + <string key="NSKeyEquiv"/> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="35465992"/> + <reference key="NSMixedImage" ref="502551668"/> + <string key="NSAction">submenuAction:</string> + <object class="NSMenu" key="NSSubmenu" id="789758025"> + <string key="NSTitle">Edit</string> + <object class="NSMutableArray" key="NSMenuItems"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSMenuItem" id="1058277027"> + <reference key="NSMenu" ref="789758025"/> + <string key="NSTitle">Undo</string> + <string key="NSKeyEquiv">z</string> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="35465992"/> + <reference key="NSMixedImage" ref="502551668"/> + </object> + <object class="NSMenuItem" id="790794224"> + <reference key="NSMenu" ref="789758025"/> + <string key="NSTitle">Redo</string> + <string key="NSKeyEquiv">Z</string> + <int key="NSKeyEquivModMask">1179648</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="35465992"/> + <reference key="NSMixedImage" ref="502551668"/> + </object> + <object class="NSMenuItem" id="1040322652"> + <reference key="NSMenu" ref="789758025"/> + <bool key="NSIsDisabled">YES</bool> + <bool key="NSIsSeparator">YES</bool> + <string key="NSTitle"/> + <string key="NSKeyEquiv"/> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="35465992"/> + <reference key="NSMixedImage" ref="502551668"/> + </object> + <object class="NSMenuItem" id="296257095"> + <reference key="NSMenu" ref="789758025"/> + <string key="NSTitle">Cut</string> + <string key="NSKeyEquiv">x</string> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="35465992"/> + <reference key="NSMixedImage" ref="502551668"/> + </object> + <object class="NSMenuItem" id="860595796"> + <reference key="NSMenu" ref="789758025"/> + <string key="NSTitle">Copy</string> + <string key="NSKeyEquiv">c</string> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="35465992"/> + <reference key="NSMixedImage" ref="502551668"/> + </object> + <object class="NSMenuItem" id="29853731"> + <reference key="NSMenu" ref="789758025"/> + <string key="NSTitle">Paste</string> + <string key="NSKeyEquiv">v</string> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="35465992"/> + <reference key="NSMixedImage" ref="502551668"/> + </object> + <object class="NSMenuItem" id="82994268"> + <reference key="NSMenu" ref="789758025"/> + <string key="NSTitle">Paste and Match Style</string> + <string key="NSKeyEquiv">V</string> + <int key="NSKeyEquivModMask">1572864</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="35465992"/> + <reference key="NSMixedImage" ref="502551668"/> + </object> + <object class="NSMenuItem" id="437104165"> + <reference key="NSMenu" ref="789758025"/> + <string key="NSTitle">Delete</string> + <string key="NSKeyEquiv"/> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="35465992"/> + <reference key="NSMixedImage" ref="502551668"/> + </object> + <object class="NSMenuItem" id="583158037"> + <reference key="NSMenu" ref="789758025"/> + <string key="NSTitle">Select All</string> + <string key="NSKeyEquiv">a</string> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="35465992"/> + <reference key="NSMixedImage" ref="502551668"/> + </object> + <object class="NSMenuItem" id="212016141"> + <reference key="NSMenu" ref="789758025"/> + <bool key="NSIsDisabled">YES</bool> + <bool key="NSIsSeparator">YES</bool> + <string key="NSTitle"/> + <string key="NSKeyEquiv"/> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="35465992"/> + <reference key="NSMixedImage" ref="502551668"/> + </object> + <object class="NSMenuItem" id="892235320"> + <reference key="NSMenu" ref="789758025"/> + <string key="NSTitle">Find</string> + <string key="NSKeyEquiv"/> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="35465992"/> + <reference key="NSMixedImage" ref="502551668"/> + <string key="NSAction">submenuAction:</string> + <object class="NSMenu" key="NSSubmenu" id="963351320"> + <string key="NSTitle">Find</string> + <object class="NSMutableArray" key="NSMenuItems"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSMenuItem" id="447796847"> + <reference key="NSMenu" ref="963351320"/> + <string key="NSTitle">Find…</string> + <string key="NSKeyEquiv">f</string> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="35465992"/> + <reference key="NSMixedImage" ref="502551668"/> + <int key="NSTag">1</int> + </object> + <object class="NSMenuItem" id="326711663"> + <reference key="NSMenu" ref="963351320"/> + <string key="NSTitle">Find Next</string> + <string key="NSKeyEquiv">g</string> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="35465992"/> + <reference key="NSMixedImage" ref="502551668"/> + <int key="NSTag">2</int> + </object> + <object class="NSMenuItem" id="270902937"> + <reference key="NSMenu" ref="963351320"/> + <string key="NSTitle">Find Previous</string> + <string key="NSKeyEquiv">G</string> + <int key="NSKeyEquivModMask">1179648</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="35465992"/> + <reference key="NSMixedImage" ref="502551668"/> + <int key="NSTag">3</int> + </object> + <object class="NSMenuItem" id="159080638"> + <reference key="NSMenu" ref="963351320"/> + <string key="NSTitle">Use Selection for Find</string> + <string key="NSKeyEquiv">e</string> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="35465992"/> + <reference key="NSMixedImage" ref="502551668"/> + <int key="NSTag">7</int> + </object> + <object class="NSMenuItem" id="88285865"> + <reference key="NSMenu" ref="963351320"/> + <string key="NSTitle">Jump to Selection</string> + <string key="NSKeyEquiv">j</string> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="35465992"/> + <reference key="NSMixedImage" ref="502551668"/> + </object> + </object> + </object> + </object> + <object class="NSMenuItem" id="972420730"> + <reference key="NSMenu" ref="789758025"/> + <string key="NSTitle">Spelling and Grammar</string> + <string key="NSKeyEquiv"/> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="35465992"/> + <reference key="NSMixedImage" ref="502551668"/> + <string key="NSAction">submenuAction:</string> + <object class="NSMenu" key="NSSubmenu" id="769623530"> + <string key="NSTitle">Spelling and Grammar</string> + <object class="NSMutableArray" key="NSMenuItems"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSMenuItem" id="679648819"> + <reference key="NSMenu" ref="769623530"/> + <string key="NSTitle">Show Spelling and Grammar</string> + <string key="NSKeyEquiv">:</string> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="35465992"/> + <reference key="NSMixedImage" ref="502551668"/> + </object> + <object class="NSMenuItem" id="96193923"> + <reference key="NSMenu" ref="769623530"/> + <string key="NSTitle">Check Document Now</string> + <string key="NSKeyEquiv">;</string> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="35465992"/> + <reference key="NSMixedImage" ref="502551668"/> + </object> + <object class="NSMenuItem" id="859480356"> + <reference key="NSMenu" ref="769623530"/> + <bool key="NSIsDisabled">YES</bool> + <bool key="NSIsSeparator">YES</bool> + <string key="NSTitle"/> + <string key="NSKeyEquiv"/> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="35465992"/> + <reference key="NSMixedImage" ref="502551668"/> + </object> + <object class="NSMenuItem" id="948374510"> + <reference key="NSMenu" ref="769623530"/> + <string key="NSTitle">Check Spelling While Typing</string> + <string key="NSKeyEquiv"/> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="35465992"/> + <reference key="NSMixedImage" ref="502551668"/> + </object> + <object class="NSMenuItem" id="967646866"> + <reference key="NSMenu" ref="769623530"/> + <string key="NSTitle">Check Grammar With Spelling</string> + <string key="NSKeyEquiv"/> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="35465992"/> + <reference key="NSMixedImage" ref="502551668"/> + </object> + <object class="NSMenuItem" id="795346622"> + <reference key="NSMenu" ref="769623530"/> + <string key="NSTitle">Correct Spelling Automatically</string> + <string key="NSKeyEquiv"/> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="35465992"/> + <reference key="NSMixedImage" ref="502551668"/> + </object> + </object> + </object> + </object> + <object class="NSMenuItem" id="507821607"> + <reference key="NSMenu" ref="789758025"/> + <string key="NSTitle">Substitutions</string> + <string key="NSKeyEquiv"/> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="35465992"/> + <reference key="NSMixedImage" ref="502551668"/> + <string key="NSAction">submenuAction:</string> + <object class="NSMenu" key="NSSubmenu" id="698887838"> + <string key="NSTitle">Substitutions</string> + <object class="NSMutableArray" key="NSMenuItems"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSMenuItem" id="65139061"> + <reference key="NSMenu" ref="698887838"/> + <string key="NSTitle">Show Substitutions</string> + <string key="NSKeyEquiv"/> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="35465992"/> + <reference key="NSMixedImage" ref="502551668"/> + </object> + <object class="NSMenuItem" id="19036812"> + <reference key="NSMenu" ref="698887838"/> + <bool key="NSIsDisabled">YES</bool> + <bool key="NSIsSeparator">YES</bool> + <string key="NSTitle"/> + <string key="NSKeyEquiv"/> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="35465992"/> + <reference key="NSMixedImage" ref="502551668"/> + </object> + <object class="NSMenuItem" id="605118523"> + <reference key="NSMenu" ref="698887838"/> + <string key="NSTitle">Smart Copy/Paste</string> + <string key="NSKeyEquiv">f</string> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="35465992"/> + <reference key="NSMixedImage" ref="502551668"/> + <int key="NSTag">1</int> + </object> + <object class="NSMenuItem" id="197661976"> + <reference key="NSMenu" ref="698887838"/> + <string key="NSTitle">Smart Quotes</string> + <string key="NSKeyEquiv">g</string> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="35465992"/> + <reference key="NSMixedImage" ref="502551668"/> + <int key="NSTag">2</int> + </object> + <object class="NSMenuItem" id="672708820"> + <reference key="NSMenu" ref="698887838"/> + <string key="NSTitle">Smart Dashes</string> + <string key="NSKeyEquiv"/> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="35465992"/> + <reference key="NSMixedImage" ref="502551668"/> + </object> + <object class="NSMenuItem" id="708854459"> + <reference key="NSMenu" ref="698887838"/> + <string key="NSTitle">Smart Links</string> + <string key="NSKeyEquiv">G</string> + <int key="NSKeyEquivModMask">1179648</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="35465992"/> + <reference key="NSMixedImage" ref="502551668"/> + <int key="NSTag">3</int> + </object> + <object class="NSMenuItem" id="537092702"> + <reference key="NSMenu" ref="698887838"/> + <string key="NSTitle">Text Replacement</string> + <string key="NSKeyEquiv"/> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="35465992"/> + <reference key="NSMixedImage" ref="502551668"/> + </object> + </object> + </object> + </object> + <object class="NSMenuItem" id="288088188"> + <reference key="NSMenu" ref="789758025"/> + <string key="NSTitle">Transformations</string> + <string key="NSKeyEquiv"/> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="35465992"/> + <reference key="NSMixedImage" ref="502551668"/> + <string key="NSAction">submenuAction:</string> + <object class="NSMenu" key="NSSubmenu" id="579392910"> + <string key="NSTitle">Transformations</string> + <object class="NSMutableArray" key="NSMenuItems"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSMenuItem" id="1060694897"> + <reference key="NSMenu" ref="579392910"/> + <string key="NSTitle">Make Upper Case</string> + <string key="NSKeyEquiv"/> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="35465992"/> + <reference key="NSMixedImage" ref="502551668"/> + </object> + <object class="NSMenuItem" id="879586729"> + <reference key="NSMenu" ref="579392910"/> + <string key="NSTitle">Make Lower Case</string> + <string key="NSKeyEquiv"/> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="35465992"/> + <reference key="NSMixedImage" ref="502551668"/> + </object> + <object class="NSMenuItem" id="56570060"> + <reference key="NSMenu" ref="579392910"/> + <string key="NSTitle">Capitalize</string> + <string key="NSKeyEquiv"/> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="35465992"/> + <reference key="NSMixedImage" ref="502551668"/> + </object> + </object> + </object> + </object> + <object class="NSMenuItem" id="676164635"> + <reference key="NSMenu" ref="789758025"/> + <string key="NSTitle">Speech</string> + <string key="NSKeyEquiv"/> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="35465992"/> + <reference key="NSMixedImage" ref="502551668"/> + <string key="NSAction">submenuAction:</string> + <object class="NSMenu" key="NSSubmenu" id="785027613"> + <string key="NSTitle">Speech</string> + <object class="NSMutableArray" key="NSMenuItems"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSMenuItem" id="731782645"> + <reference key="NSMenu" ref="785027613"/> + <string key="NSTitle">Start Speaking</string> + <string key="NSKeyEquiv"/> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="35465992"/> + <reference key="NSMixedImage" ref="502551668"/> + </object> + <object class="NSMenuItem" id="680220178"> + <reference key="NSMenu" ref="785027613"/> + <string key="NSTitle">Stop Speaking</string> + <string key="NSKeyEquiv"/> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="35465992"/> + <reference key="NSMixedImage" ref="502551668"/> + </object> + </object> + </object> + </object> + </object> + </object> + </object> + <object class="NSMenuItem" id="586577488"> + <reference key="NSMenu" ref="649796088"/> + <string key="NSTitle">View</string> + <string key="NSKeyEquiv"/> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="35465992"/> + <reference key="NSMixedImage" ref="502551668"/> + <string key="NSAction">submenuAction:</string> + <object class="NSMenu" key="NSSubmenu" id="466310130"> + <string key="NSTitle">View</string> + <object class="NSMutableArray" key="NSMenuItems"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSMenuItem" id="102151532"> + <reference key="NSMenu" ref="466310130"/> + <string key="NSTitle">Show Toolbar</string> + <string key="NSKeyEquiv">t</string> + <int key="NSKeyEquivModMask">1572864</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="35465992"/> + <reference key="NSMixedImage" ref="502551668"/> + </object> + <object class="NSMenuItem" id="237841660"> + <reference key="NSMenu" ref="466310130"/> + <string key="NSTitle">Customize Toolbar…</string> + <string key="NSKeyEquiv"/> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="35465992"/> + <reference key="NSMixedImage" ref="502551668"/> + </object> + <object class="NSMenuItem" id="1025359947"> + <reference key="NSMenu" ref="466310130"/> + <bool key="NSIsDisabled">YES</bool> + <bool key="NSIsSeparator">YES</bool> + <string key="NSTitle"/> + <string key="NSKeyEquiv"/> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="35465992"/> + <reference key="NSMixedImage" ref="502551668"/> + </object> + <object class="NSMenuItem" id="694544109"> + <reference key="NSMenu" ref="466310130"/> + <string key="NSTitle">Zoom In</string> + <string key="NSKeyEquiv">+</string> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="35465992"/> + <reference key="NSMixedImage" ref="502551668"/> + </object> + <object class="NSMenuItem" id="943694335"> + <reference key="NSMenu" ref="466310130"/> + <string key="NSTitle">Zoom Out</string> + <string key="NSKeyEquiv">-</string> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="35465992"/> + <reference key="NSMixedImage" ref="502551668"/> + </object> + <object class="NSMenuItem" id="863984465"> + <reference key="NSMenu" ref="466310130"/> + <string key="NSTitle">Reset Zoom</string> + <string key="NSKeyEquiv">0</string> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="35465992"/> + <reference key="NSMixedImage" ref="502551668"/> + </object> + <object class="NSMenuItem" id="138443116"> + <reference key="NSMenu" ref="466310130"/> + <string key="NSTitle">Zoom Text Only</string> + <string key="NSKeyEquiv"/> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="35465992"/> + <reference key="NSMixedImage" ref="502551668"/> + </object> + </object> + </object> + </object> + <object class="NSMenuItem" id="713487014"> + <reference key="NSMenu" ref="649796088"/> + <string key="NSTitle">Window</string> + <string key="NSKeyEquiv"/> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="35465992"/> + <reference key="NSMixedImage" ref="502551668"/> + <string key="NSAction">submenuAction:</string> + <object class="NSMenu" key="NSSubmenu" id="835318025"> + <string key="NSTitle">Window</string> + <object class="NSMutableArray" key="NSMenuItems"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSMenuItem" id="1011231497"> + <reference key="NSMenu" ref="835318025"/> + <string key="NSTitle">Minimize</string> + <string key="NSKeyEquiv">m</string> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="35465992"/> + <reference key="NSMixedImage" ref="502551668"/> + </object> + <object class="NSMenuItem" id="575023229"> + <reference key="NSMenu" ref="835318025"/> + <string key="NSTitle">Zoom</string> + <string key="NSKeyEquiv"/> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="35465992"/> + <reference key="NSMixedImage" ref="502551668"/> + </object> + <object class="NSMenuItem" id="299356726"> + <reference key="NSMenu" ref="835318025"/> + <bool key="NSIsDisabled">YES</bool> + <bool key="NSIsSeparator">YES</bool> + <string key="NSTitle"/> + <string key="NSKeyEquiv"/> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="35465992"/> + <reference key="NSMixedImage" ref="502551668"/> + </object> + <object class="NSMenuItem" id="625202149"> + <reference key="NSMenu" ref="835318025"/> + <string key="NSTitle">Bring All to Front</string> + <string key="NSKeyEquiv"/> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="35465992"/> + <reference key="NSMixedImage" ref="502551668"/> + </object> + </object> + <string key="NSName">_NSWindowsMenu</string> + </object> + </object> + <object class="NSMenuItem" id="448692316"> + <reference key="NSMenu" ref="649796088"/> + <string key="NSTitle">Help</string> + <string key="NSKeyEquiv"/> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="35465992"/> + <reference key="NSMixedImage" ref="502551668"/> + <string key="NSAction">submenuAction:</string> + <object class="NSMenu" key="NSSubmenu" id="992780483"> + <string key="NSTitle">Help</string> + <object class="NSMutableArray" key="NSMenuItems"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSMenuItem" id="105068016"> + <reference key="NSMenu" ref="992780483"/> + <string key="NSTitle">MiniBrowser Help</string> + <string key="NSKeyEquiv">?</string> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="35465992"/> + <reference key="NSMixedImage" ref="502551668"/> + </object> + </object> + <string key="NSName">_NSHelpMenu</string> + </object> + </object> + <object class="NSMenuItem" id="816668511"> + <reference key="NSMenu" ref="649796088"/> + <string key="NSTitle">Debug</string> + <string key="NSKeyEquiv"/> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="35465992"/> + <reference key="NSMixedImage" ref="502551668"/> + <string key="NSAction">submenuAction:</string> + <object class="NSMenu" key="NSSubmenu" id="865232259"> + <string key="NSTitle">Debug</string> + <object class="NSMutableArray" key="NSMenuItems"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSMenuItem" id="878165919"> + <reference key="NSMenu" ref="865232259"/> + <string key="NSTitle">Force Repaint</string> + <string key="NSKeyEquiv">r</string> + <int key="NSKeyEquivModMask">1572864</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="35465992"/> + <reference key="NSMixedImage" ref="502551668"/> + </object> + <object class="NSMenuItem" id="137933275"> + <reference key="NSMenu" ref="865232259"/> + <string key="NSTitle">Hide Web View</string> + <string key="NSKeyEquiv"/> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="35465992"/> + <reference key="NSMixedImage" ref="502551668"/> + </object> + <object class="NSMenuItem" id="1027125810"> + <reference key="NSMenu" ref="865232259"/> + <string key="NSTitle">Remove Web View</string> + <string key="NSKeyEquiv"/> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="35465992"/> + <reference key="NSMixedImage" ref="502551668"/> + </object> + <object class="NSMenuItem" id="864702084"> + <reference key="NSMenu" ref="865232259"/> + <bool key="NSIsDisabled">YES</bool> + <bool key="NSIsSeparator">YES</bool> + <string key="NSTitle"/> + <string key="NSKeyEquiv"/> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="35465992"/> + <reference key="NSMixedImage" ref="502551668"/> + </object> + <object class="NSMenuItem" id="208343368"> + <reference key="NSMenu" ref="865232259"/> + <string key="NSTitle">Show Statistics Window</string> + <string key="NSKeyEquiv"/> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="35465992"/> + <reference key="NSMixedImage" ref="502551668"/> + </object> + <object class="NSMenuItem" id="162978490"> + <reference key="NSMenu" ref="865232259"/> + <bool key="NSIsDisabled">YES</bool> + <bool key="NSIsSeparator">YES</bool> + <string key="NSTitle"/> + <string key="NSKeyEquiv"/> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="35465992"/> + <reference key="NSMixedImage" ref="502551668"/> + </object> + <object class="NSMenuItem" id="340689355"> + <reference key="NSMenu" ref="865232259"/> + <string key="NSTitle">Process Model</string> + <string key="NSKeyEquiv"/> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="35465992"/> + <reference key="NSMixedImage" ref="502551668"/> + <string key="NSAction">submenuAction:</string> + <object class="NSMenu" key="NSSubmenu" id="935112943"> + <string key="NSTitle">Process Model</string> + <object class="NSMutableArray" key="NSMenuItems"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSMenuItem" id="993856752"> + <reference key="NSMenu" ref="935112943"/> + <string key="NSTitle">Shared Process</string> + <string key="NSKeyEquiv"/> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="35465992"/> + <reference key="NSMixedImage" ref="502551668"/> + </object> + <object class="NSMenuItem" id="516840223"> + <reference key="NSMenu" ref="935112943"/> + <string key="NSTitle">Shared Thread</string> + <string key="NSKeyEquiv"/> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="35465992"/> + <reference key="NSMixedImage" ref="502551668"/> + </object> + </object> + </object> + </object> + <object class="NSMenuItem" id="377902755"> + <reference key="NSMenu" ref="865232259"/> + <bool key="NSIsDisabled">YES</bool> + <bool key="NSIsSeparator">YES</bool> + <string key="NSTitle"/> + <string key="NSKeyEquiv"/> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="35465992"/> + <reference key="NSMixedImage" ref="502551668"/> + </object> + <object class="NSMenuItem" id="191469404"> + <reference key="NSMenu" ref="865232259"/> + <string key="NSTitle">Dump Source To Console</string> + <string key="NSKeyEquiv"/> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="35465992"/> + <reference key="NSMixedImage" ref="502551668"/> + </object> + </object> + </object> + </object> + </object> + <string key="NSName">_NSMainMenu</string> + </object> + <object class="NSCustomObject" id="976324537"> + <string key="NSClassName">BrowserAppDelegate</string> + </object> + <object class="NSCustomObject" id="755631768"> + <string key="NSClassName">NSFontManager</string> + </object> + </object> + <object class="IBObjectContainer" key="IBDocument.Objects"> + <object class="NSMutableArray" key="connectionRecords"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">performMiniaturize:</string> + <reference key="source" ref="1014"/> + <reference key="destination" ref="1011231497"/> + </object> + <int key="connectionID">37</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">arrangeInFront:</string> + <reference key="source" ref="1014"/> + <reference key="destination" ref="625202149"/> + </object> + <int key="connectionID">39</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">print:</string> + <reference key="source" ref="1014"/> + <reference key="destination" ref="49223823"/> + </object> + <int key="connectionID">86</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">runPageLayout:</string> + <reference key="source" ref="1014"/> + <reference key="destination" ref="294629803"/> + </object> + <int key="connectionID">87</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">clearRecentDocuments:</string> + <reference key="source" ref="1014"/> + <reference key="destination" ref="759406840"/> + </object> + <int key="connectionID">127</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">orderFrontStandardAboutPanel:</string> + <reference key="source" ref="1021"/> + <reference key="destination" ref="238522557"/> + </object> + <int key="connectionID">142</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">performClose:</string> + <reference key="source" ref="1014"/> + <reference key="destination" ref="776162233"/> + </object> + <int key="connectionID">193</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">toggleContinuousSpellChecking:</string> + <reference key="source" ref="1014"/> + <reference key="destination" ref="948374510"/> + </object> + <int key="connectionID">222</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">undo:</string> + <reference key="source" ref="1014"/> + <reference key="destination" ref="1058277027"/> + </object> + <int key="connectionID">223</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">copy:</string> + <reference key="source" ref="1014"/> + <reference key="destination" ref="860595796"/> + </object> + <int key="connectionID">224</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">checkSpelling:</string> + <reference key="source" ref="1014"/> + <reference key="destination" ref="96193923"/> + </object> + <int key="connectionID">225</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">paste:</string> + <reference key="source" ref="1014"/> + <reference key="destination" ref="29853731"/> + </object> + <int key="connectionID">226</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">stopSpeaking:</string> + <reference key="source" ref="1014"/> + <reference key="destination" ref="680220178"/> + </object> + <int key="connectionID">227</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">cut:</string> + <reference key="source" ref="1014"/> + <reference key="destination" ref="296257095"/> + </object> + <int key="connectionID">228</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">showGuessPanel:</string> + <reference key="source" ref="1014"/> + <reference key="destination" ref="679648819"/> + </object> + <int key="connectionID">230</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">redo:</string> + <reference key="source" ref="1014"/> + <reference key="destination" ref="790794224"/> + </object> + <int key="connectionID">231</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">selectAll:</string> + <reference key="source" ref="1014"/> + <reference key="destination" ref="583158037"/> + </object> + <int key="connectionID">232</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">startSpeaking:</string> + <reference key="source" ref="1014"/> + <reference key="destination" ref="731782645"/> + </object> + <int key="connectionID">233</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">delete:</string> + <reference key="source" ref="1014"/> + <reference key="destination" ref="437104165"/> + </object> + <int key="connectionID">235</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">performZoom:</string> + <reference key="source" ref="1014"/> + <reference key="destination" ref="575023229"/> + </object> + <int key="connectionID">240</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">performFindPanelAction:</string> + <reference key="source" ref="1014"/> + <reference key="destination" ref="447796847"/> + </object> + <int key="connectionID">241</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">centerSelectionInVisibleArea:</string> + <reference key="source" ref="1014"/> + <reference key="destination" ref="88285865"/> + </object> + <int key="connectionID">245</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">toggleGrammarChecking:</string> + <reference key="source" ref="1014"/> + <reference key="destination" ref="967646866"/> + </object> + <int key="connectionID">347</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">toggleSmartInsertDelete:</string> + <reference key="source" ref="1014"/> + <reference key="destination" ref="605118523"/> + </object> + <int key="connectionID">355</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">toggleAutomaticQuoteSubstitution:</string> + <reference key="source" ref="1014"/> + <reference key="destination" ref="197661976"/> + </object> + <int key="connectionID">356</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">toggleAutomaticLinkDetection:</string> + <reference key="source" ref="1014"/> + <reference key="destination" ref="708854459"/> + </object> + <int key="connectionID">357</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">saveDocument:</string> + <reference key="source" ref="1014"/> + <reference key="destination" ref="1023925487"/> + </object> + <int key="connectionID">362</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">saveDocumentAs:</string> + <reference key="source" ref="1014"/> + <reference key="destination" ref="117038363"/> + </object> + <int key="connectionID">363</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">revertDocumentToSaved:</string> + <reference key="source" ref="1014"/> + <reference key="destination" ref="579971712"/> + </object> + <int key="connectionID">364</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">runToolbarCustomizationPalette:</string> + <reference key="source" ref="1014"/> + <reference key="destination" ref="237841660"/> + </object> + <int key="connectionID">365</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">toggleToolbarShown:</string> + <reference key="source" ref="1014"/> + <reference key="destination" ref="102151532"/> + </object> + <int key="connectionID">366</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">hide:</string> + <reference key="source" ref="1014"/> + <reference key="destination" ref="755159360"/> + </object> + <int key="connectionID">367</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">hideOtherApplications:</string> + <reference key="source" ref="1014"/> + <reference key="destination" ref="342932134"/> + </object> + <int key="connectionID">368</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">unhideAllApplications:</string> + <reference key="source" ref="1014"/> + <reference key="destination" ref="908899353"/> + </object> + <int key="connectionID">370</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">openDocument:</string> + <reference key="source" ref="1014"/> + <reference key="destination" ref="722745758"/> + </object> + <int key="connectionID">374</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">terminate:</string> + <reference key="source" ref="1050"/> + <reference key="destination" ref="632727374"/> + </object> + <int key="connectionID">449</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">toggleAutomaticSpellingCorrection:</string> + <reference key="source" ref="1014"/> + <reference key="destination" ref="795346622"/> + </object> + <int key="connectionID">456</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">orderFrontSubstitutionsPanel:</string> + <reference key="source" ref="1014"/> + <reference key="destination" ref="65139061"/> + </object> + <int key="connectionID">458</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">toggleAutomaticDashSubstitution:</string> + <reference key="source" ref="1014"/> + <reference key="destination" ref="672708820"/> + </object> + <int key="connectionID">461</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">toggleAutomaticTextReplacement:</string> + <reference key="source" ref="1014"/> + <reference key="destination" ref="537092702"/> + </object> + <int key="connectionID">463</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">uppercaseWord:</string> + <reference key="source" ref="1014"/> + <reference key="destination" ref="1060694897"/> + </object> + <int key="connectionID">464</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">capitalizeWord:</string> + <reference key="source" ref="1014"/> + <reference key="destination" ref="56570060"/> + </object> + <int key="connectionID">467</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">lowercaseWord:</string> + <reference key="source" ref="1014"/> + <reference key="destination" ref="879586729"/> + </object> + <int key="connectionID">468</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">pasteAsPlainText:</string> + <reference key="source" ref="1014"/> + <reference key="destination" ref="82994268"/> + </object> + <int key="connectionID">486</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">performFindPanelAction:</string> + <reference key="source" ref="1014"/> + <reference key="destination" ref="326711663"/> + </object> + <int key="connectionID">487</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">performFindPanelAction:</string> + <reference key="source" ref="1014"/> + <reference key="destination" ref="270902937"/> + </object> + <int key="connectionID">488</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">performFindPanelAction:</string> + <reference key="source" ref="1014"/> + <reference key="destination" ref="159080638"/> + </object> + <int key="connectionID">489</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">showHelp:</string> + <reference key="source" ref="1014"/> + <reference key="destination" ref="105068016"/> + </object> + <int key="connectionID">493</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBOutletConnection" key="connection"> + <string key="label">delegate</string> + <reference key="source" ref="1021"/> + <reference key="destination" ref="976324537"/> + </object> + <int key="connectionID">495</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">newWindow:</string> + <reference key="source" ref="1014"/> + <reference key="destination" ref="705341025"/> + </object> + <int key="connectionID">533</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">setSharedProcessProcessModel:</string> + <reference key="source" ref="976324537"/> + <reference key="destination" ref="993856752"/> + </object> + <int key="connectionID">543</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">setSharedThreadProcessModel:</string> + <reference key="source" ref="976324537"/> + <reference key="destination" ref="516840223"/> + </object> + <int key="connectionID">544</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">forceRepaint:</string> + <reference key="source" ref="1014"/> + <reference key="destination" ref="878165919"/> + </object> + <int key="connectionID">547</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">showHideWebView:</string> + <reference key="source" ref="1014"/> + <reference key="destination" ref="137933275"/> + </object> + <int key="connectionID">549</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">removeReinsertWebView:</string> + <reference key="source" ref="1014"/> + <reference key="destination" ref="1027125810"/> + </object> + <int key="connectionID">551</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">showStatisticsWindow:</string> + <reference key="source" ref="976324537"/> + <reference key="destination" ref="208343368"/> + </object> + <int key="connectionID">554</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">zoomIn:</string> + <reference key="source" ref="1014"/> + <reference key="destination" ref="694544109"/> + </object> + <int key="connectionID">559</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">zoomOut:</string> + <reference key="source" ref="1014"/> + <reference key="destination" ref="943694335"/> + </object> + <int key="connectionID">560</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">resetZoom:</string> + <reference key="source" ref="1014"/> + <reference key="destination" ref="863984465"/> + </object> + <int key="connectionID">561</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">toggleZoomMode:</string> + <reference key="source" ref="1014"/> + <reference key="destination" ref="138443116"/> + </object> + <int key="connectionID">564</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">dumpSourceToConsole:</string> + <reference key="source" ref="1014"/> + <reference key="destination" ref="191469404"/> + </object> + <int key="connectionID">567</int> + </object> + </object> + <object class="IBMutableOrderedSet" key="objectRecords"> + <object class="NSArray" key="orderedObjects"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="IBObjectRecord"> + <int key="objectID">0</int> + <reference key="object" ref="0"/> + <reference key="children" ref="1048"/> + <nil key="parent"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">-2</int> + <reference key="object" ref="1021"/> + <reference key="parent" ref="0"/> + <string key="objectName">File's Owner</string> + </object> + <object class="IBObjectRecord"> + <int key="objectID">-1</int> + <reference key="object" ref="1014"/> + <reference key="parent" ref="0"/> + <string key="objectName">First Responder</string> + </object> + <object class="IBObjectRecord"> + <int key="objectID">-3</int> + <reference key="object" ref="1050"/> + <reference key="parent" ref="0"/> + <string key="objectName">Application</string> + </object> + <object class="IBObjectRecord"> + <int key="objectID">29</int> + <reference key="object" ref="649796088"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="713487014"/> + <reference ref="694149608"/> + <reference ref="952259628"/> + <reference ref="379814623"/> + <reference ref="586577488"/> + <reference ref="448692316"/> + <reference ref="816668511"/> + </object> + <reference key="parent" ref="0"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">19</int> + <reference key="object" ref="713487014"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="835318025"/> + </object> + <reference key="parent" ref="649796088"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">56</int> + <reference key="object" ref="694149608"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="110575045"/> + </object> + <reference key="parent" ref="649796088"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">217</int> + <reference key="object" ref="952259628"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="789758025"/> + </object> + <reference key="parent" ref="649796088"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">83</int> + <reference key="object" ref="379814623"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="720053764"/> + </object> + <reference key="parent" ref="649796088"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">81</int> + <reference key="object" ref="720053764"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="1023925487"/> + <reference ref="117038363"/> + <reference ref="49223823"/> + <reference ref="722745758"/> + <reference ref="705341025"/> + <reference ref="1025936716"/> + <reference ref="294629803"/> + <reference ref="776162233"/> + <reference ref="425164168"/> + <reference ref="579971712"/> + <reference ref="1010469920"/> + </object> + <reference key="parent" ref="379814623"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">75</int> + <reference key="object" ref="1023925487"/> + <reference key="parent" ref="720053764"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">80</int> + <reference key="object" ref="117038363"/> + <reference key="parent" ref="720053764"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">78</int> + <reference key="object" ref="49223823"/> + <reference key="parent" ref="720053764"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">72</int> + <reference key="object" ref="722745758"/> + <reference key="parent" ref="720053764"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">82</int> + <reference key="object" ref="705341025"/> + <reference key="parent" ref="720053764"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">124</int> + <reference key="object" ref="1025936716"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="1065607017"/> + </object> + <reference key="parent" ref="720053764"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">77</int> + <reference key="object" ref="294629803"/> + <reference key="parent" ref="720053764"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">73</int> + <reference key="object" ref="776162233"/> + <reference key="parent" ref="720053764"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">79</int> + <reference key="object" ref="425164168"/> + <reference key="parent" ref="720053764"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">112</int> + <reference key="object" ref="579971712"/> + <reference key="parent" ref="720053764"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">74</int> + <reference key="object" ref="1010469920"/> + <reference key="parent" ref="720053764"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">125</int> + <reference key="object" ref="1065607017"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="759406840"/> + </object> + <reference key="parent" ref="1025936716"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">126</int> + <reference key="object" ref="759406840"/> + <reference key="parent" ref="1065607017"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">205</int> + <reference key="object" ref="789758025"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="437104165"/> + <reference ref="583158037"/> + <reference ref="1058277027"/> + <reference ref="212016141"/> + <reference ref="296257095"/> + <reference ref="29853731"/> + <reference ref="860595796"/> + <reference ref="1040322652"/> + <reference ref="790794224"/> + <reference ref="892235320"/> + <reference ref="972420730"/> + <reference ref="676164635"/> + <reference ref="507821607"/> + <reference ref="288088188"/> + <reference ref="82994268"/> + </object> + <reference key="parent" ref="952259628"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">202</int> + <reference key="object" ref="437104165"/> + <reference key="parent" ref="789758025"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">198</int> + <reference key="object" ref="583158037"/> + <reference key="parent" ref="789758025"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">207</int> + <reference key="object" ref="1058277027"/> + <reference key="parent" ref="789758025"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">214</int> + <reference key="object" ref="212016141"/> + <reference key="parent" ref="789758025"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">199</int> + <reference key="object" ref="296257095"/> + <reference key="parent" ref="789758025"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">203</int> + <reference key="object" ref="29853731"/> + <reference key="parent" ref="789758025"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">197</int> + <reference key="object" ref="860595796"/> + <reference key="parent" ref="789758025"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">206</int> + <reference key="object" ref="1040322652"/> + <reference key="parent" ref="789758025"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">215</int> + <reference key="object" ref="790794224"/> + <reference key="parent" ref="789758025"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">218</int> + <reference key="object" ref="892235320"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="963351320"/> + </object> + <reference key="parent" ref="789758025"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">216</int> + <reference key="object" ref="972420730"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="769623530"/> + </object> + <reference key="parent" ref="789758025"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">200</int> + <reference key="object" ref="769623530"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="948374510"/> + <reference ref="96193923"/> + <reference ref="679648819"/> + <reference ref="967646866"/> + <reference ref="859480356"/> + <reference ref="795346622"/> + </object> + <reference key="parent" ref="972420730"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">219</int> + <reference key="object" ref="948374510"/> + <reference key="parent" ref="769623530"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">201</int> + <reference key="object" ref="96193923"/> + <reference key="parent" ref="769623530"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">204</int> + <reference key="object" ref="679648819"/> + <reference key="parent" ref="769623530"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">220</int> + <reference key="object" ref="963351320"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="270902937"/> + <reference ref="88285865"/> + <reference ref="159080638"/> + <reference ref="326711663"/> + <reference ref="447796847"/> + </object> + <reference key="parent" ref="892235320"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">213</int> + <reference key="object" ref="270902937"/> + <reference key="parent" ref="963351320"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">210</int> + <reference key="object" ref="88285865"/> + <reference key="parent" ref="963351320"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">221</int> + <reference key="object" ref="159080638"/> + <reference key="parent" ref="963351320"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">208</int> + <reference key="object" ref="326711663"/> + <reference key="parent" ref="963351320"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">209</int> + <reference key="object" ref="447796847"/> + <reference key="parent" ref="963351320"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">57</int> + <reference key="object" ref="110575045"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="238522557"/> + <reference ref="755159360"/> + <reference ref="908899353"/> + <reference ref="632727374"/> + <reference ref="646227648"/> + <reference ref="609285721"/> + <reference ref="481834944"/> + <reference ref="304266470"/> + <reference ref="1046388886"/> + <reference ref="1056857174"/> + <reference ref="342932134"/> + </object> + <reference key="parent" ref="694149608"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">58</int> + <reference key="object" ref="238522557"/> + <reference key="parent" ref="110575045"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">134</int> + <reference key="object" ref="755159360"/> + <reference key="parent" ref="110575045"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">150</int> + <reference key="object" ref="908899353"/> + <reference key="parent" ref="110575045"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">136</int> + <reference key="object" ref="632727374"/> + <reference key="parent" ref="110575045"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">144</int> + <reference key="object" ref="646227648"/> + <reference key="parent" ref="110575045"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">129</int> + <reference key="object" ref="609285721"/> + <reference key="parent" ref="110575045"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">143</int> + <reference key="object" ref="481834944"/> + <reference key="parent" ref="110575045"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">236</int> + <reference key="object" ref="304266470"/> + <reference key="parent" ref="110575045"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">131</int> + <reference key="object" ref="1046388886"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="752062318"/> + </object> + <reference key="parent" ref="110575045"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">149</int> + <reference key="object" ref="1056857174"/> + <reference key="parent" ref="110575045"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">145</int> + <reference key="object" ref="342932134"/> + <reference key="parent" ref="110575045"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">130</int> + <reference key="object" ref="752062318"/> + <reference key="parent" ref="1046388886"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">24</int> + <reference key="object" ref="835318025"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="299356726"/> + <reference ref="625202149"/> + <reference ref="575023229"/> + <reference ref="1011231497"/> + </object> + <reference key="parent" ref="713487014"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">92</int> + <reference key="object" ref="299356726"/> + <reference key="parent" ref="835318025"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">5</int> + <reference key="object" ref="625202149"/> + <reference key="parent" ref="835318025"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">239</int> + <reference key="object" ref="575023229"/> + <reference key="parent" ref="835318025"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">23</int> + <reference key="object" ref="1011231497"/> + <reference key="parent" ref="835318025"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">295</int> + <reference key="object" ref="586577488"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="466310130"/> + </object> + <reference key="parent" ref="649796088"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">296</int> + <reference key="object" ref="466310130"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="102151532"/> + <reference ref="237841660"/> + <reference ref="694544109"/> + <reference ref="1025359947"/> + <reference ref="943694335"/> + <reference ref="863984465"/> + <reference ref="138443116"/> + </object> + <reference key="parent" ref="586577488"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">297</int> + <reference key="object" ref="102151532"/> + <reference key="parent" ref="466310130"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">298</int> + <reference key="object" ref="237841660"/> + <reference key="parent" ref="466310130"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">211</int> + <reference key="object" ref="676164635"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="785027613"/> + </object> + <reference key="parent" ref="789758025"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">212</int> + <reference key="object" ref="785027613"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="680220178"/> + <reference ref="731782645"/> + </object> + <reference key="parent" ref="676164635"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">195</int> + <reference key="object" ref="680220178"/> + <reference key="parent" ref="785027613"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">196</int> + <reference key="object" ref="731782645"/> + <reference key="parent" ref="785027613"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">346</int> + <reference key="object" ref="967646866"/> + <reference key="parent" ref="769623530"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">348</int> + <reference key="object" ref="507821607"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="698887838"/> + </object> + <reference key="parent" ref="789758025"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">349</int> + <reference key="object" ref="698887838"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="605118523"/> + <reference ref="197661976"/> + <reference ref="708854459"/> + <reference ref="65139061"/> + <reference ref="19036812"/> + <reference ref="672708820"/> + <reference ref="537092702"/> + </object> + <reference key="parent" ref="507821607"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">350</int> + <reference key="object" ref="605118523"/> + <reference key="parent" ref="698887838"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">351</int> + <reference key="object" ref="197661976"/> + <reference key="parent" ref="698887838"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">354</int> + <reference key="object" ref="708854459"/> + <reference key="parent" ref="698887838"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">420</int> + <reference key="object" ref="755631768"/> + <reference key="parent" ref="0"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">450</int> + <reference key="object" ref="288088188"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="579392910"/> + </object> + <reference key="parent" ref="789758025"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">451</int> + <reference key="object" ref="579392910"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="1060694897"/> + <reference ref="879586729"/> + <reference ref="56570060"/> + </object> + <reference key="parent" ref="288088188"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">452</int> + <reference key="object" ref="1060694897"/> + <reference key="parent" ref="579392910"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">453</int> + <reference key="object" ref="859480356"/> + <reference key="parent" ref="769623530"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">454</int> + <reference key="object" ref="795346622"/> + <reference key="parent" ref="769623530"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">457</int> + <reference key="object" ref="65139061"/> + <reference key="parent" ref="698887838"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">459</int> + <reference key="object" ref="19036812"/> + <reference key="parent" ref="698887838"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">460</int> + <reference key="object" ref="672708820"/> + <reference key="parent" ref="698887838"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">462</int> + <reference key="object" ref="537092702"/> + <reference key="parent" ref="698887838"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">465</int> + <reference key="object" ref="879586729"/> + <reference key="parent" ref="579392910"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">466</int> + <reference key="object" ref="56570060"/> + <reference key="parent" ref="579392910"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">485</int> + <reference key="object" ref="82994268"/> + <reference key="parent" ref="789758025"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">490</int> + <reference key="object" ref="448692316"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="992780483"/> + </object> + <reference key="parent" ref="649796088"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">491</int> + <reference key="object" ref="992780483"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="105068016"/> + </object> + <reference key="parent" ref="448692316"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">492</int> + <reference key="object" ref="105068016"/> + <reference key="parent" ref="992780483"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">494</int> + <reference key="object" ref="976324537"/> + <reference key="parent" ref="0"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">534</int> + <reference key="object" ref="816668511"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="865232259"/> + </object> + <reference key="parent" ref="649796088"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">535</int> + <reference key="object" ref="865232259"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="340689355"/> + <reference ref="878165919"/> + <reference ref="162978490"/> + <reference ref="137933275"/> + <reference ref="1027125810"/> + <reference ref="864702084"/> + <reference ref="208343368"/> + <reference ref="377902755"/> + <reference ref="191469404"/> + </object> + <reference key="parent" ref="816668511"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">537</int> + <reference key="object" ref="340689355"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="935112943"/> + </object> + <reference key="parent" ref="865232259"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">538</int> + <reference key="object" ref="935112943"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="993856752"/> + <reference ref="516840223"/> + </object> + <reference key="parent" ref="340689355"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">539</int> + <reference key="object" ref="993856752"/> + <reference key="parent" ref="935112943"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">540</int> + <reference key="object" ref="516840223"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + </object> + <reference key="parent" ref="935112943"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">545</int> + <reference key="object" ref="878165919"/> + <reference key="parent" ref="865232259"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">546</int> + <reference key="object" ref="162978490"/> + <reference key="parent" ref="865232259"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">548</int> + <reference key="object" ref="137933275"/> + <reference key="parent" ref="865232259"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">550</int> + <reference key="object" ref="1027125810"/> + <reference key="parent" ref="865232259"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">552</int> + <reference key="object" ref="208343368"/> + <reference key="parent" ref="865232259"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">553</int> + <reference key="object" ref="864702084"/> + <reference key="parent" ref="865232259"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">555</int> + <reference key="object" ref="694544109"/> + <reference key="parent" ref="466310130"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">556</int> + <reference key="object" ref="1025359947"/> + <reference key="parent" ref="466310130"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">557</int> + <reference key="object" ref="943694335"/> + <reference key="parent" ref="466310130"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">558</int> + <reference key="object" ref="863984465"/> + <reference key="parent" ref="466310130"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">562</int> + <reference key="object" ref="138443116"/> + <reference key="parent" ref="466310130"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">565</int> + <reference key="object" ref="377902755"/> + <reference key="parent" ref="865232259"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">566</int> + <reference key="object" ref="191469404"/> + <reference key="parent" ref="865232259"/> + </object> + </object> + </object> + <object class="NSMutableDictionary" key="flattenedProperties"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSArray" key="dict.sortedKeys"> + <bool key="EncodedWithXMLCoder">YES</bool> + <string>-3.IBPluginDependency</string> + <string>112.IBPluginDependency</string> + <string>112.ImportedFromIB2</string> + <string>124.IBPluginDependency</string> + <string>124.ImportedFromIB2</string> + <string>125.IBPluginDependency</string> + <string>125.ImportedFromIB2</string> + <string>125.editorWindowContentRectSynchronizationRect</string> + <string>126.IBPluginDependency</string> + <string>126.ImportedFromIB2</string> + <string>129.IBPluginDependency</string> + <string>129.ImportedFromIB2</string> + <string>130.IBPluginDependency</string> + <string>130.ImportedFromIB2</string> + <string>130.editorWindowContentRectSynchronizationRect</string> + <string>131.IBPluginDependency</string> + <string>131.ImportedFromIB2</string> + <string>134.IBPluginDependency</string> + <string>134.ImportedFromIB2</string> + <string>136.IBPluginDependency</string> + <string>136.ImportedFromIB2</string> + <string>143.IBPluginDependency</string> + <string>143.ImportedFromIB2</string> + <string>144.IBPluginDependency</string> + <string>144.ImportedFromIB2</string> + <string>145.IBPluginDependency</string> + <string>145.ImportedFromIB2</string> + <string>149.IBPluginDependency</string> + <string>149.ImportedFromIB2</string> + <string>150.IBPluginDependency</string> + <string>150.ImportedFromIB2</string> + <string>19.IBPluginDependency</string> + <string>19.ImportedFromIB2</string> + <string>195.IBPluginDependency</string> + <string>195.ImportedFromIB2</string> + <string>196.IBPluginDependency</string> + <string>196.ImportedFromIB2</string> + <string>197.IBPluginDependency</string> + <string>197.ImportedFromIB2</string> + <string>198.IBPluginDependency</string> + <string>198.ImportedFromIB2</string> + <string>199.IBPluginDependency</string> + <string>199.ImportedFromIB2</string> + <string>200.IBEditorWindowLastContentRect</string> + <string>200.IBPluginDependency</string> + <string>200.ImportedFromIB2</string> + <string>200.editorWindowContentRectSynchronizationRect</string> + <string>201.IBPluginDependency</string> + <string>201.ImportedFromIB2</string> + <string>202.IBPluginDependency</string> + <string>202.ImportedFromIB2</string> + <string>203.IBPluginDependency</string> + <string>203.ImportedFromIB2</string> + <string>204.IBPluginDependency</string> + <string>204.ImportedFromIB2</string> + <string>205.IBEditorWindowLastContentRect</string> + <string>205.IBPluginDependency</string> + <string>205.ImportedFromIB2</string> + <string>205.editorWindowContentRectSynchronizationRect</string> + <string>206.IBPluginDependency</string> + <string>206.ImportedFromIB2</string> + <string>207.IBPluginDependency</string> + <string>207.ImportedFromIB2</string> + <string>208.IBPluginDependency</string> + <string>208.ImportedFromIB2</string> + <string>209.IBPluginDependency</string> + <string>209.ImportedFromIB2</string> + <string>210.IBPluginDependency</string> + <string>210.ImportedFromIB2</string> + <string>211.IBPluginDependency</string> + <string>211.ImportedFromIB2</string> + <string>212.IBPluginDependency</string> + <string>212.ImportedFromIB2</string> + <string>212.editorWindowContentRectSynchronizationRect</string> + <string>213.IBPluginDependency</string> + <string>213.ImportedFromIB2</string> + <string>214.IBPluginDependency</string> + <string>214.ImportedFromIB2</string> + <string>215.IBPluginDependency</string> + <string>215.ImportedFromIB2</string> + <string>216.IBPluginDependency</string> + <string>216.ImportedFromIB2</string> + <string>217.IBPluginDependency</string> + <string>217.ImportedFromIB2</string> + <string>218.IBPluginDependency</string> + <string>218.ImportedFromIB2</string> + <string>219.IBPluginDependency</string> + <string>219.ImportedFromIB2</string> + <string>220.IBEditorWindowLastContentRect</string> + <string>220.IBPluginDependency</string> + <string>220.ImportedFromIB2</string> + <string>220.editorWindowContentRectSynchronizationRect</string> + <string>221.IBPluginDependency</string> + <string>221.ImportedFromIB2</string> + <string>23.IBPluginDependency</string> + <string>23.ImportedFromIB2</string> + <string>236.IBPluginDependency</string> + <string>236.ImportedFromIB2</string> + <string>239.IBPluginDependency</string> + <string>239.ImportedFromIB2</string> + <string>24.IBEditorWindowLastContentRect</string> + <string>24.IBPluginDependency</string> + <string>24.ImportedFromIB2</string> + <string>24.editorWindowContentRectSynchronizationRect</string> + <string>29.IBEditorWindowLastContentRect</string> + <string>29.IBPluginDependency</string> + <string>29.ImportedFromIB2</string> + <string>29.WindowOrigin</string> + <string>29.editorWindowContentRectSynchronizationRect</string> + <string>295.IBPluginDependency</string> + <string>296.IBEditorWindowLastContentRect</string> + <string>296.IBPluginDependency</string> + <string>296.editorWindowContentRectSynchronizationRect</string> + <string>297.IBPluginDependency</string> + <string>298.IBPluginDependency</string> + <string>346.IBPluginDependency</string> + <string>346.ImportedFromIB2</string> + <string>348.IBPluginDependency</string> + <string>348.ImportedFromIB2</string> + <string>349.IBEditorWindowLastContentRect</string> + <string>349.IBPluginDependency</string> + <string>349.ImportedFromIB2</string> + <string>349.editorWindowContentRectSynchronizationRect</string> + <string>350.IBPluginDependency</string> + <string>350.ImportedFromIB2</string> + <string>351.IBPluginDependency</string> + <string>351.ImportedFromIB2</string> + <string>354.IBPluginDependency</string> + <string>354.ImportedFromIB2</string> + <string>450.IBPluginDependency</string> + <string>451.IBEditorWindowLastContentRect</string> + <string>451.IBPluginDependency</string> + <string>452.IBPluginDependency</string> + <string>453.IBPluginDependency</string> + <string>454.IBPluginDependency</string> + <string>457.IBPluginDependency</string> + <string>459.IBPluginDependency</string> + <string>460.IBPluginDependency</string> + <string>462.IBPluginDependency</string> + <string>465.IBPluginDependency</string> + <string>466.IBPluginDependency</string> + <string>485.IBPluginDependency</string> + <string>490.IBPluginDependency</string> + <string>491.IBEditorWindowLastContentRect</string> + <string>491.IBPluginDependency</string> + <string>492.IBPluginDependency</string> + <string>5.IBPluginDependency</string> + <string>5.ImportedFromIB2</string> + <string>534.IBPluginDependency</string> + <string>535.IBEditorWindowLastContentRect</string> + <string>535.IBPluginDependency</string> + <string>537.IBPluginDependency</string> + <string>538.IBEditorWindowLastContentRect</string> + <string>538.IBPluginDependency</string> + <string>539.IBPluginDependency</string> + <string>540.IBPluginDependency</string> + <string>545.IBPluginDependency</string> + <string>546.IBPluginDependency</string> + <string>548.IBPluginDependency</string> + <string>550.IBPluginDependency</string> + <string>552.IBPluginDependency</string> + <string>553.IBPluginDependency</string> + <string>555.IBPluginDependency</string> + <string>556.IBPluginDependency</string> + <string>557.IBPluginDependency</string> + <string>558.IBPluginDependency</string> + <string>56.IBPluginDependency</string> + <string>56.ImportedFromIB2</string> + <string>562.IBPluginDependency</string> + <string>565.IBPluginDependency</string> + <string>566.IBPluginDependency</string> + <string>57.IBEditorWindowLastContentRect</string> + <string>57.IBPluginDependency</string> + <string>57.ImportedFromIB2</string> + <string>57.editorWindowContentRectSynchronizationRect</string> + <string>58.IBPluginDependency</string> + <string>58.ImportedFromIB2</string> + <string>72.IBPluginDependency</string> + <string>72.ImportedFromIB2</string> + <string>73.IBPluginDependency</string> + <string>73.ImportedFromIB2</string> + <string>74.IBPluginDependency</string> + <string>74.ImportedFromIB2</string> + <string>75.IBPluginDependency</string> + <string>75.ImportedFromIB2</string> + <string>77.IBPluginDependency</string> + <string>77.ImportedFromIB2</string> + <string>78.IBPluginDependency</string> + <string>78.ImportedFromIB2</string> + <string>79.IBPluginDependency</string> + <string>79.ImportedFromIB2</string> + <string>80.IBPluginDependency</string> + <string>80.ImportedFromIB2</string> + <string>81.IBEditorWindowLastContentRect</string> + <string>81.IBPluginDependency</string> + <string>81.ImportedFromIB2</string> + <string>81.editorWindowContentRectSynchronizationRect</string> + <string>82.IBPluginDependency</string> + <string>82.ImportedFromIB2</string> + <string>83.IBPluginDependency</string> + <string>83.ImportedFromIB2</string> + <string>92.IBPluginDependency</string> + <string>92.ImportedFromIB2</string> + </object> + <object class="NSMutableArray" key="dict.values"> + <bool key="EncodedWithXMLCoder">YES</bool> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <integer value="1"/> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <integer value="1"/> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <integer value="1"/> + <string>{{522, 812}, {146, 23}}</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <integer value="1"/> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <integer value="1"/> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <integer value="1"/> + <string>{{436, 809}, {64, 6}}</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <integer value="1"/> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <integer value="1"/> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <integer value="1"/> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <integer value="1"/> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <integer value="1"/> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <integer value="1"/> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <integer value="1"/> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <integer value="1"/> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <integer value="1"/> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <integer value="1"/> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <integer value="1"/> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <integer value="1"/> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <integer value="1"/> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <integer value="1"/> + <string>{{753, 187}, {275, 113}}</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <integer value="1"/> + <string>{{608, 612}, {275, 83}}</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <integer value="1"/> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <integer value="1"/> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <integer value="1"/> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <integer value="1"/> + <string>{{650, 538}, {254, 283}}</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <integer value="1"/> + <string>{{187, 434}, {243, 243}}</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <integer value="1"/> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <integer value="1"/> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <integer value="1"/> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <integer value="1"/> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <integer value="1"/> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <integer value="1"/> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <integer value="1"/> + <string>{{608, 612}, {167, 43}}</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <integer value="1"/> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <integer value="1"/> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <integer value="1"/> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <integer value="1"/> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <integer value="1"/> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <integer value="1"/> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <integer value="1"/> + <string>{{753, 217}, {238, 103}}</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <integer value="1"/> + <string>{{608, 612}, {241, 103}}</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <integer value="1"/> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <integer value="1"/> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <integer value="1"/> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <integer value="1"/> + <string>{{744, 748}, {194, 73}}</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <integer value="1"/> + <string>{{525, 802}, {197, 73}}</string> + <string>{{488, 821}, {451, 20}}</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <integer value="1"/> + <string>{74, 862}</string> + <string>{{6, 978}, {478, 20}}</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>{{694, 688}, {234, 133}}</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>{{475, 832}, {234, 43}}</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <integer value="1"/> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <integer value="1"/> + <string>{{746, 287}, {220, 133}}</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <integer value="1"/> + <string>{{608, 612}, {215, 63}}</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <integer value="1"/> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <integer value="1"/> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <integer value="1"/> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>{{753, 197}, {170, 63}}</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>{{881, 798}, {189, 23}}</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <integer value="1"/> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>{{864, 668}, {260, 153}}</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>{{1110, 678}, {154, 43}}</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <integer value="1"/> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>{{286, 129}, {275, 183}}</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <integer value="1"/> + <string>{{23, 794}, {245, 183}}</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <integer value="1"/> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <integer value="1"/> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <integer value="1"/> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <integer value="1"/> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <integer value="1"/> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <integer value="1"/> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <integer value="1"/> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <integer value="1"/> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <integer value="1"/> + <string>{{608, 618}, {196, 203}}</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <integer value="1"/> + <string>{{145, 474}, {199, 203}}</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <integer value="1"/> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <integer value="1"/> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <integer value="1"/> + </object> + </object> + <object class="NSMutableDictionary" key="unlocalizedProperties"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference key="dict.sortedKeys" ref="0"/> + <object class="NSMutableArray" key="dict.values"> + <bool key="EncodedWithXMLCoder">YES</bool> + </object> + </object> + <nil key="activeLocalization"/> + <object class="NSMutableDictionary" key="localizations"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference key="dict.sortedKeys" ref="0"/> + <object class="NSMutableArray" key="dict.values"> + <bool key="EncodedWithXMLCoder">YES</bool> + </object> + </object> + <nil key="sourceID"/> + <int key="maxID">567</int> + </object> + <object class="IBClassDescriber" key="IBDocument.Classes"> + <object class="NSMutableArray" key="referencedPartialClassDescriptions"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="IBPartialClassDescription"> + <string key="className">BrowserAppDelegate</string> + <string key="superclassName">NSObject</string> + <object class="NSMutableDictionary" key="actions"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSArray" key="dict.sortedKeys"> + <bool key="EncodedWithXMLCoder">YES</bool> + <string>setSharedProcessProcessModel:</string> + <string>setSharedThreadProcessModel:</string> + <string>showStatisticsWindow:</string> + </object> + <object class="NSMutableArray" key="dict.values"> + <bool key="EncodedWithXMLCoder">YES</bool> + <string>id</string> + <string>id</string> + <string>id</string> + </object> + </object> + <object class="NSMutableDictionary" key="actionInfosByName"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSArray" key="dict.sortedKeys"> + <bool key="EncodedWithXMLCoder">YES</bool> + <string>setSharedProcessProcessModel:</string> + <string>setSharedThreadProcessModel:</string> + <string>showStatisticsWindow:</string> + </object> + <object class="NSMutableArray" key="dict.values"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="IBActionInfo"> + <string key="name">setSharedProcessProcessModel:</string> + <string key="candidateClassName">id</string> + </object> + <object class="IBActionInfo"> + <string key="name">setSharedThreadProcessModel:</string> + <string key="candidateClassName">id</string> + </object> + <object class="IBActionInfo"> + <string key="name">showStatisticsWindow:</string> + <string key="candidateClassName">id</string> + </object> + </object> + </object> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBProjectSource</string> + <string key="minorKey">mac/AppDelegate.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">BrowserAppDelegate</string> + <string key="superclassName">NSObject</string> + <object class="NSMutableDictionary" key="outlets"> + <string key="NS.key.0">window</string> + <string key="NS.object.0">NSWindow</string> + </object> + <object class="NSMutableDictionary" key="toOneOutletInfosByName"> + <string key="NS.key.0">window</string> + <object class="IBToOneOutletInfo" key="NS.object.0"> + <string key="name">window</string> + <string key="candidateClassName">NSWindow</string> + </object> + </object> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBUserSource</string> + <string key="minorKey"/> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">BrowserWindowController</string> + <string key="superclassName">NSWindowController</string> + <object class="NSMutableDictionary" key="actions"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSArray" key="dict.sortedKeys"> + <bool key="EncodedWithXMLCoder">YES</bool> + <string>dumpSourceToConsole:</string> + <string>fetch:</string> + <string>forceRepaint:</string> + <string>goBack:</string> + <string>goForward:</string> + <string>reload:</string> + <string>removeReinsertWebView:</string> + <string>resetZoom:</string> + <string>showHideWebView:</string> + <string>toggleZoomMode:</string> + <string>zoomIn:</string> + <string>zoomOut:</string> + </object> + <object class="NSMutableArray" key="dict.values"> + <bool key="EncodedWithXMLCoder">YES</bool> + <string>id</string> + <string>id</string> + <string>id</string> + <string>id</string> + <string>id</string> + <string>id</string> + <string>id</string> + <string>id</string> + <string>id</string> + <string>id</string> + <string>id</string> + <string>id</string> + </object> + </object> + <object class="NSMutableDictionary" key="actionInfosByName"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSArray" key="dict.sortedKeys"> + <bool key="EncodedWithXMLCoder">YES</bool> + <string>dumpSourceToConsole:</string> + <string>fetch:</string> + <string>forceRepaint:</string> + <string>goBack:</string> + <string>goForward:</string> + <string>reload:</string> + <string>removeReinsertWebView:</string> + <string>resetZoom:</string> + <string>showHideWebView:</string> + <string>toggleZoomMode:</string> + <string>zoomIn:</string> + <string>zoomOut:</string> + </object> + <object class="NSMutableArray" key="dict.values"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="IBActionInfo"> + <string key="name">dumpSourceToConsole:</string> + <string key="candidateClassName">id</string> + </object> + <object class="IBActionInfo"> + <string key="name">fetch:</string> + <string key="candidateClassName">id</string> + </object> + <object class="IBActionInfo"> + <string key="name">forceRepaint:</string> + <string key="candidateClassName">id</string> + </object> + <object class="IBActionInfo"> + <string key="name">goBack:</string> + <string key="candidateClassName">id</string> + </object> + <object class="IBActionInfo"> + <string key="name">goForward:</string> + <string key="candidateClassName">id</string> + </object> + <object class="IBActionInfo"> + <string key="name">reload:</string> + <string key="candidateClassName">id</string> + </object> + <object class="IBActionInfo"> + <string key="name">removeReinsertWebView:</string> + <string key="candidateClassName">id</string> + </object> + <object class="IBActionInfo"> + <string key="name">resetZoom:</string> + <string key="candidateClassName">id</string> + </object> + <object class="IBActionInfo"> + <string key="name">showHideWebView:</string> + <string key="candidateClassName">id</string> + </object> + <object class="IBActionInfo"> + <string key="name">toggleZoomMode:</string> + <string key="candidateClassName">id</string> + </object> + <object class="IBActionInfo"> + <string key="name">zoomIn:</string> + <string key="candidateClassName">id</string> + </object> + <object class="IBActionInfo"> + <string key="name">zoomOut:</string> + <string key="candidateClassName">id</string> + </object> + </object> + </object> + <object class="NSMutableDictionary" key="outlets"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSArray" key="dict.sortedKeys"> + <bool key="EncodedWithXMLCoder">YES</bool> + <string>backButton</string> + <string>containerView</string> + <string>forwardButton</string> + <string>progressIndicator</string> + <string>reloadButton</string> + <string>toolbar</string> + <string>urlText</string> + </object> + <object class="NSMutableArray" key="dict.values"> + <bool key="EncodedWithXMLCoder">YES</bool> + <string>NSButton</string> + <string>NSView</string> + <string>NSButton</string> + <string>NSProgressIndicator</string> + <string>NSButton</string> + <string>NSToolbar</string> + <string>NSTextField</string> + </object> + </object> + <object class="NSMutableDictionary" key="toOneOutletInfosByName"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSArray" key="dict.sortedKeys"> + <bool key="EncodedWithXMLCoder">YES</bool> + <string>backButton</string> + <string>containerView</string> + <string>forwardButton</string> + <string>progressIndicator</string> + <string>reloadButton</string> + <string>toolbar</string> + <string>urlText</string> + </object> + <object class="NSMutableArray" key="dict.values"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="IBToOneOutletInfo"> + <string key="name">backButton</string> + <string key="candidateClassName">NSButton</string> + </object> + <object class="IBToOneOutletInfo"> + <string key="name">containerView</string> + <string key="candidateClassName">NSView</string> + </object> + <object class="IBToOneOutletInfo"> + <string key="name">forwardButton</string> + <string key="candidateClassName">NSButton</string> + </object> + <object class="IBToOneOutletInfo"> + <string key="name">progressIndicator</string> + <string key="candidateClassName">NSProgressIndicator</string> + </object> + <object class="IBToOneOutletInfo"> + <string key="name">reloadButton</string> + <string key="candidateClassName">NSButton</string> + </object> + <object class="IBToOneOutletInfo"> + <string key="name">toolbar</string> + <string key="candidateClassName">NSToolbar</string> + </object> + <object class="IBToOneOutletInfo"> + <string key="name">urlText</string> + <string key="candidateClassName">NSTextField</string> + </object> + </object> + </object> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBProjectSource</string> + <string key="minorKey">mac/BrowserWindowController.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">FirstResponder</string> + <string key="superclassName">NSObject</string> + <object class="NSMutableDictionary" key="actions"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSArray" key="dict.sortedKeys"> + <bool key="EncodedWithXMLCoder">YES</bool> + <string>forceRepaint:</string> + <string>newWindow:</string> + </object> + <object class="NSMutableArray" key="dict.values"> + <bool key="EncodedWithXMLCoder">YES</bool> + <string>id</string> + <string>id</string> + </object> + </object> + <object class="NSMutableDictionary" key="actionInfosByName"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSArray" key="dict.sortedKeys"> + <bool key="EncodedWithXMLCoder">YES</bool> + <string>forceRepaint:</string> + <string>newWindow:</string> + </object> + <object class="NSMutableArray" key="dict.values"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="IBActionInfo"> + <string key="name">forceRepaint:</string> + <string key="candidateClassName">id</string> + </object> + <object class="IBActionInfo"> + <string key="name">newWindow:</string> + <string key="candidateClassName">id</string> + </object> + </object> + </object> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBUserSource</string> + <string key="minorKey"/> + </object> + </object> + </object> + <object class="NSMutableArray" key="referencedPartialClassDescriptionsV3.2+"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="IBPartialClassDescription"> + <string key="className">NSApplication</string> + <string key="superclassName">NSResponder</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier" id="822405504"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSApplication.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSApplication</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier" id="850738725"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSApplicationScripting.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSApplication</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier" id="624831158"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSColorPanel.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSApplication</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSHelpManager.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSApplication</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSPageLayout.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSApplication</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSUserInterfaceItemSearching.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSBrowser</string> + <string key="superclassName">NSControl</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSBrowser.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSButton</string> + <string key="superclassName">NSControl</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSButton.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSControl</string> + <string key="superclassName">NSView</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier" id="310914472"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSControl.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSDocument</string> + <string key="superclassName">NSObject</string> + <object class="NSMutableDictionary" key="actions"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSArray" key="dict.sortedKeys"> + <bool key="EncodedWithXMLCoder">YES</bool> + <string>printDocument:</string> + <string>revertDocumentToSaved:</string> + <string>runPageLayout:</string> + <string>saveDocument:</string> + <string>saveDocumentAs:</string> + <string>saveDocumentTo:</string> + </object> + <object class="NSMutableArray" key="dict.values"> + <bool key="EncodedWithXMLCoder">YES</bool> + <string>id</string> + <string>id</string> + <string>id</string> + <string>id</string> + <string>id</string> + <string>id</string> + </object> + </object> + <object class="NSMutableDictionary" key="actionInfosByName"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSArray" key="dict.sortedKeys"> + <bool key="EncodedWithXMLCoder">YES</bool> + <string>printDocument:</string> + <string>revertDocumentToSaved:</string> + <string>runPageLayout:</string> + <string>saveDocument:</string> + <string>saveDocumentAs:</string> + <string>saveDocumentTo:</string> + </object> + <object class="NSMutableArray" key="dict.values"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="IBActionInfo"> + <string key="name">printDocument:</string> + <string key="candidateClassName">id</string> + </object> + <object class="IBActionInfo"> + <string key="name">revertDocumentToSaved:</string> + <string key="candidateClassName">id</string> + </object> + <object class="IBActionInfo"> + <string key="name">runPageLayout:</string> + <string key="candidateClassName">id</string> + </object> + <object class="IBActionInfo"> + <string key="name">saveDocument:</string> + <string key="candidateClassName">id</string> + </object> + <object class="IBActionInfo"> + <string key="name">saveDocumentAs:</string> + <string key="candidateClassName">id</string> + </object> + <object class="IBActionInfo"> + <string key="name">saveDocumentTo:</string> + <string key="candidateClassName">id</string> + </object> + </object> + </object> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSDocument.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSDocument</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSDocumentScripting.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSDocumentController</string> + <string key="superclassName">NSObject</string> + <object class="NSMutableDictionary" key="actions"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSArray" key="dict.sortedKeys"> + <bool key="EncodedWithXMLCoder">YES</bool> + <string>clearRecentDocuments:</string> + <string>newDocument:</string> + <string>openDocument:</string> + <string>saveAllDocuments:</string> + </object> + <object class="NSMutableArray" key="dict.values"> + <bool key="EncodedWithXMLCoder">YES</bool> + <string>id</string> + <string>id</string> + <string>id</string> + <string>id</string> + </object> + </object> + <object class="NSMutableDictionary" key="actionInfosByName"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSArray" key="dict.sortedKeys"> + <bool key="EncodedWithXMLCoder">YES</bool> + <string>clearRecentDocuments:</string> + <string>newDocument:</string> + <string>openDocument:</string> + <string>saveAllDocuments:</string> + </object> + <object class="NSMutableArray" key="dict.values"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="IBActionInfo"> + <string key="name">clearRecentDocuments:</string> + <string key="candidateClassName">id</string> + </object> + <object class="IBActionInfo"> + <string key="name">newDocument:</string> + <string key="candidateClassName">id</string> + </object> + <object class="IBActionInfo"> + <string key="name">openDocument:</string> + <string key="candidateClassName">id</string> + </object> + <object class="IBActionInfo"> + <string key="name">saveAllDocuments:</string> + <string key="candidateClassName">id</string> + </object> + </object> + </object> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSDocumentController.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSFontManager</string> + <string key="superclassName">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier" id="946436764"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSFontManager.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSFormatter</string> + <string key="superclassName">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">Foundation.framework/Headers/NSFormatter.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSMatrix</string> + <string key="superclassName">NSControl</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSMatrix.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSMenu</string> + <string key="superclassName">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier" id="1056362899"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSMenu.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSMenuItem</string> + <string key="superclassName">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier" id="472958451"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSMenuItem.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSMovieView</string> + <string key="superclassName">NSView</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSMovieView.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSAccessibility.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <reference key="sourceIdentifier" ref="822405504"/> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <reference key="sourceIdentifier" ref="850738725"/> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <reference key="sourceIdentifier" ref="624831158"/> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <reference key="sourceIdentifier" ref="310914472"/> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSDictionaryController.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSDragging.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <reference key="sourceIdentifier" ref="946436764"/> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSFontPanel.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSKeyValueBinding.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <reference key="sourceIdentifier" ref="1056362899"/> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSNibLoading.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSOutlineView.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSPasteboard.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSSavePanel.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier" id="809545482"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSTableView.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSToolbarItem.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier" id="260078765"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSView.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">Foundation.framework/Headers/NSArchiver.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">Foundation.framework/Headers/NSClassDescription.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">Foundation.framework/Headers/NSError.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">Foundation.framework/Headers/NSFileManager.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">Foundation.framework/Headers/NSKeyValueCoding.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">Foundation.framework/Headers/NSKeyValueObserving.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">Foundation.framework/Headers/NSKeyedArchiver.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">Foundation.framework/Headers/NSObject.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">Foundation.framework/Headers/NSObjectScripting.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">Foundation.framework/Headers/NSPortCoder.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">Foundation.framework/Headers/NSRunLoop.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">Foundation.framework/Headers/NSScriptClassDescription.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">Foundation.framework/Headers/NSScriptKeyValueCoding.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">Foundation.framework/Headers/NSScriptObjectSpecifiers.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">Foundation.framework/Headers/NSScriptWhoseTests.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">Foundation.framework/Headers/NSThread.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">Foundation.framework/Headers/NSURL.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">Foundation.framework/Headers/NSURLConnection.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">Foundation.framework/Headers/NSURLDownload.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSProgressIndicator</string> + <string key="superclassName">NSView</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSProgressIndicator.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSResponder</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSInterfaceStyle.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSResponder</string> + <string key="superclassName">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSResponder.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSTableView</string> + <string key="superclassName">NSControl</string> + <reference key="sourceIdentifier" ref="809545482"/> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSText</string> + <string key="superclassName">NSView</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSText.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSTextField</string> + <string key="superclassName">NSControl</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSTextField.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSTextView</string> + <string key="superclassName">NSText</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSTextView.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSToolbar</string> + <string key="superclassName">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSToolbar.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSView</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSClipView.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSView</string> + <reference key="sourceIdentifier" ref="472958451"/> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSView</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSRulerView.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSView</string> + <string key="superclassName">NSResponder</string> + <reference key="sourceIdentifier" ref="260078765"/> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSWindow</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSDrawer.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSWindow</string> + <string key="superclassName">NSResponder</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSWindow.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSWindow</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSWindowScripting.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSWindowController</string> + <string key="superclassName">NSResponder</string> + <object class="NSMutableDictionary" key="actions"> + <string key="NS.key.0">showWindow:</string> + <string key="NS.object.0">id</string> + </object> + <object class="NSMutableDictionary" key="actionInfosByName"> + <string key="NS.key.0">showWindow:</string> + <object class="IBActionInfo" key="NS.object.0"> + <string key="name">showWindow:</string> + <string key="candidateClassName">id</string> + </object> + </object> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSWindowController.h</string> + </object> + </object> + </object> + </object> + <int key="IBDocument.localizationMode">0</int> + <string key="IBDocument.TargetRuntimeIdentifier">IBCocoaFramework</string> + <object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDevelopmentDependencies"> + <string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3</string> + <integer value="3000" key="NS.object.0"/> + </object> + <bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool> + <string key="IBDocument.LastKnownRelativeProjectPath">../MiniBrowser.xcodeproj</string> + <int key="IBDocument.defaultPropertyAccessControl">3</int> + <object class="NSMutableDictionary" key="IBDocument.LastKnownImageSizes"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSArray" key="dict.sortedKeys"> + <bool key="EncodedWithXMLCoder">YES</bool> + <string>NSMenuCheckmark</string> + <string>NSMenuMixedState</string> + </object> + <object class="NSMutableArray" key="dict.values"> + <bool key="EncodedWithXMLCoder">YES</bool> + <string>{9, 8}</string> + <string>{7, 2}</string> + </object> + </object> + </data> +</archive> diff --git a/Tools/MiniBrowser/mac/MiniBrowser_Prefix.pch b/Tools/MiniBrowser/mac/MiniBrowser_Prefix.pch new file mode 100644 index 000000000..a4e648ee7 --- /dev/null +++ b/Tools/MiniBrowser/mac/MiniBrowser_Prefix.pch @@ -0,0 +1,38 @@ +/* + * Copyright (C) 2010 Apple Inc. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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 APPLE INC. AND ITS 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 APPLE INC. OR ITS 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. + */ + +#ifdef __OBJC__ + #import <Cocoa/Cocoa.h> +#endif + +#import <WebKit2/WebKit2.h> + +#define ENABLE_LOGGING 0 + +#if ENABLE_LOGGING +#define LOG NSLog +#else +#define LOG(...) ((void)0) +#endif diff --git a/Tools/MiniBrowser/mac/WebBundle/Info.plist b/Tools/MiniBrowser/mac/WebBundle/Info.plist new file mode 100644 index 000000000..c285a472c --- /dev/null +++ b/Tools/MiniBrowser/mac/WebBundle/Info.plist @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<dict> + <key>CFBundleDevelopmentRegion</key> + <string>English</string> + <key>CFBundleExecutable</key> + <string>${EXECUTABLE_NAME}</string> + <key>CFBundleIdentifier</key> + <string>com.yourcompany.${PRODUCT_NAME:rfc1034identifier}</string> + <key>CFBundleInfoDictionaryVersion</key> + <string>6.0</string> + <key>CFBundlePackageType</key> + <string>BNDL</string> + <key>CFBundleShortVersionString</key> + <string>1.0</string> + <key>CFBundleSignature</key> + <string>????</string> + <key>CFBundleVersion</key> + <string>1</string> +</dict> +</plist> diff --git a/Tools/MiniBrowser/mac/WebBundle/WebBundleMain.m b/Tools/MiniBrowser/mac/WebBundle/WebBundleMain.m new file mode 100644 index 000000000..2da3e9596 --- /dev/null +++ b/Tools/MiniBrowser/mac/WebBundle/WebBundleMain.m @@ -0,0 +1,104 @@ +/* + * Copyright (C) 2010 Apple Inc. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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 APPLE INC. AND ITS 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 APPLE INC. OR ITS 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. + */ + +#include <Cocoa/Cocoa.h> +#include <WebKit2/WKBundle.h> +#include <WebKit2/WKBundleFrame.h> +#include <WebKit2/WKBundleInitialize.h> +#include <WebKit2/WKBundlePage.h> +#include <WebKit2/WKString.h> +#include <WebKit2/WKStringCF.h> +#include <WebKit2/WKURLCF.h> +#include <stdio.h> + +static WKBundleRef globalBundle; + +// WKBundlePageClient functions + +void didClearWindowObjectForFrame(WKBundlePageRef page, WKBundleFrameRef frame, WKBundleScriptWorldRef world, const void *clientInfo) +{ + WKURLRef wkURL = WKBundleFrameCopyURL(WKBundlePageGetMainFrame(page)); + CFURLRef cfURL = WKURLCopyCFURL(0, wkURL); + WKRelease(wkURL); + + LOG(@"WKBundlePageClient - didClearWindowForFrame %@", [(NSURL *)cfURL absoluteString]); + CFRelease(cfURL); + + WKStringRef messageName = WKStringCreateWithCFString(CFSTR("Callback")); + WKStringRef messageBody = WKStringCreateWithCFString(CFSTR("Window was cleared")); + WKBundlePostMessage(globalBundle, messageName, messageBody); + WKRelease(messageName); + WKRelease(messageBody); +} + + +// WKBundleClient + +void didCreatePage(WKBundleRef bundle, WKBundlePageRef page, const void* clientInfo) +{ + LOG(@"WKBundleClient - didCreatePage\n"); + + WKBundlePageLoaderClient client; + memset(&client, 0, sizeof(client)); + client.didClearWindowObjectForFrame = didClearWindowObjectForFrame; + + WKBundlePageSetPageLoaderClient(page, &client); +} + +void willDestroyPage(WKBundleRef bundle, WKBundlePageRef page, const void* clientInfo) +{ + LOG(@"WKBundleClient - willDestroyPage\n"); +} + +void didRecieveMessage(WKBundleRef bundle, WKStringRef messageName, WKTypeRef messageBody, const void *clientInfo) +{ + CFStringRef cfMessageName = WKStringCopyCFString(0, messageName); + + WKTypeID typeID = WKGetTypeID(messageBody); + if (typeID == WKStringGetTypeID()) { + CFStringRef cfMessageBody = WKStringCopyCFString(0, (WKStringRef)messageBody); + LOG(@"WKBundleClient - didRecieveMessage - MessageName: %@ MessageBody %@", cfMessageName, cfMessageBody); + CFRelease(cfMessageBody); + } else { + LOG(@"WKBundleClient - didRecieveMessage - MessageName: %@ (MessageBody Unhandeled)\n", cfMessageName); + } + + CFRelease(cfMessageName); +} + +void WKBundleInitialize(WKBundleRef bundle, WKTypeRef initializationUserData) +{ + globalBundle = bundle; + + WKBundleClient client = { + kWKBundleClientCurrentVersion, + 0, + didCreatePage, + willDestroyPage, + 0, // didInitializePageGroup + didRecieveMessage + }; + WKBundleSetClient(bundle, &client); +} diff --git a/Tools/MiniBrowser/mac/main.m b/Tools/MiniBrowser/mac/main.m new file mode 100644 index 000000000..7f5673749 --- /dev/null +++ b/Tools/MiniBrowser/mac/main.m @@ -0,0 +1,31 @@ +/* + * Copyright (C) 2010 Apple Inc. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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 APPLE INC. AND ITS 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 APPLE INC. OR ITS 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. + */ + +#import <Cocoa/Cocoa.h> + +int main(int argc, char *argv[]) +{ + return NSApplicationMain(argc, (const char **) argv); +} diff --git a/Tools/MiniBrowser/qt/BrowserWindow.cpp b/Tools/MiniBrowser/qt/BrowserWindow.cpp new file mode 100644 index 000000000..29bf58aee --- /dev/null +++ b/Tools/MiniBrowser/qt/BrowserWindow.cpp @@ -0,0 +1,121 @@ +/* + * Copyright (C) 2010, 2011 Nokia Corporation and/or its subsidiary(-ies) + * Copyright (C) 2010 University of Szeged + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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 APPLE COMPUTER, INC. ``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 APPLE COMPUTER, INC. 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. + */ + +#include "BrowserWindow.h" + +#include "qquickwebpage_p.h" +#include "qquickwebview_p.h" +#include "utils.h" + +#include <QDeclarativeEngine> +#include <QDir> +#include <QPointF> + +BrowserWindow::BrowserWindow(WindowOptions* options) +{ + setWindowTitle("MiniBrowser"); + setWindowFlags(Qt::Window | Qt::WindowTitleHint | Qt::WindowMinMaxButtonsHint | Qt::WindowCloseButtonHint); + setResizeMode(QQuickView::SizeRootObjectToView); + + // This allows starting MiniBrowser from the build directory without previously defining QML_IMPORT_PATH. + QDir qmlImportDir = QDir(QCoreApplication::applicationDirPath()); + qmlImportDir.cd("../imports"); + engine()->addImportPath(qmlImportDir.canonicalPath()); + + Utils* utils = new Utils(this); + engine()->rootContext()->setContextProperty("utils", utils); + engine()->rootContext()->setContextProperty("options", options); + setSource(QUrl("qrc:/qml/BrowserWindow.qml")); + connect(rootObject(), SIGNAL(pageTitleChanged(QString)), this, SLOT(setWindowTitle(QString))); + if (options->useTraditionalDesktopBehavior()) + webView()->experimental()->setUseTraditionalDesktopBehaviour(true); + if (options->startFullScreen()) + showFullScreen(); + else { + if (options->startMaximized()) + setWindowState(Qt::WindowMaximized); + else + resize(options->requestedWindowSize()); + show(); + } +} + +QQuickWebView* BrowserWindow::webView() const +{ + return rootObject()->property("webview").value<QQuickWebView*>(); +} + +void BrowserWindow::load(const QString& url) +{ + QUrl completedUrl = Utils::urlFromUserInput(url); + QMetaObject::invokeMethod(rootObject(), "load", Qt::DirectConnection, Q_ARG(QVariant, completedUrl)); +} + +BrowserWindow* BrowserWindow::newWindow(const QString& url) +{ + BrowserWindow* window = new BrowserWindow(); + window->load(url); + return window; +} + +void BrowserWindow::updateVisualMockTouchPoints(const QList<QWindowSystemInterface::TouchPoint>& touchPoints) +{ + foreach (const QWindowSystemInterface::TouchPoint& touchPoint, touchPoints) { + QString mockTouchPointIdentifier = QString("mockTouchPoint%1").arg(touchPoint.id); + QQuickItem* mockTouchPointItem = rootObject()->findChild<QQuickItem*>(mockTouchPointIdentifier, Qt::FindDirectChildrenOnly); + + if (!mockTouchPointItem) { + QDeclarativeComponent touchMockPointComponent(engine(), QUrl("qrc:/qml/MockTouchPoint.qml")); + mockTouchPointItem = qobject_cast<QQuickItem*>(touchMockPointComponent.create()); + mockTouchPointItem->setObjectName(mockTouchPointIdentifier); + mockTouchPointItem->setProperty("pointId", QVariant(touchPoint.id)); + mockTouchPointItem->setParent(rootObject()); + mockTouchPointItem->setParentItem(rootObject()); + } + + QPointF position = touchPoint.area.topLeft(); + position.rx() -= geometry().x(); + position.ry() -= geometry().y(); + + mockTouchPointItem->setX(position.x()); + mockTouchPointItem->setY(position.y()); + mockTouchPointItem->setProperty("pressed", QVariant(touchPoint.state != Qt::TouchPointReleased)); + } +} + +void BrowserWindow::screenshot() +{ +} + +void BrowserWindow::updateUserAgentList() +{ +} + +BrowserWindow::~BrowserWindow() +{ +} diff --git a/Tools/MiniBrowser/qt/BrowserWindow.h b/Tools/MiniBrowser/qt/BrowserWindow.h new file mode 100644 index 000000000..e697c7548 --- /dev/null +++ b/Tools/MiniBrowser/qt/BrowserWindow.h @@ -0,0 +1,60 @@ +/* + * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies) + * Copyright (C) 2010 University of Szeged + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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 APPLE COMPUTER, INC. ``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 APPLE COMPUTER, INC. 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. + */ + +#ifndef BrowserWindow_h +#define BrowserWindow_h + +#include "MiniBrowserApplication.h" +#include <QStringList> +#include <QtQuick/QQuickView> + +class QQuickWebView; + +class BrowserWindow : public QQuickView { + Q_OBJECT + +public: + BrowserWindow(WindowOptions* = 0); + ~BrowserWindow(); + void load(const QString& url); + QQuickWebView* webView() const; + + void updateVisualMockTouchPoints(const QList<QWindowSystemInterface::TouchPoint>& touchPoints); + +public slots: + BrowserWindow* newWindow(const QString& url = "about:blank"); + +protected slots: + void screenshot(); + +private: + void updateUserAgentList(); + QStringList m_userAgentList; +}; + +#endif diff --git a/Tools/MiniBrowser/qt/MiniBrowser.pro b/Tools/MiniBrowser/qt/MiniBrowser.pro new file mode 100644 index 000000000..5aaaa685d --- /dev/null +++ b/Tools/MiniBrowser/qt/MiniBrowser.pro @@ -0,0 +1,32 @@ +# ------------------------------------------------------------------- +# Project file for the WebKit2 MiniBrowser binary +# +# See 'Tools/qmake/README' for an overview of the build system +# ------------------------------------------------------------------- + +TEMPLATE = app + +SOURCES += \ + BrowserWindow.cpp \ + main.cpp \ + MiniBrowserApplication.cpp \ + UrlLoader.cpp \ + utils.cpp \ + +HEADERS += \ + BrowserWindow.h \ + MiniBrowserApplication.h \ + UrlLoader.h \ + utils.h \ + +TARGET = MiniBrowser +DESTDIR = $${ROOT_BUILD_DIR}/bin + +CONFIG += qtwebkit qtwebkit-private + +QT += network declarative widgets +macx: QT += xml + +RESOURCES += MiniBrowser.qrc + +OTHER_FILES += qml/* diff --git a/Tools/MiniBrowser/qt/MiniBrowser.qrc b/Tools/MiniBrowser/qt/MiniBrowser.qrc new file mode 100644 index 000000000..b50609398 --- /dev/null +++ b/Tools/MiniBrowser/qt/MiniBrowser.qrc @@ -0,0 +1,22 @@ +<RCC> + <qresource prefix="/"> + <file>icons/info.png</file> + <file>icons/next.png</file> + <file>icons/previous.png</file> + <file>icons/refresh.png</file> + <file>icons/stop.png</file> + <file>icons/touchpoint.png</file> + <file>qml/AlertDialog.qml</file> + <file>qml/BrowserWindow.qml</file> + <file>qml/ConfirmDialog.qml</file> + <file>qml/Dialog.qml</file> + <file>qml/DialogButton.qml</file> + <file>qml/DialogLineInput.qml</file> + <file>qml/ItemSelector.qml</file> + <file>qml/MockTouchPoint.qml</file> + <file>qml/PromptDialog.qml</file> + <file>qml/ViewportInfoItem.qml</file> + <file>useragentlist.txt</file> + <file>icons/favicon.png</file> + </qresource> +</RCC> diff --git a/Tools/MiniBrowser/qt/MiniBrowserApplication.cpp b/Tools/MiniBrowser/qt/MiniBrowserApplication.cpp new file mode 100644 index 000000000..0ea3c3b78 --- /dev/null +++ b/Tools/MiniBrowser/qt/MiniBrowserApplication.cpp @@ -0,0 +1,246 @@ +/* + * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies) + * Copyright (C) 2010 University of Szeged + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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 APPLE COMPUTER, INC. ``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 APPLE COMPUTER, INC. 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. + */ + +#include "MiniBrowserApplication.h" + +#include "BrowserWindow.h" +#include "utils.h" +#include <QRegExp> +#include <QEvent> +#include <QMouseEvent> +#include <QTouchEvent> +#include <QApplication> + +static inline bool isTouchEvent(const QEvent* event) +{ + switch (event->type()) { + case QEvent::TouchBegin: + case QEvent::TouchUpdate: + case QEvent::TouchEnd: + return true; + default: + return false; + } +} + +static inline bool isMouseEvent(const QEvent* event) +{ + switch (event->type()) { + case QEvent::MouseButtonPress: + case QEvent::MouseMove: + case QEvent::MouseButtonRelease: + case QEvent::MouseButtonDblClick: + return true; + default: + return false; + } +} + +MiniBrowserApplication::MiniBrowserApplication(int& argc, char** argv) + : QApplication(argc, argv) + , m_windowOptions(this) + , m_realTouchEventReceived(false) + , m_pendingFakeTouchEventCount(0) + , m_isRobotized(false) + , m_robotTimeoutSeconds(0) + , m_robotExtraTimeSeconds(0) +{ + setOrganizationName("Nokia"); + setApplicationName("QtMiniBrowser"); + setApplicationVersion("0.1"); + + handleUserOptions(); +} + +bool MiniBrowserApplication::notify(QObject* target, QEvent* event) +{ + // We try to be smart, if we received real touch event, we are probably on a device + // with touch screen, and we should not have touch mocking. + + if (!event->spontaneous() || m_realTouchEventReceived) + return QApplication::notify(target, event); + + if (isTouchEvent(event) && static_cast<QTouchEvent*>(event)->deviceType() == QTouchEvent::TouchScreen) { + if (m_pendingFakeTouchEventCount) + --m_pendingFakeTouchEventCount; + else + m_realTouchEventReceived = true; + return QApplication::notify(target, event); + } + + BrowserWindow* browserWindow = qobject_cast<BrowserWindow*>(target); + if (!browserWindow) + return QApplication::notify(target, event); + + if (event->type() == QEvent::KeyRelease && static_cast<QKeyEvent*>(event)->key() == Qt::Key_Control) { + foreach (int id, m_heldTouchPoints) + if (m_touchPoints.contains(id)) + m_touchPoints[id].state = Qt::TouchPointReleased; + m_heldTouchPoints.clear(); + sendTouchEvent(browserWindow); + } + + if (isMouseEvent(event)) { + const QMouseEvent* const mouseEvent = static_cast<QMouseEvent*>(event); + + QWindowSystemInterface::TouchPoint touchPoint; + touchPoint.area = QRectF(mouseEvent->globalPos(), QSizeF(1, 1)); + touchPoint.pressure = 1; + + switch (mouseEvent->type()) { + case QEvent::MouseButtonPress: + case QEvent::MouseButtonDblClick: + touchPoint.id = mouseEvent->button(); + if (m_touchPoints.contains(touchPoint.id)) + touchPoint.state = Qt::TouchPointMoved; + else + touchPoint.state = Qt::TouchPointPressed; + break; + case QEvent::MouseMove: + if (!mouseEvent->buttons() || !m_touchPoints.contains(mouseEvent->buttons())) + return QApplication::notify(target, event); + touchPoint.id = mouseEvent->buttons(); + touchPoint.state = Qt::TouchPointMoved; + break; + case QEvent::MouseButtonRelease: + touchPoint.state = Qt::TouchPointReleased; + touchPoint.id = mouseEvent->button(); + if (mouseEvent->modifiers().testFlag(Qt::ControlModifier)) { + m_heldTouchPoints.insert(touchPoint.id); + return QApplication::notify(target, event); + } + break; + default: + Q_ASSERT_X(false, "multi-touch mocking", "unhandled event type"); + } + + // Update current touch-point + if (m_touchPoints.isEmpty()) + touchPoint.flags |= QTouchEvent::TouchPoint::Primary; + m_touchPoints.insert(touchPoint.id, touchPoint); + + // Update states for all other touch-points + for (QHash<int, QWindowSystemInterface::TouchPoint>::iterator it = m_touchPoints.begin(), end = m_touchPoints.end(); it != end; ++it) { + if (it.value().id != touchPoint.id) + it.value().state = Qt::TouchPointStationary; + } + + sendTouchEvent(browserWindow); + } + + return QApplication::notify(target, event); +} + +void MiniBrowserApplication::sendTouchEvent(BrowserWindow* browserWindow) +{ + static QTouchDevice* device = 0; + if (!device) { + device = new QTouchDevice; + device->setType(QTouchDevice::TouchScreen); + QWindowSystemInterface::registerTouchDevice(device); + } + + m_pendingFakeTouchEventCount++; + QWindowSystemInterface::handleTouchEvent(browserWindow, QEvent::None, device, m_touchPoints.values()); + + if (!m_windowOptions.useTraditionalDesktopBehavior()) + browserWindow->updateVisualMockTouchPoints(m_touchPoints.values()); + + // Get rid of touch-points that are no longer valid + foreach (const QWindowSystemInterface::TouchPoint& touchPoint, m_touchPoints) { + if (touchPoint.state == Qt::TouchPointReleased) + m_touchPoints.remove(touchPoint.id); + } +} + +static void printHelp(const QString& programName) +{ + qDebug() << "Usage:" << programName.toLatin1().data() + << "[--desktop]" + << "[-r list]" + << "[--robot-timeout seconds]" + << "[--robot-extra-time seconds]" + << "[--window-size (width)x(height)]" + << "[--maximize]" + << "[-f] Full screen mode." + << "[-v]" + << "URL"; +} + +void MiniBrowserApplication::handleUserOptions() +{ + QStringList args = arguments(); + QFileInfo program(args.takeAt(0)); + QString programName("MiniBrowser"); + if (program.exists()) + programName = program.baseName(); + + if (takeOptionFlag(&args, "--help")) { + printHelp(programName); + appQuit(0); + } + + const bool useDesktopBehavior = takeOptionFlag(&args, "--desktop"); + if (!useDesktopBehavior) + qputenv("QT_WEBKIT_USE_MOBILE_THEME", QByteArray("1")); + m_windowOptions.setUseTraditionalDesktopBehavior(useDesktopBehavior); + m_windowOptions.setPrintLoadedUrls(takeOptionFlag(&args, "-v")); + m_windowOptions.setStartMaximized(takeOptionFlag(&args, "--maximize")); + m_windowOptions.setStartFullScreen(takeOptionFlag(&args, "-f")); + + if (args.contains("--window-size")) { + QString value = takeOptionValue(&args, "--window-size"); + QStringList list = value.split(QRegExp("\\D+"), QString::SkipEmptyParts); + if (list.length() == 2) + m_windowOptions.setRequestedWindowSize(QSize(list.at(0).toInt(), list.at(1).toInt())); + } + + if (args.contains("-r")) { + QString listFile = takeOptionValue(&args, "-r"); + if (listFile.isEmpty()) + appQuit(1, "-r needs a list file to start in robotized mode"); + if (!QFile::exists(listFile)) + appQuit(1, "The list file supplied to -r does not exist."); + + m_isRobotized = true; + m_urls = QStringList(listFile); + + // toInt() returns 0 if it fails parsing. + m_robotTimeoutSeconds = takeOptionValue(&args, "--robot-timeout").toInt(); + m_robotExtraTimeSeconds = takeOptionValue(&args, "--robot-extra-time").toInt(); + } else { + int urlArg = args.indexOf(QRegExp("^[^-].*")); + if (urlArg != -1) + m_urls += args.takeAt(urlArg); + } + + if (!args.isEmpty()) { + printHelp(programName); + appQuit(1, QString("Unknown argument(s): %1").arg(args.join(","))); + } +} diff --git a/Tools/MiniBrowser/qt/MiniBrowserApplication.h b/Tools/MiniBrowser/qt/MiniBrowserApplication.h new file mode 100644 index 000000000..719c79de6 --- /dev/null +++ b/Tools/MiniBrowser/qt/MiniBrowserApplication.h @@ -0,0 +1,110 @@ +/* + * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies) + * Copyright (C) 2010 University of Szeged + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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 APPLE COMPUTER, INC. ``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 APPLE COMPUTER, INC. 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. + */ + +#ifndef MiniBrowserApplication_h +#define MiniBrowserApplication_h + +#include <QHash> +#include <QObject> +#include <QStringList> +#include <QtDeclarative> +#include <QtWidgets/QApplication> +#include <QTouchEvent> +#include <QUrl> +#include "qwindowsysteminterface_qpa.h" + +class BrowserWindow; + +class WindowOptions : public QObject { + Q_OBJECT + Q_PROPERTY(bool printLoadedUrls READ printLoadedUrls) + Q_PROPERTY(bool useTraditionalDesktopBehavior READ useTraditionalDesktopBehavior) + Q_PROPERTY(bool startMaximized READ startMaximized) + +public: + WindowOptions(QObject* parent = 0) + : QObject(parent) + , m_printLoadedUrls(false) + , m_useTraditionalDesktopBehavior(false) + , m_startMaximized(false) + , m_windowSize(QSize(980, 735)) + { + } + + void setPrintLoadedUrls(bool enabled) { m_printLoadedUrls = enabled; } + bool printLoadedUrls() const { return m_printLoadedUrls; } + void setUseTraditionalDesktopBehavior(bool enabled) { m_useTraditionalDesktopBehavior = enabled; } + bool useTraditionalDesktopBehavior() const { return m_useTraditionalDesktopBehavior; } + void setStartMaximized(bool enabled) { m_startMaximized = enabled; } + bool startMaximized() const { return m_startMaximized; } + void setStartFullScreen(bool enabled) { m_startFullScreen = enabled; } + bool startFullScreen() const { return m_startFullScreen; } + void setRequestedWindowSize(const QSize& size) { m_windowSize = size; } + QSize requestedWindowSize() const { return m_windowSize; } + +private: + bool m_printLoadedUrls; + bool m_useTraditionalDesktopBehavior; + bool m_startMaximized; + bool m_startFullScreen; + QSize m_windowSize; +}; + +class MiniBrowserApplication : public QApplication { + Q_OBJECT + +public: + MiniBrowserApplication(int& argc, char** argv); + QStringList urls() const { return m_urls; } + bool isRobotized() const { return m_isRobotized; } + int robotTimeout() const { return m_robotTimeoutSeconds; } + int robotExtraTime() const { return m_robotExtraTimeSeconds; } + + WindowOptions m_windowOptions; + + virtual bool notify(QObject*, QEvent*); + +private: + void sendTouchEvent(BrowserWindow*); + void handleUserOptions(); + +private: + bool m_realTouchEventReceived; + int m_pendingFakeTouchEventCount; + bool m_isRobotized; + int m_robotTimeoutSeconds; + int m_robotExtraTimeSeconds; + QStringList m_urls; + + QHash<int, QWindowSystemInterface::TouchPoint> m_touchPoints; + QSet<int> m_heldTouchPoints; +}; + +QML_DECLARE_TYPE(WindowOptions); + +#endif diff --git a/Tools/MiniBrowser/qt/UrlLoader.cpp b/Tools/MiniBrowser/qt/UrlLoader.cpp new file mode 100644 index 000000000..daf5628db --- /dev/null +++ b/Tools/MiniBrowser/qt/UrlLoader.cpp @@ -0,0 +1,131 @@ +/* + * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies) + * Copyright (C) 2009 University of Szeged + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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 APPLE COMPUTER, INC. ``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 APPLE COMPUTER, INC. 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. + */ + +#include "UrlLoader.h" +#include "qquickwebview_p.h" + +#include <QDebug> +#include <QFile> + +UrlLoader::UrlLoader(BrowserWindow* browserWindow, const QString& inputFileName, int timeoutSeconds, int extraTimeSeconds) + : m_browserWindow(browserWindow) + , m_stdOut(stdout) + , m_loaded(0) + , m_numFramesLoading(0) +{ + m_checkIfFinishedTimer.setInterval(200); + m_checkIfFinishedTimer.setSingleShot(true); + connect(&m_checkIfFinishedTimer, SIGNAL(timeout()), this, SLOT(checkIfFinished())); + // loadStarted and loadFinished on QWebPage is emitted for each frame/sub-frame + connect(m_browserWindow->webView(), SIGNAL(loadStarted()), this, SLOT(frameLoadStarted())); + connect(m_browserWindow->webView(), SIGNAL(loadSucceeded()), this, SLOT(frameLoadFinished())); + connect(m_browserWindow->webView(), SIGNAL(loadFailed(QDesktopWebView::ErrorType, int, const QUrl&)), this, SLOT(frameLoadFinished())); + + if (timeoutSeconds) { + m_timeoutTimer.setInterval(timeoutSeconds * 1000); + m_timeoutTimer.setSingleShot(true); + connect(m_browserWindow->webView(), SIGNAL(loadStarted()), &m_timeoutTimer, SLOT(start())); + connect(&m_timeoutTimer, SIGNAL(timeout()), this, SLOT(loadNext())); + } + if (extraTimeSeconds) { + m_extraTimeTimer.setInterval(extraTimeSeconds * 1000); + m_extraTimeTimer.setSingleShot(true); + connect(this, SIGNAL(pageLoadFinished()), &m_extraTimeTimer, SLOT(start())); + connect(&m_extraTimeTimer, SIGNAL(timeout()), this, SLOT(loadNext())); + } else + connect(this, SIGNAL(pageLoadFinished()), this, SLOT(loadNext())); + loadUrlList(inputFileName); +} + +void UrlLoader::loadNext() +{ + m_timeoutTimer.stop(); + m_extraTimeTimer.stop(); + m_checkIfFinishedTimer.stop(); + m_numFramesLoading = 0; + QString qstr; + if (getUrl(qstr)) { + QUrl url(qstr, QUrl::StrictMode); + if (url.isValid()) { + m_stdOut << "Loading " << qstr << " ......" << ++m_loaded << endl; + m_browserWindow->load(url.toString()); + } else + loadNext(); + } else + disconnect(m_browserWindow, 0, this, 0); +} + +void UrlLoader::checkIfFinished() +{ + if (!m_numFramesLoading) + emit pageLoadFinished(); +} + +void UrlLoader::frameLoadStarted() +{ + ++m_numFramesLoading; + m_checkIfFinishedTimer.stop(); +} + +void UrlLoader::frameLoadFinished() +{ + Q_ASSERT(m_numFramesLoading > 0); + --m_numFramesLoading; + // Once our frame has finished loading, wait a moment to call loadNext for cases + // where a sub-frame starts loading or another frame is loaded through JavaScript. + m_checkIfFinishedTimer.start(); +} + +void UrlLoader::loadUrlList(const QString& inputFileName) +{ + QFile inputFile(inputFileName); + if (inputFile.open(QIODevice::ReadOnly | QIODevice::Text)) { + QTextStream stream(&inputFile); + QString line; + while (true) { + line = stream.readLine(); + if (line.isNull()) + break; + m_urls.append(line); + } + } else { + qDebug() << "Can't open list file"; + exit(0); + } + m_index = 0; + inputFile.close(); +} + +bool UrlLoader::getUrl(QString& qstr) +{ + if (m_index == m_urls.size()) + return false; + + qstr = m_urls[m_index++]; + return true; +} diff --git a/Tools/MiniBrowser/qt/UrlLoader.h b/Tools/MiniBrowser/qt/UrlLoader.h new file mode 100644 index 000000000..01e67c3bd --- /dev/null +++ b/Tools/MiniBrowser/qt/UrlLoader.h @@ -0,0 +1,71 @@ +/* + * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies) + * Copyright (C) 2009 University of Szeged + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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 APPLE COMPUTER, INC. ``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 APPLE COMPUTER, INC. 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. + */ + +#ifndef UrlLoader_h +#define UrlLoader_h + +#include "BrowserWindow.h" + +#include <QTextStream> +#include <QTimer> +#include <QVector> + +class UrlLoader : public QObject { + Q_OBJECT + +public: + UrlLoader(BrowserWindow*, const QString&, int, int); + +public slots: + void loadNext(); + +private slots: + void checkIfFinished(); + void frameLoadStarted(); + void frameLoadFinished(); + +signals: + void pageLoadFinished(); + +private: + void loadUrlList(const QString& inputFileName); + bool getUrl(QString& qstr); + +private: + QVector<QString> m_urls; + int m_index; + BrowserWindow* m_browserWindow; + QTextStream m_stdOut; + int m_loaded; + QTimer m_timeoutTimer; + QTimer m_extraTimeTimer; + QTimer m_checkIfFinishedTimer; + int m_numFramesLoading; +}; + +#endif diff --git a/Tools/MiniBrowser/qt/icons/favicon.png b/Tools/MiniBrowser/qt/icons/favicon.png Binary files differnew file mode 100644 index 000000000..4462752a5 --- /dev/null +++ b/Tools/MiniBrowser/qt/icons/favicon.png diff --git a/Tools/MiniBrowser/qt/icons/info.png b/Tools/MiniBrowser/qt/icons/info.png Binary files differnew file mode 100644 index 000000000..db483ff10 --- /dev/null +++ b/Tools/MiniBrowser/qt/icons/info.png diff --git a/Tools/MiniBrowser/qt/icons/next.png b/Tools/MiniBrowser/qt/icons/next.png Binary files differnew file mode 100644 index 000000000..6f3f65d33 --- /dev/null +++ b/Tools/MiniBrowser/qt/icons/next.png diff --git a/Tools/MiniBrowser/qt/icons/previous.png b/Tools/MiniBrowser/qt/icons/previous.png Binary files differnew file mode 100644 index 000000000..93be3d1ee --- /dev/null +++ b/Tools/MiniBrowser/qt/icons/previous.png diff --git a/Tools/MiniBrowser/qt/icons/refresh.png b/Tools/MiniBrowser/qt/icons/refresh.png Binary files differnew file mode 100644 index 000000000..cab4d02c7 --- /dev/null +++ b/Tools/MiniBrowser/qt/icons/refresh.png diff --git a/Tools/MiniBrowser/qt/icons/stop.png b/Tools/MiniBrowser/qt/icons/stop.png Binary files differnew file mode 100644 index 000000000..b68290bf1 --- /dev/null +++ b/Tools/MiniBrowser/qt/icons/stop.png diff --git a/Tools/MiniBrowser/qt/icons/touchpoint.png b/Tools/MiniBrowser/qt/icons/touchpoint.png Binary files differnew file mode 100644 index 000000000..7649ee991 --- /dev/null +++ b/Tools/MiniBrowser/qt/icons/touchpoint.png diff --git a/Tools/MiniBrowser/qt/main.cpp b/Tools/MiniBrowser/qt/main.cpp new file mode 100644 index 000000000..26877ae77 --- /dev/null +++ b/Tools/MiniBrowser/qt/main.cpp @@ -0,0 +1,74 @@ +/* + * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies) + * Copyright (C) 2010 University of Szeged + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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 APPLE COMPUTER, INC. ``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 APPLE COMPUTER, INC. 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. + */ + +#include "BrowserWindow.h" + +#include "MiniBrowserApplication.h" +#include "UrlLoader.h" + +#include <qdeclarative.h> + +#include <QDir> +#include <QLatin1String> +#include <QRegExp> + +int main(int argc, char** argv) +{ + // FIXME: We must add support for the threaded rendering as it is the default. + qputenv("QML_NO_THREADED_RENDERER", QByteArray("1")); + + MiniBrowserApplication app(argc, argv); + + if (app.isRobotized()) { + BrowserWindow* window = new BrowserWindow(&app.m_windowOptions); + UrlLoader loader(window, app.urls().at(0), app.robotTimeout(), app.robotExtraTime()); + loader.loadNext(); + window->show(); + return app.exec(); + } + + QStringList urls = app.urls(); + + if (urls.isEmpty()) { + QString defaultIndexFile = QString("%1/%2").arg(QDir::homePath()).arg(QLatin1String("index.html")); + if (QFile(defaultIndexFile).exists()) + urls.append(QString("file://") + defaultIndexFile); + else + urls.append("http://www.google.com"); + } + + BrowserWindow* window = new BrowserWindow(&app.m_windowOptions); + window->load(urls.at(0)); + + for (int i = 1; i < urls.size(); ++i) + window->newWindow(urls.at(i)); + + app.exec(); + + return 0; +} diff --git a/Tools/MiniBrowser/qt/qml/AlertDialog.qml b/Tools/MiniBrowser/qt/qml/AlertDialog.qml new file mode 100644 index 000000000..50eb1a58b --- /dev/null +++ b/Tools/MiniBrowser/qt/qml/AlertDialog.qml @@ -0,0 +1,38 @@ +/* + * Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies) + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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 APPLE COMPUTER, INC. ``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 APPLE COMPUTER, INC. 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. + */ + +import QtQuick 2.0 + +Dialog { + title: "JavaScript Alert" + message: model.message + + DialogButton { + text: "OK" + onClicked: model.dismiss() + } +} diff --git a/Tools/MiniBrowser/qt/qml/BrowserWindow.qml b/Tools/MiniBrowser/qt/qml/BrowserWindow.qml new file mode 100644 index 000000000..0d73dceca --- /dev/null +++ b/Tools/MiniBrowser/qt/qml/BrowserWindow.qml @@ -0,0 +1,289 @@ +/* + * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies) + * Copyright (C) 2010 University of Szeged + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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 APPLE COMPUTER, INC. ``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 APPLE COMPUTER, INC. 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. + */ + +import QtQuick 2.0 +import QtWebKit 3.0 +import QtWebKit.experimental 3.0 + +Rectangle { + // Do not define anchors or an initial size here! This would mess up with QSGView::SizeRootObjectToView. + + property alias webview: webView + + signal pageTitleChanged(string title) + + function load(address) { + webView.load(address) + } + + function focusAddressBar() { + addressLine.forceActiveFocus() + addressLine.selectAll() + } + + Rectangle { + id: navigationBar + color: "#efefef" + height: 38 + anchors { + top: parent.top + left: parent.left + right: parent.right + } + + Row { + height: parent.height - 6 + anchors { + verticalCenter: parent.verticalCenter + left: parent.left + leftMargin: 3 + } + spacing: 3 + id: controlsRow + Rectangle { + id: backButton + height: parent.height + width: height + color: "#efefef" + radius: 6 + + property alias enabled: webView.canGoBack + + Image { + anchors.centerIn: parent + source: "../icons/previous.png" + } + + Rectangle { + anchors.fill: parent + color: parent.color + radius: parent.radius + opacity: 0.8 + visible: !parent.enabled + } + + MouseArea { + anchors.fill: parent + onPressed: { if (parent.enabled) parent.color = "#cfcfcf" } + onReleased: { parent.color = "#efefef" } + onClicked: { + if (parent.enabled) { + console.log("MiniBrowser: Going backward in session history.") + webView.goBack() + } + } + } + } + Rectangle { + id: forwardButton + height: parent.height + width: height + color: "#efefef" + radius: 6 + + property alias enabled: webView.canGoForward + + Image { + anchors.centerIn: parent + source: "../icons/next.png" + } + + Rectangle { + anchors.fill: parent + color: parent.color + radius: parent.radius + opacity: 0.8 + visible: !parent.enabled + } + + MouseArea { + anchors.fill: parent + onPressed: { if (parent.enabled) parent.color = "#cfcfcf" } + onReleased: { parent.color = "#efefef" } + onClicked: { + if (parent.enabled) { + console.log("MiniBrowser: Going forward in session history.") + webView.goForward() + } + } + } + } + Rectangle { + id: reloadButton + height: parent.height + width: height + color: "#efefef" + radius: 6 + + Image { + anchors.centerIn: parent + source: webView.loading ? "../icons/stop.png" : "../icons/refresh.png" + } + + MouseArea { + anchors.fill: parent + onPressed: { parent.color = "#cfcfcf" } + onReleased: { parent.color = "#efefef" } + onClicked: { + if (webView.loading) { + console.log("stop loading") + webView.stop() + } else { + console.log("reloading") + webView.reload() + } + } + } + } + + Rectangle { + id: viewportInfoButton + height: parent.height + width: height + color: { viewportInfoItem.visible ? "#cfcfcf" : "#efefef" } + radius: 6 + + Image { + anchors.centerIn: parent + source: "../icons/info.png" + } + + MouseArea { + anchors.fill: parent + onClicked: { + viewportInfoItem.visible = !viewportInfoItem.visible + } + } + } + } + Rectangle { + color: "white" + height: 26 + border.width: 1 + border.color: "#bfbfbf" + radius: 3 + anchors { + left: controlsRow.right + right: parent.right + margins: 6 + verticalCenter: parent.verticalCenter + } + Rectangle { + anchors { + top: parent.top + bottom: parent.bottom + left: parent.left + } + radius: 3 + width: parent.width / 100 * webView.loadProgress + color: "blue" + opacity: 0.3 + visible: webView.loadProgress != 100 + } + Image { + id: favIcon + source: webView.icon != '' ? webView.icon : '../icons/favicon.png' + width: 16 + height: 16 + anchors { + left: parent.left + leftMargin: 4 + verticalCenter: parent.verticalCenter + } + } + TextInput { + id: addressLine + selectByMouse: true + font { + pointSize: 11 + family: "Sans" + } + anchors { + verticalCenter: parent.verticalCenter + left: favIcon.right + right: parent.right + margins: 6 + } + + Keys.onReturnPressed:{ + console.log("going to: ", addressLine.text) + webView.load(utils.urlFromUserInput(addressLine.text)) + } + + Keys.onPressed: { + if (((event.modifiers & Qt.ControlModifier) && event.key == Qt.Key_L) || event.key == Qt.key_F6) { + focusAddressBar() + event.accepted = true + } + } + } + } + } + + WebView { + id: webView + anchors { + top: navigationBar.bottom + left: parent.left + right: parent.right + bottom: parent.bottom + } + + onTitleChanged: pageTitleChanged(title) + onUrlChanged: { + addressLine.text = url + if (options.printLoadedUrls) + console.log("Loaded:", webView.url); + forceActiveFocus(); + } + + experimental.itemSelector: ItemSelector { } + experimental.alertDialog: AlertDialog { } + experimental.confirmDialog: ConfirmDialog { } + experimental.promptDialog: PromptDialog { } + } + + ViewportInfoItem { + id: viewportInfoItem + anchors { + top: navigationBar.bottom + left: parent.left + right: parent.right + bottom: parent.bottom + } + visible: false + viewportInfo : webView.experimental.viewportInfo + } + + Keys.onPressed: { + if (((event.modifiers & Qt.ControlModifier) && event.key == Qt.Key_L) || event.key == Qt.key_F6) { + focusAddressBar() + event.accepted = true + } + } +} diff --git a/Tools/MiniBrowser/qt/qml/ConfirmDialog.qml b/Tools/MiniBrowser/qt/qml/ConfirmDialog.qml new file mode 100644 index 000000000..974d065b7 --- /dev/null +++ b/Tools/MiniBrowser/qt/qml/ConfirmDialog.qml @@ -0,0 +1,47 @@ +/* + * Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies) + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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 APPLE COMPUTER, INC. ``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 APPLE COMPUTER, INC. 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. + */ + +import QtQuick 2.0 + +Dialog { + title: "JavaScript Confirmation" + message: model.message + + Row { + spacing: 5 + + DialogButton { + text: "OK" + onClicked: model.accept() + } + + DialogButton { + text: "Cancel" + onClicked: model.reject() + } + } +} diff --git a/Tools/MiniBrowser/qt/qml/Dialog.qml b/Tools/MiniBrowser/qt/qml/Dialog.qml new file mode 100644 index 000000000..5ca6ee008 --- /dev/null +++ b/Tools/MiniBrowser/qt/qml/Dialog.qml @@ -0,0 +1,85 @@ +/* + * Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies) + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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 APPLE COMPUTER, INC. ``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 APPLE COMPUTER, INC. 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. + */ + +import QtQuick 2.0 + +Rectangle { + id: dialog + + property alias title: titleText.text + property alias message: messageText.text + + default property alias __children: dynamicColumn.children + + color: "#efefef" + + width: 300 + height: 150 + + border { + width: 1 + color: "#bfbfbf" + } + + smooth: true + radius: 5 + + anchors.centerIn: parent + + Item { + id: staticContent + anchors.centerIn: parent + anchors.fill: parent + anchors.margins: 10 + + Text { + id: titleText + width: parent.width + anchors.horizontalCenter: parent.horizontalCenter + font.pixelSize: 16 + font.weight: Font.Bold + elide: Text.ElideRight + } + + Text { + id: messageText + width: parent.width + wrapMode: Text.WordWrap + anchors.centerIn: parent + } + + Column { + id: dynamicColumn + spacing: 5 + anchors { + margins: 10 + bottom: staticContent.bottom + horizontalCenter: staticContent.horizontalCenter + } + } + } +} diff --git a/Tools/MiniBrowser/qt/qml/DialogButton.qml b/Tools/MiniBrowser/qt/qml/DialogButton.qml new file mode 100644 index 000000000..eaa1f6153 --- /dev/null +++ b/Tools/MiniBrowser/qt/qml/DialogButton.qml @@ -0,0 +1,60 @@ +/* + * Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies) + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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 APPLE COMPUTER, INC. ``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 APPLE COMPUTER, INC. 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. + */ + +import QtQuick 2.0 + +Rectangle { + id: button + + property alias text: buttonText.text + + signal clicked + + color: mouseArea.pressed ? "#eaeaea" : "#fbfbfb" + + width: 60 + height: 20 + + border { + width: 1 + color: "#aeaeae" + } + + smooth: true + radius: 5 + + Text { + id: buttonText + anchors.centerIn: parent + } + + MouseArea { + id: mouseArea + anchors.fill: parent + onClicked: button.clicked() + } +} diff --git a/Tools/MiniBrowser/qt/qml/DialogLineInput.qml b/Tools/MiniBrowser/qt/qml/DialogLineInput.qml new file mode 100644 index 000000000..1c85ff962 --- /dev/null +++ b/Tools/MiniBrowser/qt/qml/DialogLineInput.qml @@ -0,0 +1,55 @@ +/* + * Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies) + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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 APPLE COMPUTER, INC. ``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 APPLE COMPUTER, INC. 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. + */ + +import QtQuick 2.0 + +Rectangle { + id: dialogLineInput + + property alias text: input.text + signal accepted() + + height: 20 + color: "#fefefe" + + border { + width: 1 + color: "#aeaeae" + } + + smooth: true + radius: 3 + clip: true + + TextInput { + id: input + focus: true + anchors.fill: parent + + onAccepted: dialogLineInput.accepted() + } +} diff --git a/Tools/MiniBrowser/qt/qml/ItemSelector.qml b/Tools/MiniBrowser/qt/qml/ItemSelector.qml new file mode 100644 index 000000000..43022b684 --- /dev/null +++ b/Tools/MiniBrowser/qt/qml/ItemSelector.qml @@ -0,0 +1,83 @@ +/* + * Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies) + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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 APPLE COMPUTER, INC. ``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 APPLE COMPUTER, INC. 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. + */ + +import QtQuick 2.0 + +MouseArea { + // To avoid conflicting with ListView.model when inside ListView context. + property QtObject selectorModel: model + anchors.fill: parent + onClicked: selectorModel.reject() + + Rectangle { + clip: true + x: selectorModel.elementRect.x + y: selectorModel.elementRect.y + selectorModel.elementRect.height + height: Math.min(400, parent.height - y) + width: 200 + radius: 5 + color: "gainsboro" + opacity: 0.8 + + ListView { + anchors.fill: parent + anchors.margins: 10 + spacing: 5 + model: selectorModel.items + + delegate: Rectangle { + color: model.selected ? "gold" : "silver" + height: 50 + width: parent.width + + Text { + anchors.centerIn: parent + text: model.text + color: model.enabled ? "black" : "gainsboro" + } + + MouseArea { + anchors.fill: parent + enabled: model.enabled + onClicked: selectorModel.accept(model.index) + } + } + + section.property: "group" + section.delegate: Rectangle { + height: 30 + width: parent.width + color: "silver" + Text { + anchors.centerIn: parent + text: section + font.bold: true + } + } + } + } +} diff --git a/Tools/MiniBrowser/qt/qml/MockTouchPoint.qml b/Tools/MiniBrowser/qt/qml/MockTouchPoint.qml new file mode 100644 index 000000000..fd05156da --- /dev/null +++ b/Tools/MiniBrowser/qt/qml/MockTouchPoint.qml @@ -0,0 +1,51 @@ +/* + * Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies) + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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 APPLE COMPUTER, INC. ``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 APPLE COMPUTER, INC. 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. + */ + +import QtQuick 2.0 + +Item { + id: mockTouchPoint + + property bool pressed: false + property int pointId: 0 + + Image { + source: "../icons/touchpoint.png" + x: -(width / 2) + y: -(height / 2) + opacity: parent.pressed ? 0.8 : 0.0 + + Behavior on opacity { + NumberAnimation { duration: 200 } + } + + Text { + text: mockTouchPoint.pointId + anchors.centerIn: parent + } + } +} diff --git a/Tools/MiniBrowser/qt/qml/PromptDialog.qml b/Tools/MiniBrowser/qt/qml/PromptDialog.qml new file mode 100644 index 000000000..acc594622 --- /dev/null +++ b/Tools/MiniBrowser/qt/qml/PromptDialog.qml @@ -0,0 +1,61 @@ +/* + * Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies) + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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 APPLE COMPUTER, INC. ``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 APPLE COMPUTER, INC. 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. + */ + +import QtQuick 2.0 + +Dialog { + id: dialog + + title: "JavaScript Prompt" + message: model.message + + height: 180 + + DialogLineInput { + id: input + width: dialog.width - 30 + text: model.defaultValue + + onAccepted: model.accept(input.text) + } + + Row { + id: buttonRow + spacing: 5 + anchors.horizontalCenter: parent.horizontalCenter + + DialogButton { + text: "OK" + onClicked: model.accept(input.text) + } + + DialogButton { + text: "Cancel" + onClicked: model.reject() + } + } +} diff --git a/Tools/MiniBrowser/qt/qml/ViewportInfoItem.qml b/Tools/MiniBrowser/qt/qml/ViewportInfoItem.qml new file mode 100644 index 000000000..77f734cad --- /dev/null +++ b/Tools/MiniBrowser/qt/qml/ViewportInfoItem.qml @@ -0,0 +1,84 @@ +import QtQuick 2.0 +import QtWebKit 3.0 + +Rectangle { + property var viewportInfo + + color: "black" + opacity: 0.8 + + Item { + anchors.fill: parent + anchors.margins: 20 + + property string fontFamily: "Nokia Pure, Helvetica" + property color fontColor: "white" + + Text { + id: viewportInfoLabel + text: "Viewport Info" + color: "white" + font.family: "Nokia Pure, Helvetica" + font.pointSize: 24 + } + Text { + id: currentScaleLabel + anchors.top: viewportInfoLabel.bottom + anchors.topMargin: 30 + text: "Current scale: " + parseFloat(viewportInfo.currentScale.toFixed(4)) + font.family: parent.fontFamily + color: parent.fontColor + } + Text { + id: initialScaleLabel + anchors.top: currentScaleLabel.bottom + text: "Initial scale: " + parseFloat(viewportInfo.initialScale.toFixed(4)) + font.family: parent.fontFamily + color: parent.fontColor + } + Text { + id: minimumScaleLabel + anchors.top: initialScaleLabel.bottom + text: "Minimum scale: " + parseFloat(viewportInfo.minimumScale.toFixed(4)) + font.family: parent.fontFamily + color: parent.fontColor + } + Text { + id: maximumScaleLabel + anchors.top: minimumScaleLabel.bottom + text: "Maximum scale: " + parseFloat(viewportInfo.maximumScale.toFixed(4)) + font.family: parent.fontFamily + color: parent.fontColor + } + Text { + id: devicePixelRatioLabel + anchors.top: maximumScaleLabel.bottom + anchors.topMargin: 30 + text: "Device pixel ratio: " + parseFloat(viewportInfo.devicePixelRatio.toFixed(4)) + font.family: parent.fontFamily + color: parent.fontColor + } + Text { + id: contentsSizeLabel + anchors.top: devicePixelRatioLabel.bottom + text: "Contents size: " + viewportInfo.contentsSize.width + "x" + viewportInfo.contentsSize.height + font.family: parent.fontFamily + color: parent.fontColor + } + Text { + id: layoutSizeLabel + anchors.top: contentsSizeLabel.bottom + text: "Viewport layout size: " + viewportInfo.layoutSize.width + "x" + viewportInfo.layoutSize.height + font.family: parent.fontFamily + color: parent.fontColor + } + Text { + id: scalableLabel + anchors.top: layoutSizeLabel.bottom + anchors.topMargin: 30 + text: "View " + (viewportInfo.isScalable ? "is " : "is not " ) + "scalable." + font.family: parent.fontFamily + color: parent.fontColor + } + } +} diff --git a/Tools/MiniBrowser/qt/useragentlist.txt b/Tools/MiniBrowser/qt/useragentlist.txt new file mode 100644 index 000000000..decf1043e --- /dev/null +++ b/Tools/MiniBrowser/qt/useragentlist.txt @@ -0,0 +1,13 @@ +Mozilla/5.0 (X11; Linux i686) AppleWebKit/535.1 (KHTML, like Gecko) QtTestBrowser/0.1 Safari/535.1 +Mozilla/5.0 (SymbianOS/9.4; U; Series60/5.0) AppleWebKit/535.1 (KHTML, like Gecko) QtTestBrowser/0.1 Mobile Safari/535.1 +Mozilla/5.0 (Macintosh; PPC Mac OS X) AppleWebKit/125.2 (KHTML, like Gecko) Safari/125.8 +Mozilla/5.0 (Unknown; like Android 2.2; Intel Mac OS X 10_6) AppleWebKit/533.3 (KHTML, like Gecko) Version/4.0.3 Mobile Safari/533.3 +Mozilla/5.0 (iPhone; CPU OS 3_2 like Mac OS X) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B334b Safari/531.21.10 +Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_0 like Mac OS X; en-us) AppleWebKit/532.9 (KHTML, like Gecko) Version/4.0.5 Mobile/8A293 Safari/6531.22.7 +Mozilla/5.0 (iPad; U; CPU OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B334b Safari/531.21.10 +Opera/9.80 (Windows NT 6.0; U; en) Presto/2.8.99 Version/11.10 +Mozilla/5.0 (SymbianOS/9.4; U; Series60/5.0 Nokia5800d-1b/20.2.014; Profile/MIDP-2.1 Configuration/CLDC-1.1) AppleWebKit/413 (KHTML, like Gecko) Safari/413 +Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.2; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0) +Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0) +Mozilla/5.0 (Windows; Windows NT 5.1) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.68 Safari/534.24 +Mozilla/5.0 (Windows NT 6.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1 diff --git a/Tools/MiniBrowser/qt/utils.cpp b/Tools/MiniBrowser/qt/utils.cpp new file mode 100644 index 000000000..d6491cc4e --- /dev/null +++ b/Tools/MiniBrowser/qt/utils.cpp @@ -0,0 +1,98 @@ +/* + * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies) + * Copyright (C) 2011 University of Szeged + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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 APPLE COMPUTER, INC. ``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 APPLE COMPUTER, INC. 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. + */ + +#include "utils.h" + +bool takeOptionFlag(QStringList* arguments, const QString& name) +{ + int index = arguments->indexOf(name); + if (index != -1) + arguments->removeAt(index); + return index != -1; +} + +QString takeOptionValue(QStringList* arguments, const QString& name) +{ + QString result; + + int index = arguments->indexOf(name); + if (index != -1) { + arguments->removeAt(index); + if (index < arguments->count() && !arguments->at(index).startsWith("-")) + result = arguments->takeAt(index); + } + + return result; +} + +QString formatKeys(QList<QString> keys) +{ + QString result; + for (int i = 0; i < keys.count() - 1; i++) + result.append(keys.at(i) + "|"); + result.append(keys.last()); + return result; +} + +QList<QString> enumToKeys(const QMetaObject o, const QString& name, const QString& strip) +{ + QList<QString> list; + + int enumIndex = o.indexOfEnumerator(name.toLatin1().data()); + QMetaEnum enumerator = o.enumerator(enumIndex); + + if (enumerator.isValid()) { + for (int i = 0; i < enumerator.keyCount(); i++) { + QString key(enumerator.valueToKey(i)); + list.append(key.remove(strip)); + } + } + + return list; +} + +void appQuit(int exitCode, const QString& msg) +{ + if (!msg.isEmpty()) { + if (exitCode > 0) + qDebug("ERROR: %s", msg.toLatin1().data()); + else + qDebug() << msg; + } + exit(exitCode); +} + +QUrl Utils::urlFromUserInput(const QString& string) +{ + QString input(string); + QFileInfo fi(input); + if (fi.exists() && fi.isRelative()) + input = fi.absoluteFilePath(); + + return QUrl::fromUserInput(input); +} diff --git a/Tools/MiniBrowser/qt/utils.h b/Tools/MiniBrowser/qt/utils.h new file mode 100644 index 000000000..154afbe4e --- /dev/null +++ b/Tools/MiniBrowser/qt/utils.h @@ -0,0 +1,61 @@ +/* + * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies) + * Copyright (C) 2011 University of Szeged + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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 APPLE COMPUTER, INC. ``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 APPLE COMPUTER, INC. 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. + */ + +#ifndef utils_h +#define utils_h + +#include <QtCore> + +#ifndef NO_RETURN +#if defined(__CC_ARM) || defined(__ARMCC__) +#define NO_RETURN __declspec(noreturn) +#elif defined(__GNUC__) +#define NO_RETURN __attribute((__noreturn__)) +#else +#define NO_RETURN +#endif +#endif + +// options handling +class Utils : public QObject { + Q_OBJECT +public: + Utils(QObject* parent = 0) + : QObject(parent) { } + + Q_INVOKABLE static QUrl urlFromUserInput(const QString& input); +}; + +bool takeOptionFlag(QStringList* arguments, const QString& name); +QString takeOptionValue(QStringList* arguments, const QString& name); +QString formatKeys(QList<QString> keys); +QList<QString> enumToKeys(const QMetaObject, const QString&, const QString&); + +NO_RETURN void appQuit(int status, const QString& msg = QString()); + +#endif diff --git a/Tools/MiniBrowser/win/BrowserView.cpp b/Tools/MiniBrowser/win/BrowserView.cpp new file mode 100644 index 000000000..fdf076e9c --- /dev/null +++ b/Tools/MiniBrowser/win/BrowserView.cpp @@ -0,0 +1,164 @@ +/* + * Copyright (C) 2010 Apple Inc. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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 APPLE INC. AND ITS 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 APPLE INC. OR ITS 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. + */ + +#include "StdAfx.h" +#include "BrowserView.h" + +#include "BrowserWindow.h" +#include <WebKit2/WKContextPrivate.h> +#include <WebKit2/WKURLCF.h> + +static const unsigned short HIGH_BIT_MASK_SHORT = 0x8000; + +BrowserView::BrowserView() + : m_webView(0) +{ +} + +// UI Client Callbacks + +static WKPageRef createNewPage(WKPageRef page, WKURLRequestRef request, WKDictionaryRef features, WKEventModifiers modifiers, WKEventMouseButton mouseButton, const void* clientInfo) +{ + BrowserWindow* browserWindow = BrowserWindow::create(); + browserWindow->createWindow(0, 0, 800, 600); + + return WKViewGetPage(browserWindow->view().webView()); +} + +static void showPage(WKPageRef page, const void *clientInfo) +{ + static_cast<BrowserWindow*>(const_cast<void*>(clientInfo))->showWindow(); +} + +static void closePage(WKPageRef page, const void *clientInfo) +{ +} + +static void runJavaScriptAlert(WKPageRef page, WKStringRef alertText, WKFrameRef frame, const void* clientInfo) +{ +} + +static bool runJavaScriptConfirm(WKPageRef page, WKStringRef message, WKFrameRef frame, const void* clientInfo) +{ + return false; +} + +static WKStringRef runJavaScriptPrompt(WKPageRef page, WKStringRef message, WKStringRef defaultValue, WKFrameRef frame, const void* clientInfo) +{ + return 0; +} + +static void setStatusText(WKPageRef page, WKStringRef text, const void* clientInfo) +{ +} + +static void mouseDidMoveOverElement(WKPageRef page, WKHitTestResultRef hitTestResult, WKEventModifiers modifiers, WKTypeRef userData, const void *clientInfo) +{ +} + +void BrowserView::create(RECT webViewRect, BrowserWindow* parentWindow) +{ + assert(!m_webView); + + bool isShiftKeyDown = ::GetKeyState(VK_SHIFT) & HIGH_BIT_MASK_SHORT; + + WKContextRef context; + if (isShiftKeyDown) + context = WKContextGetSharedThreadContext(); + else + context = WKContextGetSharedProcessContext(); + + m_webView = WKViewCreate(webViewRect, context, 0, parentWindow->window()); + + WKPageUIClient uiClient = { + kWKPageUIClientCurrentVersion, + parentWindow, /* clientInfo */ + 0, /* createNewPage_deprecatedForUseWithV0 */ + showPage, + closePage, + 0, /* takeFocus */ + 0, /* focus */ + 0, /* unfocus */ + runJavaScriptAlert, + runJavaScriptConfirm, + runJavaScriptPrompt, + setStatusText, + 0, /* mouseDidMoveOverElement_deprecatedForUseWithV0 */ + 0, /* missingPluginButtonClicked */ + 0, /* didNotHandleKeyEvent */ + 0, /* didNotHandleWheelEvent */ + 0, /* toolbarsAreVisible */ + 0, /* setToolbarsAreVisible */ + 0, /* menuBarIsVisible */ + 0, /* setMenuBarIsVisible */ + 0, /* statusBarIsVisible */ + 0, /* setStatusBarIsVisible */ + 0, /* isResizable */ + 0, /* setIsResizable */ + 0, /* getWindowFrame */ + 0, /* setWindowFrame */ + 0, /* runBeforeUnloadConfirmPanel */ + 0, /* didDraw */ + 0, /* pageDidScroll */ + 0, /* exceededDatabaseQuota */ + 0, /* runOpenPanel */ + 0, /* decidePolicyForGeolocationPermissionRequest */ + 0, /* headerHeight */ + 0, /* footerHeight */ + 0, /* drawHeader */ + 0, /* drawFooter */ + 0, /* printFrame */ + 0, /* runModal */ + 0, /* didCompleteRubberBandForMainFrame */ + 0, /* saveDataToFileInDownloadsFolder */ + 0, /* shouldInterruptJavaScript */ + createNewPage, + mouseDidMoveOverElement, + }; + + WKPageSetPageUIClient(WKViewGetPage(m_webView), &uiClient); + + WKViewSetIsInWindow(m_webView, true); +} + +void BrowserView::setFrame(RECT rect) +{ + HWND webViewWindow = WKViewGetWindow(m_webView); + ::SetWindowPos(webViewWindow, 0, rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top, SWP_NOZORDER | SWP_NOACTIVATE | SWP_NOCOPYBITS); +} + +void BrowserView::goToURL(const std::wstring& urlString) +{ + CFStringRef string = CFStringCreateWithCharacters(0, (const UniChar*)urlString.data(), urlString.size()); + CFURLRef cfURL = CFURLCreateWithString(0, string, 0); + CFRelease(string); + + WKURLRef url = WKURLCreateWithCFURL(cfURL); + CFRelease(cfURL); + + WKPageRef page = WKViewGetPage(m_webView); + WKPageLoadURL(page, url); + WKRelease(url); +} diff --git a/Tools/MiniBrowser/win/BrowserView.h b/Tools/MiniBrowser/win/BrowserView.h new file mode 100644 index 000000000..08c5e4a39 --- /dev/null +++ b/Tools/MiniBrowser/win/BrowserView.h @@ -0,0 +1,49 @@ +/* + * Copyright (C) 2010 Apple Inc. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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 APPLE INC. AND ITS 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 APPLE INC. OR ITS 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. + */ + +#ifndef BrowserView_h +#define BrowserView_h + +#include <WebKit2/WebKit2.h> +#include <string> + +class BrowserWindow; + +class BrowserView { +public: + BrowserView(); + + void goToURL(const std::wstring& url); + + void create(RECT, BrowserWindow* parentWindow); + void setFrame(RECT); + + WKViewRef webView() const { return m_webView; } + +private: + WKViewRef m_webView; +}; + +#endif // BrowserView_h diff --git a/Tools/MiniBrowser/win/BrowserWindow.cpp b/Tools/MiniBrowser/win/BrowserWindow.cpp new file mode 100644 index 000000000..dc43a684e --- /dev/null +++ b/Tools/MiniBrowser/win/BrowserWindow.cpp @@ -0,0 +1,261 @@ +/* + * Copyright (C) 2010 Apple Inc. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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 APPLE INC. AND ITS 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 APPLE INC. OR ITS 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. + */ + +#include "StdAfx.h" +#include "BrowserWindow.h" +#include "MiniBrowser.h" +#include "Resource.h" + +#include <assert.h> +#include <commctrl.h> +#include <shlwapi.h> +#include <vector> +#include <wininet.h> + +using namespace std; + +BrowserWindow::BrowserWindow() + : m_window(0) + , m_rebarWindow(0) + , m_comboBoxWindow(0) +{ +} + +LRESULT CALLBACK BrowserWindow::BrowserWindowWndProc(HWND window, UINT message, WPARAM wParam, LPARAM lParam) +{ + LONG_PTR longPtr = ::GetWindowLongPtr(window, 0); + + if (BrowserWindow* browserView = reinterpret_cast<BrowserWindow*>(longPtr)) + return browserView->wndProc(window, message, wParam, lParam); + + if (message == WM_CREATE) { + LPCREATESTRUCT createStruct = reinterpret_cast<LPCREATESTRUCT>(lParam); + BrowserWindow* browserWindow = static_cast<BrowserWindow*>(createStruct->lpCreateParams); + browserWindow->m_window = window; + + ::SetWindowLongPtr(window, 0, (LONG_PTR)browserWindow); + + browserWindow->onCreate(createStruct); + return 0; + } + + return ::DefWindowProc(window, message, wParam, lParam); +} + +LRESULT BrowserWindow::wndProc(HWND window, UINT message, WPARAM wParam, LPARAM lParam) +{ + LRESULT lResult = 0; + bool handled = true; + + switch (message) { + case WM_ERASEBKGND: + lResult = 1; + break; + + case WM_COMMAND: + lResult = onCommand(LOWORD(wParam), handled); + break; + + case WM_SIZE: + onSize(LOWORD(lParam), HIWORD(lParam)); + break; + + case WM_DESTROY: + onDestroy(); + break; + + case WM_NCDESTROY: + onNCDestroy(); + break; + + default: + handled = false; + } + + if (!handled) + lResult = ::DefWindowProc(window, message, wParam, lParam); + + return lResult; +} + +void BrowserWindow::createWindow(int x, int y, int width, int height) +{ + assert(!m_window); + + // Register the class. + WNDCLASSEX windowClass = { 0 }; + windowClass.cbSize = sizeof(windowClass); + windowClass.style = 0; + windowClass.lpfnWndProc = BrowserWindowWndProc; + windowClass.cbClsExtra = 0; + windowClass.cbWndExtra = sizeof(this); + windowClass.hInstance = MiniBrowser::shared().instance(); + windowClass.hIcon = 0; + windowClass.hCursor = ::LoadCursor(0, IDC_ARROW); + windowClass.hbrBackground = (HBRUSH)::GetStockObject(WHITE_BRUSH); + windowClass.lpszMenuName = MAKEINTRESOURCE(IDR_MAINFRAME); + windowClass.lpszClassName = L"MiniBrowser"; + windowClass.hIconSm = 0; + + ::RegisterClassEx(&windowClass); + + ::CreateWindowW(L"MiniBrowser", L"MiniBrowser", WS_OVERLAPPEDWINDOW, x, y, width, height, 0, 0, MiniBrowser::shared().instance(), this); +} + +void BrowserWindow::showWindow() +{ + assert(m_window); + + ::ShowWindow(m_window, SW_SHOWNORMAL); +} + +void BrowserWindow::goToURL(const std::wstring& url) +{ + m_browserView.goToURL(url); +} + +void BrowserWindow::onCreate(LPCREATESTRUCT createStruct) +{ + // Register our window. + MiniBrowser::shared().registerWindow(this); + + // Create the rebar control. + m_rebarWindow = ::CreateWindowEx(0, REBARCLASSNAME, 0, WS_VISIBLE | WS_BORDER | WS_CHILD | WS_CLIPCHILDREN | WS_CLIPSIBLINGS | CCS_NODIVIDER | CCS_NOPARENTALIGN | RBS_VARHEIGHT | RBS_BANDBORDERS, + 0, 0, 0, 0, m_window, 0, createStruct->hInstance, 0); + REBARINFO rebarInfo = { 0 }; + rebarInfo.cbSize = sizeof(rebarInfo); + rebarInfo.fMask = 0; + ::SendMessage(m_rebarWindow, RB_SETBARINFO, 0, (LPARAM)&rebarInfo); + + // Create the combo box control. + m_comboBoxWindow = ::CreateWindowEx(0, L"combobox", 0, WS_VISIBLE | WS_CHILD | WS_TABSTOP | WS_VSCROLL | WS_CLIPCHILDREN | WS_CLIPSIBLINGS | CBS_AUTOHSCROLL | CBS_DROPDOWN, + 0, 0, 0, 0, m_rebarWindow, 0, createStruct->hInstance, 0); + SendMessage(m_comboBoxWindow, WM_SETFONT, (WPARAM)GetStockObject(DEFAULT_GUI_FONT), MAKELPARAM(TRUE, 0)); + + REBARBANDINFO bandInfo; + bandInfo.cbSize = sizeof(bandInfo); + bandInfo.fMask = RBBIM_STYLE | RBBIM_TEXT | RBBIM_CHILD | RBBIM_CHILDSIZE | RBBIM_SIZE; + bandInfo.fStyle = RBBS_CHILDEDGE | RBBS_GRIPPERALWAYS; + bandInfo.lpText = L"Address"; + bandInfo.hwndChild = m_comboBoxWindow; + + RECT comboBoxRect; + ::GetWindowRect(m_comboBoxWindow, &comboBoxRect); + bandInfo.cx = 100; + bandInfo.cxMinChild = comboBoxRect.right - comboBoxRect.left; + bandInfo.cyMinChild = comboBoxRect.bottom - comboBoxRect.top; + + // Add the band to the rebar. + int result = ::SendMessage(m_rebarWindow, RB_INSERTBAND, (WPARAM)-1, (LPARAM)&bandInfo); + + // Create the browser view. + RECT webViewRect = { 0, 0, 0, 0}; + m_browserView.create(webViewRect, this); +} + +void BrowserWindow::onDestroy() +{ + MiniBrowser::shared().unregisterWindow(this); + + // FIXME: Should we close the browser view here? +} + +void BrowserWindow::onNCDestroy() +{ + delete this; +} + +void BrowserWindow::onSize(int width, int height) +{ + RECT rebarRect; + ::GetClientRect(m_rebarWindow, &rebarRect); + + // Resize the rebar. + ::MoveWindow(m_rebarWindow, 0, 0, width, rebarRect.bottom - rebarRect.top, true); + + RECT webViewRect; + webViewRect.top = rebarRect.bottom; + webViewRect.left = 0; + webViewRect.right = width; + webViewRect.bottom = height; + m_browserView.setFrame(webViewRect); +} + +LRESULT BrowserWindow::onCommand(int commandID, bool& handled) +{ + switch (commandID) { + case ID_FILE_NEW_WINDOW: + MiniBrowser::shared().createNewWindow(); + break; + case ID_FILE_CLOSE: + ::PostMessage(m_window, WM_CLOSE, 0, 0); + break; + case ID_DEBUG_SHOW_WEB_VIEW: { + HMENU menu = ::GetMenu(m_window); + bool shouldHide = ::GetMenuState(menu, ID_DEBUG_SHOW_WEB_VIEW, MF_BYCOMMAND) & MF_CHECKED; + + ::CheckMenuItem(menu, ID_DEBUG_SHOW_WEB_VIEW, MF_BYCOMMAND | (shouldHide ? MF_UNCHECKED : MF_CHECKED)); + + // Show or hide the web view. + HWND webViewWindow = WKViewGetWindow(m_browserView.webView()); + ::ShowWindow(webViewWindow, shouldHide ? SW_HIDE : SW_SHOW); + break; + } + default: + handled = false; + } + + return 0; +} + +bool BrowserWindow::handleMessage(const MSG* message) +{ + if (message->hwnd != m_comboBoxWindow && !::IsChild(m_comboBoxWindow, message->hwnd)) + return false; + + // Look for a WM_KEYDOWN message. + if (message->message != WM_KEYDOWN) + return false; + + // Look for the VK_RETURN key. + if (message->wParam != VK_RETURN) + return false; + + std::vector<WCHAR> buffer; + int textLength = ::GetWindowTextLength(m_comboBoxWindow); + + buffer.resize(textLength + 1); + ::GetWindowText(m_comboBoxWindow, &buffer[0], buffer.size()); + + std::wstring url(&buffer[0], buffer.size() - 1); + + if (url.find(L"http://")) + url = L"http://" + url; + + m_browserView.goToURL(url); + + // We handled this message. + return true; +} diff --git a/Tools/MiniBrowser/win/BrowserWindow.h b/Tools/MiniBrowser/win/BrowserWindow.h new file mode 100644 index 000000000..1cf73503f --- /dev/null +++ b/Tools/MiniBrowser/win/BrowserWindow.h @@ -0,0 +1,70 @@ +/* + * Copyright (C) 2010 Apple Inc. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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 APPLE INC. AND ITS 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 APPLE INC. OR ITS 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. + */ + +#ifndef BrowserWindow_h +#define BrowserWindow_h + +#include "BrowserView.h" +#include <string> + +class BrowserWindow { +public: + static BrowserWindow* create() + { + return new BrowserWindow; + } + + void createWindow(int x, int y, int width, int height); + void showWindow(); + + void goToURL(const std::wstring& url); + + bool handleMessage(const MSG*); + + const BrowserView& view() const { return m_browserView; } + HWND window() const { return m_window; } + +private: + BrowserWindow(); + + static LRESULT CALLBACK BrowserWindowWndProc(HWND, UINT, WPARAM, LPARAM); + + // Message handlers. + LRESULT wndProc(HWND, UINT, WPARAM, LPARAM); + void onCreate(LPCREATESTRUCT); + void onDestroy(); + void onNCDestroy(); + + void onSize(int width, int height); + LRESULT onCommand(int commandID, bool& handled); + + HWND m_window; + + HWND m_rebarWindow; + HWND m_comboBoxWindow; + BrowserView m_browserView; +}; + +#endif // BrowserWindow_h diff --git a/Tools/MiniBrowser/win/MiniBrowser.cpp b/Tools/MiniBrowser/win/MiniBrowser.cpp new file mode 100644 index 000000000..7e3d4888a --- /dev/null +++ b/Tools/MiniBrowser/win/MiniBrowser.cpp @@ -0,0 +1,84 @@ +/* + * Copyright (C) 2010 Apple Inc. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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 APPLE INC. AND ITS 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 APPLE INC. OR ITS 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. + */ + +#include "stdafx.h" + +#include "BrowserWindow.h" +#include "MiniBrowser.h" +#include <assert.h> + +MiniBrowser::MiniBrowser() + : m_instance(0) +{ +} + +MiniBrowser& MiniBrowser::shared() +{ + static MiniBrowser miniBrowser; + + return miniBrowser; +} + +void MiniBrowser::initialize(HINSTANCE instance) +{ + assert(!m_instance); + + m_instance = instance; +} + +void MiniBrowser::createNewWindow() +{ + static const wchar_t* kDefaultURLString = L"http://webkit.org/"; + + BrowserWindow* browserWindow = BrowserWindow::create(); + browserWindow->createWindow(0, 0, 800, 600); + browserWindow->showWindow(); + browserWindow->goToURL(kDefaultURLString); +} + +void MiniBrowser::registerWindow(BrowserWindow* window) +{ + m_browserWindows.insert(window); +} + +void MiniBrowser::unregisterWindow(BrowserWindow* window) +{ + m_browserWindows.erase(window); + + if (m_browserWindows.empty()) + ::PostQuitMessage(0); +} + +bool MiniBrowser::handleMessage(const MSG* message) +{ + for (std::set<BrowserWindow*>::const_iterator it = m_browserWindows.begin(), end = m_browserWindows.end(); it != end; ++it) { + BrowserWindow* browserWindow = *it; + + if (browserWindow->handleMessage(message)) + return true; + } + + return false; +} diff --git a/Tools/MiniBrowser/win/MiniBrowser.h b/Tools/MiniBrowser/win/MiniBrowser.h new file mode 100644 index 000000000..c7b51778c --- /dev/null +++ b/Tools/MiniBrowser/win/MiniBrowser.h @@ -0,0 +1,55 @@ +/* + * Copyright (C) 2010 Apple Inc. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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 APPLE INC. AND ITS 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 APPLE INC. OR ITS 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. + */ + +#ifndef MiniBrowser_h +#define MiniBrowser_h + +#include <set> + +class BrowserWindow; + +class MiniBrowser { +public: + static MiniBrowser& shared(); + + void initialize(HINSTANCE); + + void createNewWindow(); + + void registerWindow(BrowserWindow*); + void unregisterWindow(BrowserWindow*); + + bool handleMessage(const MSG*); + + HINSTANCE instance() const { return m_instance; } + +private: + MiniBrowser(); + + HINSTANCE m_instance; + std::set<BrowserWindow*> m_browserWindows; +}; + +#endif // MiniBrowser_h diff --git a/Tools/MiniBrowser/win/MiniBrowser.rc b/Tools/MiniBrowser/win/MiniBrowser.rc new file mode 100644 index 000000000..0ff88b089 --- /dev/null +++ b/Tools/MiniBrowser/win/MiniBrowser.rc @@ -0,0 +1,79 @@ +// Microsoft Visual C++ generated resource script.
+//
+#include "resource.h"
+#include "winresrc.h" +
+/////////////////////////////////////////////////////////////////////////////
+// English (U.S.) resources
+
+#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
+#ifdef _WIN32
+LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
+#pragma code_page(1252)
+#endif //_WIN32
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Menu
+//
+
+IDR_MAINFRAME MENU
+BEGIN
+ POPUP "&File"
+ BEGIN
+ MENUITEM "&New Window\tCtrl+N", ID_FILE_NEW_WINDOW
+ MENUITEM SEPARATOR
+ MENUITEM "&Close", ID_FILE_CLOSE
+ END
+ POPUP "&Debug"
+ BEGIN
+ MENUITEM "&Show WebView", ID_DEBUG_SHOW_WEB_VIEW, CHECKED
+ END
+END
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Accelerator
+//
+
+IDR_MAINFRAME_ACCEL ACCELERATORS
+BEGIN
+ "N", ID_FILE_NEW_WINDOW, VIRTKEY, CONTROL, NOINVERT
+END
+
+
+#ifdef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// TEXTINCLUDE
+//
+
+1 TEXTINCLUDE
+BEGIN
+ "resource.\0"
+END
+
+
+3 TEXTINCLUDE
+BEGIN
+ "\r\0"
+END
+
+#endif // APSTUDIO_INVOKED
+
+#endif // English (U.S.) resources
+/////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 3 resource.
+//
+
+
+/////////////////////////////////////////////////////////////////////////////
+#endif // not APSTUDIO_INVOKED
+
diff --git a/Tools/MiniBrowser/win/main.cpp b/Tools/MiniBrowser/win/main.cpp new file mode 100644 index 000000000..ba09c9445 --- /dev/null +++ b/Tools/MiniBrowser/win/main.cpp @@ -0,0 +1,74 @@ +/* + * Copyright (C) 2010 Apple Inc. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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 APPLE INC. AND ITS 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 APPLE INC. OR ITS 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. + */ + +#include "stdafx.h" + +#include "BrowserWindow.h" +#include "MiniBrowser.h" +#include <string> + +static bool shouldTranslateMessage(const MSG& msg) +{ + // Only these four messages are actually translated by ::TranslateMessage or ::TranslateAccelerator. + // It's useless (though harmless) to call those functions for other messages, so we always allow other messages to be translated. + if (msg.message != WM_KEYDOWN && msg.message != WM_SYSKEYDOWN && msg.message != WM_KEYUP && msg.message != WM_SYSKEYUP) + return true; + + wchar_t className[256]; + if (!::GetClassNameW(msg.hwnd, className, ARRAYSIZE(className))) + return true; + + // Don't call TranslateMessage() on key events destined for a WebKit2 view, WebKit will do this if it doesn't handle the message. + // It would be nice to use some API here instead of hard-coding the window class name. + return wcscmp(className, L"WebKit2WebViewWindowClass"); +} + +BOOL WINAPI DllMain(HINSTANCE dllInstance, DWORD reason, LPVOID) +{ + if (reason == DLL_PROCESS_ATTACH) + MiniBrowser::shared().initialize(dllInstance); + + return TRUE; +} + +extern "C" __declspec(dllexport) int WINAPI dllLauncherEntryPoint(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpstrCmdLine, int nCmdShow) +{ + // Create and show our initial window. + MiniBrowser::shared().createNewWindow(); + + MSG message; + while (BOOL result = ::GetMessage(&message, 0, 0, 0)) { + if (result == -1) + break; + + if (shouldTranslateMessage(message)) + ::TranslateMessage(&message); + + if (!MiniBrowser::shared().handleMessage(&message)) + ::DispatchMessage(&message); + } + + return 0; +} diff --git a/Tools/MiniBrowser/win/resource.h b/Tools/MiniBrowser/win/resource.h new file mode 100644 index 000000000..b12b906f4 --- /dev/null +++ b/Tools/MiniBrowser/win/resource.h @@ -0,0 +1,23 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by MiniBrowser.rc +// + +#define ID_FILE_NEW_WINDOW 32770 +#define ID_FILE_OPEN 32771 +#define ID_FILE_CLOSE 32772 +#define ID_DEBUG_SHOW_WEB_VIEW 32773 + +#define IDR_MAINFRAME 128 + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NO_MFC 1 +#define _APS_NEXT_RESOURCE_VALUE 132 +#define _APS_NEXT_COMMAND_VALUE 32775 +#define _APS_NEXT_CONTROL_VALUE 1000 +#define _APS_NEXT_SYMED_VALUE 110 +#endif +#endif diff --git a/Tools/MiniBrowser/win/stdafx.cpp b/Tools/MiniBrowser/win/stdafx.cpp new file mode 100644 index 000000000..c664e32be --- /dev/null +++ b/Tools/MiniBrowser/win/stdafx.cpp @@ -0,0 +1,33 @@ +/* + * Copyright (C) 2010 Apple Inc. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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 APPLE INC. AND ITS 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 APPLE INC. OR ITS 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. + */ + +// stdafx.cpp : source file that includes just the standard includes +// MiniBrowser.pch will be the pre-compiled header +// stdafx.obj will contain the pre-compiled type information + +#include "stdafx.h" + +// TODO: reference any additional headers you need in STDAFX.H +// and not in this file diff --git a/Tools/MiniBrowser/win/stdafx.h b/Tools/MiniBrowser/win/stdafx.h new file mode 100644 index 000000000..2f531bb3f --- /dev/null +++ b/Tools/MiniBrowser/win/stdafx.h @@ -0,0 +1,33 @@ +/* + * Copyright (C) 2010 Apple Inc. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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 APPLE INC. AND ITS 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 APPLE INC. OR ITS 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. + */ + +#define STRICT +#define WIN32_LEAN_AND_MEAN + +#include <tchar.h> +#include <windows.h> + + + |