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

Reply via email to