From: <ho...@us...> - 2010-10-31 10:09:22
|
Revision: 17386 http://bibdesk.svn.sourceforge.net/bibdesk/?rev=17386&view=rev Author: hofman Date: 2010-10-31 10:09:15 +0000 (Sun, 31 Oct 2010) Log Message: ----------- move webview modal dialog to separate files, rename webview delegate method for fail Modified Paths: -------------- trunk/bibdesk/BDSKTextImportController.m trunk/bibdesk/BDSKWebGroup.m trunk/bibdesk/BDSKWebView.h trunk/bibdesk/BDSKWebView.m trunk/bibdesk/Bibdesk.xcodeproj/project.pbxproj Added Paths: ----------- trunk/bibdesk/BDSKWebViewModalDialogController.h trunk/bibdesk/BDSKWebViewModalDialogController.m Modified: trunk/bibdesk/BDSKTextImportController.m =================================================================== --- trunk/bibdesk/BDSKTextImportController.m 2010-10-31 06:37:09 UTC (rev 17385) +++ trunk/bibdesk/BDSKTextImportController.m 2010-10-31 10:09:15 UTC (rev 17386) @@ -1046,7 +1046,7 @@ [self autoDiscoverDataFromFrame:frame]; } -- (void)webView:(WebView *)sender didFailLoadWithError:(NSError *)error forFrame:(WebFrame *)frame { +- (void)webView:(WebView *)sender didFailLoadForFrame:(WebFrame *)frame { [self setLoading:[webView isLoading]]; [backButton setEnabled:[webView canGoBack]]; [forwardButton setEnabled:[webView canGoForward]]; Modified: trunk/bibdesk/BDSKWebGroup.m =================================================================== --- trunk/bibdesk/BDSKWebGroup.m 2010-10-31 06:37:09 UTC (rev 17385) +++ trunk/bibdesk/BDSKWebGroup.m 2010-10-31 10:09:15 UTC (rev 17386) @@ -230,7 +230,7 @@ [self addPublications:newPubs ?: [NSArray array]]; } -- (void)webView:(WebView *)sender didFailLoadWithError:(NSError *)error forFrame:(WebFrame *)frame { +- (void)webView:(WebView *)sender didFailLoadForFrame:(WebFrame *)frame { [self addPublications:nil]; } Modified: trunk/bibdesk/BDSKWebView.h =================================================================== --- trunk/bibdesk/BDSKWebView.h 2010-10-31 06:37:09 UTC (rev 17385) +++ trunk/bibdesk/BDSKWebView.h 2010-10-31 10:09:15 UTC (rev 17386) @@ -85,7 +85,7 @@ - (void)webView:(WebView *)sender didStartLoadForFrame:(WebFrame *)frame; - (void)webView:(WebView *)sender didFinishLoadForFrame:(WebFrame *)frame; -- (void)webView:(WebView *)sender didFailLoadWithError:(NSError *)error forFrame:(WebFrame *)frame; +- (void)webView:(WebView *)sender didFailLoadForFrame:(WebFrame *)frame; - (NSArray *)webView:(WebView *)sender contextMenuItemsForElement:(NSDictionary *)element defaultMenuItems:(NSArray *)defaultMenuItems; @@ -101,22 +101,3 @@ - (void)webView:(WebView *)sender setLoading:(BOOL)loading; @end - -#pragma mark - - -// workaround for loading a URL from a javasecript window.open event http://stackoverflow.com/questions/270458/cocoa-webkit-having-window-open-javascipt-links-opening-in-an-instance-of-safa -@interface BDSKNewWebWindowHandler : NSObject { - WebView *webView; -} -+ (id)sharedHandler; -- (WebView *)webView; -@end - -#pragma mark - - -@interface BDSKWebViewModalDialogController : NSWindowController <BDSKWebViewDelegate> { - BDSKWebView *webView; - BDSKStatusBar *statusBar; -} -- (WebView *)webView; -@end Modified: trunk/bibdesk/BDSKWebView.m =================================================================== --- trunk/bibdesk/BDSKWebView.m 2010-10-31 06:37:09 UTC (rev 17385) +++ trunk/bibdesk/BDSKWebView.m 2010-10-31 10:09:15 UTC (rev 17386) @@ -40,7 +40,7 @@ #import "NSWorkspace_BDSKExtensions.h" #import "BDSKBookmarkController.h" #import "BDSKDownloadManager.h" -#import "BDSKStatusBar.h" +#import "BDSKWebViewModalDialogController.h" #import "NSString_BDSKExtensions.h" @@ -60,6 +60,16 @@ #pragma mark - +// workaround for loading a URL from a javasecript window.open event http://stackoverflow.com/questions/270458/cocoa-webkit-having-window-open-javascipt-links-opening-in-an-instance-of-safa +@interface BDSKNewWebWindowHandler : NSObject { + WebView *webView; +} ++ (id)sharedHandler; +- (WebView *)webView; +@end + +#pragma mark - + @implementation BDSKWebView - (id)initWithFrame:(NSRect)frameRect frameName:(NSString *)frameName groupName:(NSString *)groupName { @@ -205,8 +215,8 @@ } - (void)webView:(WebView *)sender didFailLoadWithError:(NSError *)error forFrame:(WebFrame *)frame{ - if ([delegate respondsToSelector:@selector(webView:didFailLoadWithError:forFrame:)]) - [delegate webView:sender didFailLoadWithError:error forFrame:frame]; + if ([delegate respondsToSelector:@selector(webView:didFailLoadForFrame:)]) + [delegate webView:sender didFailLoadForFrame:frame]; [self webView:sender setLoading:[sender isLoading]]; // !!! logs are here to help diagnose problems that users are reporting @@ -444,95 +454,3 @@ } @end - -#pragma mark - - -@implementation BDSKWebViewModalDialogController - -- (id)init { - NSUInteger mask = NSTitledWindowMask | NSClosableWindowMask | NSMiniaturizableWindowMask | NSResizableWindowMask; - NSWindow *window = [[[NSWindow alloc] initWithContentRect:NSMakeRect(0.0, 0.0, 200.0, 200.0) styleMask:mask backing:NSBackingStoreBuffered defer:YES] autorelease]; - if (self = [self initWithWindow:window]) { - [window setDelegate:self]; - webView = [[BDSKWebView alloc] init]; - [webView setDelegate:self]; - NSView *contentView = [window contentView]; - [webView setFrame:[contentView bounds]]; - [contentView addSubview:webView]; - } - return self; -} - -- (void)dealloc { - [webView setDelegate:nil]; - BDSKDESTROY(webView); - BDSKDESTROY(statusBar); - [super dealloc]; -} - -- (WebView *)webView { - return webView; -} - -- (void)windowWillClose:(NSNotification *)notification { - [NSApp stopModal]; - [self autorelease]; -} - -- (void)webView:(WebView *)sender setTitle:(NSString *)title { - [[self window] setTitle:title]; -} - -- (void)webView:(WebView *)sender setStatusText:(NSString *)text { - [statusBar setStringValue:text ?: @""]; -} - -- (void)webViewClose:(WebView *)sender { - [[self window] close]; -} - -- (void)webViewRunModal:(WebView *)sender { - [self retain]; - // we can't use [NSApp runModalForWindow], because otherwise the webview does not download, and also it won't receive any close message from javascript - // http://www.dejal.com/blog/2007/01/cocoa-topics-case-modal-webview - NSModalSession session = [NSApp beginModalSessionForWindow:[self window]]; - for (;;) { - if (NSRunContinuesResponse != [NSApp runModalSession:session]) break; - // tickle the default run loop to let the webview download or let a close message come through - [[NSRunLoop currentRunLoop] limitDateForMode:NSDefaultRunLoopMode]; - } - [NSApp endModalSession:session]; -} - -- (void)webView:(WebView *)sender setResizable:(BOOL)resizable { - NSWindow *window = [self window]; - [window setShowsResizeIndicator:resizable]; - [[window standardWindowButton:NSWindowZoomButton] setEnabled:resizable]; - if (resizable) { - [window setMinSize:NSMakeSize(100.0, 100.0)]; - [window setMaxSize:[([window screen] ?: [NSScreen mainScreen]) visibleFrame].size]; - } else { - [window setMinSize:[window frame].size]; - [window setMaxSize:[window frame].size]; - } -} - -- (void)webView:(WebView *)sender setFrame:(NSRect)frame { - [[self window] setFrame:frame display:YES]; - if ([[self window] showsResizeIndicator] == NO) { - [[self window] setMinSize:frame.size]; - [[self window] setMaxSize:frame.size]; - } -} - -- (void)webView:(WebView *)sender setStatusBarVisible:(BOOL)visible { - if (visible != [statusBar isVisible]) { - if (visible && statusBar == nil) { - statusBar = [[BDSKStatusBar alloc] initWithFrame:NSMakeRect(0.0, 0.0, NSWidth([webView frame]), 22.0)]; - [statusBar setAutoresizingMask:NSViewWidthSizable | NSViewMaxXMargin]; - } - [statusBar toggleBelowView:webView animate:NO]; - } -} - -@end Added: trunk/bibdesk/BDSKWebViewModalDialogController.h =================================================================== --- trunk/bibdesk/BDSKWebViewModalDialogController.h (rev 0) +++ trunk/bibdesk/BDSKWebViewModalDialogController.h 2010-10-31 10:09:15 UTC (rev 17386) @@ -0,0 +1,49 @@ +// +// BDSKWebViewModalDialogController.h +// Bibdesk +// +// Created by Christiaan Hofman on 10/31/10. +/* + This software is Copyright (c) 2010 + Christiaan Hofman. All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + - Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + - Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + - Neither the name of Christiaan Hofman nor the names of any + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#import <Cocoa/Cocoa.h> +#import "BDSKWebView.h" + +@class BDSKStatusBar; + +@interface BDSKWebViewModalDialogController : NSWindowController <BDSKWebViewDelegate> { + BDSKWebView *webView; + BDSKStatusBar *statusBar; +} +- (BDSKWebView *)webView; +@end Added: trunk/bibdesk/BDSKWebViewModalDialogController.m =================================================================== --- trunk/bibdesk/BDSKWebViewModalDialogController.m (rev 0) +++ trunk/bibdesk/BDSKWebViewModalDialogController.m 2010-10-31 10:09:15 UTC (rev 17386) @@ -0,0 +1,134 @@ +// +// BDSKWebViewModalDialogController.m +// Bibdesk +// +// Created by Christiaan Hofman on 10/31/10. +/* + This software is Copyright (c) 2010 + Christiaan Hofman. All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + - Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + - Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + - Neither the name of Christiaan Hofman nor the names of any + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#import "BDSKWebViewModalDialogController.h" +#import "BDSKWebView.h" +#import "BDSKStatusBar.h" + + +@implementation BDSKWebViewModalDialogController + +- (id)init { + NSUInteger mask = NSTitledWindowMask | NSClosableWindowMask | NSMiniaturizableWindowMask | NSResizableWindowMask; + NSWindow *window = [[[NSWindow alloc] initWithContentRect:NSMakeRect(0.0, 0.0, 200.0, 200.0) styleMask:mask backing:NSBackingStoreBuffered defer:YES] autorelease]; + if (self = [self initWithWindow:window]) { + [window setDelegate:self]; + webView = [[BDSKWebView alloc] init]; + [webView setDelegate:self]; + NSView *contentView = [window contentView]; + [webView setFrame:[contentView bounds]]; + [contentView addSubview:webView]; + } + return self; +} + +- (void)dealloc { + [webView setDelegate:nil]; + BDSKDESTROY(webView); + BDSKDESTROY(statusBar); + [super dealloc]; +} + +- (WebView *)webView { + return webView; +} + +- (void)windowWillClose:(NSNotification *)notification { + [NSApp stopModal]; + [self autorelease]; +} + +#pragma mark BDSKWebViewDelegate protocol + +- (void)webView:(WebView *)sender setTitle:(NSString *)title { + [[self window] setTitle:title]; +} + +- (void)webView:(WebView *)sender setStatusText:(NSString *)text { + [statusBar setStringValue:text ?: @""]; +} + +- (void)webViewClose:(WebView *)sender { + [[self window] close]; +} + +- (void)webViewRunModal:(WebView *)sender { + [self retain]; + // we can't use [NSApp runModalForWindow], because otherwise the webview does not download, and also it won't receive any close message from javascript + // http://www.dejal.com/blog/2007/01/cocoa-topics-case-modal-webview + NSModalSession session = [NSApp beginModalSessionForWindow:[self window]]; + for (;;) { + if (NSRunContinuesResponse != [NSApp runModalSession:session]) break; + // tickle the default run loop to let the webview download or let a close message come through + [[NSRunLoop currentRunLoop] limitDateForMode:NSDefaultRunLoopMode]; + } + [NSApp endModalSession:session]; +} + +- (void)webView:(WebView *)sender setResizable:(BOOL)resizable { + NSWindow *window = [self window]; + [window setShowsResizeIndicator:resizable]; + [[window standardWindowButton:NSWindowZoomButton] setEnabled:resizable]; + if (resizable) { + [window setMinSize:NSMakeSize(100.0, 100.0)]; + [window setMaxSize:[([window screen] ?: [NSScreen mainScreen]) visibleFrame].size]; + } else { + [window setMinSize:[window frame].size]; + [window setMaxSize:[window frame].size]; + } +} + +- (void)webView:(WebView *)sender setFrame:(NSRect)frame { + [[self window] setFrame:frame display:YES]; + if ([[self window] showsResizeIndicator] == NO) { + [[self window] setMinSize:frame.size]; + [[self window] setMaxSize:frame.size]; + } +} + +- (void)webView:(WebView *)sender setStatusBarVisible:(BOOL)visible { + if (visible != [statusBar isVisible]) { + if (visible && statusBar == nil) { + statusBar = [[BDSKStatusBar alloc] initWithFrame:NSMakeRect(0.0, 0.0, NSWidth([webView frame]), 22.0)]; + [statusBar setAutoresizingMask:NSViewWidthSizable | NSViewMaxXMargin]; + } + [statusBar toggleBelowView:webView animate:NO]; + } +} + +@end Modified: trunk/bibdesk/Bibdesk.xcodeproj/project.pbxproj =================================================================== --- trunk/bibdesk/Bibdesk.xcodeproj/project.pbxproj 2010-10-31 06:37:09 UTC (rev 17385) +++ trunk/bibdesk/Bibdesk.xcodeproj/project.pbxproj 2010-10-31 10:09:15 UTC (rev 17386) @@ -76,6 +76,8 @@ CE038E6A0F5F00E8001808EA /* Bookmark.tiff in Resources */ = {isa = PBXBuildFile; fileRef = CE038E690F5F00E8001808EA /* Bookmark.tiff */; }; CE0391910F612ED5001808EA /* sharing.tiff in Resources */ = {isa = PBXBuildFile; fileRef = CE0391900F612ED5001808EA /* sharing.tiff */; }; CE0391F90F6166FB001808EA /* importBadge.tiff in Resources */ = {isa = PBXBuildFile; fileRef = CE0391F80F6166FA001808EA /* importBadge.tiff */; }; + CE03C0CA127D751D00F62F51 /* BDSKWebViewModalDialogController.h in Headers */ = {isa = PBXBuildFile; fileRef = CE03C0C8127D751D00F62F51 /* BDSKWebViewModalDialogController.h */; }; + CE03C0CB127D751D00F62F51 /* BDSKWebViewModalDialogController.m in Sources */ = {isa = PBXBuildFile; fileRef = CE03C0C9127D751D00F62F51 /* BDSKWebViewModalDialogController.m */; }; CE044A4412667EB500CE55C4 /* BDSKDownloadManager.h in Headers */ = {isa = PBXBuildFile; fileRef = CE044A4212667EB500CE55C4 /* BDSKDownloadManager.h */; }; CE044A4512667EB500CE55C4 /* BDSKDownloadManager.m in Sources */ = {isa = PBXBuildFile; fileRef = CE044A4312667EB500CE55C4 /* BDSKDownloadManager.m */; }; CE04583D0FB6FBBF003CAF5D /* Scroller_Divider.tiff in Resources */ = {isa = PBXBuildFile; fileRef = CE04583B0FB6FBBF003CAF5D /* Scroller_Divider.tiff */; }; @@ -859,6 +861,8 @@ CE038E690F5F00E8001808EA /* Bookmark.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = Bookmark.tiff; sourceTree = "<group>"; }; CE0391900F612ED5001808EA /* sharing.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = sharing.tiff; sourceTree = "<group>"; }; CE0391F80F6166FA001808EA /* importBadge.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = importBadge.tiff; sourceTree = "<group>"; }; + CE03C0C8127D751D00F62F51 /* BDSKWebViewModalDialogController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BDSKWebViewModalDialogController.h; sourceTree = "<group>"; }; + CE03C0C9127D751D00F62F51 /* BDSKWebViewModalDialogController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BDSKWebViewModalDialogController.m; sourceTree = "<group>"; }; CE044A4212667EB500CE55C4 /* BDSKDownloadManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BDSKDownloadManager.h; sourceTree = "<group>"; }; CE044A4312667EB500CE55C4 /* BDSKDownloadManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BDSKDownloadManager.m; sourceTree = "<group>"; }; CE04583B0FB6FBBF003CAF5D /* Scroller_Divider.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = Scroller_Divider.tiff; sourceTree = "<group>"; }; @@ -2181,6 +2185,7 @@ CEEFDDFF0B03ED0200668BB0 /* BDSKURLGroupSheetController.m */, CE90BAFB103978D300992D50 /* BDSKURLSheetController.m */, 4575382D0B70170D00C0E49B /* BDSKWebGroupViewController.m */, + CE03C0C9127D751D00F62F51 /* BDSKWebViewModalDialogController.m */, ); name = Controllers; sourceTree = "<group>"; @@ -2759,6 +2764,7 @@ F9E069B40981A03B00AEFBE7 /* BDSKWebOfScienceParser.h */, CE3A254D0B75FF09006B64D3 /* BDSKWebParser.h */, CEF7F42412743BCC00B20881 /* BDSKWebView.h */, + CE03C0C8127D751D00F62F51 /* BDSKWebViewModalDialogController.h */, 6C567DB70F8189F500DE285D /* BDSKZentralblattParser.h */, F98F33C80892D4B700C1427D /* BDSKZoomablePDFView.h */, CE27D9590AF92BFD00419879 /* BDSKZoomableTextView.h */, @@ -2930,6 +2936,7 @@ CEFE21311259E6CB00DAD553 /* BDSKSearchGroupServerManager.h in Headers */, CE044A4412667EB500CE55C4 /* BDSKDownloadManager.h in Headers */, CEF7F42612743BCC00B20881 /* BDSKWebView.h in Headers */, + CE03C0CA127D751D00F62F51 /* BDSKWebViewModalDialogController.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -3765,6 +3772,7 @@ CEFE21321259E6CB00DAD553 /* BDSKSearchGroupServerManager.m in Sources */, CE044A4512667EB500CE55C4 /* BDSKDownloadManager.m in Sources */, CEF7F42712743BCC00B20881 /* BDSKWebView.m in Sources */, + CE03C0CB127D751D00F62F51 /* BDSKWebViewModalDialogController.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |