summaryrefslogtreecommitdiff
path: root/platform/ios/Classes/MuDocumentController.m
diff options
context:
space:
mode:
authorPaul Gardiner <paul.gardiner@artifex.com>2013-11-14 15:24:53 +0000
committerPaul Gardiner <paul.gardiner@artifex.com>2013-11-19 10:18:28 +0000
commit6f532f78076d2bb24a8c6cf47c0f45994fa5b707 (patch)
tree870193262147eba8f35d06f3fd72ffba8369ebee /platform/ios/Classes/MuDocumentController.m
parente4c8dcc641b9cd3c7645b034b6f632e0965a059b (diff)
downloadmupdf-6f532f78076d2bb24a8c6cf47c0f45994fa5b707.tar.xz
iOS: add support for creating markup annotations
Diffstat (limited to 'platform/ios/Classes/MuDocumentController.m')
-rw-r--r--platform/ios/Classes/MuDocumentController.m118
1 files changed, 110 insertions, 8 deletions
diff --git a/platform/ios/Classes/MuDocumentController.m b/platform/ios/Classes/MuDocumentController.m
index 675e9b68..1cf210fb 100644
--- a/platform/ios/Classes/MuDocumentController.m
+++ b/platform/ios/Classes/MuDocumentController.m
@@ -81,6 +81,7 @@ static void flattenOutline(NSMutableArray *titles, NSMutableArray *pages, fz_out
- (void) addMainMenuButtons
{
NSMutableArray *array = [NSMutableArray arrayWithCapacity:3];
+ [array addObject:moreButton];
[array addObject:searchButton];
if (outlineButton)
[array addObject:outlineButton];
@@ -150,11 +151,16 @@ static void flattenOutline(NSMutableArray *titles, NSMutableArray *pages, fz_out
outlineButton = [self resourceBasedButton:@"ic_list" withAction:@selector(onShowOutline:)];
}
linkButton = [self resourceBasedButton:@"ic_link" withAction:@selector(onToggleLinks:)];
- cancelButton = [self resourceBasedButton:@"ic_cancel" withAction:@selector(onCancelSearch:)];
+ cancelButton = [self resourceBasedButton:@"ic_cancel" withAction:@selector(onCancel:)];
searchButton = [self resourceBasedButton:@"ic_magnifying_glass" withAction:@selector(onShowSearch:)];
prevButton = [self resourceBasedButton:@"ic_arrow_left" withAction:@selector(onSearchPrev:)];
nextButton = [self resourceBasedButton:@"ic_arrow_right" withAction:@selector(onSearchNext:)];
reflowButton = [self resourceBasedButton:@"ic_reflow" withAction:@selector(onToggleReflow:)];
+ moreButton = [self resourceBasedButton:@"ic_more" withAction:@selector(onMore:)];
+ highlightButton = [self resourceBasedButton:@"ic_highlight" withAction:@selector(onHighlight:)];
+ underlineButton = [self resourceBasedButton:@"ic_underline" withAction:@selector(onUnderline:)];
+ strikeoutButton = [self resourceBasedButton:@"ic_strike" withAction:@selector(onStrikeout:)];
+ tickButton = [self resourceBasedButton:@"ic_check" withAction:@selector(onTick:)];
searchBar = [[UISearchBar alloc] initWithFrame: CGRectMake(0,0,50,32)];
[searchBar setPlaceholder: @"Search"];
[searchBar setDelegate: self];
@@ -179,12 +185,17 @@ static void flattenOutline(NSMutableArray *titles, NSMutableArray *pages, fz_out
[slider release]; slider = nil;
[sliderWrapper release]; sliderWrapper = nil;
[reflowButton release]; reflowButton = nil;
+ [moreButton release]; moreButton = nil;
[searchBar release]; searchBar = nil;
[outlineButton release]; outlineButton = nil;
[searchButton release]; searchButton = nil;
[cancelButton release]; cancelButton = nil;
[prevButton release]; prevButton = nil;
[nextButton release]; nextButton = nil;
+ [highlightButton release]; highlightButton = nil;
+ [underlineButton release]; underlineButton = nil;
+ [strikeoutButton release]; strikeoutButton = nil;
+ [tickButton release]; tickButton = nil;
[canvas release]; canvas = nil;
[outline release];
@@ -315,6 +326,54 @@ static void flattenOutline(NSMutableArray *titles, NSMutableArray *pages, fz_out
[self scrollViewDidScroll:canvas];
}
+- (void) showAnnotationMenu
+{
+ [[self navigationItem] setRightBarButtonItems:[NSArray arrayWithObjects:strikeoutButton, underlineButton, highlightButton, nil]];
+ [[self navigationItem] setLeftBarButtonItem:cancelButton];
+ barmode = BARMODE_ANNOTATION;
+}
+
+- (void) onMore: (id)sender
+{
+ [self showAnnotationMenu];
+}
+
+- (void) textSelectModeOn
+{
+ [[self navigationItem] setRightBarButtonItems:[NSArray arrayWithObject:tickButton]];
+ for (UIView<MuPageView> *view in [canvas subviews])
+ {
+ if ([view number] == current)
+ [view textSelectModeOn];
+ }
+}
+
+- (void) textSelectModeOff
+{
+ for (UIView<MuPageView> *view in [canvas subviews])
+ {
+ [view textSelectModeOff];
+ }
+}
+
+- (void) onHighlight: (id)sender
+{
+ barmode = BARMODE_HIGHLIGHT;
+ [self textSelectModeOn];
+}
+
+- (void) onUnderline: (id)sender
+{
+ barmode = BARMODE_UNDERLINE;
+ [self textSelectModeOn];
+}
+
+- (void) onStrikeout: (id)sender
+{
+ barmode = BARMODE_STRIKE;
+ [self textSelectModeOn];
+}
+
- (void) onShowSearch: (id)sender
{
[[self navigationItem] setRightBarButtonItems:
@@ -322,16 +381,59 @@ static void flattenOutline(NSMutableArray *titles, NSMutableArray *pages, fz_out
[[self navigationItem] setLeftBarButtonItem: cancelButton];
[[self navigationItem] setTitleView: searchBar];
[searchBar becomeFirstResponder];
+ barmode = BARMODE_SEARCH;
}
-- (void) onCancelSearch: (id)sender
+- (void) onTick: (id)sender
{
- cancelSearch = YES;
- [searchBar resignFirstResponder];
- [[self navigationItem] setTitleView: nil];
- [self addMainMenuButtons];
- [[self navigationItem] setLeftBarButtonItem: nil];
- [self resetSearch];
+ int type;
+ switch (barmode)
+ {
+ case BARMODE_HIGHLIGHT:
+ type = FZ_ANNOT_HIGHLIGHT;
+ break;
+
+ case BARMODE_UNDERLINE:
+ type = FZ_ANNOT_UNDERLINE;
+ break;
+
+ case BARMODE_STRIKE:
+ type = FZ_ANNOT_STRIKEOUT;
+ break;
+ }
+
+ for (UIView<MuPageView> *view in [canvas subviews])
+ {
+ if ([view number] == current)
+ [view saveMarkup:type];
+ }
+
+ [self showAnnotationMenu];
+}
+
+- (void) onCancel: (id)sender
+{
+ switch (barmode)
+ {
+ case BARMODE_SEARCH:
+ cancelSearch = YES;
+ [searchBar resignFirstResponder];
+ [self resetSearch];
+ /* fallthrough */
+ case BARMODE_ANNOTATION:
+ [[self navigationItem] setTitleView: nil];
+ [self addMainMenuButtons];
+ [[self navigationItem] setLeftBarButtonItem: nil];
+ barmode = BARMODE_MAIN;
+ break;
+
+ case BARMODE_HIGHLIGHT:
+ case BARMODE_UNDERLINE:
+ case BARMODE_STRIKE:
+ [self showAnnotationMenu];
+ [self textSelectModeOff];
+ break;
+ }
}
- (void) resetSearch