From 713f7f2696cc3f3a73dd14af476bf25c0841bc3e Mon Sep 17 00:00:00 2001 From: Daniel Weck Date: Mon, 20 Oct 2014 11:27:04 +0100 Subject: [PATCH] updated ObjectiveC pagination API to match shared-Javascript lib, previous/next buttons now work in RTL page progression direction. --- Classes/EPubViewController.h | 13 +++-- Classes/EPubViewController.m | 67 ++++++++++++++----------- Resources/en.lproj/Localizable.strings | Bin 2950 -> 2960 bytes Resources/host_app_feedback.js | 4 ++ 4 files changed, 49 insertions(+), 35 deletions(-) diff --git a/Classes/EPubViewController.h b/Classes/EPubViewController.h index 5e41871..36218f3 100644 --- a/Classes/EPubViewController.h +++ b/Classes/EPubViewController.h @@ -43,11 +43,14 @@ { @private UIAlertView *m_alertAddBookmark; @private RDContainer *m_container; - @private int m_currentOpenPageCount; - @private int m_currentPageCount; - @private int m_currentPageIndex; - @private BOOL m_currentPageProgressionIsLTR; - @private int m_currentSpineItemIndex; + + @private BOOL m_currentPageCanGoLeft; + @private BOOL m_currentPageCanGoRight; + @private BOOL m_currentPageProgressionIsLTR; + @private BOOL m_currentPageIsFixedLayout; + @private int m_currentPageSpineItemCount; + @private NSArray* m_currentPageOpenPagesArray; + @private NSString *m_initialCFI; @private BOOL m_moIsPlaying; @private RDNavigationElement *m_navElement; diff --git a/Classes/EPubViewController.m b/Classes/EPubViewController.m index f7f8524..2e82cf0 100644 --- a/Classes/EPubViewController.m +++ b/Classes/EPubViewController.m @@ -378,20 +378,42 @@ - (void)updateToolbar { label.font = [UIFont systemFontOfSize:16]; label.textColor = [UIColor blackColor]; - if (m_currentPageCount == 0) { + BOOL canGoNext = m_currentPageProgressionIsLTR ? m_currentPageCanGoRight : m_currentPageCanGoLeft; + BOOL canGoPrevious = m_currentPageProgressionIsLTR ? m_currentPageCanGoLeft : m_currentPageCanGoRight; + + itemNext.enabled = canGoNext; + itemPrev.enabled = canGoPrevious; + + if (m_currentPageOpenPagesArray == nil || [m_currentPageOpenPagesArray count] <= 0) { label.text = @""; - itemNext.enabled = NO; - itemPrev.enabled = NO; } else { - label.text = LocStr(@"PAGE_X_OF_Y", m_currentPageIndex + 1, m_currentPageCount); - itemNext.enabled = !( - (m_currentSpineItemIndex + 1 == m_package.spineItems.count) && - (m_currentPageIndex + m_currentOpenPageCount + 1 > m_currentPageCount) - ); + NSMutableArray *pageNumbers = [NSMutableArray array]; + + for (NSDictionary *pageDict in m_currentPageOpenPagesArray) { + + NSNumber *spineItemIndex = [pageDict valueForKey:@"spineItemIndex"]; + NSNumber *spineItemPageIndex = [pageDict valueForKey:@"spineItemPageIndex"]; + + int pageIndex = m_currentPageIsFixedLayout ? spineItemIndex.intValue : spineItemPageIndex.intValue; + + [pageNumbers addObject: [NSNumber numberWithInt:pageIndex + 1]]; + } + + NSString* currentPages = [NSString stringWithFormat:@"%@", [pageNumbers componentsJoinedByString:@"-"]]; + + int pageCount = 0; + if ([m_currentPageOpenPagesArray count] > 0) + { + NSDictionary *firstOpenPageDict = [m_currentPageOpenPagesArray objectAtIndex:0]; + NSNumber *number = [firstOpenPageDict valueForKey:@"spineItemPageCount"]; - itemPrev.enabled = !(m_currentSpineItemIndex == 0 && m_currentPageIndex == 0); + pageCount = m_currentPageIsFixedLayout ? m_currentPageSpineItemCount: number.intValue; + } + NSString* totalPages = [NSString stringWithFormat:@"%d", pageCount]; + + label.text = LocStr(@"PAGE_X_OF_Y", [currentPages UTF8String], [totalPages UTF8String], m_currentPageIsFixedLayout?[@"FXL" UTF8String]:[@"reflow" UTF8String]); } [label sizeToFit]; @@ -557,31 +579,16 @@ - (void)viewWillDisappear:(BOOL)animated { NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:0 error:&error]; - NSString *direction = [dict objectForKey:@"pageProgressionDirection"]; + m_currentPageCanGoLeft = ([[dict valueForKey:@"canGoLeft_"] isEqual:[NSNumber numberWithBool:YES]] ? YES : NO); + m_currentPageCanGoRight = ([[dict valueForKey:@"canGoRight_"] isEqual:[NSNumber numberWithBool:YES]] ? YES : NO); - if ([direction isKindOfClass:[NSString class]]) { - m_currentPageProgressionIsLTR = ![direction isEqualToString:@"rtl"]; - } - else { - m_currentPageProgressionIsLTR = YES; - } + m_currentPageProgressionIsLTR = ([[dict valueForKey:@"isRightToLeft"] isEqual:[NSNumber numberWithBool:YES]] ? NO : YES); - m_currentOpenPageCount = 0; + m_currentPageIsFixedLayout = ([[dict valueForKey:@"isFixedLayout"] isEqual:[NSNumber numberWithBool:YES]] ? YES : NO); - for (NSDictionary *pageDict in [dict objectForKey:@"openPages"]) { - m_currentOpenPageCount++; + m_currentPageSpineItemCount = [((NSNumber*)[dict valueForKey:@"spineItemCount"]) intValue]; - if (m_currentOpenPageCount == 1) { - NSNumber *number = [pageDict objectForKey:@"spineItemPageCount"]; - m_currentPageCount = number.intValue; - - number = [pageDict objectForKey:@"spineItemPageIndex"]; - m_currentPageIndex = number.intValue; - - number = [pageDict objectForKey:@"spineItemIndex"]; - m_currentSpineItemIndex = number.intValue; - } - } + m_currentPageOpenPagesArray = (NSArray*)[dict objectForKey:@"openPages"]; m_webView.hidden = NO; [self updateToolbar]; diff --git a/Resources/en.lproj/Localizable.strings b/Resources/en.lproj/Localizable.strings index 6850bd4b9f104ca5d5982ffdbbdd9a841bacff15..68b94f7196f5c46aed7812d05a1b1d0a0c0e95c2 100644 GIT binary patch delta 35 jcmZn@pCG>B9+!AAg91Z7LmH4&WdN}?z_jM%*Ics!nQ90? delta 25 fcmbOr-X^}`9v5#4g91Z7LmH4&Wk{L)m1{NtTt5dH diff --git a/Resources/host_app_feedback.js b/Resources/host_app_feedback.js index 90801e6..f0b20c7 100644 --- a/Resources/host_app_feedback.js +++ b/Resources/host_app_feedback.js @@ -41,6 +41,10 @@ ReadiumSDK.HostAppFeedback = function() { }, this); this.onPaginationChanged = function(pageChangeData) { + + pageChangeData.paginationInfo.canGoLeft_ = pageChangeData.paginationInfo.canGoLeft(); + pageChangeData.paginationInfo.canGoRight_ = pageChangeData.paginationInfo.canGoRight(); + window.location.href = "epubobjc:pageDidChange?q=" + encodeURIComponent(JSON.stringify(pageChangeData.paginationInfo)); };