#4921 On Lion, use window restoration on the torrent creation window

This commit is contained in:
Mitchell Livingston 2012-05-28 14:28:50 +00:00
parent bcde8ebef6
commit 7466139067
4 changed files with 292 additions and 84 deletions

View File

@ -1065,8 +1065,7 @@ static void sleepCallback(void * controller, io_service_t y, natural_t messageTy
- (void) openCreatedFile: (NSNotification *) notification
{
NSDictionary * dict = [notification userInfo];
[self openFiles: [NSArray arrayWithObject: [dict objectForKey: @"File"]] addType: ADD_CREATED
forcePath: [dict objectForKey: @"Path"]];
[self openFiles: [NSArray arrayWithObject: [dict objectForKey: @"File"]] addType: ADD_CREATED forcePath: [dict objectForKey: @"Path"]];
[dict release];
}
@ -2831,7 +2830,7 @@ static void sleepCallback(void * controller, io_service_t y, natural_t messageTy
if (![fDefaults boolForKey: @"AutoImport"])
return;
NSString * location = [notification object],
NSString * location = [(NSURL *)[notification object] path],
* path = [fDefaults stringForKey: @"AutoImportDirectory"];
if (location && path && [[[location stringByDeletingLastPathComponent] stringByExpandingTildeInPath]
@ -3165,7 +3164,7 @@ static void sleepCallback(void * controller, io_service_t y, natural_t messageTy
else
{
if (!torrent && [files count] == 1)
[CreatorWindowController createTorrentFile: fLib forFile: [files objectAtIndex: 0]];
[CreatorWindowController createTorrentFile: fLib forFile: [NSURL fileURLWithPath: [files objectAtIndex: 0]]];
else
accept = NO;
}

View File

@ -39,7 +39,7 @@
IBOutlet NSProgressIndicator * fProgressIndicator;
tr_metainfo_builder * fInfo;
NSString * fPath, * fLocation;
NSURL * fPath, * fLocation;
NSMutableArray * fTrackers;
NSTimer * fTimer;
@ -48,17 +48,17 @@
NSUserDefaults * fDefaults;
}
+ (void) createTorrentFile: (tr_session *) handle;
+ (void) createTorrentFile: (tr_session *) handle forFile: (NSString *) file;
+ (CreatorWindowController *) createTorrentFile: (tr_session *) handle;
+ (CreatorWindowController *) createTorrentFile: (tr_session *) handle forFile: (NSURL *) file;
- (id) initWithHandle: (tr_session *) handle path: (NSString *) path;
- (id) initWithHandle: (tr_session *) handle path: (NSURL *) path;
- (void) setLocation: (id) sender;
- (void) create: (id) sender;
- (void) cancelCreateWindow: (id) sender;
- (void) cancelCreateProgress: (id) sender;
- (IBAction) setLocation: (id) sender;
- (IBAction) create: (id) sender;
- (IBAction) cancelCreateWindow: (id) sender;
- (IBAction) cancelCreateProgress: (id) sender;
- (void) addRemoveTracker: (id) sender;
- (IBAction) addRemoveTracker: (id) sender;
- (void) copy: (id) sender;
- (void) paste: (id) sender;

View File

@ -23,6 +23,7 @@
*****************************************************************************/
#import "CreatorWindowController.h"
#import "Controller.h"
#import "NSStringAdditions.h"
#import "transmission.h" // required by utils.h
@ -33,7 +34,7 @@
@interface CreatorWindowController (Private)
+ (NSString *) chooseFile;
+ (NSURL *) chooseFile;
- (void) createBlankAddressAlertDidEnd: (NSAlert *) alert returnCode: (NSInteger) returnCode contextInfo: (void *) contextInfo;
- (void) createReal;
@ -44,31 +45,33 @@
@implementation CreatorWindowController
+ (void) createTorrentFile: (tr_session *) handle
+ (CreatorWindowController *) createTorrentFile: (tr_session *) handle
{
//get file/folder for torrent
NSString * path;
NSURL * path;
if (!(path = [CreatorWindowController chooseFile]))
return;
return nil;
CreatorWindowController * creator = [[self alloc] initWithHandle: handle path: path];
[creator showWindow: nil];
return creator;
}
+ (void) createTorrentFile: (tr_session *) handle forFile: (NSString *) file
+ (CreatorWindowController *) createTorrentFile: (tr_session *) handle forFile: (NSURL *) file
{
CreatorWindowController * creator = [[self alloc] initWithHandle: handle path: file];
[creator showWindow: nil];
return creator;
}
- (id) initWithHandle: (tr_session *) handle path: (NSString *) path
- (id) initWithHandle: (tr_session *) handle path: (NSURL *) path
{
if ((self = [super initWithWindowNibName: @"Creator"]))
{
fStarted = NO;
fPath = [path retain];
fInfo = tr_metaInfoBuilderCreate([fPath UTF8String]);
fInfo = tr_metaInfoBuilderCreate([[fPath path] UTF8String]);
if (fInfo->fileCount == 0)
{
@ -108,7 +111,7 @@
//get list of trackers
if (!(fTrackers = [[fDefaults arrayForKey: @"CreatorTrackers"] mutableCopy]))
{
fTrackers = [[NSMutableArray alloc] initWithCapacity: 1];
fTrackers = [[NSMutableArray alloc] init];
//check for single tracker from versions before 1.3
NSString * tracker;
@ -135,12 +138,14 @@
- (void) awakeFromNib
{
[[self window] setRestorationClass: [self class]];
NSString * name = [fPath lastPathComponent];
[[self window] setTitle: name];
[fNameField setStringValue: name];
[fNameField setToolTip: fPath];
[fNameField setToolTip: [fPath path]];
const BOOL multifile = !fInfo->isSingleFile;
@ -170,10 +175,17 @@
[fPiecesField setStringValue: [NSString stringWithFormat: NSLocalizedString(@"%d pieces, %@ each", "Create torrent -> info"),
fInfo->pieceCount, [NSString stringForFileSize: fInfo->pieceSize]]];
fLocation = [[[[fDefaults stringForKey: @"CreatorLocation"] stringByExpandingTildeInPath] stringByAppendingPathComponent:
[name stringByAppendingPathExtension: @"torrent"]] retain];
[fLocationField setStringValue: [fLocation stringByAbbreviatingWithTildeInPath]];
[fLocationField setToolTip: fLocation];
fLocation = [[[fDefaults URLForKey: @"CreatorLocationURL"] URLByAppendingPathComponent: [name stringByAppendingPathExtension: @"torrent"]] retain];
if (!fLocation)
{
//for 2.5 and earlier
#warning we still store "CreatorLocation" in Defaults.plist, and not "CreatorLocationURL"
NSString * location = [fDefaults stringForKey: @"CreatorLocation"];
fLocation = [[NSURL alloc] initFileURLWithPath: [[location stringByExpandingTildeInPath] stringByAppendingPathComponent: [name stringByAppendingPathExtension: @"torrent"]]];
}
NSString * pathString = [fLocation path];
[fLocationField setStringValue: [pathString stringByAbbreviatingWithTildeInPath]];
[fLocationField setToolTip: pathString];
//set previously saved values
if ([fDefaults objectForKey: @"CreatorPrivate"])
@ -197,7 +209,48 @@
[super dealloc];
}
- (void) setLocation: (id) sender
+ (void) restoreWindowWithIdentifier: (NSString *) identifier state: (NSCoder *) state completionHandler: (void (^)(NSWindow *, NSError *)) completionHandler
{
NSURL * path = [state decodeObjectForKey: @"TRCreatorPath"];
if (!path || ![path checkResourceIsReachableAndReturnError: nil])
{
completionHandler(nil, [NSError errorWithDomain: NSURLErrorDomain code: NSURLErrorCannotOpenFile userInfo: nil]);
return;
}
NSWindow * window = [[self createTorrentFile: [(Controller *)[NSApp delegate] sessionHandle] forFile: path] window];
completionHandler(window, nil);
}
- (void) window: (NSWindow *) window willEncodeRestorableState: (NSCoder *) state
{
[state encodeObject: fPath forKey: @"TRCreatorPath"];
[state encodeObject: fLocation forKey: @"TRCreatorLocation"];
[state encodeObject: fTrackers forKey: @"TRCreatorTrackers"];
[state encodeInteger: [fOpenCheck state] forKey: @"TRCreatorOpenCheck"];
[state encodeInteger: [fPrivateCheck state] forKey: @"TRCreatorPrivateCheck"];
[state encodeObject: [fCommentView string] forKey: @"TRCreatorPrivateComment"];
}
- (void) window: (NSWindow *) window didDecodeRestorableState: (NSCoder *) coder
{
#warning done in 3 places - make a separate method
[fLocation release];
fLocation = [[coder decodeObjectForKey: @"TRCreatorLocation"] retain];
NSString * pathString = [fLocation path];
[fLocationField setStringValue: [pathString stringByAbbreviatingWithTildeInPath]];
[fLocationField setToolTip: pathString];
[fTrackers release];
fTrackers = [[coder decodeObjectForKey: @"TRCreatorTrackers"] retain];
[fTrackerTable reloadData];
[fOpenCheck setState: [coder decodeIntegerForKey: @"TRCreatorOpenCheck"]];
[fPrivateCheck setState: [coder decodeIntegerForKey: @"TRCreatorPrivateCheck"]];
[fCommentView setString: [coder decodeObjectForKey: @"TRCreatorPrivateComment"]];
}
- (IBAction) setLocation: (id) sender
{
NSSavePanel * panel = [NSSavePanel savePanel];
@ -208,22 +261,23 @@
[panel setAllowedFileTypes: [NSArray arrayWithObjects: @"org.bittorrent.torrent", @"torrent", nil]];
[panel setCanSelectHiddenExtension: YES];
[panel setDirectoryURL: [NSURL fileURLWithPath: [fLocation stringByDeletingLastPathComponent]]];
[panel setDirectoryURL: [fLocation URLByDeletingLastPathComponent]];
[panel setNameFieldStringValue: [fLocation lastPathComponent]];
[panel beginSheetModalForWindow: [self window] completionHandler: ^(NSInteger result) {
if (result == NSFileHandlingPanelOKButton)
{
[fLocation release];
fLocation = [[[panel URL] path] retain];
fLocation = [[panel URL] retain];
[fLocationField setStringValue: [fLocation stringByAbbreviatingWithTildeInPath]];
[fLocationField setToolTip: fLocation];
NSString * pathString = [fLocation path];
[fLocationField setStringValue: [pathString stringByAbbreviatingWithTildeInPath]];
[fLocationField setToolTip: pathString];
}
}];
}
- (void) create: (id) sender
- (IBAction) create: (id) sender
{
//make sure the trackers are no longer being verified
if ([fTrackerTable editedRow] != -1)
@ -256,7 +310,7 @@
[self createReal];
}
- (void) cancelCreateWindow: (id) sender
- (IBAction) cancelCreateWindow: (id) sender
{
[[self window] close];
}
@ -266,7 +320,7 @@
[self autorelease];
}
- (void) cancelCreateProgress: (id) sender
- (IBAction) cancelCreateProgress: (id) sender
{
fInfo->abortFlag = 1;
[fTimer fire];
@ -282,7 +336,7 @@
return [fTrackers objectAtIndex: row];
}
- (void) addRemoveTracker: (id) sender
- (IBAction) addRemoveTracker: (id) sender
{
//don't allow add/remove when currently adding - it leads to weird results
if ([fTrackerTable editedRow] != -1)
@ -399,7 +453,7 @@
@implementation CreatorWindowController (Private)
+ (NSString *) chooseFile
+ (NSURL *) chooseFile
{
NSOpenPanel * panel = [NSOpenPanel openPanel];
@ -413,7 +467,7 @@
[panel setMessage: NSLocalizedString(@"Select a file or folder for the torrent file.", "Create torrent -> select file")];
BOOL success = [panel runModal] == NSOKButton;
return success ? [[[panel URLs] objectAtIndex: 0] path] : nil;
return success ? [[panel URLs] objectAtIndex: 0] : nil;
}
- (void) createBlankAddressAlertDidEnd: (NSAlert *) alert returnCode: (NSInteger) returnCode contextInfo: (void *) contextInfo
@ -434,7 +488,7 @@
- (void) createReal
{
//check if the location currently exists
if (![[NSFileManager defaultManager] fileExistsAtPath: [fLocation stringByDeletingLastPathComponent]])
if (![[fLocation URLByDeletingLastPathComponent] checkResourceIsReachableAndReturnError: NULL])
{
NSAlert * alert = [[[NSAlert alloc] init] autorelease];
[alert addButtonWithTitle: NSLocalizedString(@"OK", "Create torrent -> directory doesn't exist warning -> button")];
@ -444,7 +498,7 @@
NSLocalizedString(@"The directory \"%@\" does not currently exist. "
"Create this directory or choose a different one to create the torrent file.",
"Create torrent -> directory doesn't exist warning -> warning"),
[fLocation stringByDeletingLastPathComponent]]];
[[fLocation URLByDeletingLastPathComponent] path]]];
[alert setAlertStyle: NSWarningAlertStyle];
[alert beginSheetModalForWindow: [self window] modalDelegate: self didEndSelector: nil contextInfo: nil];
@ -452,7 +506,7 @@
}
//check if a file with the same name and location already exists
if ([[NSFileManager defaultManager] fileExistsAtPath: fLocation])
if ([fLocation checkResourceIsReachableAndReturnError: NULL])
{
NSArray * pathComponents = [fLocation pathComponents];
NSInteger count = [pathComponents count];
@ -485,10 +539,10 @@
[fDefaults setObject: fTrackers forKey: @"CreatorTrackers"];
[fDefaults setBool: [fPrivateCheck state] == NSOnState forKey: @"CreatorPrivate"];
[fDefaults setBool: [fOpenCheck state] == NSOnState forKey: @"CreatorOpen"];
[fDefaults setObject: [fLocation stringByDeletingLastPathComponent] forKey: @"CreatorLocation"];
[fDefaults setURL: [fLocation URLByDeletingLastPathComponent] forKey: @"CreatorLocationURL"];
[[NSNotificationCenter defaultCenter] postNotificationName: @"BeginCreateTorrentFile" object: fLocation userInfo: nil];
tr_makeMetaInfo(fInfo, [fLocation UTF8String], trackerInfo, [fTrackers count], [[fCommentView string] UTF8String],
tr_makeMetaInfo(fInfo, [[fLocation path] UTF8String], trackerInfo, [fTrackers count], [[fCommentView string] UTF8String],
[fPrivateCheck state] == NSOnState);
tr_free(trackerInfo);
@ -507,10 +561,11 @@
switch (fInfo->result)
{
case TR_MAKEMETA_OK:
#warning this isn't safe - what if another window changes it after hitting the create button on this window?
if ([fDefaults boolForKey: @"CreatorOpen"])
{
NSDictionary * dict = [[NSDictionary alloc] initWithObjectsAndKeys: fLocation, @"File",
[fPath stringByDeletingLastPathComponent], @"Path", nil];
NSDictionary * dict = [[NSDictionary alloc] initWithObjectsAndKeys: [fLocation path], @"File",
[[fPath URLByDeletingLastPathComponent] path], @"Path", nil];
[[NSNotificationCenter defaultCenter] postNotificationName: @"OpenCreatedTorrentFile" object: self userInfo: dict];
}

View File

@ -2,13 +2,13 @@
<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="8.00">
<data>
<int key="IBDocument.SystemTarget">1060</int>
<string key="IBDocument.SystemVersion">11B26</string>
<string key="IBDocument.InterfaceBuilderVersion">1617</string>
<string key="IBDocument.AppKitVersion">1138</string>
<string key="IBDocument.HIToolboxVersion">566.00</string>
<string key="IBDocument.SystemVersion">11E53</string>
<string key="IBDocument.InterfaceBuilderVersion">2182</string>
<string key="IBDocument.AppKitVersion">1138.47</string>
<string key="IBDocument.HIToolboxVersion">569.00</string>
<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="NS.object.0">1617</string>
<string key="NS.object.0">2182</string>
</object>
<array key="IBDocument.IntegratedClassDependencies">
<string>NSTableColumn</string>
@ -34,7 +34,10 @@
<array key="IBDocument.PluginDependencies">
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
</array>
<dictionary class="NSMutableDictionary" key="IBDocument.Metadata"/>
<object class="NSMutableDictionary" key="IBDocument.Metadata">
<string key="NS.key.0">PluginDependencyRecalculationVersion</string>
<integer value="1" key="NS.object.0"/>
</object>
<array class="NSMutableArray" key="IBDocument.RootObjects" id="373145165">
<object class="NSCustomObject" id="578092914">
<string key="NSClassName">CreatorWindowController</string>
@ -74,6 +77,7 @@
</set>
<string key="NSFrame">{{20, 334}, {64, 64}}</string>
<reference key="NSSuperview" ref="755547124"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="164784781"/>
<bool key="NSEnabled">YES</bool>
<object class="NSImageCell" key="NSCell" id="446555025">
@ -95,6 +99,7 @@
<int key="NSvFlags">266</int>
<string key="NSFrame">{{89, 367}, {602, 22}}</string>
<reference key="NSSuperview" ref="755547124"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="1020546775"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="750416427">
@ -132,6 +137,7 @@
<int key="NSvFlags">266</int>
<string key="NSFrame">{{89, 342}, {602, 17}}</string>
<reference key="NSSuperview" ref="755547124"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="421942629"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="554993357">
@ -159,9 +165,29 @@
<object class="NSTextView" id="428363936">
<reference key="NSNextResponder" ref="468443008"/>
<int key="NSvFlags">2322</int>
<set class="NSMutableSet" key="NSDragTypes">
<string>Apple HTML pasteboard type</string>
<string>Apple PDF pasteboard type</string>
<string>Apple PICT pasteboard type</string>
<string>Apple PNG pasteboard type</string>
<string>Apple URL pasteboard type</string>
<string>CorePasteboardFlavorType 0x6D6F6F76</string>
<string>NSColor pasteboard type</string>
<string>NSFilenamesPboardType</string>
<string>NSStringPboardType</string>
<string>NeXT Encapsulated PostScript v1.2 pasteboard type</string>
<string>NeXT RTFD pasteboard type</string>
<string>NeXT Rich Text Format v1.0 pasteboard type</string>
<string>NeXT TIFF v4.0 pasteboard type</string>
<string>NeXT font pasteboard type</string>
<string>NeXT ruler pasteboard type</string>
<string>WebURLsWithTitlesPboardType</string>
<string>public.url</string>
</set>
<string key="NSFrameSize">{583, 14}</string>
<reference key="NSSuperview" ref="468443008"/>
<reference key="NSNextKeyView" ref="704686863"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="947788581"/>
<object class="NSTextContainer" key="NSTextContainer" id="742813744">
<object class="NSLayoutManager" key="NSLayoutManager">
<object class="NSTextStorage" key="NSTextStorage">
@ -222,6 +248,7 @@
</array>
<string key="NSFrame">{{1, 1}, {583, 73}}</string>
<reference key="NSSuperview" ref="1007617591"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="428363936"/>
<reference key="NSDocView" ref="428363936"/>
<reference key="NSBGColor" ref="885755327"/>
@ -256,6 +283,7 @@ AAEAAQAAAT0AAwAAAAEAAgAAAVIAAwAAAAEAAQAAAVMAAwAAAAIAAQABAAAAAA</bytes>
<int key="NSvFlags">256</int>
<string key="NSFrame">{{569, 1}, {15, 73}}</string>
<reference key="NSSuperview" ref="1007617591"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="22400418"/>
<reference key="NSTarget" ref="1007617591"/>
<string key="NSAction">_doScroller:</string>
@ -266,6 +294,7 @@ AAEAAQAAAT0AAwAAAAEAAgAAAVIAAwAAAAEAAQAAAVMAAwAAAAIAAQABAAAAAA</bytes>
<int key="NSvFlags">-2147483392</int>
<string key="NSFrame">{{-100, -100}, {87, 18}}</string>
<reference key="NSSuperview" ref="1007617591"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="468443008"/>
<int key="NSsFlags">1</int>
<reference key="NSTarget" ref="1007617591"/>
@ -276,7 +305,8 @@ AAEAAQAAAT0AAwAAAAEAAgAAAVIAAwAAAAEAAQAAAVMAAwAAAAIAAQABAAAAAA</bytes>
</array>
<string key="NSFrame">{{103, 121}, {585, 75}}</string>
<reference key="NSSuperview" ref="755547124"/>
<reference key="NSNextKeyView" ref="468443008"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="704686863"/>
<int key="NSsFlags">133138</int>
<reference key="NSVScroller" ref="947788581"/>
<reference key="NSHScroller" ref="704686863"/>
@ -287,6 +317,7 @@ AAEAAQAAAT0AAwAAAAEAAgAAAVIAAwAAAAEAAQAAAVMAAwAAAAIAAQABAAAAAA</bytes>
<int key="NSvFlags">292</int>
<string key="NSFrame">{{28, 179}, {70, 17}}</string>
<reference key="NSSuperview" ref="755547124"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="1007617591"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="4035248">
@ -304,6 +335,7 @@ AAEAAQAAAT0AAwAAAAEAAgAAAVIAAwAAAAEAAQAAAVMAAwAAAAIAAQABAAAAAA</bytes>
<int key="NSvFlags">268</int>
<string key="NSFrame">{{35, 309}, {63, 17}}</string>
<reference key="NSSuperview" ref="755547124"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="453590654"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="47808571">
@ -321,6 +353,7 @@ AAEAAQAAAT0AAwAAAAEAAgAAAVIAAwAAAAEAAQAAAVMAAwAAAAIAAQABAAAAAA</bytes>
<int key="NSvFlags">290</int>
<string key="NSFrame">{{12, 85}, {684, 5}}</string>
<reference key="NSSuperview" ref="755547124"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="631224046"/>
<string key="NSOffsets">{0, 0}</string>
<object class="NSTextFieldCell" key="NSTitleCell">
@ -349,6 +382,7 @@ AAEAAQAAAT0AAwAAAAEAAgAAAVIAAwAAAAEAAQAAAVMAAwAAAAIAAQABAAAAAA</bytes>
<int key="NSvFlags">289</int>
<string key="NSFrame">{{615, 53}, {78, 28}}</string>
<reference key="NSSuperview" ref="755547124"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="631380462"/>
<bool key="NSEnabled">YES</bool>
<object class="NSButtonCell" key="NSCell" id="420120600">
@ -381,6 +415,7 @@ AAEAAQAAAT0AAwAAAAEAAgAAAVIAAwAAAAEAAQAAAVMAAwAAAAIAAQABAAAAAA</bytes>
<int key="NSvFlags">292</int>
<string key="NSFrame">{{17, 60}, {81, 17}}</string>
<reference key="NSSuperview" ref="755547124"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="795084797"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="563122478">
@ -398,6 +433,7 @@ AAEAAQAAAT0AAwAAAAEAAgAAAVIAAwAAAAEAAQAAAVMAAwAAAAIAAQABAAAAAA</bytes>
<int key="NSvFlags">290</int>
<string key="NSFrame">{{123, 45}, {492, 30}}</string>
<reference key="NSSuperview" ref="755547124"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="833650385"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="649106243">
@ -423,6 +459,7 @@ AAEAAQAAAT0AAwAAAAEAAgAAAVIAAwAAAAEAAQAAAVMAAwAAAAIAAQABAAAAAA</bytes>
</set>
<string key="NSFrame">{{103, 60}, {16, 16}}</string>
<reference key="NSSuperview" ref="755547124"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="371133969"/>
<bool key="NSEnabled">YES</bool>
<object class="NSImageCell" key="NSCell" id="474237929">
@ -444,6 +481,7 @@ AAEAAQAAAT0AAwAAAAEAAgAAAVIAAwAAAAEAAQAAAVMAAwAAAAIAAQABAAAAAA</bytes>
<int key="NSvFlags">292</int>
<string key="NSFrame">{{101, 97}, {65, 18}}</string>
<reference key="NSSuperview" ref="755547124"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="644564296"/>
<bool key="NSEnabled">YES</bool>
<object class="NSButtonCell" key="NSCell" id="240082396">
@ -472,6 +510,8 @@ AAEAAQAAAT0AAwAAAAEAAgAAAVIAAwAAAAEAAQAAAVMAAwAAAAIAAQABAAAAAA</bytes>
<int key="NSvFlags">289</int>
<string key="NSFrame">{{613, 12}, {81, 32}}</string>
<reference key="NSSuperview" ref="755547124"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView"/>
<bool key="NSEnabled">YES</bool>
<object class="NSButtonCell" key="NSCell" id="671503663">
<int key="NSCellFlags">67239424</int>
@ -493,6 +533,7 @@ AAEAAQAAAT0AAwAAAAEAAgAAAVIAAwAAAAEAAQAAAVMAAwAAAAIAAQABAAAAAA</bytes>
<int key="NSvFlags">289</int>
<string key="NSFrame">{{531, 12}, {82, 32}}</string>
<reference key="NSSuperview" ref="755547124"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="697506694"/>
<bool key="NSEnabled">YES</bool>
<object class="NSButtonCell" key="NSCell" id="600879109">
@ -515,6 +556,7 @@ AAEAAQAAAT0AAwAAAAEAAgAAAVIAAwAAAAEAAQAAAVMAAwAAAAIAAQABAAAAAA</bytes>
<int key="NSvFlags">290</int>
<string key="NSFrame">{{169, 98}, {522, 17}}</string>
<reference key="NSSuperview" ref="755547124"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="490783512"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="937588090">
@ -532,6 +574,7 @@ AAEAAQAAAT0AAwAAAAEAAgAAAVIAAwAAAAEAAQAAAVMAAwAAAAIAAQABAAAAAA</bytes>
<int key="NSvFlags">292</int>
<string key="NSFrame">{{101, 21}, {144, 18}}</string>
<reference key="NSSuperview" ref="755547124"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="142097578"/>
<bool key="NSEnabled">YES</bool>
<object class="NSButtonCell" key="NSCell" id="813600242">
@ -562,7 +605,8 @@ AAEAAQAAAT0AAwAAAAEAAgAAAVIAAwAAAAEAAQAAAVMAAwAAAAIAAQABAAAAAA</bytes>
<int key="NSvFlags">256</int>
<string key="NSFrameSize">{583, 94}</string>
<reference key="NSSuperview" ref="87995314"/>
<reference key="NSNextKeyView" ref="864982587"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="512681079"/>
<bool key="NSEnabled">YES</bool>
<object class="_NSCornerView" key="NSCornerView">
<nil key="NSNextResponder"/>
@ -636,6 +680,7 @@ AAEAAQAAAT0AAwAAAAEAAgAAAVIAAwAAAAEAAQAAAVMAAwAAAAIAAQABAAAAAA</bytes>
</array>
<string key="NSFrame">{{1, 1}, {583, 94}}</string>
<reference key="NSSuperview" ref="453590654"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="910757453"/>
<reference key="NSDocView" ref="910757453"/>
<reference key="NSBGColor" ref="844220701"/>
@ -646,6 +691,7 @@ AAEAAQAAAT0AAwAAAAEAAgAAAVIAAwAAAAEAAQAAAVMAAwAAAAIAAQABAAAAAA</bytes>
<int key="NSvFlags">256</int>
<string key="NSFrame">{{569, 1}, {15, 94}}</string>
<reference key="NSSuperview" ref="453590654"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="904557624"/>
<reference key="NSTarget" ref="453590654"/>
<string key="NSAction">_doScroller:</string>
@ -656,6 +702,7 @@ AAEAAQAAAT0AAwAAAAEAAgAAAVIAAwAAAAEAAQAAAVMAAwAAAAIAAQABAAAAAA</bytes>
<int key="NSvFlags">-2147483392</int>
<string key="NSFrame">{{-100, -100}, {344, 15}}</string>
<reference key="NSSuperview" ref="453590654"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="87995314"/>
<int key="NSsFlags">1</int>
<reference key="NSTarget" ref="453590654"/>
@ -665,7 +712,8 @@ AAEAAQAAAT0AAwAAAAEAAgAAAVIAAwAAAAEAAQAAAVMAAwAAAAIAAQABAAAAAA</bytes>
</array>
<string key="NSFrame">{{103, 230}, {585, 96}}</string>
<reference key="NSSuperview" ref="755547124"/>
<reference key="NSNextKeyView" ref="87995314"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="864982587"/>
<int key="NSsFlags">133138</int>
<reference key="NSVScroller" ref="512681079"/>
<reference key="NSHScroller" ref="864982587"/>
@ -677,6 +725,7 @@ AAEAAQAAAT0AAwAAAAEAAgAAAVIAAwAAAAEAAQAAAVMAAwAAAAIAAQABAAAAAA</bytes>
<int key="NSvFlags">292</int>
<string key="NSFrame">{{103, 203}, {67, 23}}</string>
<reference key="NSSuperview" ref="755547124"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="415165203"/>
<bool key="NSEnabled">YES</bool>
<object class="NSSegmentedCell" key="NSCell" id="708229191">
@ -715,6 +764,7 @@ AAEAAQAAAT0AAwAAAAEAAgAAAVIAAwAAAAEAAQAAAVMAAwAAAAIAAQABAAAAAA</bytes>
<int key="NSvFlags">290</int>
<string key="NSFrame">{{175, 207}, {516, 14}}</string>
<reference key="NSSuperview" ref="755547124"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="38646839"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="35173837">
@ -738,16 +788,17 @@ AAEAAQAAAT0AAwAAAAEAAgAAAVIAAwAAAAEAAQAAAVMAAwAAAAIAAQABAAAAAA</bytes>
</array>
<string key="NSFrameSize">{708, 408}</string>
<reference key="NSSuperview"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="452137672"/>
</object>
<string key="NSScreenRect">{{0, 0}, {2560, 1440}}</string>
<string key="NSMinSize">{440, 372}</string>
<string key="NSMaxSize">{10000000000000, 10000000000000}</string>
<string key="NSFrameAutosaveName">CreatorWindow</string>
<bool key="NSWindowIsRestorable">NO</bool>
<bool key="NSWindowIsRestorable">YES</bool>
</object>
<object class="NSCustomView" id="313634217">
<reference key="NSNextResponder"/>
<nil key="NSNextResponder"/>
<int key="NSvFlags">256</int>
<array class="NSMutableArray" key="NSSubviews">
<object class="NSProgressIndicator" id="162810738">
@ -800,7 +851,6 @@ AAEAAQAAAT0AAwAAAAEAAgAAAVIAAwAAAAEAAQAAAVMAAwAAAAIAAQABAAAAAA</bytes>
</object>
</array>
<string key="NSFrameSize">{348, 84}</string>
<reference key="NSSuperview"/>
<object class="NSMutableString" key="NSClassName">
<characters key="NS.bytes">NSView</characters>
</object>
@ -886,14 +936,6 @@ AAEAAQAAAT0AAwAAAAEAAgAAAVIAAwAAAAEAAQAAAVMAAwAAAAIAAQABAAAAAA</bytes>
</object>
<int key="connectionID">39</int>
</object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
<string key="label">delegate</string>
<reference key="source" ref="742202125"/>
<reference key="destination" ref="578092914"/>
</object>
<int key="connectionID">40</int>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">cancelCreateWindow:</string>
@ -950,22 +992,6 @@ AAEAAQAAAT0AAwAAAAEAAgAAAVIAAwAAAAEAAQAAAVMAAwAAAAIAAQABAAAAAA</bytes>
</object>
<int key="connectionID">99</int>
</object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
<string key="label">dataSource</string>
<reference key="source" ref="910757453"/>
<reference key="destination" ref="578092914"/>
</object>
<int key="connectionID">100</int>
</object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
<string key="label">delegate</string>
<reference key="source" ref="910757453"/>
<reference key="destination" ref="578092914"/>
</object>
<int key="connectionID">101</int>
</object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
<string key="label">fTrackerAddRemoveControl</string>
@ -982,6 +1008,30 @@ AAEAAQAAAT0AAwAAAAEAAgAAAVIAAwAAAAEAAQAAAVMAAwAAAAIAAQABAAAAAA</bytes>
</object>
<int key="connectionID">106</int>
</object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
<string key="label">delegate</string>
<reference key="source" ref="742202125"/>
<reference key="destination" ref="578092914"/>
</object>
<int key="connectionID">40</int>
</object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
<string key="label">dataSource</string>
<reference key="source" ref="910757453"/>
<reference key="destination" ref="578092914"/>
</object>
<int key="connectionID">100</int>
</object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
<string key="label">delegate</string>
<reference key="source" ref="910757453"/>
<reference key="destination" ref="578092914"/>
</object>
<int key="connectionID">101</int>
</object>
</array>
<object class="IBMutableOrderedSet" key="objectRecords">
<array key="orderedObjects">
@ -1438,9 +1488,113 @@ AAEAAQAAAT0AAwAAAAEAAgAAAVIAAwAAAAEAAQAAAVMAAwAAAAIAAQABAAAAAA</bytes>
<nil key="activeLocalization"/>
<dictionary class="NSMutableDictionary" key="localizations"/>
<nil key="sourceID"/>
<int key="maxID">108</int>
<int key="maxID">109</int>
</object>
<object class="IBClassDescriber" key="IBDocument.Classes">
<array class="NSMutableArray" key="referencedPartialClassDescriptions">
<object class="IBPartialClassDescription">
<string key="className">CreatorWindowController</string>
<string key="superclassName">NSWindowController</string>
<dictionary class="NSMutableDictionary" key="actions">
<string key="addRemoveTracker:">id</string>
<string key="cancelCreateProgress:">id</string>
<string key="cancelCreateWindow:">id</string>
<string key="create:">id</string>
<string key="setLocation:">id</string>
</dictionary>
<dictionary class="NSMutableDictionary" key="actionInfosByName">
<object class="IBActionInfo" key="addRemoveTracker:">
<string key="name">addRemoveTracker:</string>
<string key="candidateClassName">id</string>
</object>
<object class="IBActionInfo" key="cancelCreateProgress:">
<string key="name">cancelCreateProgress:</string>
<string key="candidateClassName">id</string>
</object>
<object class="IBActionInfo" key="cancelCreateWindow:">
<string key="name">cancelCreateWindow:</string>
<string key="candidateClassName">id</string>
</object>
<object class="IBActionInfo" key="create:">
<string key="name">create:</string>
<string key="candidateClassName">id</string>
</object>
<object class="IBActionInfo" key="setLocation:">
<string key="name">setLocation:</string>
<string key="candidateClassName">id</string>
</object>
</dictionary>
<dictionary class="NSMutableDictionary" key="outlets">
<string key="fCommentView">NSTextView</string>
<string key="fIconView">NSImageView</string>
<string key="fLocationField">NSTextField</string>
<string key="fNameField">NSTextField</string>
<string key="fOpenCheck">NSButton</string>
<string key="fPiecesField">NSTextField</string>
<string key="fPrivateCheck">NSButton</string>
<string key="fProgressIndicator">NSProgressIndicator</string>
<string key="fProgressView">NSView</string>
<string key="fStatusField">NSTextField</string>
<string key="fTrackerAddRemoveControl">NSSegmentedControl</string>
<string key="fTrackerTable">NSTableView</string>
</dictionary>
<dictionary class="NSMutableDictionary" key="toOneOutletInfosByName">
<object class="IBToOneOutletInfo" key="fCommentView">
<string key="name">fCommentView</string>
<string key="candidateClassName">NSTextView</string>
</object>
<object class="IBToOneOutletInfo" key="fIconView">
<string key="name">fIconView</string>
<string key="candidateClassName">NSImageView</string>
</object>
<object class="IBToOneOutletInfo" key="fLocationField">
<string key="name">fLocationField</string>
<string key="candidateClassName">NSTextField</string>
</object>
<object class="IBToOneOutletInfo" key="fNameField">
<string key="name">fNameField</string>
<string key="candidateClassName">NSTextField</string>
</object>
<object class="IBToOneOutletInfo" key="fOpenCheck">
<string key="name">fOpenCheck</string>
<string key="candidateClassName">NSButton</string>
</object>
<object class="IBToOneOutletInfo" key="fPiecesField">
<string key="name">fPiecesField</string>
<string key="candidateClassName">NSTextField</string>
</object>
<object class="IBToOneOutletInfo" key="fPrivateCheck">
<string key="name">fPrivateCheck</string>
<string key="candidateClassName">NSButton</string>
</object>
<object class="IBToOneOutletInfo" key="fProgressIndicator">
<string key="name">fProgressIndicator</string>
<string key="candidateClassName">NSProgressIndicator</string>
</object>
<object class="IBToOneOutletInfo" key="fProgressView">
<string key="name">fProgressView</string>
<string key="candidateClassName">NSView</string>
</object>
<object class="IBToOneOutletInfo" key="fStatusField">
<string key="name">fStatusField</string>
<string key="candidateClassName">NSTextField</string>
</object>
<object class="IBToOneOutletInfo" key="fTrackerAddRemoveControl">
<string key="name">fTrackerAddRemoveControl</string>
<string key="candidateClassName">NSSegmentedControl</string>
</object>
<object class="IBToOneOutletInfo" key="fTrackerTable">
<string key="name">fTrackerTable</string>
<string key="candidateClassName">NSTableView</string>
</object>
</dictionary>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBProjectSource</string>
<string key="minorKey">./Classes/CreatorWindowController.h</string>
</object>
</object>
</array>
</object>
<object class="IBClassDescriber" key="IBDocument.Classes"/>
<int key="IBDocument.localizationMode">0</int>
<string key="IBDocument.TargetRuntimeIdentifier">IBCocoaFramework</string>
<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencies">
@ -1449,7 +1603,7 @@ AAEAAQAAAT0AAwAAAAEAAgAAAVIAAwAAAAEAAQAAAVMAAwAAAAIAAQABAAAAAA</bytes>
</object>
<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencyDefaults">
<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.macosx</string>
<integer value="1060" key="NS.object.0"/>
<real value="1070" key="NS.object.0"/>
</object>
<bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
<int key="IBDocument.defaultPropertyAccessControl">3</int>