Retire the bit-rotting LibreOfficeLight iOS app

Change-Id: I21b8055fc97d8dfb8429e7dafa1a3982c3b7499b
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/108122
Tested-by: Tor Lillqvist <tml@collabora.com>
Reviewed-by: Tor Lillqvist <tml@collabora.com>
This commit is contained in:
Tor Lillqvist 2020-12-21 19:28:15 +02:00
parent 21e9654871
commit 8beaafcaa2
123 changed files with 0 additions and 7317 deletions

View file

@ -164,7 +164,6 @@ export ENABLE_GSTREAMER_1_0=@ENABLE_GSTREAMER_1_0@
export ENABLE_GTK3=@ENABLE_GTK3@
export DISABLE_GUI=@DISABLE_GUI@
export ENABLE_HTMLHELP=@ENABLE_HTMLHELP@
export ENABLE_IOS_LIBREOFFICELIGHT_APP=@ENABLE_IOS_LIBREOFFICELIGHT_APP@
export ENABLE_JAVA=@ENABLE_JAVA@
export ENABLE_LDAP=@ENABLE_LDAP@
export ENABLE_LPSOLVE=@ENABLE_LPSOLVE@

View file

@ -1263,19 +1263,6 @@ AC_ARG_ENABLE(ios-simulator,
[build for iOS simulator])
)
AC_ARG_ENABLE(ios-libreofficelight-app,
AS_HELP_STRING([--enable-ios-libreofficelight-app],
[When building for iOS, build stuff relevant only for the 'LibreOfficeLight' app
(in ios/LibreOfficeLight). Note that this app is not known to work in any useful manner,
and also that its actual build (in Xcode) requires some obvious modifications to the project.])
)
ENABLE_IOS_LIBREOFFICELIGHT_APP=
if test "$enable_ios_libreofficelight_app" = yes; then
ENABLE_IOS_LIBREOFFICELIGHT_APP=TRUE
fi
AC_SUBST(ENABLE_IOS_LIBREOFFICELIGHT_APP)
###############################################################################
# Extensions switches --enable/--disable
###############################################################################

9
ios/.gitignore vendored
View file

@ -1,9 +0,0 @@
#
# This file is part of the LibreOffice project.
#
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
#
generated

View file

@ -1,90 +0,0 @@
# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
#
# This file is part of the LibreOffice project.
#
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
#- Env ------------------------------------------------------------------------
IOSGEN = $(BUILDDIR)/workdir/CustomTarget/ios
IOSLIBS := $(shell \
(export INSTDIR=$(INSTDIR);export OS=$(OS); \
export WORKDIR=$(WORKDIR);export LIBO_LIB_FOLDER=$(LIBO_LIB_FOLDER); \
$(SRCDIR)/bin/lo-all-static-libs))
IOSOBJ = $(IOSGEN)/Kit.o
IOSSRC = $(SRCDIR)/ios/source/LibreOfficeKit.c
ifeq ($(ENABLE_DEBUG),TRUE)
ifeq ($(CPUNAME),X86_64)
IOSKIT = $(IOSGEN)/Debug_x86_64/libKit.dylib
else
IOSKIT = $(IOSGEN)/Debug_arm64/libKit.dylib
endif
else
ifeq ($(CPUNAME),AARCH64)
IOSKIT = $(IOSGEN)/Release_arm64/libKit.dylib
endif
endif
#- Top level -----------------------------------------------------------------
$(eval $(call gb_CustomTarget_CustomTarget,ios/iOS_link))
$(call gb_CustomTarget_get_target,ios/iOS_link): $(IOSKIT)
#- build ---------------------------------------------------------------------
$(IOSOBJ): $(IOSSRC) $(call gb_CustomTarget_get_target,ios/iOS_setup)
$(call gb_Output_announce,iOS compile interface,$(true),C,2)
$(gb_CC) $(gb_COMPILERDEFS) $(gb_OSDEFS) $(gb_CFLAGS) \
-DDISABLE_DYNLOADING -DLIBO_INTERNAL_ONLY \
-fvisibility=hidden -Werror -O0 -fstrict-overflow \
$(if $(ENABLE_DEBUG),-g) \
-c $(IOSSRC) -o $(IOSOBJ) \
-I$(SRCDIR)/include -I$(BUILDDIR)/config_host \
$(IOSKIT): $(IOSOBJ) $(IOSLIBS)
$(call gb_Output_announce,iOS dylib,$(true),LNK,2)
$(call gb_Trace_StartRange,iOS dylib,LNK)
$(gb_CC) -dynamiclib \
-Xlinker -rpath -Xlinker @executable_path/Frameworks \
-Xlinker -rpath -Xlinker @loader_path/Frameworks \
-install_name @rpath/libKit.dylib \
-dead_strip \
-Xlinker -export_dynamic \
-Xlinker -no_deduplicate \
-Xlinker -objc_abi_version -Xlinker 2 \
-fobjc-link-runtime \
-framework CoreFoundation \
-framework CoreGraphics \
-framework CoreText \
-liconv \
-lc++ \
-lz \
-lpthread \
-single_module \
-compatibility_version 1 \
-current_version 1 \
`$(SRCDIR)/bin/lo-all-static-libs` \
$(IOSOBJ) \
-o $(IOSKIT)
ifeq ($(origin IOS_CODEID),undefined)
@echo "please define environment variable IOS_CODEID as\n" \
"export IOS_CODEID=<your apple code identifier>"
@exit -1
else
codesign -s "$(IOS_CODEID)" $(IOSKIT)
endif
$(call gb_Trace_EndRange,iOS dylib,LNK)
#- clean ios -----------------------------------------------------------------
$(call gb_CustomTarget_get_clean_target,ios/iOS_link):
rm -f $(IOSKIT)
# vim: set noet sw=4 ts=4:

View file

@ -1,11 +0,0 @@
******
Everything in ios is currently
WORK IN PROGRESS
Do not expect it to work, or even compile
If you want to help with the work, please send
an email to our dev@ list.
rgds
jan I

View file

@ -1,635 +0,0 @@
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 48;
objects = {
/* Begin PBXBuildFile section */
39284DB31FA5F207006F43E4 /* DocumentActions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 39284DB21FA5F207006F43E4 /* DocumentActions.swift */; };
392ED9B31E5E4B03005C8435 /* ViewPrintManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 392ED9B21E5E4B03005C8435 /* ViewPrintManager.swift */; };
3941EF15204B4C8A00082486 /* unorc in Resources */ = {isa = PBXBuildFile; fileRef = 3941EF06204B4C8900082486 /* unorc */; };
3941EF16204B4C8A00082486 /* fundamentalrc in Resources */ = {isa = PBXBuildFile; fileRef = 3941EF07204B4C8900082486 /* fundamentalrc */; };
3941EF17204B4C8A00082486 /* program in Resources */ = {isa = PBXBuildFile; fileRef = 3941EF08204B4C8900082486 /* program */; };
3941EF18204B4C8A00082486 /* services.rdb in Resources */ = {isa = PBXBuildFile; fileRef = 3941EF09204B4C8900082486 /* services.rdb */; };
3941EF19204B4C8A00082486 /* oovbaapi.rdb in Resources */ = {isa = PBXBuildFile; fileRef = 3941EF0A204B4C8900082486 /* oovbaapi.rdb */; };
3941EF1A204B4C8A00082486 /* registry in Resources */ = {isa = PBXBuildFile; fileRef = 3941EF0B204B4C8900082486 /* registry */; };
3941EF1B204B4C8A00082486 /* services in Resources */ = {isa = PBXBuildFile; fileRef = 3941EF0C204B4C8900082486 /* services */; };
3941EF1C204B4C8A00082486 /* offapi.rdb in Resources */ = {isa = PBXBuildFile; fileRef = 3941EF0D204B4C8900082486 /* offapi.rdb */; };
3941EF1D204B4C8A00082486 /* filter in Resources */ = {isa = PBXBuildFile; fileRef = 3941EF0E204B4C8900082486 /* filter */; };
3941EF1E204B4C8A00082486 /* rc in Resources */ = {isa = PBXBuildFile; fileRef = 3941EF0F204B4C8900082486 /* rc */; };
3941EF1F204B4C8A00082486 /* udkapi.rdb in Resources */ = {isa = PBXBuildFile; fileRef = 3941EF10204B4C8900082486 /* udkapi.rdb */; };
3941EF20204B4C8A00082486 /* icudt62l.dat in Resources */ = {isa = PBXBuildFile; fileRef = 3941EF11204B4C8900082486 /* icudt62l.dat */; };
3941EF21204B4C8A00082486 /* welcome.odt in Resources */ = {isa = PBXBuildFile; fileRef = 3941EF12204B4C8900082486 /* welcome.odt */; };
3941EF22204B4C8A00082486 /* config in Resources */ = {isa = PBXBuildFile; fileRef = 3941EF13204B4C8900082486 /* config */; };
3941EF23204B4C8A00082486 /* share in Resources */ = {isa = PBXBuildFile; fileRef = 3941EF14204B4C8900082486 /* share */; };
39514E002057DC55005599D0 /* shared in Resources */ = {isa = PBXBuildFile; fileRef = 39514DFF2057DC55005599D0 /* shared */; };
39514E082057E4A8005599D0 /* inc in Resources */ = {isa = PBXBuildFile; fileRef = 39514E072057E4A8005599D0 /* inc */; };
396F92F71E7AE62400A28C82 /* Settings.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 396F92F61E7AE62400A28C82 /* Settings.bundle */; };
397868D61E59A3EA007F9248 /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 397868D81E59A3EA007F9248 /* LaunchScreen.xib */; };
397E08FE1E597BD8001374E0 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 397E08FD1E597BD8001374E0 /* AppDelegate.swift */; };
397E09031E597BD8001374E0 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 397E09011E597BD8001374E0 /* Main.storyboard */; };
397E09081E597BD8001374E0 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 397E09071E597BD8001374E0 /* Assets.xcassets */; };
3992D85A1E5B762A00BEA987 /* DocumentController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3992D8591E5B762A00BEA987 /* DocumentController.swift */; };
399648471E5B87DC00E73E83 /* ViewProperties.swift in Sources */ = {isa = PBXBuildFile; fileRef = 399648461E5B87DC00E73E83 /* ViewProperties.swift */; };
39EF4E2F1FA500C9001914AC /* PropertiesController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 39EF4E2E1FA500C9001914AC /* PropertiesController.swift */; };
FC31D01E2012F65500E7F402 /* DocumentHolder.swift in Sources */ = {isa = PBXBuildFile; fileRef = FC31D01D2012F65500E7F402 /* DocumentHolder.swift */; };
FC31D0202012F6D300E7F402 /* RenderCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = FC31D01F2012F6D300E7F402 /* RenderCache.swift */; };
FC31D02B2013500E00E7F402 /* ButtonScrollView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FC31D02A2013500E00E7F402 /* ButtonScrollView.swift */; };
FC31D02D2015DE1700E7F402 /* UIViewExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = FC31D02C2015DE1700E7F402 /* UIViewExtensions.swift */; };
FCAB1CB82009DB6900F1CC34 /* DocumentOverlaysView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FCAB1CB72009DB6900F1CC34 /* DocumentOverlaysView.swift */; };
FCC2E3FA2004A01500CEB504 /* Document.swift in Sources */ = {isa = PBXBuildFile; fileRef = FCC2E3F62004A01400CEB504 /* Document.swift */; };
FCC2E3FC2004A01500CEB504 /* LibreOfficeKitWrapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = FCC2E3F82004A01400CEB504 /* LibreOfficeKitWrapper.swift */; };
FCC2E3FD2004A01500CEB504 /* LOKitThread.swift in Sources */ = {isa = PBXBuildFile; fileRef = FCC2E3F92004A01400CEB504 /* LOKitThread.swift */; };
FCC2E3FF2004B59B00CEB504 /* DocumentTiledView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FCC2E3FE2004B59B00CEB504 /* DocumentTiledView.swift */; };
FCC2E4032004B72700CEB504 /* Util.swift in Sources */ = {isa = PBXBuildFile; fileRef = FCC2E4022004B72700CEB504 /* Util.swift */; };
FCC2E4052004B74000CEB504 /* AsyncUtil.swift in Sources */ = {isa = PBXBuildFile; fileRef = FCC2E4042004B74000CEB504 /* AsyncUtil.swift */; };
FCC7651D201C7F8A007D190C /* libKit.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = FCC7651C201C7F8A007D190C /* libKit.dylib */; };
FCC7651E201C80A5007D190C /* libKit.dylib in Embed Libraries */ = {isa = PBXBuildFile; fileRef = FCC7651C201C7F8A007D190C /* libKit.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; };
/* End PBXBuildFile section */
/* Begin PBXCopyFilesBuildPhase section */
FC148CE420187F7800C349CA /* Embed Libraries */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
dstPath = "";
dstSubfolderSpec = 10;
files = (
FCC7651E201C80A5007D190C /* libKit.dylib in Embed Libraries */,
);
name = "Embed Libraries";
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */
39284DB21FA5F207006F43E4 /* DocumentActions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DocumentActions.swift; sourceTree = "<group>"; };
392ED9B21E5E4B03005C8435 /* ViewPrintManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = ViewPrintManager.swift; path = LibreOfficeLight/ViewPrintManager.swift; sourceTree = SOURCE_ROOT; };
3941EF06204B4C8900082486 /* unorc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = unorc; path = ../../workdir/CustomTarget/ios/resources/unorc; sourceTree = "<group>"; };
3941EF07204B4C8900082486 /* fundamentalrc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = fundamentalrc; path = ../../workdir/CustomTarget/ios/resources/fundamentalrc; sourceTree = "<group>"; };
3941EF08204B4C8900082486 /* program */ = {isa = PBXFileReference; lastKnownFileType = folder; name = program; path = ../../workdir/CustomTarget/ios/resources/program; sourceTree = "<group>"; };
3941EF09204B4C8900082486 /* services.rdb */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; name = services.rdb; path = ../../workdir/CustomTarget/ios/resources/services.rdb; sourceTree = "<group>"; };
3941EF0A204B4C8900082486 /* oovbaapi.rdb */ = {isa = PBXFileReference; lastKnownFileType = file; name = oovbaapi.rdb; path = ../../workdir/CustomTarget/ios/resources/oovbaapi.rdb; sourceTree = "<group>"; };
3941EF0B204B4C8900082486 /* registry */ = {isa = PBXFileReference; lastKnownFileType = folder; name = registry; path = ../../workdir/CustomTarget/ios/resources/registry; sourceTree = "<group>"; };
3941EF0C204B4C8900082486 /* services */ = {isa = PBXFileReference; lastKnownFileType = folder; name = services; path = ../../workdir/CustomTarget/ios/resources/services; sourceTree = "<group>"; };
3941EF0D204B4C8900082486 /* offapi.rdb */ = {isa = PBXFileReference; lastKnownFileType = file; name = offapi.rdb; path = ../../workdir/CustomTarget/ios/resources/offapi.rdb; sourceTree = "<group>"; };
3941EF0E204B4C8900082486 /* filter */ = {isa = PBXFileReference; lastKnownFileType = folder; name = filter; path = ../../workdir/CustomTarget/ios/resources/filter; sourceTree = "<group>"; };
3941EF0F204B4C8900082486 /* rc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = rc; path = ../../workdir/CustomTarget/ios/resources/rc; sourceTree = "<group>"; };
3941EF10204B4C8900082486 /* udkapi.rdb */ = {isa = PBXFileReference; lastKnownFileType = file; name = udkapi.rdb; path = ../../workdir/CustomTarget/ios/resources/udkapi.rdb; sourceTree = "<group>"; };
3941EF11204B4C8900082486 /* icudt62l.dat */ = {isa = PBXFileReference; lastKnownFileType = file; name = icudt62l.dat; path = ../../workdir/CustomTarget/ios/resources/icudt62l.dat; sourceTree = "<group>"; };
3941EF12204B4C8900082486 /* welcome.odt */ = {isa = PBXFileReference; lastKnownFileType = file; name = welcome.odt; path = ../../workdir/CustomTarget/ios/resources/welcome.odt; sourceTree = "<group>"; };
3941EF13204B4C8900082486 /* config */ = {isa = PBXFileReference; lastKnownFileType = folder; name = config; path = ../../workdir/CustomTarget/ios/resources/config; sourceTree = "<group>"; };
3941EF14204B4C8900082486 /* share */ = {isa = PBXFileReference; lastKnownFileType = folder; name = share; path = ../../workdir/CustomTarget/ios/resources/share; sourceTree = "<group>"; };
39503A6F1F94C4AC00F19C78 /* lokit-Bridging-Header.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "lokit-Bridging-Header.h"; sourceTree = "<group>"; };
39514DFF2057DC55005599D0 /* shared */ = {isa = PBXFileReference; lastKnownFileType = folder; name = shared; path = ../../bridges/source/cpp_uno/shared; sourceTree = "<group>"; };
39514E012057DC92005599D0 /* gcc3_ios */ = {isa = PBXFileReference; lastKnownFileType = folder; name = gcc3_ios; path = ../../bridges/source/cpp_uno/gcc3_ios; sourceTree = "<group>"; };
39514E032057DCE7005599D0 /* gcc3_macosx_x86-64 */ = {isa = PBXFileReference; lastKnownFileType = folder; name = "gcc3_macosx_x86-64"; path = "../../bridges/source/cpp_uno/gcc3_macosx_x86-64"; sourceTree = "<group>"; };
39514E052057DD17005599D0 /* gcc3_linux_aarch64 */ = {isa = PBXFileReference; lastKnownFileType = folder; name = gcc3_linux_aarch64; path = ../../bridges/source/cpp_uno/gcc3_linux_aarch64; sourceTree = "<group>"; };
39514E072057E4A8005599D0 /* inc */ = {isa = PBXFileReference; lastKnownFileType = folder; name = inc; path = ../../bridges/inc; sourceTree = "<group>"; };
396F92F61E7AE62400A28C82 /* Settings.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = Settings.bundle; sourceTree = "<group>"; };
397275391E77D9F1006ACDCC /* LibreOfficeLight.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = LibreOfficeLight.entitlements; sourceTree = "<group>"; };
397868D71E59A3EA007F9248 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = en.lproj/LaunchScreen.xib; sourceTree = "<group>"; };
397E08FA1E597BD8001374E0 /* LibreOfficeLight.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = LibreOfficeLight.app; sourceTree = BUILT_PRODUCTS_DIR; };
397E08FD1E597BD8001374E0 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = AppDelegate.swift; path = LibreOfficeLight/AppDelegate.swift; sourceTree = SOURCE_ROOT; };
397E09021E597BD8001374E0 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = en; path = en.lproj/Main.storyboard; sourceTree = "<group>"; };
397E09071E597BD8001374E0 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = LibreOfficeLight/Assets.xcassets; sourceTree = SOURCE_ROOT; };
3992D8591E5B762A00BEA987 /* DocumentController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = DocumentController.swift; path = LibreOfficeLight/DocumentController.swift; sourceTree = SOURCE_ROOT; };
399648461E5B87DC00E73E83 /* ViewProperties.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = ViewProperties.swift; path = LibreOfficeLight/ViewProperties.swift; sourceTree = SOURCE_ROOT; };
39B092501E5F3DEA00682A59 /* LibreOfficeLight-Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "LibreOfficeLight-Prefix.pch"; sourceTree = "<group>"; };
39B4245D2060FB2300347588 /* ucbhelper.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ucbhelper.cxx; path = ../../unotools/source/ucbhelper/ucbhelper.cxx; sourceTree = "<group>"; };
39E950521FC9842000D82C49 /* source */ = {isa = PBXFileReference; lastKnownFileType = folder; name = source; path = ../source; sourceTree = "<group>"; };
39EE81531FA644E800B73AB8 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
39EF4E2E1FA500C9001914AC /* PropertiesController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PropertiesController.swift; sourceTree = "<group>"; };
39FD89E6204EBCB900E7179F /* exc_thrower.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = exc_thrower.cxx; path = ../../cppuhelper/source/exc_thrower.cxx; sourceTree = "<group>"; };
FC31D01D2012F65500E7F402 /* DocumentHolder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DocumentHolder.swift; sourceTree = "<group>"; };
FC31D01F2012F6D300E7F402 /* RenderCache.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RenderCache.swift; sourceTree = "<group>"; };
FC31D02A2013500E00E7F402 /* ButtonScrollView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ButtonScrollView.swift; sourceTree = "<group>"; };
FC31D02C2015DE1700E7F402 /* UIViewExtensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UIViewExtensions.swift; sourceTree = "<group>"; };
FCAB1CB72009DB6900F1CC34 /* DocumentOverlaysView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DocumentOverlaysView.swift; sourceTree = "<group>"; };
FCC2E3F62004A01400CEB504 /* Document.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Document.swift; sourceTree = "<group>"; };
FCC2E3F82004A01400CEB504 /* LibreOfficeKitWrapper.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LibreOfficeKitWrapper.swift; sourceTree = "<group>"; };
FCC2E3F92004A01400CEB504 /* LOKitThread.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LOKitThread.swift; sourceTree = "<group>"; };
FCC2E3FE2004B59B00CEB504 /* DocumentTiledView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DocumentTiledView.swift; sourceTree = "<group>"; };
FCC2E4022004B72700CEB504 /* Util.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Util.swift; sourceTree = "<group>"; };
FCC2E4042004B74000CEB504 /* AsyncUtil.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AsyncUtil.swift; sourceTree = "<group>"; };
FCC7651C201C7F8A007D190C /* libKit.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = libKit.dylib; sourceTree = BUILT_PRODUCTS_DIR; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
397E08F71E597BD8001374E0 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
FCC7651D201C7F8A007D190C /* libKit.dylib in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
3911D89F1E5993600050D6BC /* Support files */ = {
isa = PBXGroup;
children = (
39B092501E5F3DEA00682A59 /* LibreOfficeLight-Prefix.pch */,
397275391E77D9F1006ACDCC /* LibreOfficeLight.entitlements */,
397E09071E597BD8001374E0 /* Assets.xcassets */,
396F92F61E7AE62400A28C82 /* Settings.bundle */,
);
name = "Support files";
path = LibreOfficeLight;
sourceTree = SOURCE_ROOT;
};
3956B72D1FAB3DBF00BF5DE4 /* extra */ = {
isa = PBXGroup;
children = (
39514E072057E4A8005599D0 /* inc */,
39514E052057DD17005599D0 /* gcc3_linux_aarch64 */,
39514E032057DCE7005599D0 /* gcc3_macosx_x86-64 */,
39514E012057DC92005599D0 /* gcc3_ios */,
39514DFF2057DC55005599D0 /* shared */,
39FD89E6204EBCB900E7179F /* exc_thrower.cxx */,
39B4245D2060FB2300347588 /* ucbhelper.cxx */,
39E950521FC9842000D82C49 /* source */,
);
name = extra;
sourceTree = "<group>";
};
3972753A1E77D9F7006ACDCC /* Frameworks */ = {
isa = PBXGroup;
children = (
FCC7651C201C7F8A007D190C /* libKit.dylib */,
);
name = Frameworks;
sourceTree = "<group>";
};
397E08F11E597BD8001374E0 = {
isa = PBXGroup;
children = (
3956B72D1FAB3DBF00BF5DE4 /* extra */,
39B084E41E5F0B5200682A59 /* Resources */,
3911D89F1E5993600050D6BC /* Support files */,
397E08FC1E597BD8001374E0 /* LibreOfficeLight */,
397E08FB1E597BD8001374E0 /* Products */,
3972753A1E77D9F7006ACDCC /* Frameworks */,
);
sourceTree = "<group>";
};
397E08FB1E597BD8001374E0 /* Products */ = {
isa = PBXGroup;
children = (
397E08FA1E597BD8001374E0 /* LibreOfficeLight.app */,
);
name = Products;
sourceTree = "<group>";
};
397E08FC1E597BD8001374E0 /* LibreOfficeLight */ = {
isa = PBXGroup;
children = (
FCC2E3F52004A01400CEB504 /* LOKit */,
39EE81531FA644E800B73AB8 /* Info.plist */,
39503A6F1F94C4AC00F19C78 /* lokit-Bridging-Header.h */,
397E08FD1E597BD8001374E0 /* AppDelegate.swift */,
FC31D02A2013500E00E7F402 /* ButtonScrollView.swift */,
3992D8591E5B762A00BEA987 /* DocumentController.swift */,
FCAB1CB72009DB6900F1CC34 /* DocumentOverlaysView.swift */,
FCC2E3FE2004B59B00CEB504 /* DocumentTiledView.swift */,
39284DB21FA5F207006F43E4 /* DocumentActions.swift */,
39EF4E2E1FA500C9001914AC /* PropertiesController.swift */,
FC31D02C2015DE1700E7F402 /* UIViewExtensions.swift */,
392ED9B21E5E4B03005C8435 /* ViewPrintManager.swift */,
399648461E5B87DC00E73E83 /* ViewProperties.swift */,
397E09011E597BD8001374E0 /* Main.storyboard */,
397868D81E59A3EA007F9248 /* LaunchScreen.xib */,
);
path = LibreOfficeLight;
sourceTree = SOURCE_ROOT;
};
39B084E41E5F0B5200682A59 /* Resources */ = {
isa = PBXGroup;
children = (
3941EF13204B4C8900082486 /* config */,
3941EF0E204B4C8900082486 /* filter */,
3941EF07204B4C8900082486 /* fundamentalrc */,
3941EF11204B4C8900082486 /* icudt62l.dat */,
3941EF0D204B4C8900082486 /* offapi.rdb */,
3941EF0A204B4C8900082486 /* oovbaapi.rdb */,
3941EF08204B4C8900082486 /* program */,
3941EF0F204B4C8900082486 /* rc */,
3941EF0B204B4C8900082486 /* registry */,
3941EF0C204B4C8900082486 /* services */,
3941EF09204B4C8900082486 /* services.rdb */,
3941EF14204B4C8900082486 /* share */,
3941EF10204B4C8900082486 /* udkapi.rdb */,
3941EF06204B4C8900082486 /* unorc */,
3941EF12204B4C8900082486 /* welcome.odt */,
);
name = Resources;
sourceTree = SOURCE_ROOT;
};
FCC2E3F52004A01400CEB504 /* LOKit */ = {
isa = PBXGroup;
children = (
FCC2E4042004B74000CEB504 /* AsyncUtil.swift */,
FCC2E3F62004A01400CEB504 /* Document.swift */,
FC31D01D2012F65500E7F402 /* DocumentHolder.swift */,
FCC2E3F82004A01400CEB504 /* LibreOfficeKitWrapper.swift */,
FCC2E3F92004A01400CEB504 /* LOKitThread.swift */,
FC31D01F2012F6D300E7F402 /* RenderCache.swift */,
FCC2E4022004B72700CEB504 /* Util.swift */,
);
path = LOKit;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
397E08F91E597BD8001374E0 /* LibreOfficeLight */ = {
isa = PBXNativeTarget;
buildConfigurationList = 397E09251E597BD8001374E0 /* Build configuration list for PBXNativeTarget "LibreOfficeLight" */;
buildPhases = (
FC148D13201C7A6600C349CA /* ShellScript */,
397E08F61E597BD8001374E0 /* Sources */,
397E08F71E597BD8001374E0 /* Frameworks */,
397E08F81E597BD8001374E0 /* Resources */,
FC148CE420187F7800C349CA /* Embed Libraries */,
);
buildRules = (
);
dependencies = (
);
name = LibreOfficeLight;
productName = LibreOfficeLight;
productReference = 397E08FA1E597BD8001374E0 /* LibreOfficeLight.app */;
productType = "com.apple.product-type.application";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
397E08F21E597BD8001374E0 /* Project object */ = {
isa = PBXProject;
attributes = {
LastSwiftUpdateCheck = 0820;
LastUpgradeCheck = 0930;
ORGANIZATIONNAME = jani;
TargetAttributes = {
397E08F91E597BD8001374E0 = {
CreatedOnToolsVersion = 8.2;
LastSwiftMigration = 0900;
ProvisioningStyle = Automatic;
SystemCapabilities = {
com.apple.ApplicationGroups.iOS = {
enabled = 0;
};
com.apple.Push = {
enabled = 0;
};
com.apple.iCloud = {
enabled = 1;
};
};
};
};
};
buildConfigurationList = 397E08F51E597BD8001374E0 /* Build configuration list for PBXProject "LibreOfficeLight" */;
compatibilityVersion = "Xcode 8.0";
developmentRegion = English;
hasScannedForEncodings = 0;
knownRegions = (
en,
);
mainGroup = 397E08F11E597BD8001374E0;
productRefGroup = 397E08FB1E597BD8001374E0 /* Products */;
projectDirPath = "";
projectRoot = "";
targets = (
397E08F91E597BD8001374E0 /* LibreOfficeLight */,
);
};
/* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */
397E08F81E597BD8001374E0 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
3941EF15204B4C8A00082486 /* unorc in Resources */,
3941EF19204B4C8A00082486 /* oovbaapi.rdb in Resources */,
3941EF1D204B4C8A00082486 /* filter in Resources */,
397E09081E597BD8001374E0 /* Assets.xcassets in Resources */,
397868D61E59A3EA007F9248 /* LaunchScreen.xib in Resources */,
39514E002057DC55005599D0 /* shared in Resources */,
3941EF1A204B4C8A00082486 /* registry in Resources */,
3941EF18204B4C8A00082486 /* services.rdb in Resources */,
3941EF1C204B4C8A00082486 /* offapi.rdb in Resources */,
3941EF22204B4C8A00082486 /* config in Resources */,
396F92F71E7AE62400A28C82 /* Settings.bundle in Resources */,
3941EF1E204B4C8A00082486 /* rc in Resources */,
3941EF23204B4C8A00082486 /* share in Resources */,
3941EF1B204B4C8A00082486 /* services in Resources */,
3941EF21204B4C8A00082486 /* welcome.odt in Resources */,
397E09031E597BD8001374E0 /* Main.storyboard in Resources */,
3941EF20204B4C8A00082486 /* icudt62l.dat in Resources */,
3941EF16204B4C8A00082486 /* fundamentalrc in Resources */,
39514E082057E4A8005599D0 /* inc in Resources */,
3941EF1F204B4C8A00082486 /* udkapi.rdb in Resources */,
3941EF17204B4C8A00082486 /* program in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXShellScriptBuildPhase section */
FC148D13201C7A6600C349CA /* ShellScript */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputPaths = (
);
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/bash;
shellScript = "\nGEN=$PROJECT_DIR/../../workdir/CustomTarget/ios/$CONFIGURATION\\_$ARCHS/libKit.dylib\ncp $GEN $TARGET_BUILD_DIR/libKit.dylib\n\n\n\n\n";
};
/* End PBXShellScriptBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
397E08F61E597BD8001374E0 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
FCC2E4032004B72700CEB504 /* Util.swift in Sources */,
392ED9B31E5E4B03005C8435 /* ViewPrintManager.swift in Sources */,
FC31D01E2012F65500E7F402 /* DocumentHolder.swift in Sources */,
FCAB1CB82009DB6900F1CC34 /* DocumentOverlaysView.swift in Sources */,
FC31D0202012F6D300E7F402 /* RenderCache.swift in Sources */,
399648471E5B87DC00E73E83 /* ViewProperties.swift in Sources */,
FCC2E3FC2004A01500CEB504 /* LibreOfficeKitWrapper.swift in Sources */,
39284DB31FA5F207006F43E4 /* DocumentActions.swift in Sources */,
3992D85A1E5B762A00BEA987 /* DocumentController.swift in Sources */,
FCC2E3FD2004A01500CEB504 /* LOKitThread.swift in Sources */,
397E08FE1E597BD8001374E0 /* AppDelegate.swift in Sources */,
FC31D02B2013500E00E7F402 /* ButtonScrollView.swift in Sources */,
FCC2E3FA2004A01500CEB504 /* Document.swift in Sources */,
FCC2E3FF2004B59B00CEB504 /* DocumentTiledView.swift in Sources */,
FC31D02D2015DE1700E7F402 /* UIViewExtensions.swift in Sources */,
FCC2E4052004B74000CEB504 /* AsyncUtil.swift in Sources */,
39EF4E2F1FA500C9001914AC /* PropertiesController.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin PBXVariantGroup section */
397868D81E59A3EA007F9248 /* LaunchScreen.xib */ = {
isa = PBXVariantGroup;
children = (
397868D71E59A3EA007F9248 /* en */,
);
name = LaunchScreen.xib;
path = LibreOfficeLight;
sourceTree = SOURCE_ROOT;
};
397E09011E597BD8001374E0 /* Main.storyboard */ = {
isa = PBXVariantGroup;
children = (
397E09021E597BD8001374E0 /* en */,
);
name = Main.storyboard;
path = LibreOfficeLight;
sourceTree = SOURCE_ROOT;
};
/* End PBXVariantGroup section */
/* Begin XCBuildConfiguration section */
397E09231E597BD8001374E0 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
LO_CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
LO_CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_OPTIMIZATION_PROFILE_FILE = "$(SRCROOT)/../../workdir/CustomTarget/ios/$(PROJECT_NAME).profdata";
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = NO;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = dwarf;
ENABLE_BITCODE = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_DYNAMIC_NO_PIC = NO;
GCC_NO_COMMON_BLOCKS = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
"$(inherited)",
);
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
HEADER_SEARCH_PATHS = "$(inherited)";
IPHONEOS_DEPLOYMENT_TARGET = 11.3;
LD_MAP_FILE_PATH = "";
LIBRARY_SEARCH_PATHS = "$PROJECT_DIR/../../workdir/CustomTarget/ios/debug/**";
MACH_O_TYPE = mh_execute;
MTL_ENABLE_DEBUG_INFO = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
SWIFT_OBJC_BRIDGING_HEADER = "lokit-Bridging-Header.h";
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_SWIFT3_OBJC_INFERENCE = Default;
SWIFT_VERSION = 4.0;
SYMROOT = ../../workdir/CustomTarget/ios/build;
TARGETED_DEVICE_FAMILY = "1,2";
VALID_ARCHS = "arm64 x86_64";
};
name = Debug;
};
397E09241E597BD8001374E0 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
LO_CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
LO_CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_OPTIMIZATION_PROFILE_FILE = "$(SRCROOT)/../../workdir/CustomTarget/ios/$(PROJECT_NAME).profdata";
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = NO;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
CODE_SIGN_IDENTITY = "";
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = dwarf;
ENABLE_BITCODE = NO;
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
HEADER_SEARCH_PATHS = "$(inherited)";
IPHONEOS_DEPLOYMENT_TARGET = 11.3;
LD_MAP_FILE_PATH = "";
LIBRARY_SEARCH_PATHS = "$PROJECT_DIR/../../workdir/CustomTarget/ios/release/**";
MACH_O_TYPE = mh_execute;
MTL_ENABLE_DEBUG_INFO = NO;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
SWIFT_OBJC_BRIDGING_HEADER = "lokit-Bridging-Header.h";
SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
SWIFT_SWIFT3_OBJC_INFERENCE = Default;
SWIFT_VERSION = 4.0;
SYMROOT = ../../workdir/CustomTarget/ios/build;
TARGETED_DEVICE_FAMILY = "1,2";
VALIDATE_PRODUCT = YES;
VALID_ARCHS = "arm64 x86_64";
};
name = Release;
};
397E09261E597BD8001374E0 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
CLANG_WARN_DOCUMENTATION_COMMENTS = NO;
CLANG_WARN_INFINITE_RECURSION = NO;
CODE_SIGN_ENTITLEMENTS = LibreOfficeLight/LibreOfficeLight.entitlements;
DEVELOPMENT_TEAM = J4FQ687VJK;
ENABLE_TESTABILITY = NO;
GCC_PRECOMPILE_PREFIX_HEADER = YES;
GCC_PREFIX_HEADER = "LibreOfficeLight/LibreOfficeLight-Prefix.pch";
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
"IOS=1",
);
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
HEADER_SEARCH_PATHS = (
"$(inherited)",
"$(PROJECT_DIR)/../../include",
);
INFOPLIST_FILE = LibreOfficeLight/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 11.2;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
LIBRARY_SEARCH_PATHS = "";
ONLY_ACTIVE_ARCH = YES;
PRODUCT_BUNDLE_IDENTIFIER = org.libreoffice.ios.LibreOfficeLight;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OBJC_BRIDGING_HEADER = "LibreOfficeLight/lokit-Bridging-Header.h";
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_SWIFT3_OBJC_INFERENCE = Off;
SWIFT_VERSION = 4.0;
TARGETED_DEVICE_FAMILY = "1,2";
VALID_ARCHS = "arm64 x86_64";
};
name = Debug;
};
397E09271E597BD8001374E0 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
CLANG_WARN_DOCUMENTATION_COMMENTS = NO;
CLANG_WARN_INFINITE_RECURSION = NO;
CODE_SIGN_ENTITLEMENTS = LibreOfficeLight/LibreOfficeLight.entitlements;
COPY_PHASE_STRIP = YES;
DEVELOPMENT_TEAM = J4FQ687VJK;
ENABLE_TESTABILITY = NO;
GCC_PRECOMPILE_PREFIX_HEADER = YES;
GCC_PREFIX_HEADER = "LibreOfficeLight/LibreOfficeLight-Prefix.pch";
GCC_PREPROCESSOR_DEFINITIONS = "IOS=1";
HEADER_SEARCH_PATHS = (
"$(inherited)",
"$(PROJECT_DIR)/../../include",
);
INFOPLIST_FILE = LibreOfficeLight/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 11.2;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
LIBRARY_SEARCH_PATHS = "";
ONLY_ACTIVE_ARCH = YES;
PRODUCT_BUNDLE_IDENTIFIER = org.libreoffice.ios.LibreOfficeLight;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OBJC_BRIDGING_HEADER = "LibreOfficeLight/lokit-Bridging-Header.h";
SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
SWIFT_SWIFT3_OBJC_INFERENCE = Off;
SWIFT_VERSION = 4.0;
TARGETED_DEVICE_FAMILY = "1,2";
VALID_ARCHS = "arm64 x86_64";
};
name = Release;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
397E08F51E597BD8001374E0 /* Build configuration list for PBXProject "LibreOfficeLight" */ = {
isa = XCConfigurationList;
buildConfigurations = (
397E09231E597BD8001374E0 /* Debug */,
397E09241E597BD8001374E0 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Debug;
};
397E09251E597BD8001374E0 /* Build configuration list for PBXNativeTarget "LibreOfficeLight" */ = {
isa = XCConfigurationList;
buildConfigurations = (
397E09261E597BD8001374E0 /* Debug */,
397E09271E597BD8001374E0 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Debug;
};
/* End XCConfigurationList section */
};
rootObject = 397E08F21E597BD8001374E0 /* Project object */;
}

View file

@ -1,98 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "0930"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "YES">
<BuildActionEntries>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "397E08F91E597BD8001374E0"
BuildableName = "LibreOfficeLight.app"
BlueprintName = "LibreOfficeLight"
ReferencedContainer = "container:LibreOfficeLight.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES">
<Testables>
</Testables>
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "397E08F91E597BD8001374E0"
BuildableName = "LibreOfficeLight.app"
BlueprintName = "LibreOfficeLight"
ReferencedContainer = "container:LibreOfficeLight.xcodeproj">
</BuildableReference>
</MacroExpansion>
<AdditionalOptions>
</AdditionalOptions>
</TestAction>
<LaunchAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
allowLocationSimulation = "YES">
<BuildableProductRunnable
runnableDebuggingMode = "0">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "397E08F91E597BD8001374E0"
BuildableName = "LibreOfficeLight.app"
BlueprintName = "LibreOfficeLight"
ReferencedContainer = "container:LibreOfficeLight.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
<EnvironmentVariables>
<EnvironmentVariable
key = "SAL_LOG"
value = "+INFO+WARN"
isEnabled = "YES">
</EnvironmentVariable>
</EnvironmentVariables>
<AdditionalOptions>
</AdditionalOptions>
</LaunchAction>
<ProfileAction
buildConfiguration = "Debug"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES">
<BuildableProductRunnable
runnableDebuggingMode = "0">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "397E08F91E597BD8001374E0"
BuildableName = "LibreOfficeLight.app"
BlueprintName = "LibreOfficeLight"
ReferencedContainer = "container:LibreOfficeLight.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Debug">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Release"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>

View file

@ -1,91 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "0930"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "YES">
<BuildActionEntries>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "397E08F91E597BD8001374E0"
BuildableName = "LibreOfficeLight.app"
BlueprintName = "LibreOfficeLight"
ReferencedContainer = "container:LibreOfficeLight.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES">
<Testables>
</Testables>
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "397E08F91E597BD8001374E0"
BuildableName = "LibreOfficeLight.app"
BlueprintName = "LibreOfficeLight"
ReferencedContainer = "container:LibreOfficeLight.xcodeproj">
</BuildableReference>
</MacroExpansion>
<AdditionalOptions>
</AdditionalOptions>
</TestAction>
<LaunchAction
buildConfiguration = "Release"
selectedDebuggerIdentifier = ""
selectedLauncherIdentifier = "Xcode.IDEFoundation.Launcher.PosixSpawn"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
allowLocationSimulation = "YES">
<BuildableProductRunnable
runnableDebuggingMode = "0">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "397E08F91E597BD8001374E0"
BuildableName = "LibreOfficeLight.app"
BlueprintName = "LibreOfficeLight"
ReferencedContainer = "container:LibreOfficeLight.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
<AdditionalOptions>
</AdditionalOptions>
</LaunchAction>
<ProfileAction
buildConfiguration = "Release"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES">
<BuildableProductRunnable
runnableDebuggingMode = "0">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "397E08F91E597BD8001374E0"
BuildableName = "LibreOfficeLight.app"
BlueprintName = "LibreOfficeLight"
ReferencedContainer = "container:LibreOfficeLight.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Release">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Release"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>

View file

@ -1,117 +0,0 @@
//
// This file is part of the LibreOffice project.
//
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
//
import UIKit
import Foundation
// AppDelegate is a Delegate class that receives calls from the iOS
// kernel, and theirby allows stop/start/sleep of the application
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate
{
var window: UIWindow?
// sent when clicking on an OO document in another app
// allowing this app to handle the document.
// remark if the app is not started it will be started first
func application(_ app: UIApplication,
open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:])
-> Bool
{
let document = window?.rootViewController?.childViewControllers[0] as! DocumentController
document.doOpen(url)
return true
}
// this function is called when the app is first started (loaded from EEProm)
// it initializes the LO system and prepares for a normal run
func application(_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions:
[UIApplicationLaunchOptionsKey: Any]?)
-> Bool
{
// Get version info
let appInfo = Bundle.main.infoDictionary! as Dictionary<String,AnyObject>
let applicationVersion = (appInfo["CFBundleShortVersionString"] as! String) + "." +
(appInfo["CFBundleVersion"] as! String)
// Add version string to setting
let defaults = UserDefaults.standard
defaults.set(applicationVersion, forKey: "application_version")
defaults.synchronize()
// start LibreOfficeKit
let _ = LOKitThread.instance
return true
}
// Sent when the application is about to move from active to inactive state.
// This can occur for certain types of temporary interruptions
// (such as an incoming phone call or SMS message)
// or when the user quits the application and it begins the transition
// jto the background state.
// Use this method to pause ongoing tasks, disable timers,
// and invalidate graphics rendering callbacks.
func applicationWillResignActive(_ application: UIApplication)
{
// NOT used in this App
}
// Sent when the application enters background (hipernating)
// Use this method to release shared resources, save user data, invalidate timers,
// and store enough application state information to restore your application
// to its current state jin case it is terminated later.
// If your application supports background execution,
// this method is called instead of applicationWillTerminate: when the user quits.
func applicationDidEnterBackground(_ application: UIApplication)
{
let document = window?.rootViewController?.childViewControllers[0]
as! DocumentController
document.Hipernate()
}
// Sent before the application reenters foreground (hipernating -> active)
// Restart timers, tasks as well as graphic rendering
func applicationWillEnterForeground(_ application: UIApplication)
{
let document = window?.rootViewController?.childViewControllers[0] as! DocumentController
document.LeaveHipernate()
}
// Sent after the application reenters foreground (hipernating -> active)
// Restart timers, tasks as well as graphic rendering
func applicationDidBecomeActive(_ application: UIApplication)
{
// NOT used in this App
}
// Sent when the application is about to terminate. Save data if appropriate.
// See also applicationDidEnterBackground:.
// Saves changes in the application's managed object context before the application terminates.
func applicationWillTerminate(_ application: UIApplication)
{
let document = window?.rootViewController?.childViewControllers[0] as! DocumentController
document.Hipernate()
}
}

View file

@ -1,116 +0,0 @@
{
"images" : [
{
"idiom" : "iphone",
"size" : "20x20",
"filename" : "LibreOffice-40.png",
"scale" : "2x"
},
{
"idiom" : "iphone",
"size" : "20x20",
"filename" : "LibreOffice-60.png",
"scale" : "3x"
},
{
"size" : "29x29",
"idiom" : "iphone",
"filename" : "LibreOffice-58.png",
"scale" : "2x"
},
{
"idiom" : "iphone",
"size" : "29x29",
"filename" : "LibreOffice-87.png",
"scale" : "3x"
},
{
"size" : "40x40",
"idiom" : "iphone",
"filename" : "LibreOffice-80.png",
"scale" : "2x"
},
{
"idiom" : "iphone",
"size" : "40x40",
"filename" : "LibreOffice-120.png",
"scale" : "3x"
},
{
"size" : "60x60",
"idiom" : "iphone",
"filename" : "LibreOffice-120.png",
"scale" : "2x"
},
{
"idiom" : "iphone",
"size" : "60x60",
"filename" : "LibreOffice-180.png",
"scale" : "3x"
},
{
"idiom" : "ipad",
"size" : "20x20",
"filename" : "LibreOffice-20.png",
"scale" : "1x"
},
{
"idiom" : "ipad",
"size" : "20x20",
"filename" : "LibreOffice-40.png",
"scale" : "2x"
},
{
"size" : "29x29",
"idiom" : "ipad",
"filename" : "LibreOffice-29.png",
"scale" : "1x"
},
{
"size" : "29x29",
"idiom" : "ipad",
"filename" : "LibreOffice-58.png",
"scale" : "2x"
},
{
"size" : "40x40",
"idiom" : "ipad",
"filename" : "LibreOffice-40.png",
"scale" : "1x"
},
{
"size" : "40x40",
"idiom" : "ipad",
"filename" : "LibreOffice-80.png",
"scale" : "2x"
},
{
"size" : "76x76",
"idiom" : "ipad",
"filename" : "LibreOffice-76.png",
"scale" : "1x"
},
{
"size" : "76x76",
"idiom" : "ipad",
"filename" : "LibreOffice-152.png",
"scale" : "2x"
},
{
"idiom" : "ipad",
"size" : "83.5x83.5",
"filename" : "LibreOffice-167.png",
"scale" : "2x"
},
{
"size" : "1024x1024",
"idiom" : "ios-marketing",
"filename" : "LibreOffice-1024.png",
"scale" : "1x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.6 KiB

View file

@ -1,23 +0,0 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x",
"filename" : "back.png"
},
{
"idiom" : "universal",
"scale" : "2x",
"filename" : "back@2x.png"
},
{
"idiom" : "universal",
"scale" : "3x",
"filename" : "back@3x.png"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 805 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

View file

@ -1,6 +0,0 @@
{
"info" : {
"version" : 1,
"author" : "xcode"
}
}

View file

@ -1,12 +0,0 @@
{
"info" : {
"version" : 1,
"author" : "xcode"
},
"data" : [
{
"idiom" : "universal",
"filename" : "drawing-template.icns"
}
]
}

View file

@ -1,12 +0,0 @@
{
"info" : {
"version" : 1,
"author" : "xcode"
},
"data" : [
{
"idiom" : "universal",
"filename" : "drawing.icns"
}
]
}

View file

@ -1,12 +0,0 @@
{
"info" : {
"version" : 1,
"author" : "xcode"
},
"data" : [
{
"idiom" : "universal",
"filename" : "empty-document.ico"
}
]
}

View file

@ -1,12 +0,0 @@
{
"info" : {
"version" : 1,
"author" : "xcode"
},
"data" : [
{
"idiom" : "universal",
"filename" : "empty-template.ico"
}
]
}

View file

@ -1,12 +0,0 @@
{
"info" : {
"version" : 1,
"author" : "xcode"
},
"data" : [
{
"idiom" : "universal",
"filename" : "extension.icns"
}
]
}

View file

@ -1,12 +0,0 @@
{
"info" : {
"version" : 1,
"author" : "xcode"
},
"data" : [
{
"idiom" : "universal",
"filename" : "formula.icns"
}
]
}

View file

@ -1,12 +0,0 @@
{
"info" : {
"version" : 1,
"author" : "xcode"
},
"data" : [
{
"idiom" : "universal",
"filename" : "main.icns"
}
]
}

View file

@ -1,12 +0,0 @@
{
"info" : {
"version" : 1,
"author" : "xcode"
},
"data" : [
{
"idiom" : "universal",
"filename" : "master-document.icns"
}
]
}

View file

@ -1,12 +0,0 @@
{
"info" : {
"version" : 1,
"author" : "xcode"
},
"data" : [
{
"idiom" : "universal",
"filename" : "oasis-database.icns"
}
]
}

View file

@ -1,12 +0,0 @@
{
"info" : {
"version" : 1,
"author" : "xcode"
},
"data" : [
{
"idiom" : "universal",
"filename" : "oasis-drawing-template.ico"
}
]
}

View file

@ -1,12 +0,0 @@
{
"info" : {
"version" : 1,
"author" : "xcode"
},
"data" : [
{
"idiom" : "universal",
"filename" : "oasis-drawing.icns"
}
]
}

View file

@ -1,12 +0,0 @@
{
"info" : {
"version" : 1,
"author" : "xcode"
},
"data" : [
{
"idiom" : "universal",
"filename" : "oasis-formula.ico"
}
]
}

View file

@ -1,12 +0,0 @@
{
"info" : {
"version" : 1,
"author" : "xcode"
},
"data" : [
{
"idiom" : "universal",
"filename" : "oasis-master-document-template.icns"
}
]
}

View file

@ -1,12 +0,0 @@
{
"info" : {
"version" : 1,
"author" : "xcode"
},
"data" : [
{
"idiom" : "universal",
"filename" : "oasis-master-document.ico"
}
]
}

View file

@ -1,12 +0,0 @@
{
"info" : {
"version" : 1,
"author" : "xcode"
},
"data" : [
{
"idiom" : "universal",
"filename" : "oasis-presentation-template.icns"
}
]
}

View file

@ -1,12 +0,0 @@
{
"info" : {
"version" : 1,
"author" : "xcode"
},
"data" : [
{
"idiom" : "universal",
"filename" : "oasis-presentation.ico"
}
]
}

View file

@ -1,12 +0,0 @@
{
"info" : {
"version" : 1,
"author" : "xcode"
},
"data" : [
{
"idiom" : "universal",
"filename" : "oasis-spreadsheet-template.icns"
}
]
}

View file

@ -1,12 +0,0 @@
{
"info" : {
"version" : 1,
"author" : "xcode"
},
"data" : [
{
"idiom" : "universal",
"filename" : "oasis-spreadsheet.icns"
}
]
}

View file

@ -1,12 +0,0 @@
{
"info" : {
"version" : 1,
"author" : "xcode"
},
"data" : [
{
"idiom" : "universal",
"filename" : "oasis-text-template.ico"
}
]
}

View file

@ -1,12 +0,0 @@
{
"info" : {
"version" : 1,
"author" : "xcode"
},
"data" : [
{
"idiom" : "universal",
"filename" : "oasis-text.ico"
}
]
}

View file

@ -1,12 +0,0 @@
{
"info" : {
"version" : 1,
"author" : "xcode"
},
"data" : [
{
"idiom" : "universal",
"filename" : "oasis-web-template.icns"
}
]
}

View file

@ -1,12 +0,0 @@
{
"info" : {
"version" : 1,
"author" : "xcode"
},
"data" : [
{
"idiom" : "universal",
"filename" : "open.ico"
}
]
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

View file

@ -1,12 +0,0 @@
{
"info" : {
"version" : 1,
"author" : "xcode"
},
"data" : [
{
"idiom" : "universal",
"filename" : "presentation-template.ico"
}
]
}

View file

@ -1,12 +0,0 @@
{
"info" : {
"version" : 1,
"author" : "xcode"
},
"data" : [
{
"idiom" : "universal",
"filename" : "presentation.ico"
}
]
}

View file

@ -1,12 +0,0 @@
{
"info" : {
"version" : 1,
"author" : "xcode"
},
"data" : [
{
"idiom" : "universal",
"filename" : "soffice.ico"
}
]
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

View file

@ -1,12 +0,0 @@
{
"info" : {
"version" : 1,
"author" : "xcode"
},
"data" : [
{
"idiom" : "universal",
"filename" : "spreadsheet-template.icns"
}
]
}

View file

@ -1,12 +0,0 @@
{
"info" : {
"version" : 1,
"author" : "xcode"
},
"data" : [
{
"idiom" : "universal",
"filename" : "spreadsheet.icns"
}
]
}

View file

@ -1,12 +0,0 @@
{
"info" : {
"version" : 1,
"author" : "xcode"
},
"data" : [
{
"idiom" : "universal",
"filename" : "text-template.icns"
}
]
}

View file

@ -1,12 +0,0 @@
{
"info" : {
"version" : 1,
"author" : "xcode"
},
"data" : [
{
"idiom" : "universal",
"filename" : "text.icns"
}
]
}

View file

@ -1,23 +0,0 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x",
"filename" : "intro.png"
},
{
"idiom" : "universal",
"scale" : "2x",
"filename" : "intro.png"
},
{
"idiom" : "universal",
"scale" : "3x",
"filename" : "intro.png"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 69 KiB

View file

@ -1,23 +0,0 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x",
"filename" : "menu.png"
},
{
"idiom" : "universal",
"scale" : "2x",
"filename" : "menu@2x.png"
},
{
"idiom" : "universal",
"scale" : "3x",
"filename" : "menu@3x.png"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 586 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 648 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 722 B

View file

@ -1,145 +0,0 @@
//
// This file is part of the LibreOffice project.
//
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
//
import UIKit
/// Scrollable list of buttons.
/// Kind of like a tab bar, but doesn't maintain or switch between views, just calls back on click
open class ButtonScrollView: UIScrollView
{
var buttonList: ButtonList? = nil
var buttonClickedCallback: ( (Int) -> () )? = nil
var selectedIndex: Int?
{
get {
return buttonList?.selectedIndex
}
set {
buttonList?.selectedIndex = selectedIndex
}
}
public override init(frame: CGRect)
{
super.init(frame: frame)
}
public required init?(coder aDecoder: NSCoder)
{
super.init(coder: aDecoder)
}
public func setButtonLabels(labels: [String])
{
if let bl = buttonList
{
bl.removeFromSuperview()
}
let bl = ButtonList(frame: CGRect(x:0, y:0, width: self.frame.width, height:44),
labels: labels,
owner: self)
self.addSubview(bl)
self.contentSize = bl.frame.size
self.buttonList = bl
}
}
/// Horizontally laid out buttons, living within the owned scroll view
open class ButtonList: UIView
{
let labels: [String]
let gap: CGFloat = 10.0
let topGap: CGFloat = 8
weak var owner: ButtonScrollView? = nil
var buttonBackground = UIColor(white: 0.6, alpha: 1)
var selectedButtonBackground = UIColor.white
var selectedIndex: Int? = 0
{
didSet {
runOnMain {
self.highlightSelectedIndex()
}
}
}
public init(frame: CGRect, labels: [String], owner: ButtonScrollView)
{
self.labels = labels
self.owner = owner
super.init(frame: frame)
self.backgroundColor = UIColor(white: 0.9, alpha: 1)
var idx = 0
for label in labels
{
let b = UIButton(type: .custom)
b.setTitle(label, for: .normal)
b.backgroundColor = buttonBackground
b.contentEdgeInsets = UIEdgeInsets(top: 4, left: 4, bottom: 4, right: 4)
b.layer.cornerRadius = 4
b.tag = idx
b.addTarget(self, action: #selector(buttonTapped), for: UIControlEvents.touchUpInside)
self.addSubview(b)
idx += 1
}
self.layoutSubviews()
}
@objc func buttonTapped(sender: UIButton, forEvent event: UIEvent)
{
let idx = sender.tag
owner?.buttonClickedCallback?(idx)
self.selectedIndex = idx
}
public required init?(coder aDecoder: NSCoder)
{
fatalError("init(coder:) has not been implemented")
}
public var buttons: [UIButton]
{
return self.subviews.compactMap({ $0 as? UIButton })
}
open override func layoutSubviews()
{
var x: CGFloat = gap
for button in buttons
{
button.sizeToFit()
let s = button.frame.size
button.frame = CGRect(x: x, y: topGap, width: s.width, height: s.height)
x = x + (s.width + gap)
}
highlightSelectedIndex()
self.frame = CGRect(x:0, y: 0, width: x, height: self.frame.height)
}
open func highlightSelectedIndex()
{
for (index, button) in buttons.enumerated()
{
if (index == selectedIndex)
{
button.backgroundColor = selectedButtonBackground
button.setTitleColor(.black, for: .normal)
}
else
{
button.backgroundColor = buttonBackground
button.setTitleColor(.white, for: .normal)
}
}
}
}

View file

@ -1,75 +0,0 @@
//
// This file is part of the LibreOffice project.
//
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
//
import UIKit
// DocumentActions is the main menu popover started from DocumentController
// it allows the user to invoke global actions and delegates the processing
// back to the DocumentController
class DocumentActions: UITableViewController
{
// Pointer to callback class (in reality instance of DocumentController)
var delegate : MenuDelegate?
// set by DocumentController before invoking the menu
// the variable is used to control which menu entries are active
var isDocActive : Bool = false
// Reference to instances of the buttons
@IBOutlet weak var buttonOpen: UIButton!
@IBOutlet weak var buttonProperties: UIButton!
@IBOutlet weak var buttonSave: UIButton!
@IBOutlet weak var buttonClose: UIButton!
@IBOutlet weak var buttonSaveAs: UIButton!
@IBOutlet weak var buttonSaveAsPDF: UIButton!
@IBOutlet weak var buttonPrint: UIButton!
// called once controller is loaded
override func viewDidLoad()
{
super.viewDidLoad()
// Some menu entries are only active when a document is loaded
buttonSave.isEnabled = isDocActive
buttonProperties.isEnabled = isDocActive
buttonClose.isEnabled = isDocActive
buttonSaveAs.isEnabled = isDocActive
buttonSaveAsPDF.isEnabled = isDocActive
buttonPrint.isEnabled = isDocActive
}
// Called when user click on a menu entry (all entries goes here)
// see storyboard Document actions scene for details
@IBAction func actionMenuSelect(_ sender: UIButton)
{
// make popover go away, when this function returns
dismiss(animated: false)
// inform DocumentController about the selected entry
delegate?.actionMenuSelected(sender.tag)
}
}
// Protocol for action popover callback
protocol MenuDelegate
{
// inform delegate about selected menu entry
func actionMenuSelected(_ tag : Int)
}

View file

@ -1,598 +0,0 @@
//
// This file is part of the LibreOffice project.
//
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
//
import UIKit
// DocumentController is the main viewer in the app, it displays the selected
// documents and holds a top entry to view the properties as well as a normal
// menu to handle global actions
// It is a delegate class to receive Menu events as well as file handling events
class DocumentController: UIViewController, MenuDelegate, UIDocumentBrowserViewControllerDelegate
{
var document: DocumentHolder? = nil
var documentView: DocumentTiledView? = nil
var documentOverlaysView: DocumentOverlaysView? = nil
// *** Handling of DocumentController
// this is normal functions every controller must implement
// holds known document types
var KnownDocumentTypes : [String] = []
var zeroInsets: UIEdgeInsets = .zero
@IBOutlet weak var scrollView: UIScrollView!
@IBOutlet weak var mask: UIView!
@IBOutlet weak var progressBar: UIProgressView!
@IBOutlet weak var searchBar: UISearchBar!
@IBOutlet weak var buttonScrollView: ButtonScrollView!
deinit
{
NotificationCenter.default.removeObserver(self)
}
// called once controller is loaded
override func viewDidLoad()
{
super.viewDidLoad()
// loading known document types, so we can use them for the open call
let path = Bundle.main.path(forResource: "Info", ofType: "plist")
let plist = NSDictionary(contentsOfFile: path!)
for dict in (plist!.object(forKey: "UTExportedTypeDeclarations") as! [NSDictionary]) +
(plist!.object(forKey: "UTImportedTypeDeclarations") as! [NSDictionary]) {
let x = ((dict["UTTypeTagSpecification"] as! NSDictionary)["public.filename-extension"] as! NSArray)
KnownDocumentTypes.append( x[0] as! String )
}
LOKitThread.instance.progressDelegate = self
}
override func viewWillAppear(_ animated: Bool)
{
super.viewWillAppear(animated)
registerKeyboardNotifications()
}
override func viewDidAppear(_ animated: Bool)
{
super.viewDidAppear(animated)
// Always load the 'welcome' file, as per the android app
let res = Bundle.main.url(forResource: "welcome", withExtension: "odt")
// uncomment for test data in resources until the doc picker works properly
//let res = Bundle.main.url(forResource: "testdata/2", withExtension: "xlsx")
if let exampleDoc = res
{
self.doOpen(exampleDoc)
}
}
// called when there is a memory constraint
override func didReceiveMemoryWarning()
{
super.didReceiveMemoryWarning()
// not used in this App
}
@IBAction func searchIconTapped(_ sender: Any)
{
searchBar.isHidden = !searchBar.isHidden
if (!searchBar.isHidden)
{
searchBar.becomeFirstResponder()
}
}
// *** Handling of Background (hipernate)
// iOS is not true multitasking, only 1 app can be active (foreground) at any time,
// therefore apps frequently are moved to the background.
// background really means hipernate by terminating all threads and solely keep the
// data
// Moving to hipernate
public func Hipernate() -> Void
{
//BridgeLOkit_Hipernate() // FIXME
}
// Moving back to foreground
public func LeaveHipernate() -> Void
{
//BridgeLOkit_LeaveHipernate() // FIXME
}
// *** handling of PropertiesController
// The PropertiesController is a left sidebar, that will scroll in when activated
// The Controller handles manipulation of properties in the document
// Activate/Deactivate PropertiesController (from navigationController, see storyboard)
@IBAction func doProperties(_ sender: UIBarButtonItem)
{
// Check if deactivation
if (sender.tag == 99) {
// Deactivate
// Mark it as deactivated (it stays loaded)
sender.tag = 0;
// get handle of PropertiesController
let viewMenuBack : UIView = view.subviews.last!
// Blend out sidebar
UIView.animate(withDuration: 0.3, animations: { () -> Void in
var frameMenu : CGRect = viewMenuBack.frame
frameMenu.origin.x = -1 * UIScreen.main.bounds.size.width
viewMenuBack.frame = frameMenu
viewMenuBack.layoutIfNeeded()
viewMenuBack.backgroundColor = UIColor.clear
}, completion: { (finished) -> Void in
viewMenuBack.removeFromSuperview()
})
}
else {
// Activate
// Mark as activated
sender.isEnabled = false
sender.tag = 99
// make instance of PropertiesController
let prop : PropertiesController = self.storyboard!.instantiateViewController(
withIdentifier: "PropertiesController") as! PropertiesController
view.addSubview(prop.view)
addChildViewController(prop)
prop.view.layoutIfNeeded()
prop.view.frame=CGRect(x: 0 - UIScreen.main.bounds.size.width,
y: 0,
width: UIScreen.main.bounds.size.width,
height: UIScreen.main.bounds.size.height);
// Blend in sidebar
UIView.animate(withDuration: 0.3, animations: { () -> Void in
prop.view.frame=CGRect(x: 0,
y: 0,
width: UIScreen.main.bounds.size.width,
height: UIScreen.main.bounds.size.height);
sender.isEnabled = true
}, completion:nil)
}
}
// *** Handling of menu popover
// the menu contains all global functions and use seque/delegate
var currentDocumentName : String? = nil
// Last stop before displaying popover
override func prepare(for segue: UIStoryboardSegue, sender: Any?)
{
// "showActions" is the name of the popover menu, see storyboard
if segue.identifier == "showActions" {
let vc = segue.destination as! DocumentActions
vc.delegate = self
vc.isDocActive = (currentDocumentName != nil)
}
}
// Delegate call from menu (see protocol MenuDelegate)
func actionMenuSelected(_ tag : Int)
{
// a tag can sadly enough only be a number and not a string,
// whenever adding a menu entry, it (of course) needs to be added
// to the Document actions scene in storyboard and assigned a tag number
// the tag number must be repeated in the following switch
// BE CAREFUL to keep the tags synchronized (manually)
switch tag
{
case 1: // Open...
startOpenDocument()
case 2: // Properties
showProperties()
case 3: // Save
doSave()
case 4: // Close...
doClose()
case 5: // Save as...
doSaveAs()
case 6: // Save as PDF...
doSaveAsPDF()
case 7: // Print...
startPrint()
default: // should not happen
print("unknown menu" + String(tag))
}
}
// *** handling of menu actions
// This is the real base of the application
var openMenu : UIDocumentBrowserViewController? = nil
// Load document into LibreOfficeKit and present it
internal func startOpenDocument()
{
openMenu = UIDocumentBrowserViewController()
openMenu?.allowsDocumentCreation = true
openMenu?.browserUserInterfaceStyle = UIDocumentBrowserViewController.BrowserUserInterfaceStyle.dark
openMenu?.delegate = self
self.present(openMenu!, animated: true, completion: nil)
}
// Show document properties (new overloaded page)
internal func showProperties()
{
//FIXME
print("menu Properties to be done")
}
// Save current document
internal func doSave()
{
//FIXME
print("menu Save to be done")
}
// Close current document (without saving)
internal func doClose()
{
//FIXME
print("menu Close to be done")
}
// make a copy of current document, and save
internal func doSaveAs()
{
//FIXME
print("menu Save as... to be done")
}
// save current document as PDF
internal func doSaveAsPDF()
{
//FIXME
print("menu Save as PDF... to be done")
}
// print current document
internal func startPrint()
{
//FIXME
print("menu Print... to be done")
}
// *** Handling of DocumentViewController delegate functions
// this handles open/create/copy/delete document
// Create an empty document, and present it
internal func documentBrowser(_ controller: UIDocumentBrowserViewController,
didRequestDocumentCreationWithHandler importHandler: @escaping (URL?,
UIDocumentBrowserViewController.ImportMode) -> Void)
{
//FIXME
}
// import (copy from iCloud to iPad) document, open it and present it
internal func documentBrowser(_ controller: UIDocumentBrowserViewController,
didImportDocumentAt sourceURL: URL,
toDestinationURL destinationURL: URL)
{
//FIXME
}
// Import failed, inform user
internal func documentBrowser(_ controller: UIDocumentBrowserViewController,
failedToImportDocumentAt documentURL: URL,
error: Error?)
{
//FIXME
}
// open document and present it
internal func documentBrowser(_ controller: UIDocumentBrowserViewController,
didPickDocumentURLs documentURLs: [URL])
{
openMenu?.dismiss(animated: true, completion: nil)
openMenu = nil
doOpen(documentURLs[0])
}
// *** Handling of document (open/print)
// Real open and presentation of document
public func doOpen(_ docURL : URL)
{
LOKitThread.instance.documentLoad(url: docURL.absoluteString)
{
doc, error in
if let document = doc
{
runOnMain
{
self.setDocument(doc: document)
}
}
else
{
// TODO - alert user of failure
}
}
/* FIXME
BridgeLOkit_Sizing(4, 4, 256, 256);
*/
}
/// Sets the document to use and set's up it's view. Should be called on the main thread
public func setDocument(doc: DocumentHolder)
{
if let _ = self.document
{
// TODO - cleanup
self.document = nil
}
if let existingView = self.documentView
{
existingView.removeFromSuperview()
self.documentView = nil // forces the close of the view and it's held documents before we setup the new one
}
// also remove current overlays and start fresh
documentOverlaysView?.removeFromSuperview()
// setup the new doc view
self.document = doc
// setup delegates
doc.searchDelegate = self
let frameToUse = self.scrollView.frame
let docView = DocumentTiledView(frame: frameToUse, document: doc, scale: 1.0)
self.scrollView.addSubview(docView)
self.scrollView.contentSize = docView.frame.size
self.documentView = docView
// overlay view
let overlay = DocumentOverlaysView(docTiledView: docView)
docView.addSubview(overlay)
self.documentOverlaysView = overlay
// button view - used for spreadsheet tabs
if doc.isSpreadsheet
{
buttonScrollView.isHidden = false
buttonScrollView.setButtonLabels(labels: doc.partNames)
buttonScrollView.buttonClickedCallback = {
[weak self] index in
self?.document?.async {
$0.setPart(nPart: Int32(index))
runOnMain {
self?.documentView?.setNeedsDisplay()
}
}
}
// make room for the scroll view
zeroInsets = UIEdgeInsets(top: 0, left: 0, bottom: buttonScrollView.height, right: 0)
}
else
{
zeroInsets = .zero
buttonScrollView.isHidden = true
}
scrollView.contentInset = zeroInsets
// debugging view borders
/*
self.scrollView.layer.borderColor = UIColor.red.cgColor
self.scrollView.layer.borderWidth = 1.0
docView.layer.borderColor = UIColor.green.cgColor
docView.layer.borderWidth = 1.0
*/
}
// MARK: - UIScrollViewDelegate
}
extension DocumentController: UIScrollViewDelegate
{
// return a view that will be scaled. if delegate returns nil, nothing happens
func viewForZooming(in scrollView: UIScrollView) -> UIView?
{
return self.documentView
}
// called before the scroll view begins zooming its content
func scrollViewWillBeginZooming(_ scrollView: UIScrollView, with view: UIView?)
{
print("scrollViewWillBeginZooming currentScale=\(scrollView.zoomScale)")
}
// scale between minimum and maximum. called after any 'bounce' animations
func scrollViewDidEndZooming(_ scrollView: UIScrollView, with view: UIView?, atScale scale: CGFloat)
{
print("scrollViewDidEndZooming scale=\(scale)")
self.documentView?.scrollViewDidEndZooming(scrollView, with: view, atScale: scale)
}
}
// MARK: - UIKeyInput
// public var hasText: Bool
// {
// true
// }
//
//
// public func insertText(_ text: String)
// {
//
// }
//
// public func deleteBackward()
// {
//
// }
extension DocumentController: ProgressDelegate
{
// MARK: - ProgressDelegate
func statusIndicatorStart()
{
self.mask?.isHidden = false
self.progressBar?.isHidden = false
self.progressBar?.progress = 0.0
}
func statusIndicatorFinish()
{
// what would be nice would be to be able to wait until the initial tiles have rendered...
self.mask?.isHidden = true
self.progressBar?.isHidden = true
}
func statusIndicatorSetValue(value: Double)
{
self.progressBar?.progress = Float(value) / 100.0
}
}
extension DocumentController: UISearchBarDelegate
{
// called when text changes (including clear)
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String)
{
}
// called when keyboard search button pressed
func searchBarSearchButtonClicked(_ searchBar: UISearchBar)
{
if let text = searchBar.text
{
if text.count > 0
{
document?.search(searchString: text, forwardDirection: true, from: CGPoint(x:0, y:0) )
}
}
}
func searchBarCancelButtonClicked(_ searchBar: UISearchBar)
{
searchBar.isHidden = true
}
}
extension DocumentController: SearchDelegate
{
func searchNotFound()
{
// TODO: tell user somehow
self.documentOverlaysView?.clearSearchResults()
}
func searchResultSelection(searchResults: SearchResults)
{
self.documentOverlaysView?.setSearchResults(searchResults: searchResults)
}
}
/// Keyboard notifications
extension DocumentController
{
func registerKeyboardNotifications()
{
NotificationCenter.default.addObserver(self,
selector: #selector(keyboardWillShow(notification:)),
name: NSNotification.Name.UIKeyboardWillShow,
object: nil)
NotificationCenter.default.addObserver(self,
selector: #selector(keyboardWillHide(notification:)),
name: NSNotification.Name.UIKeyboardWillHide,
object: nil)
}
@objc func keyboardWillShow(notification: NSNotification)
{
let userInfo: NSDictionary = notification.userInfo! as NSDictionary
guard let keyboardInfo = userInfo[UIKeyboardFrameEndUserInfoKey] as? NSValue else { return }
print(userInfo)
let keyboardSize = keyboardInfo.cgRectValue.size
print("keyboardWillShow \(keyboardSize)")
let contentInsets = UIEdgeInsets(top: 0, left: 0, bottom: keyboardSize.height, right: 0)
scrollView.contentInset = contentInsets
scrollView.scrollIndicatorInsets = contentInsets
}
@objc func keyboardWillHide(notification: NSNotification)
{
print("keyboardWillHide")
scrollView.contentInset = zeroInsets
scrollView.scrollIndicatorInsets = zeroInsets
}
}

View file

@ -1,68 +0,0 @@
//
// This file is part of the LibreOffice project.
//
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
//
import UIKit
public class DocumentOverlaysView: UIView
{
var searchSubViews: [UIView] = []
weak var documentTiledView: DocumentTiledView? = nil
public init(docTiledView: DocumentTiledView)
{
self.documentTiledView = docTiledView
super.init(frame: docTiledView.frame)
self.layer.compositingFilter = "multiplyBlendMode"
}
required public init?(coder aDecoder: NSCoder)
{
fatalError("init(coder:) has not been implemented")
}
public func clearSearchResults()
{
for v in self.searchSubViews
{
v.removeFromSuperview()
}
searchSubViews = []
}
public func setSearchResults(searchResults: SearchResults)
{
clearSearchResults()
guard let documentTiledView = self.documentTiledView else { return }
if let srs = searchResults.searchResultSelection
{
let allTheRects = srs.compactMap { $0.rectsAsCGRects }
.flatMap { $0 }
.map { documentTiledView.twipsToPixels(rect: $0) }
for rect in allTheRects
{
let subView = UIView(frame: rect)
subView.backgroundColor = UIColor.yellow // TODO
subView.layer.compositingFilter = "multiplyBlendMode"
self.addSubview(subView)
searchSubViews.append(subView)
}
if let first = allTheRects.first
{
if let scrollView = self.superview?.superview as? UIScrollView
{
scrollView.scrollRectToVisible(first, animated: true)
}
}
}
}
}

View file

@ -1,244 +0,0 @@
//
// This file is part of the LibreOffice project.
//
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
//
import UIKit
import QuartzCore
class DocumentTiledLayer : CATiledLayer
{
override class func fadeDuration() -> CFTimeInterval
{
return 0
}
}
/// The main tiled view, which sits inside the scroll view
public class DocumentTiledView: UIView
{
var myScale: CGFloat
weak var document: DocumentHolder? = nil
let initialSize: CGSize
let docSize: CGSize
let initialScaleFactor: CGFloat
var drawCount = 0
// Create a new view with the desired frame and scale.
public init(frame: CGRect, document: DocumentHolder, scale: CGFloat)
{
self.document = document
myScale = scale
initialSize = frame.size
var size = document.sync { $0.getDocumentSizeAsCGSize() }
// avoid divide by zero crashes
if (size.width == 0)
{
size.width = 1
}
if (size.height == 0)
{
size.height = 1
}
self.docSize = size
initialScaleFactor = (docSize.width / initialSize.width)
let scaledFrame = CGRect(x: 0, y: 0, width: frame.width, height: frame.width * (docSize.height / docSize.width))
print("DocumentTiledView.init frame=\(frame.desc) \n scaledFrame=\(scaledFrame.desc)\n docSize=\(docSize) \n initialScaleFactor=\(initialScaleFactor)")
super.init(frame: scaledFrame)
//self.contentScaleFactor = 1.0
if let tiledLayer = self.layer as? CATiledLayer
{
// these are all tweakable parameters, that give different behaviour to the tiled view
tiledLayer.levelsOfDetail = 4
tiledLayer.levelsOfDetailBias = 7
tiledLayer.tileSize = CGSize(width: 1024.0, height: 1024.0)
//tiledLayer.tileSize = CGSize(width: 512.0, height: 512.0)
}
let tap = UITapGestureRecognizer(target: self, action: #selector(onTap) )
tap.numberOfTapsRequired = 1
self.addGestureRecognizer(tap)
if (document.isPresentation) // only for preso atm
{
// add swipe left/right gestures on a preso
let swipeRight = UISwipeGestureRecognizer(target: self, action: #selector(onSwipeRight))
swipeRight.direction = .right
self.addGestureRecognizer(swipeRight)
let swipeLeft = UISwipeGestureRecognizer(target: self, action: #selector(onSwipeLeft))
swipeLeft.direction = .left
self.addGestureRecognizer(swipeLeft)
}
}
required public init?(coder aDecoder: NSCoder)
{
fatalError("init(coder:) has not been implemented")
}
func incrementPart(amount: Int)
{
document?.incrementPart(amount: Int32(amount))
document?.async { _ in
runOnMain { self.setNeedsDisplay() }
}
}
public func twipsToPixels(rect: CGRect) -> CGRect
{
return rect.applying(CGAffineTransform(scaleX: 1.0/initialScaleFactor, y: 1.0/initialScaleFactor ))
}
public func pixelsToTwips(rect: CGRect) -> CGRect
{
return rect.applying(CGAffineTransform(scaleX: initialScaleFactor, y: initialScaleFactor ))
}
override public class var layerClass : AnyClass
{
return DocumentTiledLayer.self
}
override public func draw(_ r: CGRect)
{
// UIView uses the existence of -drawRect: to determine if it should allow its CALayer
// to be invalidated, which would then lead to the layer creating a backing store and
// -drawLayer:inContext: being called.
// By implementing an empty -drawRect: method, we allow UIKit to continue to implement
// this logic, while doing our real drawing work inside of -drawLayer:inContext:
}
// Draw the CGPDFPageRef into the layer at the correct scale.
override public func draw(_ layer: CALayer, in context: CGContext)
{
// if self.superview == nil
// {
// // check that we are still active - ios is doing some really funny things where this method gets called after dealloc which causes bad bad karma
// return
// }
guard let document = self.document else
{
return
}
guard let tiledLayer = layer as? CATiledLayer else { return }
let tileSize: CGSize = tiledLayer.tileSize
let box: CGRect = context.boundingBoxOfClipPath
let ctm: CGAffineTransform = context.ctm
drawCount += 1
let filename = "tile\(drawCount).png"
print("drawLayer \(filename)\n bounds=\(layer.bounds.desc)\n ctm.a=\(ctm.a)\n tileSize=\(tileSize)\n box=\(box.desc)")
//context.setFillColor(UIColor.white.cgColor)
context.setFillColor(UIColor.blue.cgColor)
context.fill(box)
context.saveGState()
context.interpolationQuality = CGInterpolationQuality.high
context.setRenderingIntent(CGColorRenderingIntent.defaultIntent)
// This is where the magic happens
let pageRect = pixelsToTwips(rect: box)
print(" pageRect: \(pageRect.desc)")
// Figure out how many pixels we need for the dimensions of our tile
// tileSize represents a "full size" one in pixels
//let fullSizeTileInPoints = CGSize(width: CGFloat(tileSize.width) / ctm.a, height: CGFloat(tileSize.height) / ctm.a)
//let cropRectTileFraction = CGSize(width: box.size.width / fullSizeTileInPoints.width, height: box.size.height / fullSizeTileInPoints.height)
//let bitmapSize = CGSize(width: tileSize.width * cropRectTileFraction.width, height: tileSize.height * cropRectTileFraction.height)
let canvasSize = tileSize; //CGSize(width:512, height:512) // FIXME - this needs to be calculated
// we have to do the call synchronously, as the tile has to be painted now, on the current thread
// TODO - cache the image, and check the cache before we do the sync call
let image = document.paintTileToImage(canvasSize: canvasSize, tileRect: pageRect)
if let img = image
{
// Debugging: write the file to disk
/*
if let data = UIImagePNGRepresentation(img)
{
let filename = getDocumentsDirectory().appendingPathComponent(filename)
try? data.write(to: filename)
print("Wrote tile to: \(filename)")
}
*/
// We use the UIImage draw function as it automatically handles the flipping of the co-ordinate system for us.
UIGraphicsPushContext(context);
img.draw(in: box)
UIGraphicsPopContext()
}
context.restoreGState()
}
deinit
{
self.document = nil
}
func scrollViewDidEndZooming(_ scrollView: UIScrollView, with view: UIView?, atScale scale: CGFloat)
{
//self.setNeedsDisplay()
}
}
/// Gesture handlers
public extension DocumentTiledView
{
@objc func onTap(_ sender: UITapGestureRecognizer)
{
if (document?.isPresentation ?? false)
{
incrementPart(amount: 1)
}
}
@objc func onSwipeRight(_ sender: UISwipeGestureRecognizer)
{
if (document?.isPresentation ?? false)
{
incrementPart(amount: -1)
}
}
@objc func onSwipeLeft(_ sender: UISwipeGestureRecognizer)
{
if (document?.isPresentation ?? false)
{
incrementPart(amount: 1)
}
}
}

File diff suppressed because it is too large Load diff

View file

@ -1,92 +0,0 @@
//
// This file is part of the LibreOffice project.
//
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
//
import Foundation
public typealias Runnable = () -> ()
/// Runs the closure on a queued background thread
public func runInBackground(_ runnable: @escaping Runnable)
{
DispatchQueue.global(qos: .background).async(execute: runnable)
}
/// Runs the closure on the UI (main) thread. Exceptions are caught and logged
public func runOnMain(_ runnable: @escaping () -> ())
{
DispatchQueue.main.async(execute: runnable)
}
/// Returns true if we are on the Main / UI thread
public func isMainThread() -> Bool
{
return Thread.isMainThread
}
/// Runs tasks in a serial way on a single thread.
/// Why wouldn't we just use DispatchQueue or NSOperationQueue to do this?
/// Because neither guarantee running their tasks on the same thread all the time.
/// And in fact DispatchQueue will try and run sync tasks on the current thread where it can.
/// Both classes try and abstract the thread away, whereas we have to use the same thread, or we end up with deadlocks in LOKit
public class SingleThreadedQueue: Thread
{
public init(name: String)
{
super.init()
self.name = name
self.start()
}
override public func main()
{
// You need the NSPort here because a runloop with no sources or ports registered with it
// will simply exit immediately instead of running forever.
let keepAlive = Port()
let rl = RunLoop.current
keepAlive.schedule(in: rl, forMode: .commonModes)
rl.run()
}
/// Run the task on the serial queue, and return immediately
public func async( _ runnable: @escaping Runnable)
{
let operation = BlockOperation {
runnable()
}
async(operation: operation)
}
/// Run the task on the serial queue, and return immediately
public func async( operation: Operation)
{
if ( Thread.current == self)
{
operation.start();
}
else
{
operation.perform(#selector(Operation.start), on: self, with: nil, waitUntilDone: false)
}
}
public func sync<R>( _ closure: @escaping () -> R ) -> R
{
var ret: R! = nil
let op = BlockOperation {
ret = closure();
}
async(operation: op)
op.waitUntilFinished()
return ret
}
}

View file

@ -1,592 +0,0 @@
//
// This file is part of the LibreOffice project.
//
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
//
import Foundation
import UIKit
import QuartzCore
/// The Document class represents one loaded document instance
/// Obtained through LibreOffice.documentLoad()
open class Document
{
private let pDoc: UnsafeMutablePointer<LibreOfficeKitDocument>
private let docClass: LibreOfficeKitDocumentClass
internal init(pDoc: UnsafeMutablePointer<LibreOfficeKitDocument>)
{
self.pDoc = pDoc
self.docClass = pDoc.pointee.pClass.pointee
}
/**
* Stores the document's persistent data to a URL and
* continues to be a representation of the old URL.
*
* @param pUrl the location where to store the document
* @param pFormat the format to use while exporting, when omitted, then deducted from pURL's extension
* @param pFilterOptions options for the export filter, e.g. SkipImages.
* Another useful FilterOption is "TakeOwnership". It is consumed
* by the saveAs() itself, and when provided, the document identity
* changes to the provided pUrl - meaning that '.uno:ModifiedStatus'
* is triggered as with the "Save As..." in the UI.
* "TakeOwnership" mode must not be used when saving to PNG or PDF.
*/
public func saveAs(url: String, format: String? = nil, filterOptions: String? = nil) -> Bool
{
return docClass.saveAs(pDoc, url, format, filterOptions) != 0
}
/**
* Get document type.
*
* @since LibreOffice 6.0
* @return an element of the LibreOfficeKitDocumentType enum.
*/
public func getDocumentType() -> LibreOfficeKitDocumentType
{
return LibreOfficeKitDocumentType(rawValue: LibreOfficeKitDocumentType.RawValue(docClass.getDocumentType(pDoc)))
}
/**
* Get number of part that the document contains.
*
* Part refers to either individual sheets in a Calc, or slides in Impress,
* and has no relevance for Writer.
*/
public func getParts() -> Int32
{
return docClass.getParts(pDoc);
}
public func initializeForRendering()
{
docClass.initializeForRendering(pDoc, "") // TODO: arguments??
}
/**
* Get the logical rectangle of each part in the document.
*
* A part refers to an individual page in Writer and has no relevant for
* Calc or Impress.
*
* @return a rectangle list, using the same format as
* LOK_CALLBACK_TEXT_SELECTION.
*/
public func getPartRectangles() -> String
{
return toString( docClass.getPartPageRectangles(pDoc) ) ?? ""
// TODO: convert to CGRects? Comes out like "284, 284, 11906, 16838; 284, 17406, 11906, 16838; 284, 34528, 11906, 16838"
}
/// Get the current part of the document.
public func getPart() -> Int32
{
return docClass.getPart(pDoc);
}
/// Set the current part of the document.
public func setPart( nPart: Int32 )
{
docClass.setPart(pDoc, nPart);
}
/// Get the current part's name.
public func getPartName( nPart: Int32) -> String?
{
return toString( docClass.getPartName(pDoc, nPart) )
}
/// Get the current part's hash.
public func getPartHash( nPart: Int32 ) -> String?
{
return toString( docClass.getPartHash(pDoc, nPart) )
}
public func setPartMode( nMode: Int32 )
{
docClass.setPartMode( pDoc, nMode);
}
/**
* Renders a subset of the document to a pre-allocated buffer.
*
* Note that the buffer size and the tile size implicitly supports
* rendering at different zoom levels, as the number of rendered pixels and
* the rendered rectangle of the document are independent.
*
* @param rCGContext Core Graphics context, cast to a UnsafeMutableRawPointer
* @param nCanvasWidth number of pixels in a row of pBuffer.
* @param nCanvasHeight number of pixels in a column of pBuffer.
* @param nTilePosX logical X position of the top left corner of the rendered rectangle, in TWIPs.
* @param nTilePosY logical Y position of the top left corner of the rendered rectangle, in TWIPs.
* @param nTileWidth logical width of the rendered rectangle, in TWIPs.
* @param nTileHeight logical height of the rendered rectangle, in TWIPs.
*/
public func paintTileToCGContext( rCGContext: UnsafeMutableRawPointer,
canvasWidth: Int32,
canvasHeight: Int32,
tilePosX: Int32,
tilePosY: Int32,
tileWidth: Int32,
tileHeight: Int32)
{
print("paintTile canvasWidth=\(canvasWidth) canvasHeight=\(canvasHeight) tilePosX=\(tilePosX) tilePosY=\(tilePosY) tileWidth=\(tileWidth) tileHeight=\(tileHeight) ")
return docClass.paintTileToCGContext(pDoc, rCGContext, canvasWidth, canvasHeight,
tilePosX, tilePosY, tileWidth, tileHeight);
}
/**
* Renders a window (dialog, popup, etc.) with give id
*
* @param nWindowId
* @param pBuffer Buffer with enough memory allocated to render any dialog
* @param x x-coordinate from where the dialog should start painting
* @param y y-coordinate from where the dialog should start painting
* @param width The width of the dialog image to be painted
* @param height The height of the dialog image to be painted
*/
public func paintWindow( nWindowId: UInt32,
pBuffer: UnsafeMutablePointer<UInt8>,
x: Int32,
y: Int32,
width: Int32,
height: Int32)
{
return docClass.paintWindow(pDoc, nWindowId, pBuffer, x, y, width, height);
}
/**
* Posts a command to the window (dialog, popup, etc.) with given id
*
* @param nWindowid
*/
public func postWindow( nWindowId: UInt32, nAction: Int32, data: String)
{
return docClass.postWindow(pDoc, nWindowId, nAction, data);
}
/**
* Gets the tile mode: the pixel format used for the pBuffer of paintTile().
*
* @return an element of the LibreOfficeKitTileMode enum.
*/
public func getTileMode() -> LibreOfficeKitTileMode
{
return LibreOfficeKitTileMode(rawValue: LibreOfficeKitTileMode.RawValue(docClass.getTileMode(pDoc)));
}
/// Get the document sizes in TWIPs.
public func getDocumentSize() -> (Int, Int)
{
print(Thread.isMainThread)
// long* pWidth, long* pHeight
var pWidth: Int = 0
var pHeight: Int = 0
docClass.getDocumentSize(pDoc, &pWidth, &pHeight);
return (pWidth, pHeight)
}
/**
* Initialize document for rendering.
*
* Sets the rendering and document parameters to default values that are
* needed to render the document correctly using tiled rendering. This
* method has to be called right after documentLoad() in case any of the
* tiled rendering methods are to be used later.
*
* Example argument string for text documents:
*
* {
* ".uno:HideWhitespace":
* {
* "type": "boolean",
* "value": "true"
* }
* }
*
* @param pArguments arguments of the rendering
*/
public func initializeForRendering(arguments: String? = nil)
{
docClass.initializeForRendering(pDoc, arguments);
}
/**
* Registers a callback. LOK will invoke this function when it wants to
* inform the client about events.
*
* @param pCallback the callback to invoke
* @param pData the user data, will be passed to the callback on invocation
*/
@discardableResult
public func registerCallback( callback: @escaping LibreOfficeCallback ) -> Int
{
let ret = Callbacks.register(callback: callback)
let pointer = UnsafeMutableRawPointer(bitPattern: ret)
docClass.registerCallback(pDoc, callbackFromLibreOffice, pointer)
return ret
}
/**
* Posts a keyboard event to the focused frame.
*
* @param nType Event type, like press or release.
* @param nCharCode contains the Unicode character generated by this event or 0
* @param nKeyCode contains the integer code representing the key of the event (non-zero for control keys)
*/
public func postKeyEvent(nType: Int32, nCharCode: Int32, nKeyCode: Int32)
{
docClass.postKeyEvent(pDoc, nType, nCharCode, nKeyCode);
}
/**
* Posts a keyboard event to the dialog
*
* @param nWindowId
* @param nType Event type, like press or release.
* @param nCharCode contains the Unicode character generated by this event or 0
* @param nKeyCode contains the integer code representing the key of the event (non-zero for control keys)
*/
public func postWindowKeyEvent( nWindowId: UInt32, nType: Int32, nCharCode: Int32, nKeyCode: Int32)
{
docClass.postWindowKeyEvent(pDoc, nWindowId, nType, nCharCode, nKeyCode);
}
/**
* Posts a mouse event to the document.
*
* @param nType Event type, like down, move or up.
* @param nX horizontal position in document coordinates
* @param nY vertical position in document coordinates
* @param nCount number of clicks: 1 for single click, 2 for double click
* @param nButtons: which mouse buttons: 1 for left, 2 for middle, 4 right
* @param nModifier: which keyboard modifier: (see include/vcl/vclenum.hxx for possible values)
*/
public func postMouseEvent( nType: Int32, nX: Int32, nY: Int32, nCount: Int32, nButtons: Int32, nModifier: Int32)
{
docClass.postMouseEvent(pDoc, nType, nX, nY, nCount, nButtons, nModifier);
}
/**
* Posts a mouse event to the window with given id.
*
* @param nWindowId
* @param nType Event type, like down, move or up.
* @param nX horizontal position in document coordinates
* @param nY vertical position in document coordinates
* @param nCount number of clicks: 1 for single click, 2 for double click
* @param nButtons: which mouse buttons: 1 for left, 2 for middle, 4 right
* @param nModifier: which keyboard modifier: (see include/vcl/vclenum.hxx for possible values)
*/
public func postWindowMouseEvent(nWindowId: UInt32, nType: Int32, nX: Int32, nY: Int32, nCount: Int32, nButtons: Int32, nModifier: Int32)
{
docClass.postWindowMouseEvent(pDoc, nWindowId, nType, nX, nY, nCount, nButtons, nModifier);
}
/**
* Posts a UNO command to the document.
*
* Example argument string:
*
* {
* "SearchItem.SearchString":
* {
* "type": "string",
* "value": "foobar"
* },
* "SearchItem.Backward":
* {
* "type": "boolean",
* "value": "false"
* }
* }
*
* @param pCommand uno command to be posted to the document, like ".uno:Bold"
* @param pArguments arguments of the uno command.
*/
public func postUnoCommand(command: String, arguments: String? = nil, notifyWhenFinished: Bool = false)
{
docClass.postUnoCommand(pDoc, command, arguments, notifyWhenFinished);
}
/**
* Sets the start or end of a text selection.
*
* @param nType @see LibreOfficeKitSetTextSelectionType
* @param nX horizontal position in document coordinates
* @param nY vertical position in document coordinates
*/
public func setTextSelection( nType: Int32, nX: Int32, nY: Int32)
{
docClass.setTextSelection(pDoc, nType, nX, nY);
}
/**
* Gets the currently selected text.
*
* @param pMimeType suggests the return format, for example text/plain;charset=utf-8.
* @param pUsedMimeType output parameter to inform about the determined format (suggested one or plain text).
*/
// FIXME - work out how to use an inout param for usedMimeType
public func getTextSelection(mimeType: String, usedMimeType: UnsafeMutablePointer<UnsafeMutablePointer<Int8>?>? = nil) -> String?
{
return toString( docClass.getTextSelection(pDoc, mimeType, usedMimeType) );
}
/**
* Pastes content at the current cursor position.
*
* @param pMimeType format of pData, for example text/plain;charset=utf-8.
* @param pData the actual data to be pasted.
* @return if the supplied data was pasted successfully.
*/
public func paste(mimeType: String, data: String, size: Int) -> Bool
{
return docClass.paste(pDoc, mimeType, data, size);
}
/**
* Adjusts the graphic selection.
*
* @param nType @see LibreOfficeKitSetGraphicSelectionType
* @param nX horizontal position in document coordinates
* @param nY vertical position in document coordinates
*/
public func setGraphicSelection( nType: Int32, nX: Int32, nY: Int32)
{
docClass.setGraphicSelection(pDoc, nType, nX, nY);
}
/**
* Gets rid of any text or graphic selection.
*/
public func resetSelection()
{
docClass.resetSelection(pDoc);
}
/**
* Returns a json mapping of the possible values for the given command
* e.g. {commandName: ".uno:StyleApply", commandValues: {"familyName1" : ["list of style names in the family1"], etc.}}
* @param pCommand a UNO command for which the possible values are requested
* @return {commandName: unoCmd, commandValues: {possible_values}}
*/
public func getCommandValues(command: String) -> String?
{
return toString(docClass.getCommandValues(pDoc, command));
}
/**
* Save the client's view so that we can compute the right zoom level
* for the mouse events. This only affects CALC.
* @param nTilePixelWidth - tile width in pixels
* @param nTilePixelHeight - tile height in pixels
* @param nTileTwipWidth - tile width in twips
* @param nTileTwipHeight - tile height in twips
*/
public func setClientZoom(
nTilePixelWidth: Int32,
nTilePixelHeight: Int32,
nTileTwipWidth: Int32,
nTileTwipHeight: Int32)
{
docClass.setClientZoom(pDoc, nTilePixelWidth, nTilePixelHeight, nTileTwipWidth, nTileTwipHeight);
}
/**
* Inform core about the currently visible area of the document on the
* client, so that it can perform e.g. page down (which depends on the
* visible height) in a sane way.
*
* @param nX - top left corner horizontal position
* @param nY - top left corner vertical position
* @param nWidth - area width
* @param nHeight - area height
*/
public func setClientVisibleArea( nX: Int32, nY: Int32, nWidth: Int32, nHeight: Int32)
{
docClass.setClientVisibleArea(pDoc, nX, nY, nWidth, nHeight);
}
/**
* Show/Hide a single row/column header outline for Calc documents.
*
* @param bColumn - if we are dealing with a column or row group
* @param nLevel - the level to which the group belongs
* @param nIndex - the group entry index
* @param bHidden - the new group state (collapsed/expanded)
*/
public func setOutlineState( column: Bool, level: Int32, index: Int32, hidden: Bool)
{
docClass.setOutlineState(pDoc, column, level, index, hidden);
}
/**
* Create a new view for an existing document.
* By default a loaded document has 1 view.
* @return the ID of the new view.
*/
public func createView() -> Int32
{
return docClass.createView(pDoc);
}
/**
* Destroy a view of an existing document.
* @param nId a view ID, returned by createView().
*/
public func destroyView( id: Int32 )
{
docClass.destroyView(pDoc, id);
}
/**
* Set an existing view of an existing document as current.
* @param nId a view ID, returned by createView().
*/
public func setView(id: Int32)
{
docClass.setView(pDoc, id);
}
/**
* Get the current view.
* @return a view ID, previously returned by createView().
*/
public func getView() -> Int32
{
return docClass.getView(pDoc);
}
/**
* Get number of views of this document.
*/
public func getViewsCount() -> Int32
{
return docClass.getViewsCount(pDoc);
}
/**
* Paints a font name or character if provided to be displayed in the font list
* @param pFontName the font to be painted
*/
// TODO
// public func renderFont(fontName: String,
// const char *pChar,
// int *pFontWidth,
// int *pFontHeight)
// {
// return docClass.renderFont(pDoc, pFontName, pChar, pFontWidth, pFontHeight);
// }
/**
* Renders a subset of the document's part to a pre-allocated buffer.
*
* @param nPart the part number of the document of which the tile is painted.
* @see paintTile.
*/
public func paintPartTile(pBuffer: UnsafeMutablePointer<UInt8>,
nPart: Int32,
nCanvasWidth: Int32,
nCanvasHeight: Int32,
nTilePosX: Int32,
nTilePosY: Int32,
nTileWidth: Int32,
nTileHeight: Int32)
{
return docClass.paintPartTile(pDoc, pBuffer, nPart,
nCanvasWidth, nCanvasHeight,
nTilePosX, nTilePosY,
nTileWidth, nTileHeight);
}
/**
* Returns the viewID for each existing view. Since viewIDs are not reused,
* viewIDs are not the same as the index of the view in the view array over
* time. Use getViewsCount() to know the minimal nSize that's large enough.
*
* @param pArray the array to write the viewIDs into
* @param nSize the size of pArray
* @returns true if pArray was large enough and result is written, false
* otherwise.
*/
// bool getViewIds(int* pArray,
// size_t nSize)
// {
// return docClass.getViewIds(pDoc, pArray, nSize);
// }
/**
* Set the language tag of the window with the specified nId.
*
* @param nId a view ID, returned by createView().
* @param language Bcp47 languageTag, like en-US or so.
*/
public func setViewLanguage( id: Int32, language: String)
{
docClass.setViewLanguage(pDoc, id, language);
}
public func invokeHandlers()
{
// The app seems to work even without this? Or maybe I
// just didn't test hard enough?
// temporaryHackToInvokeCallbackHandlers(pDoc)
}
}
/**
* iOS friendly extensions of Document.
* TODO: move me back to the framework.
*/
public extension Document
{
public func getDocumentSizeAsCGSize() -> CGSize
{
let (x,y) = self.getDocumentSize()
return CGSize(width: x, height: y)
}
public func paintTileToCurrentContext(canvasSize: CGSize,
tileRect: CGRect)
{
let ctx = UIGraphicsGetCurrentContext()
//print(ctx!)
let ptr = unsafeBitCast(ctx, to: UnsafeMutableRawPointer.self)
//print(ptr)
self.paintTileToCGContext(rCGContext:ptr,
canvasWidth: Int32(canvasSize.width),
canvasHeight: Int32(canvasSize.height),
tilePosX: Int32(tileRect.minX),
tilePosY: Int32(tileRect.minY),
tileWidth: Int32(tileRect.size.width),
tileHeight: Int32(tileRect.size.height))
}
public func paintTileToImage(canvasSize: CGSize,
tileRect: CGRect) -> UIImage?
{
UIGraphicsBeginImageContextWithOptions(canvasSize, false, 1.0)
let _ = UIGraphicsGetCurrentContext()!
self.paintTileToCurrentContext(canvasSize: canvasSize, tileRect: tileRect)
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return image
}
}

Some files were not shown because too many files have changed in this diff Show more