[Libreoffice-commits] core.git: ios/iosremote
siqi
me at siqi.fr
Fri Jul 5 00:59:30 PDT 2013
dev/null |binary
ios/iosremote/iosremote.xcodeproj/project.pbxproj | 398 ++++++++++
ios/iosremote/iosremote.xcodeproj/project.xcworkspace/contents.xcworkspacedata | 7
ios/iosremote/iosremote.xcodeproj/project.xcworkspace/xcuserdata/siqi.xcuserdatad/UserInterfaceState.xcuserstate |binary
ios/iosremote/iosremote.xcodeproj/project.xcworkspace/xcuserdata/siqi.xcuserdatad/WorkspaceSettings.xcsettings | 22
ios/iosremote/iosremote.xcodeproj/xcuserdata/siqi.xcuserdatad/xcdebugger/Breakpoints.xcbkptlist | 20
ios/iosremote/iosremote.xcodeproj/xcuserdata/siqi.xcuserdatad/xcschemes/iosremote.xcscheme | 86 ++
ios/iosremote/iosremote.xcodeproj/xcuserdata/siqi.xcuserdatad/xcschemes/xcschememanagement.plist | 22
ios/iosremote/iosremote/Base64.h | 16
ios/iosremote/iosremote/Base64.m | 23
ios/iosremote/iosremote/Communication/.DS_Store |binary
ios/iosremote/iosremote/Communication/Client.h | 33
ios/iosremote/iosremote/Communication/Client.m | 233 +++++
ios/iosremote/iosremote/Communication/CommandInterpreter.h | 20
ios/iosremote/iosremote/Communication/CommandInterpreter.m | 91 ++
ios/iosremote/iosremote/Communication/CommandTransmitter.h | 30
ios/iosremote/iosremote/Communication/CommandTransmitter.m | 88 ++
ios/iosremote/iosremote/Communication/CommunicationManager.h | 71 +
ios/iosremote/iosremote/Communication/CommunicationManager.m | 167 ++++
ios/iosremote/iosremote/Communication/Server.h | 29
ios/iosremote/iosremote/Communication/Server.m | 75 +
ios/iosremote/iosremote/Communication/SlideShow.h | 26
ios/iosremote/iosremote/Communication/SlideShow.m | 114 ++
ios/iosremote/iosremote/Communication/pinValidation_vc.h | 16
ios/iosremote/iosremote/Communication/pinValidation_vc.m | 70 +
ios/iosremote/iosremote/Default-568h at 2x.png |binary
ios/iosremote/iosremote/Default.png |binary
ios/iosremote/iosremote/Default at 2x.png |binary
ios/iosremote/iosremote/EditableTableViewCell.h | 14
ios/iosremote/iosremote/EditableTableViewCell.m | 54 +
ios/iosremote/iosremote/en.lproj/InfoPlist.strings | 2
ios/iosremote/iosremote/en.lproj/MainStoryboard_iPhone.storyboard | 357 ++++++++
ios/iosremote/iosremote/iosremote-Info.plist | 47 +
ios/iosremote/iosremote/libreoffice_sdremoteAppDelegate.h | 15
ios/iosremote/iosremote/libreoffice_sdremoteAppDelegate.m | 46 +
ios/iosremote/iosremote/libreoffice_sdremoteViewController.h | 19
ios/iosremote/iosremote/libreoffice_sdremoteViewController.m | 85 ++
ios/iosremote/iosremote/main.m | 18
ios/iosremote/iosremote/newServer_vc.h | 38
ios/iosremote/iosremote/newServer_vc.m | 291 +++++++
ios/iosremote/iosremote/serverList_vc.h | 17
ios/iosremote/iosremote/serverList_vc.m | 137 +++
ios/iosremote/iosremote/slideShowPreviewTable_vc.h | 13
ios/iosremote/iosremote/slideShowPreviewTable_vc.m | 168 ++++
ios/iosremote/iosremote/slideShowPreview_vc.h | 19
ios/iosremote/iosremote/slideShowPreview_vc.m | 69 +
ios/iosremote/iosremote/slideShowViewController.h | 22
ios/iosremote/iosremote/slideShowViewController.m | 82 ++
48 files changed, 3170 insertions(+)
New commits:
commit 0279563fbe3c686d5c72eecd06544f3c7a43327a
Author: siqi <me at siqi.fr>
Date: Fri Jul 5 09:59:02 2013 +0200
update
Change-Id: Id753e678cef74a54c02ed2d0042d7654117f6844
diff --git a/ios/iosremote/iosremote.xcodeproj/project.pbxproj b/ios/iosremote/iosremote.xcodeproj/project.pbxproj
new file mode 100644
index 0000000..646c330
--- /dev/null
+++ b/ios/iosremote/iosremote.xcodeproj/project.pbxproj
@@ -0,0 +1,398 @@
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 46;
+ objects = {
+
+/* Begin PBXBuildFile section */
+ 5753DD901781EA0300DB71BB /* serverList_vc.m in Sources */ = {isa = PBXBuildFile; fileRef = 5753DD8F1781EA0300DB71BB /* serverList_vc.m */; };
+ 5753DD9917834D7100DB71BB /* newServer_vc.m in Sources */ = {isa = PBXBuildFile; fileRef = 5753DD9817834D7100DB71BB /* newServer_vc.m */; };
+ 57B152991764703500EECC67 /* Base64.m in Sources */ = {isa = PBXBuildFile; fileRef = 57B152981764703500EECC67 /* Base64.m */; };
+ 57B1529F176486C300EECC67 /* CommandTransmitter.m in Sources */ = {isa = PBXBuildFile; fileRef = 57B1529E176486C300EECC67 /* CommandTransmitter.m */; };
+ 57B7625D17621E42007703F6 /* SlideShow.m in Sources */ = {isa = PBXBuildFile; fileRef = 57B7625C17621E42007703F6 /* SlideShow.m */; };
+ 57C6E3F3175E06E800E8BC5F /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 57C6E3F2175E06E800E8BC5F /* UIKit.framework */; };
+ 57C6E3F5175E06E800E8BC5F /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 57C6E3F4175E06E800E8BC5F /* Foundation.framework */; };
+ 57C6E3F7175E06E800E8BC5F /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 57C6E3F6175E06E800E8BC5F /* CoreGraphics.framework */; };
+ 57C6E3FD175E06E800E8BC5F /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 57C6E3FB175E06E800E8BC5F /* InfoPlist.strings */; };
+ 57C6E3FF175E06E800E8BC5F /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 57C6E3FE175E06E800E8BC5F /* main.m */; };
+ 57C6E403175E06E800E8BC5F /* libreoffice_sdremoteAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 57C6E402175E06E800E8BC5F /* libreoffice_sdremoteAppDelegate.m */; };
+ 57C6E405175E06E800E8BC5F /* Default.png in Resources */ = {isa = PBXBuildFile; fileRef = 57C6E404175E06E800E8BC5F /* Default.png */; };
+ 57C6E407175E06E800E8BC5F /* Default at 2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 57C6E406175E06E800E8BC5F /* Default at 2x.png */; };
+ 57C6E409175E06E800E8BC5F /* Default-568h at 2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 57C6E408175E06E800E8BC5F /* Default-568h at 2x.png */; };
+ 57C6E40C175E06E800E8BC5F /* MainStoryboard_iPhone.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 57C6E40A175E06E800E8BC5F /* MainStoryboard_iPhone.storyboard */; };
+ 57C6E42E175E076900E8BC5F /* Client.m in Sources */ = {isa = PBXBuildFile; fileRef = 57C6E427175E076900E8BC5F /* Client.m */; };
+ 57C6E42F175E076900E8BC5F /* CommunicationManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 57C6E429175E076900E8BC5F /* CommunicationManager.m */; };
+ 57C6E430175E076900E8BC5F /* CommandInterpreter.m in Sources */ = {isa = PBXBuildFile; fileRef = 57C6E42B175E076900E8BC5F /* CommandInterpreter.m */; };
+ 57C6E431175E076900E8BC5F /* Server.m in Sources */ = {isa = PBXBuildFile; fileRef = 57C6E42D175E076900E8BC5F /* Server.m */; };
+ 57CFED9917838FDC00E82E05 /* EditableTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 57CFED9817838FDC00E82E05 /* EditableTableViewCell.m */; };
+ 57FE71E31785C61400B50125 /* pinValidation_vc.m in Sources */ = {isa = PBXBuildFile; fileRef = 57FE71E21785C61400B50125 /* pinValidation_vc.m */; };
+ 57FE71E61785D7FE00B50125 /* slideShowPreview_vc.m in Sources */ = {isa = PBXBuildFile; fileRef = 57FE71E51785D7FE00B50125 /* slideShowPreview_vc.m */; };
+ 57FE71E917861A9000B50125 /* slideShowPreviewTable_vc.m in Sources */ = {isa = PBXBuildFile; fileRef = 57FE71E817861A9000B50125 /* slideShowPreviewTable_vc.m */; };
+ BE9EBD071765BF0800283FD2 /* CoreImage.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BE9EBD061765BF0800283FD2 /* CoreImage.framework */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXFileReference section */
+ 5753DD8E1781EA0300DB71BB /* serverList_vc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = serverList_vc.h; sourceTree = "<group>"; };
+ 5753DD8F1781EA0300DB71BB /* serverList_vc.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = serverList_vc.m; sourceTree = "<group>"; };
+ 5753DD9717834D7100DB71BB /* newServer_vc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = newServer_vc.h; sourceTree = "<group>"; };
+ 5753DD9817834D7100DB71BB /* newServer_vc.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = newServer_vc.m; sourceTree = "<group>"; };
+ 57B152971764703500EECC67 /* Base64.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Base64.h; path = iosremote/Base64.h; sourceTree = "<group>"; };
+ 57B152981764703500EECC67 /* Base64.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = Base64.m; path = iosremote/Base64.m; sourceTree = "<group>"; };
+ 57B1529D176486C300EECC67 /* CommandTransmitter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CommandTransmitter.h; sourceTree = "<group>"; };
+ 57B1529E176486C300EECC67 /* CommandTransmitter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CommandTransmitter.m; sourceTree = "<group>"; };
+ 57B7625B17621E42007703F6 /* SlideShow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SlideShow.h; sourceTree = "<group>"; };
+ 57B7625C17621E42007703F6 /* SlideShow.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SlideShow.m; sourceTree = "<group>"; };
+ 57C6E3EF175E06E800E8BC5F /* iosremote.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = iosremote.app; sourceTree = BUILT_PRODUCTS_DIR; };
+ 57C6E3F2175E06E800E8BC5F /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; };
+ 57C6E3F4175E06E800E8BC5F /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
+ 57C6E3F6175E06E800E8BC5F /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; };
+ 57C6E3FA175E06E800E8BC5F /* iosremote-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "iosremote-Info.plist"; sourceTree = "<group>"; };
+ 57C6E3FC175E06E800E8BC5F /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; };
+ 57C6E3FE175E06E800E8BC5F /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
+ 57C6E400175E06E800E8BC5F /* iosremote-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "iosremote-Prefix.pch"; sourceTree = "<group>"; };
+ 57C6E401175E06E800E8BC5F /* libreoffice_sdremoteAppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = libreoffice_sdremoteAppDelegate.h; sourceTree = "<group>"; };
+ 57C6E402175E06E800E8BC5F /* libreoffice_sdremoteAppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = libreoffice_sdremoteAppDelegate.m; sourceTree = "<group>"; };
+ 57C6E404175E06E800E8BC5F /* Default.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Default.png; sourceTree = "<group>"; };
+ 57C6E406175E06E800E8BC5F /* Default at 2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default at 2x.png"; sourceTree = "<group>"; };
+ 57C6E408175E06E800E8BC5F /* Default-568h at 2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-568h at 2x.png"; sourceTree = "<group>"; };
+ 57C6E40B175E06E800E8BC5F /* en */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = en; path = en.lproj/MainStoryboard_iPhone.storyboard; sourceTree = "<group>"; };
+ 57C6E426175E076900E8BC5F /* Client.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Client.h; sourceTree = "<group>"; };
+ 57C6E427175E076900E8BC5F /* Client.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Client.m; sourceTree = "<group>"; };
+ 57C6E428175E076900E8BC5F /* CommunicationManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CommunicationManager.h; sourceTree = "<group>"; };
+ 57C6E429175E076900E8BC5F /* CommunicationManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CommunicationManager.m; sourceTree = "<group>"; };
+ 57C6E42A175E076900E8BC5F /* CommandInterpreter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CommandInterpreter.h; sourceTree = "<group>"; };
+ 57C6E42B175E076900E8BC5F /* CommandInterpreter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CommandInterpreter.m; sourceTree = "<group>"; };
+ 57C6E42C175E076900E8BC5F /* Server.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Server.h; sourceTree = "<group>"; };
+ 57C6E42D175E076900E8BC5F /* Server.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Server.m; sourceTree = "<group>"; };
+ 57CFED9717838FDC00E82E05 /* EditableTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EditableTableViewCell.h; sourceTree = "<group>"; };
+ 57CFED9817838FDC00E82E05 /* EditableTableViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EditableTableViewCell.m; sourceTree = "<group>"; };
+ 57FE71E11785C61300B50125 /* pinValidation_vc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = pinValidation_vc.h; path = Communication/pinValidation_vc.h; sourceTree = "<group>"; };
+ 57FE71E21785C61400B50125 /* pinValidation_vc.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = pinValidation_vc.m; path = Communication/pinValidation_vc.m; sourceTree = "<group>"; };
+ 57FE71E41785D7FE00B50125 /* slideShowPreview_vc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = slideShowPreview_vc.h; sourceTree = "<group>"; };
+ 57FE71E51785D7FE00B50125 /* slideShowPreview_vc.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = slideShowPreview_vc.m; sourceTree = "<group>"; };
+ 57FE71E717861A9000B50125 /* slideShowPreviewTable_vc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = slideShowPreviewTable_vc.h; sourceTree = "<group>"; };
+ 57FE71E817861A9000B50125 /* slideShowPreviewTable_vc.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = slideShowPreviewTable_vc.m; sourceTree = "<group>"; };
+ BE9EBD061765BF0800283FD2 /* CoreImage.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreImage.framework; path = System/Library/Frameworks/CoreImage.framework; sourceTree = SDKROOT; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+ 57C6E3EC175E06E800E8BC5F /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ BE9EBD071765BF0800283FD2 /* CoreImage.framework in Frameworks */,
+ 57C6E3F3175E06E800E8BC5F /* UIKit.framework in Frameworks */,
+ 57C6E3F5175E06E800E8BC5F /* Foundation.framework in Frameworks */,
+ 57C6E3F7175E06E800E8BC5F /* CoreGraphics.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+ 57C6E3E6175E06E800E8BC5F = {
+ isa = PBXGroup;
+ children = (
+ BE9EBD061765BF0800283FD2 /* CoreImage.framework */,
+ 57B152971764703500EECC67 /* Base64.h */,
+ 57B152981764703500EECC67 /* Base64.m */,
+ 57C6E425175E076900E8BC5F /* Communication */,
+ 57C6E3F8175E06E800E8BC5F /* iosremote */,
+ 57C6E3F1175E06E800E8BC5F /* Frameworks */,
+ 57C6E3F0175E06E800E8BC5F /* Products */,
+ );
+ sourceTree = "<group>";
+ };
+ 57C6E3F0175E06E800E8BC5F /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ 57C6E3EF175E06E800E8BC5F /* iosremote.app */,
+ );
+ name = Products;
+ sourceTree = "<group>";
+ };
+ 57C6E3F1175E06E800E8BC5F /* Frameworks */ = {
+ isa = PBXGroup;
+ children = (
+ 57C6E3F2175E06E800E8BC5F /* UIKit.framework */,
+ 57C6E3F4175E06E800E8BC5F /* Foundation.framework */,
+ 57C6E3F6175E06E800E8BC5F /* CoreGraphics.framework */,
+ );
+ name = Frameworks;
+ sourceTree = "<group>";
+ };
+ 57C6E3F8175E06E800E8BC5F /* iosremote */ = {
+ isa = PBXGroup;
+ children = (
+ 57FE71E11785C61300B50125 /* pinValidation_vc.h */,
+ 57FE71E21785C61400B50125 /* pinValidation_vc.m */,
+ 57FE71E41785D7FE00B50125 /* slideShowPreview_vc.h */,
+ 57FE71E51785D7FE00B50125 /* slideShowPreview_vc.m */,
+ 57C6E401175E06E800E8BC5F /* libreoffice_sdremoteAppDelegate.h */,
+ 57C6E402175E06E800E8BC5F /* libreoffice_sdremoteAppDelegate.m */,
+ 57C6E40A175E06E800E8BC5F /* MainStoryboard_iPhone.storyboard */,
+ 5753DD9717834D7100DB71BB /* newServer_vc.h */,
+ 5753DD9817834D7100DB71BB /* newServer_vc.m */,
+ 5753DD8E1781EA0300DB71BB /* serverList_vc.h */,
+ 5753DD8F1781EA0300DB71BB /* serverList_vc.m */,
+ 57C6E3F9175E06E800E8BC5F /* Supporting Files */,
+ 57CFED9717838FDC00E82E05 /* EditableTableViewCell.h */,
+ 57CFED9817838FDC00E82E05 /* EditableTableViewCell.m */,
+ 57FE71E717861A9000B50125 /* slideShowPreviewTable_vc.h */,
+ 57FE71E817861A9000B50125 /* slideShowPreviewTable_vc.m */,
+ );
+ path = iosremote;
+ sourceTree = "<group>";
+ };
+ 57C6E3F9175E06E800E8BC5F /* Supporting Files */ = {
+ isa = PBXGroup;
+ children = (
+ 57C6E3FA175E06E800E8BC5F /* iosremote-Info.plist */,
+ 57C6E3FB175E06E800E8BC5F /* InfoPlist.strings */,
+ 57C6E3FE175E06E800E8BC5F /* main.m */,
+ 57C6E400175E06E800E8BC5F /* iosremote-Prefix.pch */,
+ 57C6E404175E06E800E8BC5F /* Default.png */,
+ 57C6E406175E06E800E8BC5F /* Default at 2x.png */,
+ 57C6E408175E06E800E8BC5F /* Default-568h at 2x.png */,
+ );
+ name = "Supporting Files";
+ sourceTree = "<group>";
+ };
+ 57C6E425175E076900E8BC5F /* Communication */ = {
+ isa = PBXGroup;
+ children = (
+ 57C6E426175E076900E8BC5F /* Client.h */,
+ 57C6E427175E076900E8BC5F /* Client.m */,
+ 57C6E428175E076900E8BC5F /* CommunicationManager.h */,
+ 57C6E429175E076900E8BC5F /* CommunicationManager.m */,
+ 57C6E42A175E076900E8BC5F /* CommandInterpreter.h */,
+ 57C6E42B175E076900E8BC5F /* CommandInterpreter.m */,
+ 57C6E42C175E076900E8BC5F /* Server.h */,
+ 57C6E42D175E076900E8BC5F /* Server.m */,
+ 57B7625B17621E42007703F6 /* SlideShow.h */,
+ 57B7625C17621E42007703F6 /* SlideShow.m */,
+ 57B1529D176486C300EECC67 /* CommandTransmitter.h */,
+ 57B1529E176486C300EECC67 /* CommandTransmitter.m */,
+ );
+ name = Communication;
+ path = iosremote/Communication;
+ sourceTree = "<group>";
+ };
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+ 57C6E3EE175E06E800E8BC5F /* iosremote */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 57C6E415175E06E800E8BC5F /* Build configuration list for PBXNativeTarget "iosremote" */;
+ buildPhases = (
+ 57C6E3EB175E06E800E8BC5F /* Sources */,
+ 57C6E3EC175E06E800E8BC5F /* Frameworks */,
+ 57C6E3ED175E06E800E8BC5F /* Resources */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = iosremote;
+ productName = iosremote;
+ productReference = 57C6E3EF175E06E800E8BC5F /* iosremote.app */;
+ productType = "com.apple.product-type.application";
+ };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+ 57C6E3E7175E06E800E8BC5F /* Project object */ = {
+ isa = PBXProject;
+ attributes = {
+ CLASSPREFIX = libreoffice.sdremote;
+ LastUpgradeCheck = 0460;
+ ORGANIZATIONNAME = libreoffice;
+ };
+ buildConfigurationList = 57C6E3EA175E06E800E8BC5F /* Build configuration list for PBXProject "iosremote" */;
+ compatibilityVersion = "Xcode 3.2";
+ developmentRegion = English;
+ hasScannedForEncodings = 0;
+ knownRegions = (
+ en,
+ );
+ mainGroup = 57C6E3E6175E06E800E8BC5F;
+ productRefGroup = 57C6E3F0175E06E800E8BC5F /* Products */;
+ projectDirPath = "";
+ projectRoot = "";
+ targets = (
+ 57C6E3EE175E06E800E8BC5F /* iosremote */,
+ );
+ };
+/* End PBXProject section */
+
+/* Begin PBXResourcesBuildPhase section */
+ 57C6E3ED175E06E800E8BC5F /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 57C6E3FD175E06E800E8BC5F /* InfoPlist.strings in Resources */,
+ 57C6E405175E06E800E8BC5F /* Default.png in Resources */,
+ 57C6E407175E06E800E8BC5F /* Default at 2x.png in Resources */,
+ 57C6E409175E06E800E8BC5F /* Default-568h at 2x.png in Resources */,
+ 57C6E40C175E06E800E8BC5F /* MainStoryboard_iPhone.storyboard in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+ 57C6E3EB175E06E800E8BC5F /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 57C6E3FF175E06E800E8BC5F /* main.m in Sources */,
+ 57C6E403175E06E800E8BC5F /* libreoffice_sdremoteAppDelegate.m in Sources */,
+ 57C6E42E175E076900E8BC5F /* Client.m in Sources */,
+ 57C6E42F175E076900E8BC5F /* CommunicationManager.m in Sources */,
+ 57C6E430175E076900E8BC5F /* CommandInterpreter.m in Sources */,
+ 57C6E431175E076900E8BC5F /* Server.m in Sources */,
+ 57B7625D17621E42007703F6 /* SlideShow.m in Sources */,
+ 57B152991764703500EECC67 /* Base64.m in Sources */,
+ 57B1529F176486C300EECC67 /* CommandTransmitter.m in Sources */,
+ 5753DD901781EA0300DB71BB /* serverList_vc.m in Sources */,
+ 5753DD9917834D7100DB71BB /* newServer_vc.m in Sources */,
+ 57CFED9917838FDC00E82E05 /* EditableTableViewCell.m in Sources */,
+ 57FE71E31785C61400B50125 /* pinValidation_vc.m in Sources */,
+ 57FE71E61785D7FE00B50125 /* slideShowPreview_vc.m in Sources */,
+ 57FE71E917861A9000B50125 /* slideShowPreviewTable_vc.m in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXVariantGroup section */
+ 57C6E3FB175E06E800E8BC5F /* InfoPlist.strings */ = {
+ isa = PBXVariantGroup;
+ children = (
+ 57C6E3FC175E06E800E8BC5F /* en */,
+ );
+ name = InfoPlist.strings;
+ sourceTree = "<group>";
+ };
+ 57C6E40A175E06E800E8BC5F /* MainStoryboard_iPhone.storyboard */ = {
+ isa = PBXVariantGroup;
+ children = (
+ 57C6E40B175E06E800E8BC5F /* en */,
+ );
+ name = MainStoryboard_iPhone.storyboard;
+ sourceTree = "<group>";
+ };
+/* End PBXVariantGroup section */
+
+/* Begin XCBuildConfiguration section */
+ 57C6E413175E06E800E8BC5F /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+ CLANG_CXX_LIBRARY = "libc++";
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+ COPY_PHASE_STRIP = NO;
+ GCC_C_LANGUAGE_STANDARD = gnu99;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ "DEBUG=1",
+ "$(inherited)",
+ );
+ GCC_SYMBOLS_PRIVATE_EXTERN = NO;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ IPHONEOS_DEPLOYMENT_TARGET = 6.1;
+ ONLY_ACTIVE_ARCH = YES;
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = Debug;
+ };
+ 57C6E414175E06E800E8BC5F /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+ CLANG_CXX_LIBRARY = "libc++";
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+ COPY_PHASE_STRIP = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu99;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ IPHONEOS_DEPLOYMENT_TARGET = 6.1;
+ OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1";
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ VALIDATE_PRODUCT = YES;
+ };
+ name = Release;
+ };
+ 57C6E416175E06E800E8BC5F /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ GCC_PRECOMPILE_PREFIX_HEADER = YES;
+ GCC_PREFIX_HEADER = "iosremote/iosremote-Prefix.pch";
+ INFOPLIST_FILE = "iosremote/iosremote-Info.plist";
+ IPHONEOS_DEPLOYMENT_TARGET = 5.1;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ TARGETED_DEVICE_FAMILY = 1;
+ WRAPPER_EXTENSION = app;
+ };
+ name = Debug;
+ };
+ 57C6E417175E06E800E8BC5F /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ GCC_PRECOMPILE_PREFIX_HEADER = YES;
+ GCC_PREFIX_HEADER = "iosremote/iosremote-Prefix.pch";
+ INFOPLIST_FILE = "iosremote/iosremote-Info.plist";
+ IPHONEOS_DEPLOYMENT_TARGET = 5.1;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ TARGETED_DEVICE_FAMILY = 1;
+ WRAPPER_EXTENSION = app;
+ };
+ name = Release;
+ };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+ 57C6E3EA175E06E800E8BC5F /* Build configuration list for PBXProject "iosremote" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 57C6E413175E06E800E8BC5F /* Debug */,
+ 57C6E414175E06E800E8BC5F /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 57C6E415175E06E800E8BC5F /* Build configuration list for PBXNativeTarget "iosremote" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 57C6E416175E06E800E8BC5F /* Debug */,
+ 57C6E417175E06E800E8BC5F /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+/* End XCConfigurationList section */
+ };
+ rootObject = 57C6E3E7175E06E800E8BC5F /* Project object */;
+}
diff --git a/ios/iosremote/iosremote.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/ios/iosremote/iosremote.xcodeproj/project.xcworkspace/contents.xcworkspacedata
new file mode 100644
index 0000000..130b46b
--- /dev/null
+++ b/ios/iosremote/iosremote.xcodeproj/project.xcworkspace/contents.xcworkspacedata
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Workspace
+ version = "1.0">
+ <FileRef
+ location = "self:iosremote.xcodeproj">
+ </FileRef>
+</Workspace>
diff --git a/ios/iosremote/iosremote.xcodeproj/project.xcworkspace/xcuserdata/siqi.xcuserdatad/UserInterfaceState.xcuserstate b/ios/iosremote/iosremote.xcodeproj/project.xcworkspace/xcuserdata/siqi.xcuserdatad/UserInterfaceState.xcuserstate
new file mode 100644
index 0000000..536adb2
Binary files /dev/null and b/ios/iosremote/iosremote.xcodeproj/project.xcworkspace/xcuserdata/siqi.xcuserdatad/UserInterfaceState.xcuserstate differ
diff --git a/ios/iosremote/iosremote.xcodeproj/project.xcworkspace/xcuserdata/siqi.xcuserdatad/WorkspaceSettings.xcsettings b/ios/iosremote/iosremote.xcodeproj/project.xcworkspace/xcuserdata/siqi.xcuserdatad/WorkspaceSettings.xcsettings
new file mode 100644
index 0000000..28f6741
--- /dev/null
+++ b/ios/iosremote/iosremote.xcodeproj/project.xcworkspace/xcuserdata/siqi.xcuserdatad/WorkspaceSettings.xcsettings
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>BuildLocationStyle</key>
+ <string>UseAppPreferences</string>
+ <key>CustomBuildLocationType</key>
+ <string>RelativeToDerivedData</string>
+ <key>DerivedDataLocationStyle</key>
+ <string>Default</string>
+ <key>HasAskedToTakeAutomaticSnapshotBeforeSignificantChanges</key>
+ <true/>
+ <key>IssueFilterStyle</key>
+ <string>ShowActiveSchemeOnly</string>
+ <key>LiveSourceIssuesEnabled</key>
+ <true/>
+ <key>SnapshotAutomaticallyBeforeSignificantChanges</key>
+ <true/>
+ <key>SnapshotLocationStyle</key>
+ <string>Default</string>
+</dict>
+</plist>
diff --git a/ios/iosremote/iosremote.xcodeproj/xcuserdata/siqi.xcuserdatad/xcdebugger/Breakpoints.xcbkptlist b/ios/iosremote/iosremote.xcodeproj/xcuserdata/siqi.xcuserdatad/xcdebugger/Breakpoints.xcbkptlist
new file mode 100644
index 0000000..1011728
--- /dev/null
+++ b/ios/iosremote/iosremote.xcodeproj/xcuserdata/siqi.xcuserdatad/xcdebugger/Breakpoints.xcbkptlist
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Bucket
+ type = "1"
+ version = "1.0">
+ <FileBreakpoints>
+ <FileBreakpoint
+ shouldBeEnabled = "No"
+ ignoreCount = "0"
+ continueAfterRunningActions = "No"
+ filePath = "iosremote/libreoffice_sdremoteViewController.m"
+ timestampString = "393022219.861088"
+ startingColumnNumber = "9223372036854775807"
+ endingColumnNumber = "9223372036854775807"
+ startingLineNumber = "47"
+ endingLineNumber = "47"
+ landmarkName = "@implementation libreoffice_sdremoteViewController"
+ landmarkType = "3">
+ </FileBreakpoint>
+ </FileBreakpoints>
+</Bucket>
diff --git a/ios/iosremote/iosremote.xcodeproj/xcuserdata/siqi.xcuserdatad/xcschemes/iosremote.xcscheme b/ios/iosremote/iosremote.xcodeproj/xcuserdata/siqi.xcuserdatad/xcschemes/iosremote.xcscheme
new file mode 100644
index 0000000..bb82040
--- /dev/null
+++ b/ios/iosremote/iosremote.xcodeproj/xcuserdata/siqi.xcuserdatad/xcschemes/iosremote.xcscheme
@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Scheme
+ LastUpgradeVersion = "0460"
+ version = "1.3">
+ <BuildAction
+ parallelizeBuildables = "YES"
+ buildImplicitDependencies = "YES">
+ <BuildActionEntries>
+ <BuildActionEntry
+ buildForTesting = "YES"
+ buildForRunning = "YES"
+ buildForProfiling = "YES"
+ buildForArchiving = "YES"
+ buildForAnalyzing = "YES">
+ <BuildableReference
+ BuildableIdentifier = "primary"
+ BlueprintIdentifier = "57C6E3EE175E06E800E8BC5F"
+ BuildableName = "iosremote.app"
+ BlueprintName = "iosremote"
+ ReferencedContainer = "container:iosremote.xcodeproj">
+ </BuildableReference>
+ </BuildActionEntry>
+ </BuildActionEntries>
+ </BuildAction>
+ <TestAction
+ selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+ selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+ shouldUseLaunchSchemeArgsEnv = "YES"
+ buildConfiguration = "Debug">
+ <Testables>
+ </Testables>
+ <MacroExpansion>
+ <BuildableReference
+ BuildableIdentifier = "primary"
+ BlueprintIdentifier = "57C6E3EE175E06E800E8BC5F"
+ BuildableName = "iosremote.app"
+ BlueprintName = "iosremote"
+ ReferencedContainer = "container:iosremote.xcodeproj">
+ </BuildableReference>
+ </MacroExpansion>
+ </TestAction>
+ <LaunchAction
+ selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+ selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+ launchStyle = "0"
+ useCustomWorkingDirectory = "NO"
+ buildConfiguration = "Debug"
+ ignoresPersistentStateOnLaunch = "NO"
+ debugDocumentVersioning = "YES"
+ allowLocationSimulation = "YES">
+ <BuildableProductRunnable>
+ <BuildableReference
+ BuildableIdentifier = "primary"
+ BlueprintIdentifier = "57C6E3EE175E06E800E8BC5F"
+ BuildableName = "iosremote.app"
+ BlueprintName = "iosremote"
+ ReferencedContainer = "container:iosremote.xcodeproj">
+ </BuildableReference>
+ </BuildableProductRunnable>
+ <AdditionalOptions>
+ </AdditionalOptions>
+ </LaunchAction>
+ <ProfileAction
+ shouldUseLaunchSchemeArgsEnv = "YES"
+ savedToolIdentifier = ""
+ useCustomWorkingDirectory = "NO"
+ buildConfiguration = "Release"
+ debugDocumentVersioning = "YES">
+ <BuildableProductRunnable>
+ <BuildableReference
+ BuildableIdentifier = "primary"
+ BlueprintIdentifier = "57C6E3EE175E06E800E8BC5F"
+ BuildableName = "iosremote.app"
+ BlueprintName = "iosremote"
+ ReferencedContainer = "container:iosremote.xcodeproj">
+ </BuildableReference>
+ </BuildableProductRunnable>
+ </ProfileAction>
+ <AnalyzeAction
+ buildConfiguration = "Debug">
+ </AnalyzeAction>
+ <ArchiveAction
+ buildConfiguration = "Release"
+ revealArchiveInOrganizer = "YES">
+ </ArchiveAction>
+</Scheme>
diff --git a/ios/iosremote/iosremote.xcodeproj/xcuserdata/siqi.xcuserdatad/xcschemes/xcschememanagement.plist b/ios/iosremote/iosremote.xcodeproj/xcuserdata/siqi.xcuserdatad/xcschemes/xcschememanagement.plist
new file mode 100644
index 0000000..74079c7
--- /dev/null
+++ b/ios/iosremote/iosremote.xcodeproj/xcuserdata/siqi.xcuserdatad/xcschemes/xcschememanagement.plist
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>SchemeUserState</key>
+ <dict>
+ <key>iosremote.xcscheme</key>
+ <dict>
+ <key>orderHint</key>
+ <integer>0</integer>
+ </dict>
+ </dict>
+ <key>SuppressBuildableAutocreation</key>
+ <dict>
+ <key>57C6E3EE175E06E800E8BC5F</key>
+ <dict>
+ <key>primary</key>
+ <true/>
+ </dict>
+ </dict>
+</dict>
+</plist>
diff --git a/ios/iosremote/iosremote/Base64.h b/ios/iosremote/iosremote/Base64.h
new file mode 100644
index 0000000..f222423
--- /dev/null
+++ b/ios/iosremote/iosremote/Base64.h
@@ -0,0 +1,16 @@
+// -*- Mode: ObjC; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+//
+// 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/Foundation.h>
+
+
+ at interface NSData (Base64)
+
++(id)dataWithBase64String:(NSString *)base64String;
+
+ at end
\ No newline at end of file
diff --git a/ios/iosremote/iosremote/Base64.m b/ios/iosremote/iosremote/Base64.m
new file mode 100644
index 0000000..9b380eb
--- /dev/null
+++ b/ios/iosremote/iosremote/Base64.m
@@ -0,0 +1,23 @@
+/*
+ * 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 "Base64.h"
+
+ at implementation NSData(Base64)
+
++ (id) dataWithBase64String:(NSString *)base64Encoding
+{
+ if ([base64Encoding length] % 4 != 0)
+ return nil;
+
+ NSString *plist = [NSString stringWithFormat:@"<?xml version=\"1.0\" encoding=\"UTF-8\"?><plist version=\"1.0\"><data>%@</data></plist>", base64Encoding];
+ return [NSPropertyListSerialization propertyListWithData:[plist dataUsingEncoding:NSASCIIStringEncoding] options:0 format:NULL error:NULL];
+}
+
+
+ at end
diff --git a/ios/iosremote/iosremote/.DS_Store b/ios/iosremote/iosremote/Communication/.DS_Store
similarity index 88%
rename from ios/iosremote/iosremote/.DS_Store
rename to ios/iosremote/iosremote/Communication/.DS_Store
index 5008ddf..83d9e2a 100644
Binary files a/ios/iosremote/iosremote/.DS_Store and b/ios/iosremote/iosremote/Communication/.DS_Store differ
diff --git a/ios/iosremote/iosremote/Communication/Client.h b/ios/iosremote/iosremote/Communication/Client.h
new file mode 100644
index 0000000..51674fd
--- /dev/null
+++ b/ios/iosremote/iosremote/Communication/Client.h
@@ -0,0 +1,33 @@
+/*
+ * 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/Foundation.h>
+
+ at class Server;
+ at class CommunicationManager;
+ at class CommandInterpreter;
+
+ at interface Client : NSObject
+
+ at property BOOL connected;
+ at property (nonatomic, strong) NSNumber* pin;
+ at property (nonatomic, strong) NSString* name;
+ at property (nonatomic, weak) Server* server;
+
+- (void) connect;
+- (void) disconnect;
+
+- (id) initWithServer:(Server*)server
+ managedBy:(CommunicationManager*)manager
+ interpretedBy:(CommandInterpreter*)receiver;
+
+- (void) sendCommand:(NSString *)aCommand;
+
+-(void)stream:(NSStream *)stream handleEvent:(NSStreamEvent)eventCode;
+
+ at end
\ No newline at end of file
diff --git a/ios/iosremote/iosremote/Communication/Client.m b/ios/iosremote/iosremote/Communication/Client.m
new file mode 100644
index 0000000..a75bc6f
--- /dev/null
+++ b/ios/iosremote/iosremote/Communication/Client.m
@@ -0,0 +1,233 @@
+// -*- Mode: ObjC; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+//
+// 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 <dispatch/dispatch.h>
+#import "Client.h"
+#import "Server.h"
+#import "CommandInterpreter.h"
+#import "CommunicationManager.h"
+
+#define CHARSET @"UTF-8"
+
+ at interface Client() <NSStreamDelegate>
+
+ at property (nonatomic, strong) NSInputStream* inputStream;
+ at property (nonatomic, strong) NSOutputStream* outputStream;
+
+ at property uint mPort;
+ at property (nonatomic, weak) CommandInterpreter* receiver;
+ at property (nonatomic, weak) CommunicationManager* comManager;
+
+ at property (nonatomic, strong) NSTimer* connectionTimeoutTimer;
+
+ at end
+
+ at implementation Client
+
+ at synthesize inputStream = _mInputStream;
+ at synthesize outputStream = _mOutputStream;
+ at synthesize pin = _mPin;
+ at synthesize name = _mName;
+ at synthesize server = _mServer;
+ at synthesize comManager = _mComManager;
+ at synthesize connected = _mReady;
+ at synthesize receiver = _receiver;
+ at synthesize connectionTimeoutTimer = _connectionTimeoutTimer;
+
+
+dispatch_queue_t backgroundQueue;
+
+- (id) initWithServer:(Server*)server
+ managedBy:(CommunicationManager*)manager
+ interpretedBy:(CommandInterpreter*)receiver
+{
+ self = [self init];
+ if (self)
+ {
+ self.connected = NO;
+ self.name = [[UIDevice currentDevice] name];
+ self.pin = [NSNumber numberWithInteger:[self getPin]];
+ self.server = server;
+ self.comManager = manager;
+ self.receiver = receiver;
+ self.mPort = 1599;
+ }
+ return self;
+}
+
+- (void)startConnectionTimeoutTimer
+{
+ [self stopConnectionTimeoutTimer]; // Or make sure any existing timer is stopped before this method is called
+
+ NSTimeInterval interval = 3.0; // Measured in seconds, is a double
+
+ self.connectionTimeoutTimer = [NSTimer scheduledTimerWithTimeInterval:interval
+ target:self
+ selector:@selector(handleConnectionTimeout)
+ userInfo:nil
+ repeats:NO];
+}
+
+- (void)handleConnectionTimeout
+{
+ NSLog(@"handleConnectionTimeout");
+ [self disconnect];
+ [[NSNotificationCenter defaultCenter]postNotificationName:@"connection.status.disconnected" object:nil];
+}
+
+- (void)dealloc
+{
+ dispatch_release(backgroundQueue);
+ [self stopConnectionTimeoutTimer];
+}
+
+- (void)stopConnectionTimeoutTimer
+{
+ if (self.connectionTimeoutTimer)
+ {
+ [self.connectionTimeoutTimer invalidate];
+ self.connectionTimeoutTimer = nil;
+ }
+}
+
+- (NSInteger) getPin
+{
+ // Look up if there is already a pin code for this client.
+ NSUserDefaults * userDefaluts = [NSUserDefaults standardUserDefaults];
+
+ if(!userDefaluts)
+ NSLog(@"userDefaults nil");
+ NSInteger newPin = [userDefaluts integerForKey:self.name];
+
+ // If not, generate one.
+ if (!newPin) {
+ newPin = arc4random() % 9999;
+ [userDefaluts setInteger:newPin forKey:self.name];
+ }
+
+ return newPin;
+}
+
+- (void)streamOpenWithIp:(NSString *)ip withPortNumber:(uint)portNumber
+{
+ NSLog(@"Connecting to %@:%u", ip, portNumber);
+ CFReadStreamRef readStream;
+ CFWriteStreamRef writeStream;
+ CFStreamCreatePairWithSocketToHost(kCFAllocatorDefault, (__bridge CFStringRef)ip, portNumber, &readStream, &writeStream);
+
+ if(readStream && writeStream)
+ {
+ CFReadStreamSetProperty(readStream, kCFStreamPropertyShouldCloseNativeSocket, kCFBooleanTrue);
+ CFWriteStreamSetProperty(writeStream, kCFStreamPropertyShouldCloseNativeSocket, kCFBooleanTrue);
+
+ //Setup mInputStream
+ self.inputStream = (__bridge NSInputStream *)readStream;
+ [self.inputStream setDelegate:self];
+ dispatch_async(dispatch_get_main_queue(), ^{
+ [self.inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
+ });
+ [self.inputStream open];
+
+ //Setup outputstream
+ self.outputStream = (__bridge NSOutputStream *)writeStream;
+ [self.outputStream setDelegate:self];
+ dispatch_async(dispatch_get_main_queue(), ^{
+ [self.outputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
+ });
+ [self.outputStream open];
+
+ NSArray *temp = [[NSArray alloc]initWithObjects:@"LO_SERVER_CLIENT_PAIR\n", self.name, @"\n", self.pin, @"\n\n", nil];
+ NSString *command = [temp componentsJoinedByString:@""];
+
+ [self sendCommand:command];
+ }
+}
+
+- (void) sendCommand:(NSString *)aCommand
+{
+ NSLog(@"Sending command %@", aCommand);
+ // UTF-8 as speficied in specification
+ NSData * data = [aCommand dataUsingEncoding:NSUTF8StringEncoding];
+
+ [self.outputStream write:(uint8_t *)[data bytes] maxLength:[data length]];
+}
+
+int count = 0;
+
+- (void)stream:(NSStream *)stream handleEvent:(NSStreamEvent)eventCode {
+ switch(eventCode) {
+ case NSStreamEventOpenCompleted:{
+ [self stopConnectionTimeoutTimer];
+ [[NSNotificationCenter defaultCenter]postNotificationName:@"connection.status.connected" object:nil];
+ }
+ break;
+ case NSStreamEventErrorOccurred:{
+ [self stopConnectionTimeoutTimer];
+ NSLog(@"Connection error occured");
+ [[NSNotificationCenter defaultCenter]postNotificationName:@"connection.status.disconnected" object:nil];
+ }
+ break;
+ case NSStreamEventHasBytesAvailable:
+ {
+ NSMutableData* data;
+ NSLog(@"NSStreamEventHasBytesAvailable");
+ if(!data) {
+ data = [[NSMutableData alloc] init];
+ }
+ uint8_t buf[1024];
+ unsigned int len = 0;
+ NSString *str;
+ while (true) {
+ len = [(NSInputStream *)stream read:buf maxLength:1024];
+ [data appendBytes:(const void *)buf length:len];
+ if (len < 1024) {
+ // Potentially the end of a command
+ str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
+ if ([str hasSuffix:@"\n\n"]) {
+ // Finished current command
+ break;
+ }
+ }
+ }
+
+ NSArray *commands = [str componentsSeparatedByString:@"\n"];
+ [self.receiver parse:commands];
+ data = nil;
+ str = nil;
+ } break;
+ default:
+ {
+
+ }
+
+ }
+}
+
+- (void) disconnect
+{
+ if(self.inputStream == nil && self.outputStream == nil)
+ return;
+ [self.inputStream close];
+ [self.outputStream close];
+ self.inputStream = nil;
+ self.outputStream = nil;
+ self.connected = NO;
+}
+
+- (void) connect
+{
+ [self startConnectionTimeoutTimer];
+ backgroundQueue = dispatch_queue_create("com.libreoffice.iosremote", NULL);
+ dispatch_async(backgroundQueue, ^(void) {
+ [self streamOpenWithIp:self.server.serverAddress withPortNumber:self.mPort];
+ });
+}
+
+
+
+ at end
diff --git a/ios/iosremote/iosremote/Communication/CommandInterpreter.h b/ios/iosremote/iosremote/Communication/CommandInterpreter.h
new file mode 100644
index 0000000..287cdc5
--- /dev/null
+++ b/ios/iosremote/iosremote/Communication/CommandInterpreter.h
@@ -0,0 +1,20 @@
+// -*- Mode: ObjC; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+//
+// 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/Foundation.h>
+
+ at class SlideShow;
+
+ at interface CommandInterpreter : NSObject
+
+ at property (nonatomic, strong) SlideShow* slideShow;
+
+- (void) parse:(NSArray *)cmd;
+
+ at end
diff --git a/ios/iosremote/iosremote/Communication/CommandInterpreter.m b/ios/iosremote/iosremote/Communication/CommandInterpreter.m
new file mode 100644
index 0000000..3bce86c
--- /dev/null
+++ b/ios/iosremote/iosremote/Communication/CommandInterpreter.m
@@ -0,0 +1,91 @@
+// -*- Mode: ObjC; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+//
+// 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 "CommandInterpreter.h"
+#import "SlideShow.h"
+#import "Base64.h"
+#import "CommunicationManager.h"
+
+ at interface CommandInterpreter()
+
+ at end
+
+ at implementation CommandInterpreter
+
+ at synthesize slideShow = _slideShow;
+
+- (SlideShow*) slideshow{
+ if (!self.slideShow)
+ self.slideShow = [[SlideShow alloc] init];
+ return self.slideShow;
+}
+
+- (BOOL) isSlideRunning {
+ return [self.slideShow size] > 0;
+}
+
+// Received a set of instructions from server.
+- (void) parse:(NSArray*)command{
+ if ([command count] == 0) {
+ return;
+ }
+ NSLog(@"Command:%@", command);
+ NSString *instruction = [command objectAtIndex:0];
+
+ if([instruction isEqualToString:@"slideshow_started"]){
+ NSLog(@"Interpreter: slideshow_started");
+ uint slideLength = [[command objectAtIndex:1] integerValue];
+ uint currentSlide = [[command objectAtIndex:2] integerValue];
+ self.slideShow = [[SlideShow alloc] init];
+
+ [self.slideShow setSize:slideLength];
+ [self.slideShow setCurrentSlide:currentSlide];
+
+ [[NSNotificationCenter defaultCenter] postNotificationName:STATUS_CONNECTED_SLIDESHOW_RUNNING
+ object:nil];
+ [[NSNotificationCenter defaultCenter] postNotificationName:MSG_SLIDE_CHANGED object:[NSNumber numberWithUnsignedInt:currentSlide]];
+
+ } else if ([instruction isEqualToString:@"slideshow_finished"]){
+ NSLog(@"Interpreter: slideshow_finished");
+ self.slideShow = [[SlideShow alloc] init];
+ [[NSNotificationCenter defaultCenter] postNotificationName:STATUS_CONNECTED_NOSLIDESHOW object:nil];
+ } else {
+ if (self.slideShow == nil)
+ return;
+ if ([instruction isEqualToString:@"slide_updated"]) {
+ NSLog(@"Interpreter: slide_updated");
+ uint newSlideNumber = [[command objectAtIndex:1] integerValue];
+ [self.slideShow setCurrentSlide:newSlideNumber];
+
+ [[NSNotificationCenter defaultCenter] postNotificationName:MSG_SLIDE_CHANGED object:nil];
+
+ } else if ([instruction isEqualToString:@"slide_preview"]){
+ NSLog(@"Interpreter: slide_preview");
+ uint slideNumber = [[command objectAtIndex:1] integerValue];
+ NSString * imageData = [command objectAtIndex:2];
+
+ [self.slideShow putImage:imageData
+ AtIndex:slideNumber];
+ [[NSNotificationCenter defaultCenter] postNotificationName:MSG_SLIDE_PREVIEW object:[NSNumber numberWithUnsignedInt:slideNumber]];
+ } else if ([instruction isEqualToString:@"slide_notes"]){
+ uint slideNumber = [[command objectAtIndex:1] integerValue];
+ NSMutableString *notes = [[NSMutableString alloc] init];
+ for (int i = 2; i<command.count; ++i) {
+ [notes appendString:[command objectAtIndex:i]];
+ }
+ [self.slideShow putNotes:notes
+ AtIndex:slideNumber];
+ [[NSNotificationCenter defaultCenter] postNotificationName:MSG_SLIDE_NOTES object: [NSNumber numberWithUnsignedInt:slideNumber]];
+ }
+
+ }
+
+}
+
+ at end
diff --git a/ios/iosremote/iosremote/Communication/CommandTransmitter.h b/ios/iosremote/iosremote/Communication/CommandTransmitter.h
new file mode 100644
index 0000000..95821c9
--- /dev/null
+++ b/ios/iosremote/iosremote/Communication/CommandTransmitter.h
@@ -0,0 +1,30 @@
+// -*- Mode: ObjC; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+//
+// 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/Foundation.h>
+
+ at class Client;
+
+
+ at interface CommandTransmitter : NSObject
+
+- (CommandTransmitter*) initWithClient:(Client *)client;
+
+- (void) nextTransition;
+- (void) previousTransition;
+
+- (void) gotoSlide:(uint) slide;
+
+- (void) blankScreen;
+- (void) blankScreenWithColor:(UIColor*)color;
+- (void) resume;
+
+- (void) startPresentation;
+- (void) stopPresentation;
+
+ at end
diff --git a/ios/iosremote/iosremote/Communication/CommandTransmitter.m b/ios/iosremote/iosremote/Communication/CommandTransmitter.m
new file mode 100644
index 0000000..a359f5e
--- /dev/null
+++ b/ios/iosremote/iosremote/Communication/CommandTransmitter.m
@@ -0,0 +1,88 @@
+/* -*- Mode: Java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * 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 "CommandTransmitter.h"
+#import "Client.h"
+
+ at interface CommandTransmitter()
+
+ at property (nonatomic, weak) Client* client;
+
+ at end
+
+ at implementation CommandTransmitter
+
+ at synthesize client = _client;
+
+- (CommandTransmitter*) initWithClient:(Client *)client
+{
+ self = [self init];
+ self.client = client;
+
+ return self;
+}
+
+- (void) nextTransition
+{
+ [self.client sendCommand:@"transition_next\n\n"];
+}
+
+- (void) previousTransition
+{
+ [self.client sendCommand:@"transition_previous\n\n"];
+}
+
+- (void) gotoSlide:(uint) slide
+{
+ [self.client sendCommand:[NSString stringWithFormat:@"goto_slide\n%u\n\n", slide]];
+}
+
+
+/**
+ * Blank the screen to the default colour (set server-side), which is
+ * generally black. This is slightly faster than using
+ * <code> blankScreen( colour ) </code>.
+ */
+- (void) blankScreen
+{
+ [self.client sendCommand:@"presentation_blank_screen\n\n"];
+}
+
+
+/**
+ * Set the screen to a specific colour. Only use if a non default colour is
+ * needed.
+ *
+ * @param aColor
+ */
+- (void) blankScreenWithColor:(UIColor*)color
+{
+// CGColorRef colorRef = color.CGColor;
+// NSString *colorString = [CIColor colorWithCGColor:colorRef].stringRepresentation;
+
+ // Need new server-end interface, since this is a platform dependent representation
+// [self.client sendCommand:[NSString stringWithFormat:@"presentation_blank_screen\n%@\n\n", colorString]];
+}
+
+- (void) resume
+{
+ [self.client sendCommand:@"presentation_resume\n\n"];
+}
+
+- (void) startPresentation
+{
+ [self.client sendCommand:@"presentation_start\n\n"];
+}
+
+- (void) stopPresentation
+{
+ [self.client sendCommand:@"presentation_stop\n\n"];
+}
+
+ at end
diff --git a/ios/iosremote/iosremote/Communication/CommunicationManager.h b/ios/iosremote/iosremote/Communication/CommunicationManager.h
new file mode 100644
index 0000000..908ed6b
--- /dev/null
+++ b/ios/iosremote/iosremote/Communication/CommunicationManager.h
@@ -0,0 +1,71 @@
+// -*- Mode: ObjC; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+//
+// 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/Foundation.h>
+
+ at class Client;
+ at class Server;
+ at class CommandInterpreter;
+ at class CommandTransmitter;
+ at class SlideShow;
+
+#define MSG_SLIDESHOW_STARTED @"SLIDESHOW_STARTED"
+#define MSG_SLIDE_CHANGED @"SLIDE_CHANGED"
+#define MSG_SLIDE_PREVIEW @"SLIDE_PREVIEW"
+#define MSG_SLIDE_NOTES @"SLIDE_NOTES"
+
+#define MSG_SERVERLIST_CHANGED @"SERVERLIST_CHANGED"
+#define MSG_PAIRING_STARTED @"PAIRING_STARTED"
+#define MSG_PAIRING_SUCCESSFUL @"PAIRING_SUCCESSFUL"
+
+/**
+ * Notify the UI that the service has connected to a server AND a slideshow
+ * is running.
+ * In this case the PresentationActivity should be started.
+ */
+#define STATUS_CONNECTED_SLIDESHOW_RUNNING @"STATUS_CONNECTED_SLIDESHOW_RUNNING"
+/**
+ * Notify the UI that the service has connected to a server AND no slideshow
+ * is running.
+ * In this case the StartPresentationActivity should be started.
+ */
+#define STATUS_CONNECTED_NOSLIDESHOW @"STATUS_CONNECTED_NOSLIDESHOW"
+
+#define STATUS_PAIRING_PINVALIDATION @"STATUS_PAIRING_PINVALIDATION"
+
+#define STATUS_CONNECTION_FAILED @"STATUS_CONNECTION_FAILED"
+
+
+typedef enum ConnectionState : NSInteger ConnectionState;
+
+enum ConnectionState : NSInteger {
+ DISCONNECTED,
+ SEARCHING,
+ CONNECTING,
+ CONNECTED
+};
+
+ at interface CommunicationManager : NSObject
+
+- (id) initWithExistingServers;
+- (NSNumber *) getPairingPin;
+- (void) connectToServer:(Server*)server;
+- (void) addServersWithName:(NSString*)name
+ AtAddress:(NSString*)addr;
+- (void) removeServerAtIndex:(NSUInteger)index;
+
+ at property ConnectionState state;
+ at property (nonatomic, strong) id delegate;
+ at property (atomic, strong) NSMutableArray* servers;
+ at property (nonatomic, strong) CommandInterpreter* interpreter;
+ at property (nonatomic, strong) CommandTransmitter* transmitter;
+
++ (CommunicationManager *)sharedComManager;
+
+ at end
diff --git a/ios/iosremote/iosremote/Communication/CommunicationManager.m b/ios/iosremote/iosremote/Communication/CommunicationManager.m
new file mode 100644
index 0000000..7c6a486
--- /dev/null
+++ b/ios/iosremote/iosremote/Communication/CommunicationManager.m
@@ -0,0 +1,167 @@
+// -*- Mode: ObjC; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+//
+// 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 "CommunicationManager.h"
+#import "Client.h"
+#import "Server.h"
+#import "SlideShow.h"
+#import "CommandTransmitter.h"
+#import "CommandInterpreter.h"
+#import "serverList_vc.h"
+#import <dispatch/dispatch.h>
+
+#define ExistingServersKey @"CommunicationManager.ExistingServers"
+
+ at interface CommunicationManager()
+
+ at property (nonatomic, strong) Client* client;
+ at property (nonatomic, strong) id connectionConnectedObserver;
+ at property (nonatomic, strong) id connectionDisconnectedObserver;
+
+ at end
+
+// Singlton Pattern
+ at implementation CommunicationManager
+
+ at synthesize client = _client;
+ at synthesize state = _state;
+ at synthesize interpreter = _interpreter;
+ at synthesize transmitter = _transmitter;
+ at synthesize servers = _servers;
+ at synthesize delegate = _delegate;
+ at synthesize connectionConnectedObserver = _connectionConnectedObserver;
+ at synthesize connectionDisconnectedObserver = _connectionDisconnectedObserver;
+
++ (CommunicationManager *)sharedComManager
+{
+ static CommunicationManager *sharedComManager = nil;
+ static dispatch_once_t _singletonPredicate;
+
+ dispatch_once(&_singletonPredicate, ^{
+ sharedComManager = [[super allocWithZone:nil] initWithExistingServers];
+ });
+
+ return sharedComManager;
+}
+
+
+- (void) connectionStatusHandler:(NSNotification *)note
+{
+ [self.delegate disableSpinner];
+ if([[note name] isEqualToString:@"connection.status.connected"]){
+ if (self.state!=CONNECTED){
+ NSLog(@"Connected");
+ self.transmitter = [[CommandTransmitter alloc] initWithClient:self.client];
+ self.state = CONNECTED;
+ [self.delegate performSegueWithIdentifier:@"pinValidation" sender:nil];
+ } else {
+ NSLog(@"Already connected");
+ }
+ } else if ([[note name] isEqualToString:@"connection.status.disconnected"]){
+ if (self.state != DISCONNECTED) {
+ NSLog(@"Connection Failed");
+ self.state = DISCONNECTED;
+ [self.client disconnect];
+ UIAlertView *message = [[UIAlertView alloc] initWithTitle:@"Failed to reach server"
+ message:@"Please verify the IP address and try again later"
+ delegate:nil
+ cancelButtonTitle:@"OK"
+ otherButtonTitles:@"Help", nil];
+ [message show];
+ }
+ }
+}
+
+- (id) init
+{
+ self = [super init];
+ self.state = DISCONNECTED;
+ self.interpreter = [[CommandInterpreter alloc] init];
+ self.servers = [[NSMutableArray alloc] init];
+
+ [[NSNotificationCenter defaultCenter]addObserver: self
+ selector: @selector(connectionStatusHandler:)
+ name: @"connection.status.connected"
+ object: nil];
+ [[NSNotificationCenter defaultCenter]addObserver: self
+ selector: @selector(connectionStatusHandler:)
+ name: @"connection.status.disconnected"
+ object: nil];
+
+ return self;
+}
+
+
+
+- (id) initWithExistingServers
+{
+ self = [self init];
+ NSUserDefaults * userDefaluts = [NSUserDefaults standardUserDefaults];
+
+ if(!userDefaluts)
+ NSLog(@"userDefaults nil");
+
+ NSData *dataRepresentingExistingServers = [userDefaluts objectForKey:ExistingServersKey];
+ if (dataRepresentingExistingServers != nil)
+ {
+ NSArray *oldSavedArray = [NSKeyedUnarchiver unarchiveObjectWithData:dataRepresentingExistingServers];
+ if (oldSavedArray != nil)
+ self.servers = [[NSMutableArray alloc] initWithArray:oldSavedArray];
+ else
+ self.servers = [[NSMutableArray alloc] init];
+ }
+ return self;
+}
+
+- (void) connectToServer:(Server*)server
+{
+ if (self.state == CONNECTING) {
+ return;
+ } else {
+ self.state = CONNECTING;
+ [self.client disconnect];
+ // initialise it with a given server
+ self.client = [[Client alloc]initWithServer:server managedBy:self interpretedBy:self.interpreter];
+ self.transmitter = [[CommandTransmitter alloc] initWithClient:self.client];
+ [self.client connect];
+ }
+}
+
+
+- (NSNumber *) getPairingPin{
+ return [self.client pin];
+}
+
+- (NSString *) getPairingDeviceName
+{
+ return [self.client name];
+}
+
++ (id)allocWithZone:(NSZone *)zone
+{
+ return [self sharedComManager];
+}
+
+- (void) addServersWithName:(NSString*)name
+ AtAddress:(NSString*)addr
+{
+ Server * s = [[Server alloc] initWithProtocol:NETWORK atAddress:addr ofName:name];
+ [self.servers addObject:s];
+ [[NSUserDefaults standardUserDefaults] setObject:[NSKeyedArchiver archivedDataWithRootObject:self.servers] forKey:ExistingServersKey];
+ [[NSUserDefaults standardUserDefaults] synchronize];
+}
+
+- (void) removeServerAtIndex:(NSUInteger)index
+{
+ [self.servers removeObjectAtIndex:index];
+ [[NSUserDefaults standardUserDefaults] setObject:[NSKeyedArchiver archivedDataWithRootObject:self.servers] forKey:ExistingServersKey];
+ [[NSUserDefaults standardUserDefaults] synchronize];
+}
+
+ at end
diff --git a/ios/iosremote/iosremote/Communication/Server.h b/ios/iosremote/iosremote/Communication/Server.h
new file mode 100644
index 0000000..0e499bd
--- /dev/null
+++ b/ios/iosremote/iosremote/Communication/Server.h
@@ -0,0 +1,29 @@
+// -*- Mode: ObjC; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+//
+// 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/Foundation.h>
+
+typedef enum protocol {NETWORK} Protocol_t;
+
+ at interface Server : NSObject <NSCoding>
+
+ at property (nonatomic) Protocol_t protocol;
+ at property (nonatomic, strong) NSString* serverName;
+ at property (nonatomic, strong) NSString* serverAddress;
+
+- (id)initWithProtocol:(Protocol_t)protocal
+ atAddress:(NSString*) address
+ ofName:(NSString*) name;
+
+ at end
+
+ at interface NSString (IPValidation)
+
+- (BOOL)isValidIPAddress;
+
+ at end
\ No newline at end of file
diff --git a/ios/iosremote/iosremote/Communication/Server.m b/ios/iosremote/iosremote/Communication/Server.m
new file mode 100644
index 0000000..2e2c0a4
--- /dev/null
+++ b/ios/iosremote/iosremote/Communication/Server.m
@@ -0,0 +1,75 @@
+// -*- Mode: ObjC; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+//
+// 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 "Server.h"
+#import <arpa/inet.h>
+
+ at interface Server()
+
+ at end
+
+ at implementation Server
+
+
+ at synthesize protocol = _protocol;
+ at synthesize serverName = _serverName;
+ at synthesize serverAddress = _serverAddress;
+
+
+- (void)encodeWithCoder:(NSCoder *)coder;
+{
+ [coder encodeObject:self.serverName forKey:@"name"];
+ [coder encodeObject:self.serverAddress forKey:@"address"];
+ [coder encodeInteger:self.protocol forKey:@"protocol"];
+}
+
+- (id)initWithCoder:(NSCoder *)coder;
+{
+ self = [self initWithProtocol:[coder decodeIntegerForKey:@"protocol"]
+ atAddress:[coder decodeObjectForKey:@"address"]
+ ofName:[coder decodeObjectForKey:@"name"]];
+ return self;
+}
+
+
+- (id)initWithProtocol:(Protocol_t)protocal
+ atAddress:(NSString*) address
+ ofName:(NSString*) name
+{
+ self = [self init];
+ self.protocol = protocal;
+ self.serverAddress = address;
+ self.serverName = name;
+ return self;
+}
+
+- (NSString *)description{
+ return [NSString stringWithFormat:@"Server: Name:%@ Addr:%@", self.serverName, self.serverAddress];
+}
+
+ at end
+
+
+ at implementation NSString (IPValidation)
+
+- (BOOL)isValidIPAddress
+{
+ const char *utf8 = [self UTF8String];
+ int success;
+
+ struct in_addr dst;
+ success = inet_pton(AF_INET, utf8, &dst);
+ if (success != 1) {
+ struct in6_addr dst6;
+ success = inet_pton(AF_INET6, utf8, &dst6);
+ }
+
+ return success;
+}
+
+ at end
diff --git a/ios/iosremote/iosremote/Communication/SlideShow.h b/ios/iosremote/iosremote/Communication/SlideShow.h
new file mode 100644
index 0000000..8d89533
--- /dev/null
+++ b/ios/iosremote/iosremote/Communication/SlideShow.h
@@ -0,0 +1,26 @@
+// -*- Mode: ObjC; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+//
+// 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/Foundation.h>
+
+ at class slideShowPreview_vc;
+
+ at interface SlideShow : NSObject
+
+ at property uint size;
+ at property uint currentSlide;
+ at property (nonatomic, strong) slideShowPreview_vc* delegate;
+
+- (void) putImage: (NSString *)img AtIndex: (uint) index;
+- (void) putNotes: (NSString *)notes AtIndex: (uint) index;
+
+- (UIImage *) getImageAtIndex: (uint) index;
+- (NSString *) getNotesAtIndex: (uint) index;
+
+ at end
diff --git a/ios/iosremote/iosremote/Communication/SlideShow.m b/ios/iosremote/iosremote/Communication/SlideShow.m
new file mode 100644
index 0000000..7048569
--- /dev/null
+++ b/ios/iosremote/iosremote/Communication/SlideShow.m
@@ -0,0 +1,114 @@
+// -*- Mode: ObjC; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+//
+// 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 "SlideShow.h"
+#import "Base64.h"
+#import "slideShowPreview_vc.h"
+#import <dispatch/dispatch.h>
+
+ at interface SlideShow()
+
+ at property (nonatomic, strong) NSMutableDictionary* imagesDictionary;
+ at property (nonatomic, strong) NSMutableDictionary* notesDictionary;
+
+ at property int lastRequestedImage, lastRequestedNote;
+ at property (nonatomic, strong) id slideShowImageReadyObserver;
+ at property (nonatomic, strong) id slideShowNoteReadyObserver;
+
+ at end
+
+ at implementation SlideShow
+
+ at synthesize size = _size;
+ at synthesize currentSlide = _currentSlide;
+ at synthesize delegate = _delegate;
+
+dispatch_queue_t backgroundQueue;
+
+- (SlideShow *) init{
+ self = [super init];
+ self.imagesDictionary = [[NSMutableDictionary alloc] init];
+ self.notesDictionary = [[NSMutableDictionary alloc] init];
+ _size = 0;
+ _currentSlide = 0;
+
+ backgroundQueue = dispatch_queue_create("org.libreoffice.iosremote.bgqueue", NULL);
+// NSOperationQueue *mainQueue = [NSOperationQueue mainQueue];
+
+// self.slideShowImageReadyObserver =[[NSNotificationCenter defaultCenter]
+// addObserverForName:@"storage_update_image_ready"
+// object:nil
+// queue:mainQueue
+// usingBlock:^(NSNotification *note) {
+// if ([[[note userInfo] objectForKey:@"index"] intValue] == self.lastRequestedImage) {
+// [self.delegate.image setImage:[self getImageAtIndex:self.lastRequestedImage]];
+// self.lastRequestedImage = -1;
+// }
+// }];
+
+// self.slideShowNoteReadyObserver = [[NSNotificationCenter defaultCenter] addObserverForName:@"storage_update_note_ready"
+// object:nil
+// queue:mainQueue
+// usingBlock:^(NSNotification *note) {
+// if ([[[note userInfo] objectForKey:@"index"] intValue] == self.lastRequestedNote) {
+// [self.delegate.lecturer_notes loadHTMLString:[self getNotesAtIndex:self.lastRequestedNote] baseURL:nil];
+// self.lastRequestedNote = -1;
+// }
+// }];
+
+ return self;
+}
+
+- (void) putImage: (NSString *)img AtIndex: (uint) index{
+// NSLog(@"Put Image into %u", index);
+ dispatch_async(backgroundQueue, ^(void) {
+ NSData* data = [NSData dataWithBase64String:img];
+ UIImage* image = [UIImage imageWithData:data];
+ [self.imagesDictionary setObject:image forKey:[NSNumber numberWithUnsignedInt:index]];
+ [[NSNotificationCenter defaultCenter] postNotificationName:@"storage_update_image_ready"
+ object:nil
+ userInfo:[NSDictionary dictionaryWithObject:[NSNumber numberWithInt:index] forKey:@"index"]];
+ });
+}
+
+- (void) putNotes: (NSString *)notes AtIndex: (uint) index{
+// NSLog(@"Put note into %u", index);
+ [self.notesDictionary setObject:notes forKey:[NSNumber numberWithUnsignedInt:index]];
+ [[NSNotificationCenter defaultCenter] postNotificationName:@"storage_update_note_ready"
+ object:nil
+ userInfo:[NSDictionary dictionaryWithObject:[NSNumber numberWithInt:index] forKey:@"index"]];
+}
+
+- (UIImage *) getImageAtIndex: (uint) index
+{
+ if (![self.imagesDictionary objectForKey:[NSNumber numberWithUnsignedInt:index]]) {
+ self.lastRequestedImage = index;
+ return nil;
+ }
+ else{
+ self.lastRequestedImage = -1;
+ return [self.imagesDictionary objectForKey:[NSNumber numberWithUnsignedInt:index]];
+ }
+}
+
+- (NSString *) getNotesAtIndex: (uint) index
+{
+ if (![self.notesDictionary objectForKey:[NSNumber numberWithUnsignedInt:index]]) {
+ self.lastRequestedNote = index;
+ return nil;
+ }
+ else {
+ self.lastRequestedNote = -1;
+ return [self.notesDictionary objectForKey:[NSNumber numberWithUnsignedInt:index]];
+ }
+}
+
+
+
+ at end
diff --git a/ios/iosremote/iosremote/Communication/pinValidation_vc.h b/ios/iosremote/iosremote/Communication/pinValidation_vc.h
new file mode 100644
index 0000000..6c7be76
--- /dev/null
+++ b/ios/iosremote/iosremote/Communication/pinValidation_vc.h
@@ -0,0 +1,16 @@
+//
+// pinValidation_vcViewController.h
+// iosremote
+//
+// Created by Liu Siqi on 7/4/13.
+// Copyright (c) 2013 libreoffice. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+ at interface pinValidation_vc : UIViewController
+
+ at property (weak, nonatomic) IBOutlet UILabel *pinLabel;
+ at property (weak, nonatomic) IBOutlet UILabel *statusLabel;
+
+ at end
diff --git a/ios/iosremote/iosremote/Communication/pinValidation_vc.m b/ios/iosremote/iosremote/Communication/pinValidation_vc.m
new file mode 100644
index 0000000..14dadee
--- /dev/null
+++ b/ios/iosremote/iosremote/Communication/pinValidation_vc.m
@@ -0,0 +1,70 @@
+//
+// pinValidation_vcViewController.m
+// iosremote
+//
+// Created by Liu Siqi on 7/4/13.
+// Copyright (c) 2013 libreoffice. All rights reserved.
+//
+
+#import "pinValidation_vc.h"
+#import "slideShowPreview_vc.h"
+#import "SlideShow.h"
+#import "CommandInterpreter.h"
+#import "CommunicationManager.h"
+
+ at interface pinValidation_vc ()
+
+ at property (nonatomic, strong) CommunicationManager *comManager;
+ at property (nonatomic, strong) id slideShowPreviewStartObserver;
+
+ at end
+
+ at implementation pinValidation_vc
+
+ at synthesize comManager = _comManager;
+ at synthesize slideShowPreviewStartObserver = _slideShowPreviewStartObserver;
+
+- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
+{
+ self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
+ if (self) {
+ // Custom initialization
+ }
+ return self;
+}
+
+- (void)viewDidLoad
+{
+ [super viewDidLoad];
+ // Do any additional setup after loading the view.
+ self.comManager = [CommunicationManager sharedComManager];
+ [self.pinLabel setText:[NSString stringWithFormat:@"%@", [self.comManager getPairingPin]]];
+ NSOperationQueue *mainQueue = [NSOperationQueue mainQueue];
+ self.slideShowPreviewStartObserver = [[NSNotificationCenter defaultCenter] addObserverForName:STATUS_CONNECTED_SLIDESHOW_RUNNING
+ object:nil
+ queue:mainQueue
+ usingBlock:^(NSNotification *note) {
+ [self performSegueWithIdentifier:@"pinValidated" sender:self ];
+ }];
+}
+
+- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
+ if ([segue.identifier isEqualToString:@"pinValidated"]) {
+ slideShowPreview_vc *destViewController = segue.destinationViewController;
+ destViewController.slideshow = [self.comManager.interpreter slideShow];
+ [destViewController.slideshow setDelegate:destViewController];
+ }
+}
+
+- (void)didReceiveMemoryWarning
+{
+ [super didReceiveMemoryWarning];
+ // Dispose of any resources that can be recreated.
+}
+
+- (void)viewDidUnload {
+ [self setPinLabel:nil];
+ [self setStatusLabel:nil];
+ [super viewDidUnload];
+}
+ at end
diff --git a/ios/iosremote/iosremote/Default-568h at 2x.png b/ios/iosremote/iosremote/Default-568h at 2x.png
new file mode 100644
index 0000000..0891b7a
Binary files /dev/null and b/ios/iosremote/iosremote/Default-568h at 2x.png differ
diff --git a/ios/iosremote/iosremote/Default.png b/ios/iosremote/iosremote/Default.png
new file mode 100644
index 0000000..4c8ca6f
Binary files /dev/null and b/ios/iosremote/iosremote/Default.png differ
diff --git a/ios/iosremote/iosremote/Default at 2x.png b/ios/iosremote/iosremote/Default at 2x.png
new file mode 100644
index 0000000..35b84cf
Binary files /dev/null and b/ios/iosremote/iosremote/Default at 2x.png differ
diff --git a/ios/iosremote/iosremote/EditableTableViewCell.h b/ios/iosremote/iosremote/EditableTableViewCell.h
new file mode 100644
index 0000000..6dd1666
--- /dev/null
+++ b/ios/iosremote/iosremote/EditableTableViewCell.h
@@ -0,0 +1,14 @@
+// -*- Mode: ObjC; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+//
+// 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/UIKit.h>
+
+ at interface EditableTableViewCell : UITableViewCell
+ @property (weak, nonatomic) UITextField * textField;
+ @property (weak, nonatomic) UILabel * inputLabel;
+ at end
diff --git a/ios/iosremote/iosremote/EditableTableViewCell.m b/ios/iosremote/iosremote/EditableTableViewCell.m
new file mode 100644
index 0000000..73199a0
--- /dev/null
+++ b/ios/iosremote/iosremote/EditableTableViewCell.m
@@ -0,0 +1,54 @@
+// -*- Mode: ObjC; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+//
+// 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 "EditableTableViewCell.h"
+
+ at implementation EditableTableViewCell
+
+ at synthesize inputLabel = _inputLabel;
+ at synthesize textField = _textField;
+
+- (id)initWithStyle:(UITableViewCellStyle)style
+ reuseIdentifier:(NSString *)identifier
+{
+ self = [super initWithStyle:style reuseIdentifier:identifier];
+
+ if (self == nil)
+ {
+ return nil;
+ }
+
+ CGRect bounds = [[self contentView] bounds];
+ CGRect rect = CGRectInset(bounds, 20.0, 10.0);
+ UITextField *textField = [[UITextField alloc] initWithFrame:rect];
+
+ // Set the keyboard's return key label to 'Next'.
+ //
+ [textField setReturnKeyType:UIReturnKeyNext];
+
+ // Make the clear button appear automatically.
+ [textField setClearButtonMode:UITextFieldViewModeWhileEditing];
+ [textField setOpaque:YES];
+
+ [[self contentView] addSubview:textField];
+ [self setTextField:textField];
+
+ return self;
+}
+
+// Disable highlighting of currently selected cell.
+//
+- (void)setSelected:(BOOL)selected
+ animated:(BOOL)animated
+{
+ [super setSelected:selected animated:NO];
+
+ [self setSelectionStyle:UITableViewCellSelectionStyleNone];
+}
+
+ at end
diff --git a/ios/iosremote/iosremote/en.lproj/InfoPlist.strings b/ios/iosremote/iosremote/en.lproj/InfoPlist.strings
new file mode 100644
index 0000000..477b28f
--- /dev/null
+++ b/ios/iosremote/iosremote/en.lproj/InfoPlist.strings
@@ -0,0 +1,2 @@
+/* Localized versions of Info.plist keys */
+
diff --git a/ios/iosremote/iosremote/en.lproj/MainStoryboard_iPhone.storyboard b/ios/iosremote/iosremote/en.lproj/MainStoryboard_iPhone.storyboard
new file mode 100644
index 0000000..29c4a32
--- /dev/null
+++ b/ios/iosremote/iosremote/en.lproj/MainStoryboard_iPhone.storyboard
@@ -0,0 +1,357 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="2.0" toolsVersion="3084" systemVersion="13A497d" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" initialViewController="qoG-TN-hN0">
+ <dependencies>
+ <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="2083"/>
+ </dependencies>
+ <scenes>
+ <!--Server list vc - Connect-->
+ <scene sceneID="5">
+ <objects>
+ <viewController id="2" customClass="server_list_vc" sceneMemberID="viewController">
+ <tableView key="view" clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="plain" showsSelectionImmediatelyOnTouchBegin="NO" rowHeight="44" sectionHeaderHeight="22" sectionFooterHeight="22" id="naQ-T4-jWV">
+ <rect key="frame" x="0.0" y="64" width="320" height="504"/>
+ <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
+ <prototypes>
+ <tableViewCell contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" reuseIdentifier="server_item_cell" editingAccessoryType="disclosureIndicator" textLabel="Rg3-PU-OuS" detailTextLabel="9Mc-gD-acc" style="IBUITableViewCellStyleValue1" id="Pvl-Uw-Ghs">
+ <rect key="frame" x="0.0" y="22" width="320" height="44"/>
+ <autoresizingMask key="autoresizingMask"/>
+ <view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center">
+ <rect key="frame" x="0.0" y="0.0" width="320" height="43"/>
+ <autoresizingMask key="autoresizingMask"/>
+ <subviews>
+ <label opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="left" text="Title" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="Rg3-PU-OuS">
+ <rect key="frame" x="10" y="11" width="35" height="21"/>
+ <fontDescription key="fontDescription" type="boldSystem" pointSize="17"/>
+ <color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
+ <color key="highlightedColor" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/>
+ </label>
+ <label opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="left" text="Detail" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="9Mc-gD-acc">
+ <rect key="frame" x="266" y="11" width="44" height="21"/>
+ <fontDescription key="fontDescription" type="system" pointSize="17"/>
+ <color key="textColor" red="0.21960784310000001" green="0.3294117647" blue="0.52941176469999995" alpha="1" colorSpace="calibratedRGB"/>
+ <color key="highlightedColor" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/>
+ </label>
+ </subviews>
+ <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
+ </view>
+ </tableViewCell>
+ </prototypes>
+ <connections>
+ <outlet property="dataSource" destination="2" id="dcg-jo-7eE"/>
+ <outlet property="delegate" destination="2" id="owZ-Ow-VEc"/>
+ </connections>
+ </tableView>
+ <navigationItem key="navigationItem" title="Connect" id="yR1-m8-JWN">
+ <barButtonItem key="rightBarButtonItem" systemItem="add" id="bHy-yX-SPg">
+ <connections>
+ <segue destination="maT-Bx-l5y" kind="push" identifier="create_new_server" id="UYr-8d-fk5"/>
+ </connections>
+ </barButtonItem>
+ </navigationItem>
+ <connections>
+ <outlet property="serverTable" destination="naQ-T4-jWV" id="hd3-Vm-fk6"/>
+ <segue destination="UPe-3R-KdQ" kind="push" identifier="pinValidation" id="UQQ-pV-3o3"/>
+ <segue destination="vs3-ES-U9h" kind="push" identifier="SlideShowPreview" id="YBj-zE-J7L"/>
+ </connections>
+ </viewController>
+ <placeholder placeholderIdentifier="IBFirstResponder" id="4" sceneMemberID="firstResponder"/>
+ </objects>
+ <point key="canvasLocation" x="528" y="118"/>
+ </scene>
+ <!--Pin Validation vc-->
+ <scene sceneID="aCW-l9-UDx">
+ <objects>
+ <viewController id="UPe-3R-KdQ" customClass="pinValidation_vc" sceneMemberID="viewController">
+ <view key="view" contentMode="scaleToFill" id="UGV-xw-Sxo">
+ <rect key="frame" x="0.0" y="64" width="320" height="504"/>
+ <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+ <subviews>
+ <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="3128" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="f2u-bG-5ak">
+ <rect key="frame" x="79" y="93" width="163" height="81"/>
+ <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
+ <fontDescription key="fontDescription" name="HelveticaNeue-UltraLight" family="Helvetica Neue" pointSize="73"/>
+ <color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
+ <nil key="highlightedColor"/>
+ </label>
+ <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Please enter the pin code above in Impress - Slide Show - Impress Remote" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="2" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="upW-oF-qOa">
+ <rect key="frame" x="29" y="208" width="271" height="53"/>
+ <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
+ <fontDescription key="fontDescription" name="Helvetica-Light" family="Helvetica" pointSize="15"/>
+ <color key="textColor" name="alternateSelectedControlColor" catalog="System" colorSpace="catalog"/>
+ <nil key="highlightedColor"/>
+ </label>
+ <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Waiting for validation from Impress..." lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="lSD-BG-kVe">
+ <rect key="frame" x="33" y="380" width="276" height="21"/>
+ <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
+ <fontDescription key="fontDescription" name="Helvetica-Light" family="Helvetica" pointSize="15"/>
+ <color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
+ <nil key="highlightedColor"/>
+ </label>
+ </subviews>
+ <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
+ </view>
+ <navigationItem key="navigationItem" id="c3o-oA-oin"/>
+ <connections>
+ <outlet property="pinLabel" destination="f2u-bG-5ak" id="Y7S-6h-awe"/>
+ <outlet property="statusLabel" destination="lSD-BG-kVe" id="mmM-4x-ktw"/>
+ <segue destination="vs3-ES-U9h" kind="push" identifier="pinValidated" id="geL-Q8-f61"/>
+ </connections>
+ </viewController>
+ <placeholder placeholderIdentifier="IBFirstResponder" id="iok-RC-uS6" userLabel="First Responder" sceneMemberID="firstResponder"/>
+ </objects>
+ <point key="canvasLocation" x="528" y="872"/>
+ </scene>
+ <!--New Server View Controller - New Server-->
+ <scene sceneID="tlJ-c5-Jp2">
+ <objects>
+ <tableViewController id="maT-Bx-l5y" customClass="newServerViewController" sceneMemberID="viewController">
+ <tableView key="view" opaque="NO" clipsSubviews="YES" clearsContextBeforeDrawing="NO" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="static" style="grouped" separatorStyle="singleLineEtched" rowHeight="44" sectionHeaderHeight="10" sectionFooterHeight="10" id="VUL-K7-xsS">
+ <rect key="frame" x="0.0" y="64" width="320" height="504"/>
+ <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+ <color key="backgroundColor" cocoaTouchSystemColor="groupTableViewBackgroundColor"/>
+ <sections>
+ <tableViewSection footerTitle="Register a new server and remeber it for future connection" id="46W-NE-CYW">
+ <cells>
+ <tableViewCell contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" id="EN9-tY-k4P" customClass="EditableTableViewCell">
+ <rect key="frame" x="0.0" y="10" width="320" height="45"/>
+ <autoresizingMask key="autoresizingMask"/>
+ <view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center">
+ <rect key="frame" x="10" y="1" width="300" height="43"/>
+ <autoresizingMask key="autoresizingMask"/>
+ <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
+ </view>
+ </tableViewCell>
+ <tableViewCell contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" id="qeE-95-2Gh" customClass="EditableTableViewCell">
+ <rect key="frame" x="0.0" y="55" width="320" height="45"/>
+ <autoresizingMask key="autoresizingMask"/>
+ <view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center">
+ <rect key="frame" x="10" y="0.0" width="300" height="43"/>
+ <autoresizingMask key="autoresizingMask"/>
+ <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
+ </view>
+ </tableViewCell>
+ </cells>
+ </tableViewSection>
+ </sections>
+ <connections>
+ <outlet property="dataSource" destination="maT-Bx-l5y" id="B5v-aO-O0a"/>
+ <outlet property="delegate" destination="maT-Bx-l5y" id="Q3h-jf-Kor"/>
+ </connections>
+ </tableView>
+ <navigationItem key="navigationItem" title="New Server" id="qbR-M4-5O0">
+ <barButtonItem key="rightBarButtonItem" systemItem="save" id="sqC-Fa-Vem">
+ <connections>
+ <action selector="save:" destination="maT-Bx-l5y" id="OtP-lO-h9g"/>
+ </connections>
+ </barButtonItem>
+ </navigationItem>
+ </tableViewController>
+ <placeholder placeholderIdentifier="IBFirstResponder" id="b5I-aN-vyr" userLabel="First Responder" sceneMemberID="firstResponder"/>
+ </objects>
+ <point key="canvasLocation" x="1052" y="-63"/>
+ </scene>
+ <!--View Controller-->
+ <scene sceneID="ccD-EG-LMW">
+ <objects>
+ <viewController id="vs3-ES-U9h" sceneMemberID="viewController">
+ <view key="view" contentMode="scaleToFill" id="JzX-I7-Mwa">
+ <rect key="frame" x="0.0" y="64" width="320" height="504"/>
+ <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+ <subviews>
+ <containerView contentMode="scaleToFill" id="gBf-8h-qAQ">
+ <rect key="frame" x="0.0" y="196" width="320" height="308"/>
+ <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+ <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
+ <connections>
+ <segue destination="Ybo-9c-MB8" kind="embed" id="7Sk-Ca-Deq"/>
+ </connections>
+ </containerView>
+ <containerView contentMode="scaleToFill" id="rEU-8Z-ftD">
+ <rect key="frame" x="0.0" y="0.0" width="320" height="197"/>
+ <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+ <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
+ <connections>
+ <segue destination="HMh-Ba-7X9" kind="embed" id="Uql-bR-9Sk"/>
+ </connections>
+ </containerView>
+ </subviews>
+ <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
+ </view>
+ <navigationItem key="navigationItem" id="rqp-6S-yX6"/>
+ </viewController>
+ <placeholder placeholderIdentifier="IBFirstResponder" id="APz-RZ-QFt" userLabel="First Responder" sceneMemberID="firstResponder"/>
+ </objects>
+ <point key="canvasLocation" x="1052" y="695"/>
+ </scene>
+ <!--Slide Show Preview Table vc-->
+ <scene sceneID="Tvi-bD-vMC">
+ <objects>
+ <tableViewController id="Ybo-9c-MB8" customClass="slideShowPreviewTable_vc" sceneMemberID="viewController">
+ <tableView key="view" opaque="NO" clipsSubviews="YES" clearsContextBeforeDrawing="NO" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="static" style="grouped" separatorStyle="singleLineEtched" rowHeight="44" sectionHeaderHeight="10" sectionFooterHeight="10" id="rWA-v3-wtf">
+ <rect key="frame" x="0.0" y="0.0" width="320" height="308"/>
+ <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES" heightSizable="YES"/>
+ <color key="backgroundColor" cocoaTouchSystemColor="groupTableViewBackgroundColor"/>
+ <sections>
+ <tableViewSection id="8wQ-rK-ve4">
+ <cells>
+ <tableViewCell contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" id="0D7-tO-bVg">
+ <rect key="frame" x="0.0" y="10" width="320" height="45"/>
+ <autoresizingMask key="autoresizingMask"/>
+ <view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center">
+ <rect key="frame" x="10" y="1" width="300" height="43"/>
+ <autoresizingMask key="autoresizingMask"/>
+ <subviews>
+ <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Lecturer's notes" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="cqt-7d-BbV">
+ <rect key="frame" x="20" y="11" width="121" height="21"/>
+ <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+ <fontDescription key="fontDescription" type="system" pointSize="17"/>
+ <color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
+ <color key="highlightedColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
+ </label>
+ <switch opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" on="YES" id="Vmo-Lk-YLZ">
+ <rect key="frame" x="203" y="8" width="79" height="27"/>
+ <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+ </switch>
+ </subviews>
+ <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
+ </view>
+ </tableViewCell>
+ <tableViewCell contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" id="LrN-2p-yDw">
+ <rect key="frame" x="0.0" y="55" width="320" height="44"/>
+ <autoresizingMask key="autoresizingMask"/>
+ <view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center">
+ <rect key="frame" x="10" y="0.0" width="300" height="43"/>
+ <autoresizingMask key="autoresizingMask"/>
+ <subviews>
+ <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Timer" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="c2r-cZ-hoW">
+ <rect key="frame" x="20" y="11" width="44" height="21"/>
+ <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+ <fontDescription key="fontDescription" type="system" pointSize="17"/>
+ <color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
+ <color key="highlightedColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
+ </label>
+ <switch opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" on="YES" id="hp6-Kp-ujK">
+ <rect key="frame" x="203" y="8" width="79" height="27"/>
+ <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+ </switch>
+ </subviews>
+ <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
+ </view>
+ </tableViewCell>
+ <tableViewCell contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" id="Cdv-T8-mH7">
+ <rect key="frame" x="0.0" y="99" width="320" height="45"/>
+ <autoresizingMask key="autoresizingMask"/>
+ <view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center">
+ <rect key="frame" x="10" y="0.0" width="300" height="43"/>
+ <autoresizingMask key="autoresizingMask"/>
+ <subviews>
+ <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Pointer" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="5wf-j3-OjO">
+ <rect key="frame" x="20" y="11" width="54" height="21"/>
+ <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+ <fontDescription key="fontDescription" type="system" pointSize="17"/>
+ <color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
+ <color key="highlightedColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
+ </label>
... etc. - the rest is truncated
More information about the Libreoffice-commits
mailing list