From e8ce333facc1bf4d98374cd9c9132b11b2f9c5f4 Mon Sep 17 00:00:00 2001 From: "Michael J. Rubinsky" Date: Mon, 15 Dec 2008 19:25:34 -0500 Subject: [PATCH] Take some UI ideas from other iPhoto plugins (mostly iPhotoToGallery): * Use a NSPopUpButton for the server selection instead of a NSComboBox * Put the "New Server" action in the PopUp instead of a seperate button. * Auto connect to the default server (for now, it's the first gallery in the list) * The start of a better status display --- iPhoto2Ansel/AnselExportController.h | 6 +- iPhoto2Ansel/AnselExportController.m | 91 +- iPhoto2Ansel/English.lproj/Panel.nib/classes.nib | 92 - .../English.lproj/Panel.nib/designable.nib | 1868 ++++++++++++++++++++ iPhoto2Ansel/English.lproj/Panel.nib/info.nib | 20 - .../English.lproj/Panel.nib/keyedobjects.nib | Bin 17628 -> 19455 bytes 6 files changed, 1937 insertions(+), 140 deletions(-) delete mode 100644 iPhoto2Ansel/English.lproj/Panel.nib/classes.nib create mode 100644 iPhoto2Ansel/English.lproj/Panel.nib/designable.nib delete mode 100644 iPhoto2Ansel/English.lproj/Panel.nib/info.nib diff --git a/iPhoto2Ansel/AnselExportController.h b/iPhoto2Ansel/AnselExportController.h index 006e11d4b..3b8a1bd05 100644 --- a/iPhoto2Ansel/AnselExportController.h +++ b/iPhoto2Ansel/AnselExportController.h @@ -40,10 +40,7 @@ extern NSString * const TURAnselServerPasswordKey; IBOutlet NSProgressIndicator *spinner; IBOutlet NSImageView *defaultImageView; IBOutlet NSButton *newGalleryButton; - IBOutlet NSButton *newServerButton; - - // New Gallery Sheet (uses it's own controller) - //IBOutlet NSWindow *newGallerySheet; + IBOutlet NSPopUpButton *mServersPopUp; // New Server sheet IBOutlet NSWindow *newServerSheet; @@ -81,6 +78,7 @@ extern NSString * const TURAnselServerPasswordKey; - (IBAction) showNewGallery: (id)sender; - (IBAction) doAddServer: (id)sender; - (IBAction) doCancelAddServer: (id)sender; +- (IBAction) clickServer: (id)sender; // overrides - (void)awakeFromNib; diff --git a/iPhoto2Ansel/AnselExportController.m b/iPhoto2Ansel/AnselExportController.m index 81b23992f..380735cda 100644 --- a/iPhoto2Ansel/AnselExportController.m +++ b/iPhoto2Ansel/AnselExportController.m @@ -13,6 +13,7 @@ #import "ImageResizer.h"; @interface AnselExportController (PrivateAPI) +- (void)showNewServerSheet; - (void)doConnect; - (void)connect; - (void)disconnect; @@ -49,10 +50,7 @@ NSString * const TURAnselServerPasswordKey = @"password"; [defaultValues setObject: [[NSMutableArray alloc] init] forKey: TURAnselServersKey]; NSUserDefaults *userPrefs = [NSUserDefaults standardUserDefaults]; [userPrefs registerDefaults: defaultValues]; - - // Get any saved server data - anselServers = [userPrefs objectForKey: TURAnselServersKey]; - + // UI Defaults [mSizePopUp selectItemWithTag: [userPrefs integerForKey:TURAnselExportSize]]; [connectedLabel setStringValue:@"Not Connected"]; @@ -66,11 +64,10 @@ NSString * const TURAnselServerPasswordKey = @"password"; name: @"NSPopUpButtonWillPopUpNotification" object: nil]; - // See if we have any configured servers + // See if we have any configured servers (need a mutable array, hence the extra step here) anselServers = [[NSMutableArray alloc] initWithArray: [userPrefs objectForKey:TURAnselServersKey]]; - // Need to wait until iPhoto's export window is fully loaded before attempting - // to show a sheet? + // Wait until iPhoto's export window is fully loaded before attempting a sheet [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(exportWindowDidBecomeKey:) name: NSWindowDidBecomeKeyNotification @@ -91,8 +88,6 @@ NSString * const TURAnselServerPasswordKey = @"password"; } #pragma mark Actions - - // Put up the newGallerySheet NSPanel - (IBAction)showNewGallery: (id)sender { @@ -104,13 +99,29 @@ NSString * const TURAnselServerPasswordKey = @"password"; } } +- (IBAction)clickServer: (id)sender +{ + // Servers list +// if ([mServersPopUp indexOfSelectedItem] == [mServersPopUp numberOfItems] - 1) { +// [galleryListTable reloadData]; +// [NSApp beginSheet:galleryListPanel modalForWindow:[exportManager window] modalDelegate:self didEndSelector:@selector(sheetDidEnd:returnCode:contextInfo:) contextInfo:NULL]; +// } + + // Add new server + if ([mServersPopUp indexOfSelectedItem] == [mServersPopUp numberOfItems] - 1) { + NSLog(@"Showing sheet?"); + [self showNewServerSheet]; + } else if (![[[mServersPopUp selectedItem] title] isEqual:@"(None)"]) { + currentServer = [[mServersPopUp selectedItem] representedObject]; + [self doConnect]; + } +} // Server setup sheet -(IBAction)doAddServer: (id)sender { // Sanity Checking - // TODO - make sure we don't have more than one gallery with the same - // nick?? + // TODO - make sure we don't have more than one gallery with the same nick?? if (![[serverNickName stringValue] length]) { // TODO: Errors - for now, just silently fail, yea, I know.... return; @@ -256,6 +267,15 @@ NSString * const TURAnselServerPasswordKey = @"password"; } #pragma mark PrivateAPI +- (void) showNewServerSheet +{ + [NSApp beginSheet: newServerSheet + modalForWindow: [self window] + modalDelegate: nil + didEndSelector: nil + contextInfo: nil]; +} + // See if we have everything we need to export... - (void)canExport { @@ -272,13 +292,37 @@ NSString * const TURAnselServerPasswordKey = @"password"; } } +- (void)updateServersPopupMenu +{ + [mServersPopUp removeAllItems]; + for (NSDictionary *server in anselServers) { + NSMenuItem *menuItem = [[NSMenuItem alloc] initWithTitle: [server objectForKey: TURAnselServerNickKey] + action: nil + keyEquivalent: @""]; + [menuItem setRepresentedObject: server]; + [[mServersPopUp menu] addItem: menuItem]; + } + if ([anselServers count] == 0) { + [mServersPopUp addItemWithTitle:@"(None)"]; + //[mainStatusString setStringValue:@"No galleries configured"]; + } + + // add separator + [[mServersPopUp menu] addItem:[NSMenuItem separatorItem]]; + + // add Add Gallery... and Edit List... options + [mServersPopUp addItemWithTitle:@"Add Server..."]; + //[mServersPopUp addItemWithTitle:@"Edit Server List..."]; + + // fix selection + [mServersPopUp selectItemAtIndex:0]; +} + // Make sure we clean up from any previous connection -(void)disconnect { [galleryCombo setDelegate: nil]; [anselController release]; - - //TODO: update status/use notifications? } // Start the connection process. @@ -425,8 +469,6 @@ NSString * const TURAnselServerPasswordKey = @"password"; } // We are done - kill the progress controller and close the export window. - // TODO: Put up some kind of alert, maybe add growl support, offer to open - // the browser window?? [progressController performSelectorOnMainThread: @selector(setPercent:) withObject: nil waitUntilDone: NO]; @@ -527,16 +569,17 @@ NSString * const TURAnselServerPasswordKey = @"password"; #pragma mark export notifications - (void)exportWindowDidBecomeKey: (NSNotification *)notification { - // Make sure we have a server configured, or throw up the dialog. - if (![anselServers count]) { - [NSApp beginSheet: newServerSheet - modalForWindow: [self window] - modalDelegate: nil - didEndSelector: nil - contextInfo: nil]; + // We only want to do this once... + [[NSNotificationCenter defaultCenter] removeObserver: self + name: NSWindowDidBecomeKeyNotification + object: nil]; + [self updateServersPopupMenu]; + if ([anselServers count] == 0) { + [self showNewServerSheet]; } else { - // We have servers, fill in the drop down - + // Autoconnect to default server. For now, just make it the first one. + currentServer = [[mServersPopUp selectedItem] representedObject]; + [self doConnect]; } } - (void)sizeChoiceWillChange: (NSNotification *)notification diff --git a/iPhoto2Ansel/English.lproj/Panel.nib/classes.nib b/iPhoto2Ansel/English.lproj/Panel.nib/classes.nib deleted file mode 100644 index 254fa6127..000000000 --- a/iPhoto2Ansel/English.lproj/Panel.nib/classes.nib +++ /dev/null @@ -1,92 +0,0 @@ - - - - - IBClasses - - - CLASS - AnselExportPluginBox - LANGUAGE - ObjC - OUTLETS - - mPlugin - id - - SUPERCLASS - NSBox - - - ACTIONS - - cancelNewGallery - id - doAddServer - id - doCancelAddServer - id - showNewGallery - id - - CLASS - AnselExportController - LANGUAGE - ObjC - OUTLETS - - anselHostURL - NSTextField - connectedLabel - NSTextField - defaultImageView - NSImageView - firstView - NSControl - galleryCombo - NSComboBox - mExportMgr - id - mServers - NSComboBox - mSettingsBox - NSBox - mSizePopUp - NSPopUpButton - newGalleryButton - NSButton - newServerButton - NSButton - newServerSheet - NSWindow - password - NSSecureTextField - serverNickName - NSTextField - spinner - NSProgressIndicator - username - NSTextField - - SUPERCLASS - NSObject - - - CLASS - FirstResponder - LANGUAGE - ObjC - SUPERCLASS - NSObject - - - CLASS - NSObject - LANGUAGE - ObjC - - - IBVersion - 1 - - diff --git a/iPhoto2Ansel/English.lproj/Panel.nib/designable.nib b/iPhoto2Ansel/English.lproj/Panel.nib/designable.nib new file mode 100644 index 000000000..115e93bd5 --- /dev/null +++ b/iPhoto2Ansel/English.lproj/Panel.nib/designable.nib @@ -0,0 +1,1868 @@ + + + + 1050 + 9F33 + 672 + 949.34 + 352.00 + + YES + + + + YES + com.apple.InterfaceBuilder.CocoaPlugin + + + YES + + AnselExportController + + + FirstResponder + + + NSApplication + + + 15 + 2 + {{220, 349}, {590, 415}} + 1886912512 + + Window + + + NSWindow + + + View + + {3.40282e+38, 3.40282e+38} + {213, 107} + + + 256 + + YES + + + 256 + + YES + + + 256 + + YES + + + 268 + + YES + + + 256 + + YES + + + 268 + {{15, 71}, {81, 17}} + + YES + + 68288064 + 272630784 + Server + + LucidaGrande + 1.200000e+01 + 16 + + + + 6 + System + controlColor + + 3 + MC42NjY2NjY2OQA + + + + 6 + System + controlTextColor + + 3 + MAA + + + + + + + 268 + {{76, 66}, {382, 26}} + + YES + + -2076049856 + 2048 + + LucidaGrande + 1.300000e+01 + 1044 + + + 109199615 + 129 + + + 400 + 75 + + + (None) + + 1048576 + 2147483647 + + NSImage + NSMenuCheckmark + + + NSImage + NSMenuMixedState + + _popUpItemAction: + + + YES + + OtherViews + + YES + + + + 1 + YES + YES + 2 + + + + + 268 + {{77, 33}, {117, 17}} + + YES + + 68288064 + 272761856 + Not Logged In + + LucidaGrande + 1.100000e+01 + 3100 + + + + + + + + + -2147482356 + + {{439, 33}, {16, 16}} + + 28938 + 1.600000e+01 + 1.000000e+02 + + + + 268 + {{15, 37}, {43, 16}} + + YES + + 68288064 + 272630784 + Status + + + + + + + + + 268 + {{367, 32}, {65, 16}} + + YES + + 67239424 + 134479872 + Cancel + + LucidaGrande + 9.000000e+00 + 3614 + + + -2038284033 + 129 + + + 200 + 25 + + + + {{1, 1}, {480, 94}} + + + + {{7, 253}, {482, 110}} + + {0, 0} + + 67239424 + 0 + Connection + + + 6 + System + textBackgroundColor + + 3 + MQA + + + + 3 + MCAwLjgwMDAwMDAxAA + + + + 1 + 0 + 2 + NO + + + + 268 + + YES + + + 256 + + YES + + + 268 + {{140, 142}, {92, 32}} + + YES + + 604110336 + 134217728 + Create New + + LucidaGrande + 1.100000e+01 + 16 + + + -2038284033 + 129 + + + + 200 + 25 + + + + + 268 + {{18, 122}, {211, 26}} + + YES + + 879885888 + 272630784 + + + + YES + + + 5 + YES + + + + 274 + {15, 0} + + + YES + + YES + + + 1.200000e+01 + 1.000000e+01 + 1.000000e+03 + + 75628032 + 0 + + + + 3 + MC4zMzMzMzI5OQA + + + + + 338820672 + 1024 + + + YES + + 6 + System + controlBackgroundColor + + + + + 3 + YES + + + + 3.000000e+00 + 2.000000e+00 + + + 6 + System + gridColor + + 3 + MC41AA + + + 1.900000e+01 + tableViewAction: + -767524864 + + + + 1 + 15 + 0 + YES + + + + + + 268 + {{15, 152}, {103, 16}} + + YES + + 68288064 + 272630784 + Gallery + + + + + + + + + 268 + + YES + + YES + Apple PDF pasteboard type + Apple PICT pasteboard type + Apple PNG pasteboard type + NSFilenamesPboardType + NeXT Encapsulated PostScript v1.2 pasteboard type + NeXT TIFF v4.0 pasteboard type + + + {{258, 38}, {214, 118}} + + YES + + 130560 + 33554432 + 0 + 0 + 1 + NO + + YES + + + + 268 + {{258, 154}, {158, 16}} + + YES + + 68288064 + 272630784 + Gallery Default Image + + + + + + + + + 256 + {{15, 65}, {114, 17}} + + YES + + 67239424 + 272629760 + Image Size: + + + + + + + + + 256 + {{15, 37}, {130, 26}} + + YES + + -2076049856 + 2048 + + + 109199615 + 1 + + LucidaGrande + 1.300000e+01 + 16 + + + + + + 400 + 75 + + + Large + + 1048576 + 2147483647 + 1 + + + _popUpItemAction: + 2 + + + YES + + + OtherViews + + + YES + + + Small + + 1048576 + 2147483647 + + + _popUpItemAction: + + + + + Medium + + 1048576 + 2147483647 + + + _popUpItemAction: + 1 + + + + + + Full Size + + 1048576 + 2147483647 + + + _popUpItemAction: + 3 + + + + + 2 + 3 + YES + YES + 1 + + + + + 268 + {{290, 6}, {185, 32}} + + YES + + 604110336 + 134217728 + Choose Default Image + + + -2038284033 + 129 + + + 200 + 25 + + + + {{1, 1}, {480, 176}} + + + + {{14, 9}, {482, 192}} + + {0, 0} + + 67239424 + 0 + Export Options + + + + 3 + MCAwLjgwMDAwMDAxAA + + + + 1 + 0 + 2 + NO + + + {{2, 2}, {510, 373}} + + + + {{59, 16}, {514, 390}} + + {0, 0} + + 67239424 + 0 + iPhoto2Ansel + + + + 3 + MCAwLjgwMDAwMDAxAA + + + + 3 + 0 + 2 + NO + + + {590, 415} + + + {{0, 0}, {1920, 1178}} + {213, 129} + {3.40282e+38, 3.40282e+38} + + + 23 + 2 + {{196, 315}, {455, 195}} + -1543503872 + Add Server + NSPanel + + {3.40282e+38, 3.40282e+38} + + + 256 + + YES + + + 268 + {{124, 124}, {311, 22}} + + YES + + -1804468671 + 272630784 + + + + YES + + + 6 + System + textColor + + + + + + + 268 + {{17, 126}, {102, 17}} + + YES + + 68288064 + 272630784 + Path to rpc.php + + + + + + + + + 268 + {{124, 92}, {311, 22}} + + YES + + -1804468671 + 272630784 + + + + YES + + + + + + + 268 + {{124, 60}, {311, 22}} + + YES + + 343014976 + 272630784 + + + + YES + + + + YES + NSAllRomanInputSourcesLocaleIdentifier + + + + + + 268 + {{17, 94}, {67, 17}} + + YES + + 68288064 + 272630784 + Username + + + + + + + + + 268 + {{17, 62}, {67, 17}} + + YES + + 68288064 + 272630784 + Password + + + + + + + + + 268 + {{17, 158}, {102, 17}} + + YES + + 68288064 + 272630784 + Nickname + + + + + + + + + 268 + {{124, 156}, {311, 22}} + + YES + + -1804468671 + 272630784 + + + + YES + + + + + + + 268 + {{345, 12}, {96, 32}} + + YES + + 67239424 + 134217728 + Save + + + -2038284033 + 129 + + + 200 + 25 + + + + + 268 + {{244, 12}, {96, 32}} + + YES + + 67239424 + 134217728 + Cancel + + + -2038284033 + 129 + + + 200 + 25 + + + + + 268 + {{18, 18}, {145, 18}} + + YES + + -2080244224 + 0 + Default Server + + + 1211912703 + 130 + + NSImage + NSSwitch + + + NSSwitch + + + + 200 + 25 + + + + {455, 195} + + {{0, 0}, {1920, 1178}} + {3.40282e+38, 3.40282e+38} + + + + + YES + + + mSettingsBox + + + + 37 + + + + mPlugin + + + + 64 + + + + mSizePopUp + + + + 65 + + + + galleryCombo + + + + 142 + + + + connectedLabel + + + + 173 + + + + spinner + + + + 239 + + + + newGalleryButton + + + + 334 + + + + showNewGallery: + + + + 336 + + + + defaultImageView + + + + 359 + + + + anselHostURL + + + + 415 + + + + username + + + + 416 + + + + password + + + + 417 + + + + serverNickName + + + + 418 + + + + doAddServer: + + + + 419 + + + + doCancelAddServer: + + + + 420 + + + + newServerSheet + + + + 421 + + + + mServersPopUp + + + + 490 + + + + clickServer: + + + + 492 + + + + + YES + + 0 + + YES + + + + + + -2 + + + RmlsZSdzIE93bmVyA + + + -1 + + + First Responder + + + -3 + + + Application + + + 5 + + + YES + + + + Window + + + 6 + + + YES + + + + + + 7 + + + YES + + + + + + + 387 + + + YES + + + + Panel (Add Server) + + + 388 + + + YES + + + + + + + + + + + + + + + + 389 + + + YES + + + + + + 391 + + + YES + + + + + + 393 + + + YES + + + + + + 395 + + + YES + + + + + + 397 + + + YES + + + + + + 399 + + + YES + + + + + + 401 + + + YES + + + + + + 403 + + + YES + + + + + + 405 + + + YES + + + + + + 407 + + + YES + + + + + + 409 + + + YES + + + + + + 472 + + + + + 473 + + + + + 474 + + + + + 475 + + + + + 476 + + + + + 477 + + + + + 478 + + + + + 479 + + + + + 480 + + + + + 481 + + + + + 482 + + + + + 136 + + + YES + + + + + + + + + + + 137 + + + YES + + + + + + + + + + + + + 138 + + + YES + + + + + + 462 + + + + + 140 + + + YES + + + + + + 463 + + + + + 169 + + + YES + + + + + + 464 + + + + + 357 + + + YES + + + + + + 465 + + + + + 360 + + + YES + + + + + + 466 + + + + + 9 + + + YES + + + + + + 460 + + + + + 18 + + + YES + + + + + + 461 + + + YES + + + + + + 19 + + + YES + + + + + + + + + 23 + + + + + 22 + + + + + 21 + + + + + 20 + + + + + 364 + + + YES + + + + + + 467 + + + + + 413 + + + YES + + + + + + 470 + + + + + 484 + + + YES + + + + + + 485 + + + YES + + + + + + 486 + + + YES + + + + + + 489 + + + + + 167 + + + YES + + + + + + 468 + + + + + 216 + + + + + 493 + + + YES + + + + + + 494 + + + + + 495 + + + YES + + + + + + 496 + + + + + + + YES + + YES + -1.IBPluginDependency + -2.IBPluginDependency + -3.IBPluginDependency + -3.ImportedFromIB2 + 136.IBPluginDependency + 136.ImportedFromIB2 + 137.IBPluginDependency + 137.ImportedFromIB2 + 138.IBPluginDependency + 138.ImportedFromIB2 + 140.IBPluginDependency + 140.ImportedFromIB2 + 167.IBPluginDependency + 167.ImportedFromIB2 + 169.IBPluginDependency + 169.ImportedFromIB2 + 18.IBPluginDependency + 18.ImportedFromIB2 + 19.IBPluginDependency + 19.ImportedFromIB2 + 20.IBPluginDependency + 20.ImportedFromIB2 + 21.IBPluginDependency + 21.ImportedFromIB2 + 216.IBPluginDependency + 216.ImportedFromIB2 + 22.IBPluginDependency + 22.ImportedFromIB2 + 23.IBPluginDependency + 23.ImportedFromIB2 + 357.IBPluginDependency + 357.ImportedFromIB2 + 360.IBPluginDependency + 360.ImportedFromIB2 + 364.IBPluginDependency + 364.ImportedFromIB2 + 387.IBEditorWindowLastContentRect + 387.IBPluginDependency + 387.IBWindowTemplateEditedContentRect + 387.ImportedFromIB2 + 388.IBPluginDependency + 388.ImportedFromIB2 + 389.IBPluginDependency + 389.ImportedFromIB2 + 391.IBPluginDependency + 391.ImportedFromIB2 + 393.IBPluginDependency + 393.ImportedFromIB2 + 395.IBPluginDependency + 395.ImportedFromIB2 + 397.IBPluginDependency + 397.ImportedFromIB2 + 399.IBPluginDependency + 399.ImportedFromIB2 + 401.IBPluginDependency + 401.ImportedFromIB2 + 403.IBPluginDependency + 403.ImportedFromIB2 + 405.IBPluginDependency + 405.ImportedFromIB2 + 407.IBPluginDependency + 407.ImportedFromIB2 + 409.IBPluginDependency + 409.ImportedFromIB2 + 413.IBPluginDependency + 413.ImportedFromIB2 + 484.IBPluginDependency + 485.IBPluginDependency + 486.IBEditorWindowLastContentRect + 486.IBPluginDependency + 489.IBPluginDependency + 493.IBPluginDependency + 494.IBPluginDependency + 495.IBPluginDependency + 496.IBPluginDependency + 5.IBEditorWindowLastContentRect + 5.IBPluginDependency + 5.IBWindowTemplateEditedContentRect + 5.ImportedFromIB2 + 5.windowTemplate.hasMinSize + 5.windowTemplate.minSize + 6.IBPluginDependency + 6.ImportedFromIB2 + 7.CustomClassName + 7.IBPluginDependency + 7.ImportedFromIB2 + 9.IBPluginDependency + 9.ImportedFromIB2 + + + YES + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + {{42, 910}, {455, 195}} + com.apple.InterfaceBuilder.CocoaPlugin + {{42, 910}, {455, 195}} + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + {{682, 774}, {382, 23}} + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + {{409, 544}, {590, 415}} + com.apple.InterfaceBuilder.CocoaPlugin + {{409, 544}, {590, 415}} + + + {213, 107} + com.apple.InterfaceBuilder.CocoaPlugin + + AnselExportPluginBox + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + + + + YES + + YES + + + YES + + + + + YES + + YES + + + YES + + + + 496 + + + + YES + + AnselExportController + NSObject + + YES + + YES + clickServer: + doAddServer: + doCancelAddServer: + showNewGallery: + + + YES + id + id + id + id + + + + YES + + YES + anselHostURL + connectedLabel + defaultImageView + firstView + galleryCombo + mExportMgr + mServers + mServersPopUp + mSettingsBox + mSizePopUp + newGalleryButton + newServerSheet + password + serverNickName + spinner + username + + + YES + NSTextField + NSTextField + NSImageView + NSControl + NSComboBox + id + NSComboBox + NSPopUpButton + NSBox + NSPopUpButton + NSButton + NSWindow + NSSecureTextField + NSTextField + NSProgressIndicator + NSTextField + + + + IBProjectSource + AnselExportController.h + + + + AnselExportController + NSObject + + IBUserSource + + + + + AnselExportPluginBox + NSBox + + mPlugin + id + + + IBProjectSource + AnselExportPluginBox.h + + + + AnselExportPluginBox + NSBox + + IBUserSource + + + + + FirstResponder + + IBUserSource + + + + + NSObject + + IBProjectSource + TURAnsel.h + + + + NSObject + + IBProjectSource + TURAnselGallery.h + + + + NSObject + + IBProjectSource + TURAnselGalleryPanelController.h + + + + NSObject + + IBProjectSource + xmlrpc-1.5.1/XMLRPCConnection.h + + + + NSObject + + IBUserSource + + + + + + 0 + ../iPhoto2Ansel.xcodeproj + 3 + + diff --git a/iPhoto2Ansel/English.lproj/Panel.nib/info.nib b/iPhoto2Ansel/English.lproj/Panel.nib/info.nib deleted file mode 100644 index fb256c095..000000000 --- a/iPhoto2Ansel/English.lproj/Panel.nib/info.nib +++ /dev/null @@ -1,20 +0,0 @@ - - - - - IBFramework Version - 672 - IBLastKnownRelativeProjectPath - ../iPhoto2Ansel.xcodeproj - IBOldestOS - 5 - IBOpenObjects - - 7 - - IBSystem Version - 9F33 - targetFramework - IBCocoaFramework - - diff --git a/iPhoto2Ansel/English.lproj/Panel.nib/keyedobjects.nib b/iPhoto2Ansel/English.lproj/Panel.nib/keyedobjects.nib index 2704c9568a79011f2dd832be52ba0137bbe08ea6..71687f05e9501043e8e63fac97e1864163a49023 100644 GIT binary patch literal 19455 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 -- 2.11.0