From cb0289820cf599c4379e31548cba15513c2610b6 Mon Sep 17 00:00:00 2001 From: "Michael J. Rubinsky" Date: Sun, 7 Dec 2008 16:55:02 -0500 Subject: [PATCH] Move gallery creation code out of iPhoto's controller and into a seperate new gallery controller to make it more portable. --- iPhoto2Ansel/AnselExportController.h | 11 -- iPhoto2Ansel/AnselExportController.m | 95 +++----------- .../AnselGalleryPanel.nib/designable.nib | 138 ++++++++------------- .../AnselGalleryPanel.nib/keyedobjects.nib | Bin 8611 -> 8534 bytes iPhoto2Ansel/TURAnselGalleryPanelController.h | 34 +++++ iPhoto2Ansel/TURAnselGalleryPanelController.m | 102 +++++++++++++++ .../iPhoto2Ansel.xcodeproj/project.pbxproj | 6 + 7 files changed, 213 insertions(+), 173 deletions(-) create mode 100644 iPhoto2Ansel/TURAnselGalleryPanelController.h create mode 100644 iPhoto2Ansel/TURAnselGalleryPanelController.m diff --git a/iPhoto2Ansel/AnselExportController.h b/iPhoto2Ansel/AnselExportController.h index 8dbb5aab4..1cfb926bb 100644 --- a/iPhoto2Ansel/AnselExportController.h +++ b/iPhoto2Ansel/AnselExportController.h @@ -35,11 +35,6 @@ IBOutlet NSProgressIndicator *spinner; IBOutlet NSWindow *newGallerySheet; IBOutlet NSImageView *defaultImageView; - - // New Gallery Panel - IBOutlet NSTextField *galleryNameTextField; - IBOutlet NSTextField *gallerySlugTextField; - IBOutlet NSTextField *galleryDescTextField; // Progress struct (This one is part of the protocol, but we don't use it) ExportPluginProgress progress; @@ -47,10 +42,6 @@ // This is our real progress controller (stolen from Facebook exporter). FBProgressController *progressController; - // New Gallery dialog controller (Can't get this to work with the modal - // iPhoto plugin interface??) - //TURNewGalleryController *newGalleryController; - // Mutex lock (required for the protocol, but not used) NSRecursiveLock *progressLock; @@ -68,9 +59,7 @@ // Actions - (IBAction) doConnect: (id)sender; -- (IBAction) doNewGallery: (id)sender; - (IBAction) showNewGallery: (id)sender; -- (IBAction) cancelNewGallery: (id)sender; // overrides - (void)awakeFromNib; diff --git a/iPhoto2Ansel/AnselExportController.m b/iPhoto2Ansel/AnselExportController.m index feb307901..09fb9af56 100644 --- a/iPhoto2Ansel/AnselExportController.m +++ b/iPhoto2Ansel/AnselExportController.m @@ -8,6 +8,7 @@ #import "TURAnsel.h"; #import "TURAnselGallery.h"; #import "AnselExportController.h"; +#import "TURAnselGalleryPanelController.h"; #import "FBProgressController.h"; #import "ImageResizer.h"; @@ -17,7 +18,6 @@ - (void)privatePerformExport; - (void)runExport; - (void)canExport; -- (void)newGallery; @end @implementation AnselExportController @@ -74,49 +74,28 @@ [pool release]; } - -// Start the process of creating a new gallery. This is called from an action -// from the newGallerySheet NSPanel. -- (void)doNewGallery: (id)sender -{ - [NSApplication detachDrawingThread: @selector(newGallery) - toTarget: self - withObject:nil]; -} - // Put up the newGallerySheet NSPanel - (IBAction)showNewGallery: (id)sender { // Make sure we're not doing this for nothing if ([anselController state] == TURAnselStateConnected) { - - if (!newGallerySheet) { - - [NSBundle loadNibNamed: @"AnselGalleryPanel" - owner: self]; - - [galleryNameTextField setStringValue:@"Untitled"]; - } - - [NSApp beginSheet: newGallerySheet - modalForWindow: [self window] - modalDelegate: nil - didEndSelector: nil - contextInfo: nil]; + TURAnselGalleryPanelController *newGalleryController = [[TURAnselGalleryPanelController alloc] initWithController: anselController]; + [newGalleryController setDelegate: self]; + [newGalleryController showSheetForWindow: [self window]]; } } -- (IBAction)cancelNewGallery: (id)sender -{ - [NSApp endSheet: newGallerySheet]; - [newGallerySheet orderOut: nil]; -} +//- (IBAction)cancelNewGallery: (id)sender +//{ +// [NSApp endSheet: newGallerySheet]; +// [newGallerySheet orderOut: nil]; +//} #pragma mark ExportPluginProtocol // Initialize - (id)initWithExportImageObj:(id )obj { - if(self = [super init]) + if (self = [super init]) { mExportMgr = obj; } @@ -226,52 +205,6 @@ } #pragma mark PrivateAPI - -- (void)newGallery -{ - // Get Gallery Properties from the panel. - NSString *galleryName = [galleryNameTextField stringValue]; - NSString *gallerySlug = [gallerySlugTextField stringValue]; - NSString *galleryDescription = [galleryDescTextField stringValue]; - - if (!galleryName) { - NSAlert *alert = [[NSAlert alloc] init]; - [alert setMessageText:@"Gallery names cannot be empty"]; - [alert setAlertStyle: NSCriticalAlertStyle]; - [alert beginSheetModalForWindow: [self window] - modalDelegate: nil - didEndSelector: nil - contextInfo: nil]; - [alert release]; - return; - } - NSDictionary *params = [NSDictionary dictionaryWithObjectsAndKeys: - galleryName, @"name", - gallerySlug, @"slug", - galleryDescription, @"desc", nil]; - - NSDictionary *results = [[anselController createNewGallery: params] retain]; - - [NSApp endSheet: newGallerySheet]; - [newGallerySheet orderOut: nil]; - - if ([anselController state] != TURAnselStateError) { - NSAlert *alert = [[NSAlert alloc] init]; - [alert setMessageText: @"Gallery successfully created."]; - [alert beginSheetModalForWindow: [self window] - modalDelegate: nil - didEndSelector: nil - contextInfo: nil]; - - // Reload the NSComboBox and autoselect the last item. - [galleryCombo reloadData]; - [galleryCombo selectItemAtIndex: [galleryCombo numberOfItems] - 1]; - [alert release]; - } - - [results release]; -} - // See if we have everything we need to export... - (void)canExport { @@ -485,4 +418,12 @@ [theImage release]; [self canExport]; } + +- (void)TURAnselGalleryPanelDidAddGallery +{ + NSLog(@"Before reload"); + // Reload the NSComboBox and autoselect the last item. + [galleryCombo reloadData]; + [galleryCombo selectItemAtIndex: [galleryCombo numberOfItems] - 1]; +} @end \ No newline at end of file diff --git a/iPhoto2Ansel/English.lproj/AnselGalleryPanel.nib/designable.nib b/iPhoto2Ansel/English.lproj/AnselGalleryPanel.nib/designable.nib index 52a258676..aab13b850 100644 --- a/iPhoto2Ansel/English.lproj/AnselGalleryPanel.nib/designable.nib +++ b/iPhoto2Ansel/English.lproj/AnselGalleryPanel.nib/designable.nib @@ -8,7 +8,7 @@ 352.00 YES - + YES @@ -17,7 +17,7 @@ YES - AnselExportController + TURAnselGalleryPanelController FirstResponder @@ -331,27 +331,19 @@ YES - gallerySlugTextField - - - - 38 - - - - galleryParentCombo + newGallerySheet - + - 39 + 43 - - galleryNameTextField + + doNewGallery: - + - 40 + 48 @@ -359,31 +351,31 @@ - 41 + 49 - newGallerySheet + galleryNameTextField - + - 43 + 50 - - doNewGallery: + + gallerySlugTextField - + - 46 + 51 cancelNewGallery: - + - 47 + 53 @@ -673,99 +665,75 @@ - 47 + 53 YES - AnselExportController + NSObject + + IBProjectSource + TURAnsel.h + + + + NSObject + + IBProjectSource + TURAnselGallery.h + + + + NSObject + + IBProjectSource + TURAnselGalleryPanelController.h + + + + NSObject + + IBProjectSource + xmlrpc-1.5.1/XMLRPCConnection.h + + + + TURAnselGalleryPanelController NSObject YES YES cancelNewGallery: - doConnect: doNewGallery: - showNewGallery: YES id id - id - id YES YES - anselHostURL - beginButton - connectedLabel - firstView - galleryCombo + delegate galleryDescTextField galleryNameTextField gallerySlugTextField - mExportMgr - mQualityPopUp - mSettingsBox - mSizePopUp - newGalleryButton newGallerySheet - password - spinner - username YES - NSTextField - NSButton - NSTextField - NSControl - NSComboBox - NSTextField + id NSTextField NSTextField - id - NSPopUpButton - NSBox - NSPopUpButton - NSButton - NSWindow - NSSecureTextField - NSProgressIndicator NSTextField + NSPanel - - IBProjectSource - AnselExportController.h - - - - NSObject - - IBProjectSource - TURAnsel.h - - - - NSObject - - IBProjectSource - TURAnselGallery.h - - - - NSObject - - IBProjectSource - xmlrpc-1.5.1/XMLRPCConnection.h - + diff --git a/iPhoto2Ansel/English.lproj/AnselGalleryPanel.nib/keyedobjects.nib b/iPhoto2Ansel/English.lproj/AnselGalleryPanel.nib/keyedobjects.nib index c850b23d8bedfa1207a77454ec8e034efbe3d287..b318b79b4e71905692c4335cc75b8f273c22ce6a 100644 GIT binary patch literal 8534 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 literal 8611 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 diff --git a/iPhoto2Ansel/TURAnselGalleryPanelController.h b/iPhoto2Ansel/TURAnselGalleryPanelController.h new file mode 100644 index 000000000..d423ca66c --- /dev/null +++ b/iPhoto2Ansel/TURAnselGalleryPanelController.h @@ -0,0 +1,34 @@ +// +// TURAnselGalleryPanelController.h +// iPhoto2Ansel +// +// Created by Michael Rubinsky on 12/7/08. +// Copyright 2008 __MyCompanyName__. All rights reserved. +// + +#import +#import "TURAnsel.h" + +@interface NSObject (TURAnselGalleryPaneControllerDelegate) +-(void)TURAnselGalleryPanelDidAddGallery; +@end + +@interface TURAnselGalleryPanelController : NSObject { + // Outlets + IBOutlet NSTextField *galleryNameTextField; + IBOutlet NSTextField *gallerySlugTextField; + IBOutlet NSTextField *galleryDescTextField; + IBOutlet NSPanel *newGallerySheet; + + TURAnsel *anselController; + NSWindow *controllerWindow; + id delegate; +} + +// Actions +- (IBAction)doNewGallery: (id)sender; +- (IBAction)cancelNewGallery: (id)sender; +- (id)initWithController: (TURAnsel *)theController; +- (void)showSheetForWindow: (NSWindow *)theWindow; +- (void)setDelegate: (id)theDelegate; +@end diff --git a/iPhoto2Ansel/TURAnselGalleryPanelController.m b/iPhoto2Ansel/TURAnselGalleryPanelController.m new file mode 100644 index 000000000..419ebeef1 --- /dev/null +++ b/iPhoto2Ansel/TURAnselGalleryPanelController.m @@ -0,0 +1,102 @@ +// +// TURAnselGalleryPanelController.m +// iPhoto2Ansel +// +// Created by Michael Rubinsky on 12/7/08. +// Copyright 2008 __MyCompanyName__. All rights reserved. +// + +#import "TURAnselGalleryPanelController.h" + +@implementation TURAnselGalleryPanelController + +#pragma mark IBActions +- (IBAction)cancelNewGallery: (id)sender +{ + [NSApp endSheet: newGallerySheet]; + [newGallerySheet orderOut: nil]; +} + +- (IBAction)doNewGallery: (id)sender +{ + // Get Gallery Properties from the panel. + NSString *galleryName = [galleryNameTextField stringValue]; + NSString *gallerySlug = [gallerySlugTextField stringValue]; + NSString *galleryDescription = [galleryDescTextField stringValue]; + + if (!galleryName) { + + [NSApp endSheet: newGallerySheet]; + [newGallerySheet orderOut: nil]; + + NSAlert *alert = [[NSAlert alloc] init]; + [alert setMessageText:@"Gallery names cannot be empty"]; + [alert setAlertStyle: NSCriticalAlertStyle]; + [alert beginSheetModalForWindow: controllerWindow + modalDelegate: nil + didEndSelector: nil + contextInfo: nil]; + [alert release]; + return; + } + NSDictionary *params = [NSDictionary dictionaryWithObjectsAndKeys: + galleryName, @"name", + gallerySlug, @"slug", + galleryDescription, @"desc", nil]; + + NSDictionary *results = [[anselController createNewGallery: params] retain]; + + [NSApp endSheet: newGallerySheet]; + [newGallerySheet orderOut: nil]; + + if ([anselController state] != TURAnselStateError) { + NSAlert *alert = [[NSAlert alloc] init]; + [alert setMessageText: @"Gallery successfully created."]; + [alert beginSheetModalForWindow: controllerWindow + modalDelegate: nil + didEndSelector: nil + contextInfo: nil]; + [alert release]; + if ([delegate respondsToSelector:@selector(TURAnselGalleryPanelDidAddGallery)]) { + [delegate TURAnselGalleryPanelDidAddGallery]; + } + } + + [results release]; +} + +-(id)initWithController: (TURAnsel *)theController +{ + [super init]; + anselController = [theController retain]; + [NSBundle loadNibNamed: @"AnselGalleryPanel" + owner: self]; + + return self; +} + +- (void)setDelegate: (id)theDelegate +{ + delegate = theDelegate; // weak +} + + +- (void)showSheetForWindow: (NSWindow *)theWindow +{ + [controllerWindow release]; + controllerWindow = [theWindow retain]; + [NSApp beginSheet: newGallerySheet + modalForWindow: theWindow + modalDelegate: nil + didEndSelector: nil + contextInfo: nil]; +} + +- (void)dealloc +{ + [anselController release]; + [controllerWindow release]; + [super dealloc]; +} + +@end diff --git a/iPhoto2Ansel/iPhoto2Ansel.xcodeproj/project.pbxproj b/iPhoto2Ansel/iPhoto2Ansel.xcodeproj/project.pbxproj index a525ad8cd..18aedf3dc 100644 --- a/iPhoto2Ansel/iPhoto2Ansel.xcodeproj/project.pbxproj +++ b/iPhoto2Ansel/iPhoto2Ansel.xcodeproj/project.pbxproj @@ -40,6 +40,7 @@ B0BFBCAA0ED5B32B006581A5 /* XMLRPCResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = B0BFBC960ED5B32B006581A5 /* XMLRPCResponse.m */; }; B0C888490ED85DEA000E19FB /* ProgressSheet.nib in Resources */ = {isa = PBXBuildFile; fileRef = B0C888480ED85DEA000E19FB /* ProgressSheet.nib */; }; B0C8884E0ED85E02000E19FB /* FBProgressController.m in Sources */ = {isa = PBXBuildFile; fileRef = B0C8884D0ED85E02000E19FB /* FBProgressController.m */; }; + B0CCED420EEC6E810012D3D3 /* TURAnselGalleryPanelController.m in Sources */ = {isa = PBXBuildFile; fileRef = B0CCED410EEC6E810012D3D3 /* TURAnselGalleryPanelController.m */; }; B0DF843C0EE9E6EB000DAA9E /* QuickTime.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B0DF843B0EE9E6EB000DAA9E /* QuickTime.framework */; }; /* End PBXBuildFile section */ @@ -114,6 +115,8 @@ B0C888480ED85DEA000E19FB /* ProgressSheet.nib */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; path = ProgressSheet.nib; sourceTree = ""; }; B0C8884C0ED85E02000E19FB /* FBProgressController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FBProgressController.h; sourceTree = ""; }; B0C8884D0ED85E02000E19FB /* FBProgressController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FBProgressController.m; sourceTree = ""; }; + B0CCED400EEC6E810012D3D3 /* TURAnselGalleryPanelController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TURAnselGalleryPanelController.h; sourceTree = ""; }; + B0CCED410EEC6E810012D3D3 /* TURAnselGalleryPanelController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TURAnselGalleryPanelController.m; sourceTree = ""; }; B0DF843B0EE9E6EB000DAA9E /* QuickTime.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuickTime.framework; path = /System/Library/Frameworks/QuickTime.framework; sourceTree = ""; }; /* End PBXFileReference section */ @@ -238,6 +241,8 @@ B00076DE0EBA573900A95FC0 /* AnselToolkit */ = { isa = PBXGroup; children = ( + B0CCED400EEC6E810012D3D3 /* TURAnselGalleryPanelController.h */, + B0CCED410EEC6E810012D3D3 /* TURAnselGalleryPanelController.m */, B07D426C0EC230B100B59765 /* TURAnsel.h */, B07D426D0EC230B100B59765 /* TURAnsel.m */, B07D426E0EC230B100B59765 /* TURAnselGallery.h */, @@ -403,6 +408,7 @@ B07D44F70EC2AEC700B59765 /* TURXMLConnection.m in Sources */, B0C8884E0ED85E02000E19FB /* FBProgressController.m in Sources */, B05C4A060EE9E001005B4B28 /* ImageResizer.m in Sources */, + B0CCED420EEC6E810012D3D3 /* TURAnselGalleryPanelController.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; -- 2.11.0