From: <ho...@us...> - 2006-07-23 16:21:39
|
Revision: 7106 Author: hofman Date: 2006-07-23 09:21:31 -0700 (Sun, 23 Jul 2006) ViewCVS: http://svn.sourceforge.net/bibdesk/?rev=7106&view=rev Log Message: ----------- Initial commit of new files for a sheet controller object, implementing generic sheet management methods. Modified Paths: -------------- trunk/bibdesk/Bibdesk.xcodeproj/project.pbxproj Added Paths: ----------- trunk/bibdesk/BDSKSheetController.h trunk/bibdesk/BDSKSheetController.m Added: trunk/bibdesk/BDSKSheetController.h =================================================================== --- trunk/bibdesk/BDSKSheetController.h (rev 0) +++ trunk/bibdesk/BDSKSheetController.h 2006-07-23 16:21:31 UTC (rev 7106) @@ -0,0 +1,63 @@ +// +// BDSKSheetController.h +// Bibdesk +// +// Created by Christiaan Hofman on 7/23/06. +/* + This software is Copyright (c) 2005,2006 + 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> + + +@interface BDSKSheetController : NSWindowController { + BOOL runAppModal; + id theModalDelegate; + SEL theDidEndSelector; + SEL theDidDismissSelector; + void *theContextInfo; +} + +- (int)runModal; +- (void)beginSheetModalForWindow:(NSWindow *)window; +- (void)beginSheetModalForWindow:(NSWindow *)window modalDelegate:(id)delegate didEndSelector:(SEL)didEndSelector contextInfo:(void *)contextInfo; +- (void)beginSheetModalForWindow:(NSWindow *)window modalDelegate:(id)delegate didEndSelector:(SEL)didEndSelector didDismissSelector:(SEL)didDismissSelector contextInfo:(void *)contextInfo; +- (int)runSheetModalForWindow:(NSWindow *)window; +- (int)runSheetModalForWindow:(NSWindow *)window modalDelegate:(id)delegate didEndSelector:(SEL)didEndSelector contextInfo:(void *)contextInfo; +- (int)runSheetModalForWindow:(NSWindow *)window modalDelegate:(id)delegate didEndSelector:(SEL)didEndSelector didDismissSelector:(SEL)didDismissSelector contextInfo:(void *)contextInfo; + +- (void)prepare; +- (IBAction)dismiss:(id)sender; +- (void)didEndSheet:(NSWindow *)sheet returnCode:(int)returnCode contextInfo:(void *)contextInfo; +- (void)endSheetWithReturnCode:(int)returnCode; + +@end Added: trunk/bibdesk/BDSKSheetController.m =================================================================== --- trunk/bibdesk/BDSKSheetController.m (rev 0) +++ trunk/bibdesk/BDSKSheetController.m 2006-07-23 16:21:31 UTC (rev 7106) @@ -0,0 +1,159 @@ +// +// BDSKSheetController.m +// Bibdesk +// +// Created by Christiaan Hofman on 7/23/06. +/* + This software is Copyright (c) 2005,2006 + 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 "BDSKSheetController.h" + + +@implementation BDSKSheetController + +#pragma mark Run modal dialog + +- (int)runModal { + [self prepare]; + + runAppModal = YES; + + [[self window] makeKeyAndOrderFront:self]; + int returnCode = [NSApp runModalForWindow:[self window]]; + [[self window] orderOut:self]; + + return returnCode; +} + +#pragma mark Begin/run modal sheet + +- (void)beginSheetModalForWindow:(NSWindow *)window { + [self beginSheetModalForWindow:window modalDelegate:nil didEndSelector:NULL didDismissSelector:NULL contextInfo:NULL]; +} + +- (void)beginSheetModalForWindow:(NSWindow *)window modalDelegate:(id)delegate didEndSelector:(SEL)didEndSelector contextInfo:(void *)contextInfo { + [self beginSheetModalForWindow:window modalDelegate:delegate didEndSelector:didEndSelector didDismissSelector:NULL contextInfo:contextInfo]; +} + +- (void)beginSheetModalForWindow:(NSWindow *)window modalDelegate:(id)delegate didEndSelector:(SEL)didEndSelector didDismissSelector:(SEL)didDismissSelector contextInfo:(void *)contextInfo { + [self prepare]; + + runAppModal = NO; + theModalDelegate = delegate; + theDidEndSelector = didEndSelector; + theDidDismissSelector = didDismissSelector; + theContextInfo = contextInfo; + + [self retain]; // make sure we stay around long enough + + [NSApp beginSheet:[self window] + modalForWindow:window + modalDelegate:self + didEndSelector:@selector(didEndSheet:returnCode:contextInfo:) + contextInfo:NULL]; +} + +- (int)runSheetModalForWindow:(NSWindow *)window { + return [self runSheetModalForWindow:window modalDelegate:nil didEndSelector:NULL didDismissSelector:NULL contextInfo:NULL]; +} + +- (int)runSheetModalForWindow:(NSWindow *)window modalDelegate:(id)delegate didEndSelector:(SEL)didEndSelector contextInfo:(void *)contextInfo { + return [self runSheetModalForWindow:window modalDelegate:delegate didEndSelector:didEndSelector didDismissSelector:NULL contextInfo:contextInfo]; +} + +- (int)runSheetModalForWindow:(NSWindow *)window modalDelegate:(id)delegate didEndSelector:(SEL)didEndSelector didDismissSelector:(SEL)didDismissSelector contextInfo:(void *)contextInfo { + [self prepare]; + + runAppModal = YES; + theModalDelegate = delegate; + theDidEndSelector = didEndSelector; + theDidDismissSelector = didDismissSelector; + theContextInfo = contextInfo; + + [NSApp beginSheet:[self window] + modalForWindow:window + modalDelegate:self + didEndSelector:@selector(didEndAlert:returnCode:contextInfo:) + contextInfo:NULL]; + int returnCode = [NSApp runModalForWindow:[self window]]; + [self endSheetWithReturnCode:returnCode]; + return returnCode; +} + +#pragma mark Prepare, dismiss and end the sheet + +- (void)prepare {} + +- (IBAction)dismiss:(id)sender { + int returnCode = [sender tag]; + if (runAppModal) { + [NSApp stopModalWithCode:returnCode]; + } else { + [self endSheetWithReturnCode:returnCode]; + [self release]; + } +} + +- (void)didEndSheet:(NSWindow *)sheet returnCode:(int)returnCode contextInfo:(void *)contextInfo { + if(theModalDelegate != nil && theDidEndSelector != NULL){ + NSMethodSignature *signature = [theModalDelegate methodSignatureForSelector:theDidEndSelector]; + NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:signature]; + [invocation setSelector:theDidEndSelector]; + [invocation setArgument:&self atIndex:2]; + [invocation setArgument:&returnCode atIndex:3]; + [invocation setArgument:&theContextInfo atIndex:4]; + [invocation invokeWithTarget:theModalDelegate]; + } +} + +- (void)endSheetWithReturnCode:(int)returnCode { + [NSApp endSheet:[self window] returnCode:returnCode]; + [[self window] orderOut:self]; + + if(theModalDelegate != nil && theDidDismissSelector != NULL){ + NSMethodSignature *signature = [theModalDelegate methodSignatureForSelector:theDidDismissSelector]; + NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:signature]; + [invocation setSelector:theDidDismissSelector]; + [invocation setArgument:&self atIndex:2]; + [invocation setArgument:&returnCode atIndex:3]; + [invocation setArgument:&theContextInfo atIndex:4]; + [invocation invokeWithTarget:theModalDelegate]; + } + + theModalDelegate = nil; + theDidEndSelector = NULL; + theDidDismissSelector = NULL; + theContextInfo = NULL; +} + +@end Modified: trunk/bibdesk/Bibdesk.xcodeproj/project.pbxproj =================================================================== --- trunk/bibdesk/Bibdesk.xcodeproj/project.pbxproj 2006-07-23 16:18:03 UTC (rev 7105) +++ trunk/bibdesk/Bibdesk.xcodeproj/project.pbxproj 2006-07-23 16:21:31 UTC (rev 7106) @@ -281,6 +281,8 @@ CE9F85410956A2C50073FCAD /* BDSKFieldEditor.m in Sources */ = {isa = PBXBuildFile; fileRef = CE9F853F0956A2C50073FCAD /* BDSKFieldEditor.m */; }; CEAE613E097FF60A000B618C /* BDSKJSTORParser.h in Headers */ = {isa = PBXBuildFile; fileRef = CEAE613C097FF60A000B618C /* BDSKJSTORParser.h */; }; CEAE613F097FF60A000B618C /* BDSKJSTORParser.m in Sources */ = {isa = PBXBuildFile; fileRef = CEAE613D097FF60A000B618C /* BDSKJSTORParser.m */; }; + CEBA3F470A73CCAF00588BB7 /* BDSKSheetController.h in Headers */ = {isa = PBXBuildFile; fileRef = CEBA3F450A73CCAF00588BB7 /* BDSKSheetController.h */; }; + CEBA3F480A73CCAF00588BB7 /* BDSKSheetController.m in Sources */ = {isa = PBXBuildFile; fileRef = CEBA3F460A73CCAF00588BB7 /* BDSKSheetController.m */; }; CEBB8D8809C8B0D90074C79E /* Font.tiff in Resources */ = {isa = PBXBuildFile; fileRef = CEBB8D8709C8B0D90074C79E /* Font.tiff */; }; CED65AB60906BCC6003EED90 /* BDSKScriptHook.h in Headers */ = {isa = PBXBuildFile; fileRef = CED65AB20906BCC6003EED90 /* BDSKScriptHook.h */; }; CED65AB70906BCC6003EED90 /* BDSKScriptHook.m in Sources */ = {isa = PBXBuildFile; fileRef = CED65AB30906BCC6003EED90 /* BDSKScriptHook.m */; }; @@ -1100,6 +1102,8 @@ CEAE613D097FF60A000B618C /* BDSKJSTORParser.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = BDSKJSTORParser.m; sourceTree = "<group>"; }; CEB772E80A34529D00B8A299 /* NSAttributedString_BDSKExtensions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NSAttributedString_BDSKExtensions.h; sourceTree = "<group>"; }; CEB772E90A34529D00B8A299 /* NSAttributedString_BDSKExtensions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NSAttributedString_BDSKExtensions.m; sourceTree = "<group>"; }; + CEBA3F450A73CCAF00588BB7 /* BDSKSheetController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BDSKSheetController.h; sourceTree = "<group>"; }; + CEBA3F460A73CCAF00588BB7 /* BDSKSheetController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BDSKSheetController.m; sourceTree = "<group>"; }; CEBB8D8709C8B0D90074C79E /* Font.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; name = Font.tiff; path = Images/Font.tiff; sourceTree = "<group>"; }; CED65AB20906BCC6003EED90 /* BDSKScriptHook.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = BDSKScriptHook.h; sourceTree = "<group>"; }; CED65AB30906BCC6003EED90 /* BDSKScriptHook.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = BDSKScriptHook.m; sourceTree = "<group>"; }; @@ -1733,7 +1737,6 @@ CE38FA7C091D20FB00BCB69D /* Views */ = { isa = PBXGroup; children = ( - CE2209A6093639B0004D7D92 /* BDSKAlert.m */, 3D824AA707D099C300FB2F67 /* BDSKBackgroundView.m */, 2730077707CF20B500F2E485 /* BDSKBorderlessKeyWindow.m */, CEEC6C53093A411E00A64F54 /* BDSKCollapsibleView.m */, @@ -1822,6 +1825,7 @@ CE38FA80091D241600BCB69D /* Controllers */ = { isa = PBXGroup; children = ( + CE2209A6093639B0004D7D92 /* BDSKAlert.m */, 3D866C2708031CEC00FF1724 /* BDSKCharacterConversion.m */, CE38FB85091D946A00BCB69D /* BDSKConditionController.m */, CE56D6500A2DAB55003CE000 /* BDSKDocumentController.m */, @@ -1834,6 +1838,7 @@ F92ECBF309DF09DA00A244D0 /* BDSKPasswordController.m */, F9DAC7A10A0A95BC0099117E /* BDSKPreferenceController.m */, F9022C58075802E300C3F701 /* BDSKPreviewer.m */, + CEBA3F460A73CCAF00588BB7 /* BDSKSheetController.m */, 27AFAF9B080D1E1B0096F5D2 /* BDSKTextImportController.m */, F98AA6800971E3F400184BD8 /* BDSKTextViewCompletionController.m */, CE518F2609E526E000E97C3A /* BDSKTextViewFindController.m */, @@ -2134,6 +2139,7 @@ F92EF32009E6242100A244D0 /* BDSKSharedGroup.h */, CE6FB32009DFFCB5005E3E14 /* BDSKSharingBrowser.h */, F92ED7CA09E0A93400A244D0 /* BDSKSharingServer.h */, + CEBA3F450A73CCAF00588BB7 /* BDSKSheetController.h */, F9022C59075802E300C3F701 /* BDSKShellTask.h */, CEF7AC040915929E00BE9E02 /* BDSKSplitView.h */, F9A411EF0A0B1FEF008493C0 /* BDSKSpotlightView.h */, @@ -2534,6 +2540,7 @@ CE3A32D70A345C2600984DC2 /* NSAttributedString_BDSKExtensions.h in Headers */, CE6DACC40A503ECF00123185 /* OAToolbarItem_BDSKExtensions.h in Headers */, F9FD63DC0A61B87800F9871B /* NSMenu_BDSKExtensions.h in Headers */, + CEBA3F470A73CCAF00588BB7 /* BDSKSheetController.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -3339,6 +3346,7 @@ CE3A32D60A345C2400984DC2 /* NSAttributedString_BDSKExtensions.m in Sources */, CE6DACC50A503ECF00123185 /* OAToolbarItem_BDSKExtensions.m in Sources */, F9FD63DD0A61B87800F9871B /* NSMenu_BDSKExtensions.m in Sources */, + CEBA3F480A73CCAF00588BB7 /* BDSKSheetController.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |