Revision: 7734
http://skim-app.svn.sourceforge.net/skim-app/?rev=7734&view=rev
Author: hofman
Date: 2012-10-19 11:15:06 +0000 (Fri, 19 Oct 2012)
Log Message:
-----------
Use handler block instead of modal delegate callback for sheets
Modified Paths:
--------------
trunk/NSDocument_SKExtensions.m
trunk/NSWindowController_SKExtensions.h
trunk/NSWindowController_SKExtensions.m
trunk/SKBookmarkSheetController.m
trunk/SKMainDocument.m
trunk/SKMainToolbarController.m
trunk/SKMainWindowController_Actions.m
trunk/SKNoteTypeSheetController.m
trunk/SKProgressController.m
Modified: trunk/NSDocument_SKExtensions.m
===================================================================
--- trunk/NSDocument_SKExtensions.m 2012-10-19 10:08:07 UTC (rev 7733)
+++ trunk/NSDocument_SKExtensions.m 2012-10-19 11:15:06 UTC (rev 7734)
@@ -89,47 +89,43 @@
enum { SKAddBookmarkTypeBookmark, SKAddBookmarkTypeSetup,
SKAddBookmarkTypeSession };
-- (void)bookmarkSheetDidEnd:(SKBookmarkSheetController *)controller
returnCode:(NSInteger)returnCode contextInfo:(void *)contextInfo {
- if (returnCode == NSAlertDefaultReturn) {
- NSString *label = [controller stringValue];
- SKBookmark *folder = [controller selectedFolder] ?:
[[SKBookmarkController sharedBookmarkController] bookmarkRoot];
- SKBookmark *bookmark = nil;
- switch ((NSInteger)contextInfo) {
- case SKAddBookmarkTypeBookmark:
- {
- NSString *path = [[self fileURL] path];
- PDFPage *page = [self currentPage];
- NSUInteger pageIndex = page ? [page pageIndex] : NSNotFound;
- bookmark = [SKBookmark bookmarkWithPath:path
pageIndex:pageIndex label:label];
- break;
- }
- case SKAddBookmarkTypeSetup:
- {
- NSDictionary *setup = [self currentDocumentSetup];
- bookmark = [SKBookmark bookmarkWithSetup:setup label:label];
- break;
- }
- case SKAddBookmarkTypeSession:
- {
- NSArray *setups = [[NSApp orderedDocuments]
valueForKey:@"currentDocumentSetup"];
- bookmark = [SKBookmark bookmarkSessionWithSetups:setups
label:label];
- break;
- }
- default:
- break;
- }
- if (bookmark)
- [[folder mutableArrayValueForKey:@"children"] addObject:bookmark];
- }
-}
-
- (IBAction)addBookmark:(id)sender {
+ NSInteger addBookmarkType = [sender tag];
SKBookmarkSheetController *bookmarkSheetController =
[[[SKBookmarkSheetController alloc] init] autorelease];
[bookmarkSheetController setStringValue:[self displayName]];
- [bookmarkSheetController beginSheetModalForWindow:[self windowForSheet]
- modalDelegate:self
-
didEndSelector:@selector(bookmarkSheetDidEnd:returnCode:contextInfo:)
- contextInfo:(void *)[sender tag]];
+ [bookmarkSheetController beginSheetModalForWindow:[self windowForSheet]
completionHandler:^(NSInteger result) {
+ if (result == NSAlertDefaultReturn) {
+ NSString *label = [bookmarkSheetController stringValue];
+ SKBookmark *folder = [bookmarkSheetController selectedFolder]
?: [[SKBookmarkController sharedBookmarkController] bookmarkRoot];
+ SKBookmark *bookmark = nil;
+ switch (addBookmarkType) {
+ case SKAddBookmarkTypeBookmark:
+ {
+ NSString *path = [[self fileURL] path];
+ PDFPage *page = [self currentPage];
+ NSUInteger pageIndex = page ? [page pageIndex] :
NSNotFound;
+ bookmark = [SKBookmark bookmarkWithPath:path
pageIndex:pageIndex label:label];
+ break;
+ }
+ case SKAddBookmarkTypeSetup:
+ {
+ NSDictionary *setup = [self currentDocumentSetup];
+ bookmark = [SKBookmark bookmarkWithSetup:setup
label:label];
+ break;
+ }
+ case SKAddBookmarkTypeSession:
+ {
+ NSArray *setups = [[NSApp orderedDocuments]
valueForKey:@"currentDocumentSetup"];
+ bookmark = [SKBookmark
bookmarkSessionWithSetups:setups label:label];
+ break;
+ }
+ default:
+ break;
+ }
+ if (bookmark)
+ [[folder mutableArrayValueForKey:@"children"]
addObject:bookmark];
+ }
+ }];
}
#pragma mark PDF Document
Modified: trunk/NSWindowController_SKExtensions.h
===================================================================
--- trunk/NSWindowController_SKExtensions.h 2012-10-19 10:08:07 UTC (rev
7733)
+++ trunk/NSWindowController_SKExtensions.h 2012-10-19 11:15:06 UTC (rev
7734)
@@ -46,7 +46,7 @@
- (BOOL)isNoteWindowController;
- (void)beginSheetModalForWindow:(NSWindow *)window;
-- (void)beginSheetModalForWindow:(NSWindow *)window modalDelegate:(id)delegate
didEndSelector:(SEL)didEndSelector contextInfo:(void *)contextInfo;
+- (void)beginSheetModalForWindow:(NSWindow *)window completionHandler:(void
(^)(NSInteger result))handler;
- (IBAction)dismissSheet:(id)sender;
Modified: trunk/NSWindowController_SKExtensions.m
===================================================================
--- trunk/NSWindowController_SKExtensions.m 2012-10-19 10:08:07 UTC (rev
7733)
+++ trunk/NSWindowController_SKExtensions.m 2012-10-19 11:15:06 UTC (rev
7734)
@@ -68,24 +68,18 @@
- (BOOL)isNoteWindowController { return NO; }
- (void)didEndSheet:(NSWindow *)sheet returnCode:(NSInteger)returnCode
contextInfo:(void *)contextInfo {
- NSInvocation *invocation = [(NSInvocation *)contextInfo autorelease];
- if (invocation) {
- [invocation setArgument:&returnCode atIndex:3];
- [invocation invoke];
+ if (contextInfo != NULL) {
+ void (^handler)(NSInteger) = (void(^)(NSInteger))contextInfo;
+ handler(returnCode);
+ Block_release(handler);
}
}
- (void)beginSheetModalForWindow:(NSWindow *)window {
- [self beginSheetModalForWindow:window modalDelegate:nil
didEndSelector:NULL contextInfo:NULL];
+ [self beginSheetModalForWindow:window completionHandler:NULL];
}
-- (void)beginSheetModalForWindow:(NSWindow *)window modalDelegate:(id)delegate
didEndSelector:(SEL)didEndSelector contextInfo:(void *)contextInfo {
- NSInvocation *invocation = nil;
- if (delegate != nil && didEndSelector != NULL) {
- invocation = [NSInvocation invocationWithTarget:delegate
selector:didEndSelector];
- [invocation setArgument:&self atIndex:2];
- [invocation setArgument:&contextInfo atIndex:4];
- }
+- (void)beginSheetModalForWindow:(NSWindow *)window completionHandler:(void
(^)(NSInteger result))handler {
[self retain]; // make sure we stay around long enough
@@ -93,7 +87,7 @@
modalForWindow:window
modalDelegate:self
didEndSelector:@selector(didEndSheet:returnCode:contextInfo:)
- contextInfo:[invocation retain]];
+ contextInfo:handler ? Block_copy(handler) : NULL];
}
- (IBAction)dismissSheet:(id)sender {
Modified: trunk/SKBookmarkSheetController.m
===================================================================
--- trunk/SKBookmarkSheetController.m 2012-10-19 10:08:07 UTC (rev 7733)
+++ trunk/SKBookmarkSheetController.m 2012-10-19 11:15:06 UTC (rev 7734)
@@ -68,7 +68,7 @@
}
}
-- (void)beginSheetModalForWindow:(NSWindow *)window modalDelegate:(id)delegate
didEndSelector:(SEL)didEndSelector contextInfo:(void *)contextInfo {
+- (void)beginSheetModalForWindow:(NSWindow *)window completionHandler:(void
(^)(NSInteger result))handler {
SKBookmarkController *bookmarkController = [SKBookmarkController
sharedBookmarkController];
SKBookmark *root = [bookmarkController bookmarkRoot];
[self window];
@@ -76,7 +76,7 @@
[self addMenuItemsForBookmarks:[NSArray arrayWithObjects:root, nil]
level:0 toMenu:[folderPopUp menu]];
[folderPopUp selectItemAtIndex:0];
- [super beginSheetModalForWindow:window modalDelegate:delegate
didEndSelector:didEndSelector contextInfo:contextInfo];
+ [super beginSheetModalForWindow:window completionHandler:handler];
}
- (SKBookmark *)selectedFolder {
Modified: trunk/SKMainDocument.m
===================================================================
--- trunk/SKMainDocument.m 2012-10-19 10:08:07 UTC (rev 7733)
+++ trunk/SKMainDocument.m 2012-10-19 11:15:06 UTC (rev 7734)
@@ -1055,22 +1055,21 @@
[[self progressController] dismissSheet:nil];
}
-- (void)convertNotesPasswordSheetDidEnd:(SKTextFieldSheetController
*)controller returnCode:(NSInteger)returnCode contextInfo:(void *)contextInfo {
- PDFDocument *pdfDocWithoutNotes = (PDFDocument *)contextInfo;
+- (void)beginConvertNotesPasswordSheetForPDFDocument:(PDFDocument *)pdfDoc {
+ SKTextFieldSheetController *passwordSheetController =
[[[SKTextFieldSheetController alloc] initWithWindowNibName:@"PasswordSheet"]
autorelease];
- if (returnCode == NSCancelButton) {
- [pdfDocWithoutNotes release];
- } else {
- [[controller window] orderOut:nil];
-
- if (pdfDocWithoutNotes && [pdfDocWithoutNotes allowsPrinting] == NO &&
- ([pdfDocWithoutNotes unlockWithPassword:[controller stringValue]]
== NO || [pdfDocWithoutNotes allowsPrinting] == NO)) {
- SKTextFieldSheetController *passwordSheetController =
[[[SKTextFieldSheetController alloc] initWithWindowNibName:@"PasswordSheet"]
autorelease];
- [passwordSheetController beginSheetModalForWindow:[[self
mainWindowController] window] modalDelegate:self didEndSelector:_cmd
contextInfo:pdfDocWithoutNotes];
- } else {
- [self convertNotesUsingPDFDocument:[pdfDocWithoutNotes
autorelease]];
- }
- }
+ [passwordSheetController beginSheetModalForWindow:[[self
mainWindowController] window] completionHandler:^(NSInteger result) {
+ if (result == NSOKButton) {
+ [[passwordSheetController window] orderOut:nil];
+
+ if (pdfDoc && [pdfDoc allowsPrinting] == NO &&
+ ([pdfDoc unlockWithPassword:[passwordSheetController
stringValue]] == NO || [pdfDoc allowsPrinting] == NO)) {
+ [self beginConvertNotesPasswordSheetForPDFDocument:pdfDoc];
+ } else {
+ [self convertNotesUsingPDFDocument:[pdfDoc autorelease]];
+ }
+ }
+ }];
}
- (void)convertNotesSheetDidEnd:(NSAlert *)alert
returnCode:(NSInteger)returnCode contextInfo:(void *)contextInfo {
@@ -1083,20 +1082,13 @@
[[alert window] orderOut:nil];
if ([[self pdfDocument] allowsPrinting] == NO) {
- pdfDocWithoutNotes = [[PDFDocument alloc] initWithData:pdfData];
+ pdfDocWithoutNotes = [[[PDFDocument alloc] initWithData:pdfData]
autorelease];
if ([self tryToUnlockDocument:pdfDocWithoutNotes] == NO ||
[pdfDocWithoutNotes allowsPrinting] == NO) {
-
- SKTextFieldSheetController *passwordSheetController =
[[[SKTextFieldSheetController alloc] initWithWindowNibName:@"PasswordSheet"]
autorelease];
-
- [passwordSheetController beginSheetModalForWindow:[[self
mainWindowController] window]
- modalDelegate:self
-
didEndSelector:@selector(convertNotesPasswordSheetDidEnd:returnCode:contextInfo:)
- contextInfo:pdfDocWithoutNotes];
-
+ [self
beginConvertNotesPasswordSheetForPDFDocument:pdfDocWithoutNotes];
return;
}
}
- [self convertNotesUsingPDFDocument:[pdfDocWithoutNotes autorelease]];
+ [self convertNotesUsingPDFDocument:pdfDocWithoutNotes];
}
- (BOOL)hasConvertibleAnnotations {
Modified: trunk/SKMainToolbarController.m
===================================================================
--- trunk/SKMainToolbarController.m 2012-10-19 10:08:07 UTC (rev 7733)
+++ trunk/SKMainToolbarController.m 2012-10-19 11:15:06 UTC (rev 7734)
@@ -883,20 +883,15 @@
}
}
-- (void)scaleSheetDidEnd:(SKTextFieldSheetController *)controller
returnCode:(NSInteger)returnCode contextInfo:(void *)contextInfo {
- if (returnCode == NSOKButton)
- [mainController.pdfView setScaleFactor:[[controller textField]
integerValue]];
-}
-
- (IBAction)chooseScale:(id)sender {
SKTextFieldSheetController *scaleSheetController =
[[[SKTextFieldSheetController alloc] initWithWindowNibName:@"ScaleSheet"]
autorelease];
[[scaleSheetController textField] setIntegerValue:[mainController.pdfView
scaleFactor]];
- [scaleSheetController beginSheetModalForWindow: [mainController window]
- modalDelegate: self
- didEndSelector: @selector(scaleSheetDidEnd:returnCode:contextInfo:)
- contextInfo: nil];
+ [scaleSheetController beginSheetModalForWindow:[mainController window]
completionHandler:^(NSInteger result) {
+ if (result == NSOKButton)
+ [mainController.pdfView setScaleFactor:[[scaleSheetController
textField] integerValue]];
+ }];
}
- (IBAction)zoomActualPhysical:(id)sender {
Modified: trunk/SKMainWindowController_Actions.m
===================================================================
--- trunk/SKMainWindowController_Actions.m 2012-10-19 10:08:07 UTC (rev
7733)
+++ trunk/SKMainWindowController_Actions.m 2012-10-19 11:15:06 UTC (rev
7734)
@@ -333,10 +333,10 @@
[(NSComboBox *)[pageSheetController textField]
addItemsWithObjectValues:pageLabels];
[pageSheetController setStringValue:[self pageLabel]];
- [pageSheetController beginSheetModalForWindow: [self window]
- modalDelegate: self
- didEndSelector: @selector(pageSheetDidEnd:returnCode:contextInfo:)
- contextInfo: nil];
+ [pageSheetController beginSheetModalForWindow:[self window]
completionHandler:^(NSInteger result) {
+ if (result == NSOKButton)
+ [self setPageLabel:[pageSheetController stringValue]];
+ }];
}
- (IBAction)doGoBack:(id)sender {
@@ -802,20 +802,15 @@
[[self pdfView] goToRect:[page boundsForBox:box] onPage:page];
}
-- (void)passwordSheetDidEnd:(SKTextFieldSheetController *)controller
returnCode:(NSInteger)returnCode contextInfo:(void *)contextInfo {
- if (returnCode == NSOKButton) {
- [[controller window] orderOut:nil];
- [[pdfView document] unlockWithPassword:[controller stringValue]];
- }
-}
-
- (IBAction)password:(id)sender {
SKTextFieldSheetController *passwordSheetController =
[[[SKTextFieldSheetController alloc] initWithWindowNibName:@"PasswordSheet"]
autorelease];
- [passwordSheetController beginSheetModalForWindow: [self window]
- modalDelegate:self
- didEndSelector:@selector(passwordSheetDidEnd:returnCode:contextInfo:)
- contextInfo:NULL];
+ [passwordSheetController beginSheetModalForWindow:[self window]
completionHandler:^(NSInteger result) {
+ if (result == NSOKButton) {
+ [[passwordSheetController window] orderOut:nil];
+ [[pdfView document]
unlockWithPassword:[passwordSheetController stringValue]];
+ }
+ }];
}
- (IBAction)toggleReadingBar:(id)sender {
@@ -829,18 +824,12 @@
[[NSUserDefaults standardUserDefaults] setObject:[self
currentPDFSettings] forKey:SKDefaultPDFDisplaySettingsKey];
}
-- (void)presentationSheetDidEnd:(SKPresentationOptionsSheetController
*)controller returnCode:(NSInteger)returnCode contextInfo:(void *)contextInfo {
- [presentationSheetController release];
- presentationSheetController = nil;
-}
-
- (IBAction)chooseTransition:(id)sender {
presentationSheetController = [[SKPresentationOptionsSheetController
alloc] initForController:self];
- [presentationSheetController beginSheetModalForWindow: [self window]
- modalDelegate: self
- didEndSelector:
@selector(presentationSheetDidEnd:returnCode:contextInfo:)
- contextInfo: NULL];
+ [presentationSheetController beginSheetModalForWindow:[self window]
completionHandler:^(NSInteger result) {
+ SKDESTROY(presentationSheetController);
+ }];
}
- (IBAction)toggleCaseInsensitiveSearch:(id)sender {
Modified: trunk/SKNoteTypeSheetController.m
===================================================================
--- trunk/SKNoteTypeSheetController.m 2012-10-19 10:08:07 UTC (rev 7733)
+++ trunk/SKNoteTypeSheetController.m 2012-10-19 11:15:06 UTC (rev 7734)
@@ -161,15 +161,6 @@
[delegate noteTypeSheetControllerNoteTypesDidChange:self];
}
-- (void)noteTypeSheetDidEnd:(NSWindow *)sheet returnCode:(NSInteger)returnCode
contextInfo:(void *)contextInfo {
- if (returnCode == NSOKButton) {
- NSUInteger i;
- for (i = 0; i < NOTETYPES_COUNT; i++)
- [[noteTypeMenu itemAtIndex:i] setState:[(NSCell *)[matrix
cellWithTag:i] state]];
- [delegate noteTypeSheetControllerNoteTypesDidChange:self];
- }
-}
-
- (void)selectNoteTypes:(id)sender {
[self window];
@@ -177,10 +168,14 @@
for (i = 0; i < NOTETYPES_COUNT; i++)
[[matrix cellWithTag:i] setState:[[noteTypeMenu itemAtIndex:i] state]];
- [self beginSheetModalForWindow:[delegate
windowForNoteTypeSheetController:self]
- modalDelegate:self
- didEndSelector:@selector(noteTypeSheetDidEnd:returnCode:contextInfo:)
- contextInfo:NULL];
+ [self beginSheetModalForWindow:[delegate
windowForNoteTypeSheetController:self] completionHandler:^(NSInteger result) {
+ if (result == NSOKButton) {
+ NSUInteger i;
+ for (i = 0; i < NOTETYPES_COUNT; i++)
+ [[noteTypeMenu itemAtIndex:i] setState:[(NSCell *)[matrix
cellWithTag:i] state]];
+ [delegate noteTypeSheetControllerNoteTypesDidChange:self];
+ }
+ }];
}
@end
Modified: trunk/SKProgressController.m
===================================================================
--- trunk/SKProgressController.m 2012-10-19 10:08:07 UTC (rev 7733)
+++ trunk/SKProgressController.m 2012-10-19 11:15:06 UTC (rev 7734)
@@ -107,10 +107,10 @@
[[self progressBar] displayIfNeeded];
}
-- (void)beginSheetModalForWindow:(NSWindow *)window modalDelegate:(id)delegate
didEndSelector:(SEL)didEndSelector contextInfo:(void *)contextInfo {
+- (void)beginSheetModalForWindow:(NSWindow *)window completionHandler:(void
(^)(NSInteger result))handler {
[[self progressBar] startAnimation:self];
[(SKApplication *)NSApp setUserAttentionDisabled:YES];
- [super beginSheetModalForWindow:window modalDelegate:delegate
didEndSelector:didEndSelector contextInfo:contextInfo];
+ [super beginSheetModalForWindow:window completionHandler:handler];
[(SKApplication *)NSApp setUserAttentionDisabled:NO];
}
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
------------------------------------------------------------------------------
Everyone hates slow websites. So do we.
Make your web apps faster with AppDynamics
Download AppDynamics Lite for free today:
http://p.sf.net/sfu/appdyn_sfd2d_oct
_______________________________________________
Skim-app-commit mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/skim-app-commit