From fd52591e5113000e60cba849a9f8eca3c9ebc083 Mon Sep 17 00:00:00 2001 From: Stefan Wehr Date: Wed, 7 Mar 2018 23:16:22 +0100 Subject: [PATCH 1/3] fake support for simulator The code now compiles and links for the simulator target. At runtime, code accessing the libpdfium throws an exception. --- UXReader/UXReader.xcodeproj/project.pbxproj | 4 + UXReader/UXReader/UXReaderDocument.mm | 233 ++++++++++++++++++++ UXReader/UXReader/UXReaderDocumentPage.mm | 165 ++++++++++++++ UXReader/UXReader/UXReaderFramework.mm | 14 ++ UXReader/UXReader/UXReaderSimulator.h | 9 + 5 files changed, 425 insertions(+) create mode 100644 UXReader/UXReader/UXReaderSimulator.h diff --git a/UXReader/UXReader.xcodeproj/project.pbxproj b/UXReader/UXReader.xcodeproj/project.pbxproj index 60825d0..5b96502 100644 --- a/UXReader/UXReader.xcodeproj/project.pbxproj +++ b/UXReader/UXReader.xcodeproj/project.pbxproj @@ -126,6 +126,7 @@ 45FE1B8C1E7855CC00EB808E /* UXReader-Search-Reverse.png in Resources */ = {isa = PBXBuildFile; fileRef = 45FE1B831E7855CC00EB808E /* UXReader-Search-Reverse.png */; }; 45FE1B8D1E7855CC00EB808E /* UXReader-Search-Reverse@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 45FE1B841E7855CC00EB808E /* UXReader-Search-Reverse@2x.png */; }; 45FE1B8E1E7855CC00EB808E /* UXReader-Search-Reverse@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 45FE1B851E7855CC00EB808E /* UXReader-Search-Reverse@3x.png */; }; + 52A821E6205096F800237883 /* UXReaderSimulator.h in Headers */ = {isa = PBXBuildFile; fileRef = 52A821E4205096F800237883 /* UXReaderSimulator.h */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ @@ -254,6 +255,7 @@ 45FE1B831E7855CC00EB808E /* UXReader-Search-Reverse.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "UXReader-Search-Reverse.png"; path = "UXReader/Graphics/UXReader-Search-Reverse.png"; sourceTree = ""; }; 45FE1B841E7855CC00EB808E /* UXReader-Search-Reverse@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "UXReader-Search-Reverse@2x.png"; path = "UXReader/Graphics/UXReader-Search-Reverse@2x.png"; sourceTree = ""; }; 45FE1B851E7855CC00EB808E /* UXReader-Search-Reverse@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "UXReader-Search-Reverse@3x.png"; path = "UXReader/Graphics/UXReader-Search-Reverse@3x.png"; sourceTree = ""; }; + 52A821E4205096F800237883 /* UXReaderSimulator.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = UXReaderSimulator.h; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -403,6 +405,7 @@ 453DED5F1E68E8E500DEE191 /* UXReader.mm */, 45F2853B1E6A20F000D2605F /* UXReaderFramework.h */, 45F2853C1E6A20F000D2605F /* UXReaderFramework.mm */, + 52A821E4205096F800237883 /* UXReaderSimulator.h */, ); path = UXReader; sourceTree = ""; @@ -522,6 +525,7 @@ 45F2853F1E6A20F000D2605F /* UXReaderFramework.h in Headers */, 45AC09831E6E173B00655696 /* UXReaderMainScrollView.h in Headers */, 45635C341E6CC3DA00665D34 /* UXReaderPageScrollView.h in Headers */, + 52A821E6205096F800237883 /* UXReaderSimulator.h in Headers */, 451ECD661E6DC89A0038E89D /* UXReaderPageImageView.h in Headers */, 45F285761E6A34D400D2605F /* UXReaderPageTiledView.h in Headers */, 451C82E01E6C287E00E6EB1C /* UXReaderMainToolbar.h in Headers */, diff --git a/UXReader/UXReader/UXReaderDocument.mm b/UXReader/UXReader/UXReaderDocument.mm index bdf5306..73aaa58 100644 --- a/UXReader/UXReader/UXReaderDocument.mm +++ b/UXReader/UXReader/UXReaderDocument.mm @@ -15,6 +15,7 @@ #import "UXReaderAction.h" #import "UXReaderDestination.h" #import "UXReaderOutline.h" +#import "UXReaderSimulator.h" #import "fpdfview.h" #import "fpdf_text.h" @@ -22,6 +23,236 @@ #import +#if TARGET_IPHONE_SIMULATOR + +@interface UXReaderDocument () + +@end + +@implementation UXReaderDocument + +- (nullable instancetype)initWithURL:(nonnull NSURL *)URL +{ + NOT_AVAILABLE_IN_SIMULATOR; + return nil; +} + +- (nullable instancetype)initWithData:(nonnull NSData *)data +{ + NOT_AVAILABLE_IN_SIMULATOR; + return nil; +} + +- (nullable instancetype)initWithSource:(nonnull id )source +{ + NOT_AVAILABLE_IN_SIMULATOR; + return nil; +} + +- (void)close +{ + NOT_AVAILABLE_IN_SIMULATOR; +} + +- (nullable NSURL *)URL +{ + NOT_AVAILABLE_IN_SIMULATOR; + return nil; +} + +- (nullable NSData *)data +{ + NOT_AVAILABLE_IN_SIMULATOR; + return nil; +} + +- (void)setUUID:(nonnull NSUUID *)UUID +{ + NOT_AVAILABLE_IN_SIMULATOR; +} +- (nonnull NSUUID *)UUID +{ + NOT_AVAILABLE_IN_SIMULATOR; + return nil; +} + +- (void)setTitle:(nonnull NSString *)text +{ + NOT_AVAILABLE_IN_SIMULATOR; +} +- (nullable NSString *)title +{ + NOT_AVAILABLE_IN_SIMULATOR; + return nil; +} + +- (void)setShowRTL:(BOOL)RTL +{ + NOT_AVAILABLE_IN_SIMULATOR; +} +- (BOOL)showRTL +{ + NOT_AVAILABLE_IN_SIMULATOR; + return NO; +} + +- (void)setHighlightLinks:(BOOL)RTL +{ + NOT_AVAILABLE_IN_SIMULATOR; +} +- (BOOL)highlightLinks +{ + NOT_AVAILABLE_IN_SIMULATOR; + return NO; +} + +- (void)setRenderTile:(nullable id )renderTile +{ + NOT_AVAILABLE_IN_SIMULATOR; +} +- (nullable id )renderTile +{ + NOT_AVAILABLE_IN_SIMULATOR; + return nil; +} + +- (void)setUseNativeRendering +{ + NOT_AVAILABLE_IN_SIMULATOR; +} + +- (uint32_t)permissions +{ + NOT_AVAILABLE_IN_SIMULATOR; + return 0; +} +- (nullable NSString *)fileVersion +{ + NOT_AVAILABLE_IN_SIMULATOR; + return nil; +} + +- (BOOL)isSameDocument:(nonnull UXReaderDocument *)document +{ + NOT_AVAILABLE_IN_SIMULATOR; + return NO; +} + +- (void)openWithPassword:(nullable NSString *)password + completion:(nonnull void (^)(NSError *_Nullable error))handler +{ + NOT_AVAILABLE_IN_SIMULATOR; +} +- (BOOL)isOpen +{ + NOT_AVAILABLE_IN_SIMULATOR; + return NO; +} + +- (nullable void *)pdfDocumentCG +{ + NOT_AVAILABLE_IN_SIMULATOR; + return NULL; +} +- (nullable void *)pdfDocumentFP +{ + NOT_AVAILABLE_IN_SIMULATOR; + return NULL; +} + +- (NSUInteger)pageCount +{ + NOT_AVAILABLE_IN_SIMULATOR; + return 0; +} + +- (CGSize)pageSize:(NSUInteger)page +{ + NOT_AVAILABLE_IN_SIMULATOR; + return CGSizeZero; +} + +- (nullable UXReaderDocumentPage *)documentPage:(NSUInteger)page +{ + NOT_AVAILABLE_IN_SIMULATOR; + return nil; +} + +- (nullable NSString *)pageLabel:(NSUInteger)page +{ + NOT_AVAILABLE_IN_SIMULATOR; + return nil; +} + +- (BOOL)isSearching +{ + NOT_AVAILABLE_IN_SIMULATOR; + return NO; +} +- (void)cancelSearch +{ + NOT_AVAILABLE_IN_SIMULATOR; +} +- (void)beginSearch:(nonnull NSString *)text options:(UXReaderSearchOptions)options +{ + NOT_AVAILABLE_IN_SIMULATOR; +} + +- (void)setSearchSelections:(nullable NSDictionary *> *)selections +{ + NOT_AVAILABLE_IN_SIMULATOR; +} +- (nullable NSDictionary *> *)searchSelections +{ + NOT_AVAILABLE_IN_SIMULATOR; + return nil; +} + +- (void)thumbForPage:(NSUInteger)page + size:(CGSize)size + canceller:(nonnull UXReaderCanceller *)canceller + completion:(nonnull void (^)(UIImage *_Nonnull thumb))handler +{ + NOT_AVAILABLE_IN_SIMULATOR; +} + +- (nullable NSDictionary *)information +{ + NOT_AVAILABLE_IN_SIMULATOR; + return nil; +} + +- (nullable NSArray *)outline +{ + NOT_AVAILABLE_IN_SIMULATOR; + return nil; +} + +- (BOOL)document:(nonnull UXReaderDocument *)document UUID:(NSUUID *__autoreleasing _Nullable * _Nullable)uuid +{ + NOT_AVAILABLE_IN_SIMULATOR; + return NO; +} + +- (BOOL)document:(nonnull UXReaderDocument *)document dataLength:(nonnull size_t *)length +{ + NOT_AVAILABLE_IN_SIMULATOR; + return NO; +} + +- (BOOL)document:(nonnull UXReaderDocument *)document + offset:(size_t)offset + length:(size_t)length + buffer:(nonnull uint8_t *)buffer +{ + NOT_AVAILABLE_IN_SIMULATOR; + return NO; +} + +@end + +#else // now comes the real implementation + @interface UXReaderDocument () @end @@ -1155,3 +1386,5 @@ - (BOOL)document:(nonnull UXReaderDocument *)document UUID:(NSUUID * _Nullable * #pragma clang diagnostic pop @end + +#endif // TARGET_IPHONE_SIMULATOR diff --git a/UXReader/UXReader/UXReaderDocumentPage.mm b/UXReader/UXReader/UXReaderDocumentPage.mm index f36ac56..49e55e8 100644 --- a/UXReader/UXReader/UXReaderDocumentPage.mm +++ b/UXReader/UXReader/UXReaderDocumentPage.mm @@ -12,12 +12,175 @@ #import "UXReaderFramework.h" #import "UXReaderDestination.h" #import "UXReaderAction.h" +#import "UXReaderSimulator.h" #import "fpdfview.h" #import "fpdf_text.h" #import "fpdf_edit.h" #import "fpdf_doc.h" +#if TARGET_IPHONE_SIMULATOR + +@implementation UXReaderDocumentPage + +- (nullable instancetype)initWithDocument:(nonnull UXReaderDocument *)document page:(NSUInteger)page +{ + NOT_AVAILABLE_IN_SIMULATOR; + return nil; +} + +- (nonnull UXReaderDocument *)document +{ + NOT_AVAILABLE_IN_SIMULATOR; + return nil; +} + +- (nullable void *)pdfPageCG +{ + NOT_AVAILABLE_IN_SIMULATOR; + return NULL; +} + +- (nullable void *)pdfPageFP +{ + NOT_AVAILABLE_IN_SIMULATOR; + return NULL; +} + +- (nullable void *)textPage +{ + NOT_AVAILABLE_IN_SIMULATOR; + return NULL; +} + +- (NSUInteger)page +{ + NOT_AVAILABLE_IN_SIMULATOR; + return 0; +} +- (NSUInteger)rotation +{ + NOT_AVAILABLE_IN_SIMULATOR; + return 0; +} +- (CGSize)pageSize +{ + NOT_AVAILABLE_IN_SIMULATOR; + return CGSizeZero; +} + +- (CGRect)convertToPageFromViewRect:(CGRect)rect +{ + NOT_AVAILABLE_IN_SIMULATOR; + return CGRectZero; +} +- (CGPoint)convertToPageFromViewPoint:(CGPoint)point +{ + NOT_AVAILABLE_IN_SIMULATOR; + return CGPointZero; +} +- (CGRect)convertFromPageX1:(CGFloat)x1 Y1:(CGFloat)y1 X2:(CGFloat)x2 Y2:(CGFloat)y2 +{ + NOT_AVAILABLE_IN_SIMULATOR; + return CGRectZero; +} + +- (void)renderTileInContext:(nonnull CGContextRef)context +{ + NOT_AVAILABLE_IN_SIMULATOR; +} + +- (void)thumbWithSize:(CGSize)size + canceller:(nonnull UXReaderCanceller *)canceller + completion:(nonnull void (^)(UIImage *_Nonnull thumb))handler +{ + NOT_AVAILABLE_IN_SIMULATOR; +} + +- (void)setSearchSelections:(nullable NSArray *)selections +{ + NOT_AVAILABLE_IN_SIMULATOR; +} +- (nullable NSArray *)searchSelections +{ + NOT_AVAILABLE_IN_SIMULATOR; + return nil; +} + +- (nullable UXReaderAction *)linkAction:(CGPoint)point +{ + NOT_AVAILABLE_IN_SIMULATOR; + return nil; +} +- (nullable UXReaderAction *)textAction:(CGPoint)point +{ + NOT_AVAILABLE_IN_SIMULATOR; + return nil; +} + +- (BOOL)extractPageLinks +{ + NOT_AVAILABLE_IN_SIMULATOR; + return NO; +} +- (BOOL)extractPageURLs +{ + NOT_AVAILABLE_IN_SIMULATOR; + return NO; +} + +- (NSUInteger)unicharCount +{ + NOT_AVAILABLE_IN_SIMULATOR; + return 0; +} +- (nullable NSString *)text +{ + NOT_AVAILABLE_IN_SIMULATOR; + return nil; +} +- (nullable NSString *)textAtIndex:(NSUInteger)index count:(NSUInteger)count +{ + NOT_AVAILABLE_IN_SIMULATOR; + return nil; +} +- (unichar)unicharAtIndex:(NSUInteger)index +{ + NOT_AVAILABLE_IN_SIMULATOR; + return 0; +} +- (CGFloat)unicharFontSizeAtIndex:(NSUInteger)index +{ + NOT_AVAILABLE_IN_SIMULATOR; + return 0; +} +- (CGRect)unicharRectangleAtIndex:(NSUInteger)index +{ + NOT_AVAILABLE_IN_SIMULATOR; + return CGRectZero; +} + +- (NSUInteger)unicharIndexAtPoint:(CGPoint)point tolerance:(CGSize)size +{ + NOT_AVAILABLE_IN_SIMULATOR; + return 0; +} + +- (nonnull NSArray *)rectanglesForTextAtIndex:(NSUInteger)index count:(NSUInteger)count +{ + NOT_AVAILABLE_IN_SIMULATOR; + return nil; +} + +- (nullable NSString *)textInRectangle:(CGRect)rectangle +{ + NOT_AVAILABLE_IN_SIMULATOR; + return nil; +} +@end + +#else // now comes the real implementation + @implementation UXReaderDocumentPage { UXReaderDocument *document; @@ -1232,3 +1395,5 @@ - (nullable NSString *)textInRectangle:(CGRect)rectangle } @end + +#endif // TARGET_IPHONE_SIMULATOR diff --git a/UXReader/UXReader/UXReaderFramework.mm b/UXReader/UXReader/UXReaderFramework.mm index bafca76..d377a32 100644 --- a/UXReader/UXReader/UXReaderFramework.mm +++ b/UXReader/UXReader/UXReaderFramework.mm @@ -7,6 +7,7 @@ #import "UXReaderFramework.h" #import "UXReaderThumbCache.h" +#import "UXReaderSimulator.h" #import "fpdfview.h" @@ -204,6 +205,18 @@ + (uint64_t)time #pragma mark - UXReaderFramework instance methods +#if TARGET_IPHONE_SIMULATOR +- (instancetype)init +{ + NOT_AVAILABLE_IN_SIMULATOR; + return nil; +} + +- (void)dealloc +{ + NOT_AVAILABLE_IN_SIMULATOR; +} +#else - (instancetype)init { //NSLog(@"%s", __FUNCTION__); @@ -234,6 +247,7 @@ - (void)dealloc FPDF_DestroyLibrary(); } +#endif - (void)dispatch_sync_on_work_queue:(nonnull dispatch_block_t)block { diff --git a/UXReader/UXReader/UXReaderSimulator.h b/UXReader/UXReader/UXReaderSimulator.h new file mode 100644 index 0000000..7801440 --- /dev/null +++ b/UXReader/UXReader/UXReaderSimulator.h @@ -0,0 +1,9 @@ +// +// UXReaderSimulator.h +// UXReader +// +// Created by Stefan Wehr on 07.03.18. +// Copyright © 2018 Julius Oklamcak. All rights reserved. +// + +#define NOT_AVAILABLE_IN_SIMULATOR NSAssert(NO, @"UXReader not available in simulator") From db2913677b7ba5e7e45e493820c396f67d5320dc Mon Sep 17 00:00:00 2001 From: Stefan Wehr Date: Thu, 8 Mar 2018 12:54:35 +0100 Subject: [PATCH 2/3] upgrade project file, fix code signing --- UXReader/UXReader.xcodeproj/project.pbxproj | 26 +++++++++++++++------ 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/UXReader/UXReader.xcodeproj/project.pbxproj b/UXReader/UXReader.xcodeproj/project.pbxproj index 5b96502..042d709 100644 --- a/UXReader/UXReader.xcodeproj/project.pbxproj +++ b/UXReader/UXReader.xcodeproj/project.pbxproj @@ -591,12 +591,11 @@ 454179CD1E672BEB0044248A /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0830; + LastUpgradeCheck = 0900; ORGANIZATIONNAME = "Julius Oklamcak"; TargetAttributes = { 454179D51E672BEC0044248A = { CreatedOnToolsVersion = 8.2.1; - DevelopmentTeam = 93KDX755KN; ProvisioningStyle = Manual; }; }; @@ -723,7 +722,9 @@ CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_DOCUMENTATION_COMMENTS = YES; @@ -731,7 +732,11 @@ 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_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; @@ -758,7 +763,7 @@ GCC_WARN_UNUSED_VARIABLE = YES; IPHONEOS_DEPLOYMENT_TARGET = 9.0; MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = YES; + ONLY_ACTIVE_ARCH = NO; SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; @@ -775,7 +780,9 @@ CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_DOCUMENTATION_COMMENTS = YES; @@ -783,7 +790,11 @@ 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_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; @@ -804,6 +815,7 @@ GCC_WARN_UNUSED_VARIABLE = YES; IPHONEOS_DEPLOYMENT_TARGET = 9.0; MTL_ENABLE_DEBUG_INFO = NO; + ONLY_ACTIVE_ARCH = NO; SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; @@ -816,9 +828,9 @@ isa = XCBuildConfiguration; buildSettings = { CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = 93KDX755KN; + DEVELOPMENT_TEAM = ""; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; @@ -839,9 +851,9 @@ isa = XCBuildConfiguration; buildSettings = { CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = 93KDX755KN; + DEVELOPMENT_TEAM = ""; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; From 8844a591f70867c737ece8512b5f0d664851a524 Mon Sep 17 00:00:00 2001 From: Stefan Wehr Date: Thu, 8 Mar 2018 12:57:20 +0100 Subject: [PATCH 3/3] option for hiding the close button --- UXReader/UXReader/UXReaderMainToolbar.h | 1 + UXReader/UXReader/UXReaderMainToolbar.mm | 8 ++++++++ UXReader/UXReader/UXReaderViewController.h | 3 ++- UXReader/UXReader/UXReaderViewController.mm | 3 ++- 4 files changed, 13 insertions(+), 2 deletions(-) diff --git a/UXReader/UXReader/UXReaderMainToolbar.h b/UXReader/UXReader/UXReaderMainToolbar.h index 839c6b0..da17e4c 100644 --- a/UXReader/UXReader/UXReaderMainToolbar.h +++ b/UXReader/UXReader/UXReaderMainToolbar.h @@ -35,6 +35,7 @@ - (void)stuffButtonWhat:(NSUInteger)index; - (void)setAllowShare:(BOOL)allow; +- (void)setAllowClose:(BOOL)allow; - (void)clearSearchText; - (void)showSearchBusy:(BOOL)show; diff --git a/UXReader/UXReader/UXReaderMainToolbar.mm b/UXReader/UXReader/UXReaderMainToolbar.mm index 736ea86..adf026e 100644 --- a/UXReader/UXReader/UXReaderMainToolbar.mm +++ b/UXReader/UXReader/UXReaderMainToolbar.mm @@ -332,6 +332,14 @@ - (void)setAllowShare:(BOOL)allow [shareButton setHidden:(allow ? NO : YES)]; } +- (void)setAllowClose:(BOOL)allow +{ + //NSLog(@"%s %i", __FUNCTION__, allow); + + [closeButton setHidden:(allow ? NO : YES)]; +} + + - (void)hideAnimated { //NSLog(@"%s", __FUNCTION__); diff --git a/UXReader/UXReader/UXReaderViewController.h b/UXReader/UXReader/UXReaderViewController.h index 6b696f9..5c0611e 100644 --- a/UXReader/UXReader/UXReaderViewController.h +++ b/UXReader/UXReader/UXReaderViewController.h @@ -26,7 +26,8 @@ typedef NS_OPTIONS(NSUInteger, UXReaderPermissions) UXReaderPermissionAllowEmail = (1 << 1), UXReaderPermissionAllowPrint = (1 << 2), UXReaderPermissionAllowCopy = (1 << 3), - UXReaderPermissionAllowSave = (1 << 4) + UXReaderPermissionAllowSave = (1 << 4), + UXReaderPermissionAllowClose = (1 << 5) }; @protocol UXReaderViewControllerDelegate diff --git a/UXReader/UXReader/UXReaderViewController.mm b/UXReader/UXReader/UXReaderViewController.mm index 31381b3..3aabcea 100644 --- a/UXReader/UXReader/UXReaderViewController.mm +++ b/UXReader/UXReader/UXReaderViewController.mm @@ -397,7 +397,8 @@ - (void)addMainToolbar:(nonnull UIView *)view { [view addSubview:mainToolbar]; [mainToolbar setDelegate:self]; // UXReaderMainToolbarDelegate - [mainToolbar setAllowShare:(permissions & UXReaderPermissionAllowShare)]; // Set share button state + [mainToolbar setAllowShare:(permissions & UXReaderPermissionAllowShare)]; // Set share button state + [mainToolbar setAllowClose:(permissions & UXReaderPermissionAllowClose)]; // Set close button state [view addConstraint:[NSLayoutConstraint constraintWithItem:mainToolbar attribute:NSLayoutAttributeLeading relatedBy:NSLayoutRelationEqual toItem:view attribute:NSLayoutAttributeLeading multiplier:1.0 constant:0.0]];