From 2823daeb4f24a68dede9f4bf2d699f0f7ab2f75a Mon Sep 17 00:00:00 2001 From: Alex Rozanski Date: Sat, 9 Jan 2010 19:01:39 +0000 Subject: [PATCH] Initial commit --- Classes/AppDelegate.h | 20 + Classes/AppDelegate.m | 181 + Classes/PXSourceList.h | 37 + Classes/PXSourceList.m | 880 ++++ Classes/PXSourceListDataSource.h | 43 + Classes/PXSourceListDelegate.h | 61 + Classes/SourceListItem.h | 53 + Classes/SourceListItem.m | 84 + PXSourceList-Info.plist | 32 + PXSourceList.xcodeproj/alexrozanski.pbxuser | 1239 +++++ .../alexrozanski.perspectivev3 | 1532 ++++++ PXSourceList.xcodeproj/project.pbxproj | 353 ++ PXSourceList_Prefix.pch | 7 + README.markdown | 60 + Resources/DocSet-Info.plist | 12 + Resources/English.lproj/InfoPlist.strings | 2 + Resources/MainMenu.xib | 4419 +++++++++++++++++ Resources/audiobooks.png | Bin 0 -> 415 bytes Resources/movies.png | Bin 0 -> 654 bytes Resources/music.png | Bin 0 -> 721 bytes Resources/playlist.png | Bin 0 -> 671 bytes Resources/playlistFolder.png | Bin 0 -> 511 bytes Resources/podcasts.png | Bin 0 -> 702 bytes TODO.rtf | 13 + main.m | 14 + 25 files changed, 9042 insertions(+) create mode 100644 Classes/AppDelegate.h create mode 100644 Classes/AppDelegate.m create mode 100644 Classes/PXSourceList.h create mode 100644 Classes/PXSourceList.m create mode 100644 Classes/PXSourceListDataSource.h create mode 100644 Classes/PXSourceListDelegate.h create mode 100644 Classes/SourceListItem.h create mode 100644 Classes/SourceListItem.m create mode 100644 PXSourceList-Info.plist create mode 100644 PXSourceList.xcodeproj/alexrozanski.pbxuser create mode 100644 PXSourceList.xcodeproj/alexrozanski.perspectivev3 create mode 100644 PXSourceList.xcodeproj/project.pbxproj create mode 100644 PXSourceList_Prefix.pch create mode 100644 README.markdown create mode 100644 Resources/DocSet-Info.plist create mode 100644 Resources/English.lproj/InfoPlist.strings create mode 100644 Resources/MainMenu.xib create mode 100755 Resources/audiobooks.png create mode 100755 Resources/movies.png create mode 100755 Resources/music.png create mode 100755 Resources/playlist.png create mode 100755 Resources/playlistFolder.png create mode 100755 Resources/podcasts.png create mode 100644 TODO.rtf create mode 100644 main.m diff --git a/Classes/AppDelegate.h b/Classes/AppDelegate.h new file mode 100644 index 0000000..5634782 --- /dev/null +++ b/Classes/AppDelegate.h @@ -0,0 +1,20 @@ +// +// AppDelegate.h +// PXSourceList +// +// Created by Alex Rozanski on 08/01/2010. +// Copyright 2010 Alex Rozanski http://perspx.com +// + +#import + +#import "PXSourceList.h" + +@interface AppDelegate : NSObject { + IBOutlet PXSourceList *sourceList; + IBOutlet NSTextField *selectedItemLabel; + + NSMutableArray *sourceListItems; +} + +@end diff --git a/Classes/AppDelegate.m b/Classes/AppDelegate.m new file mode 100644 index 0000000..14a247d --- /dev/null +++ b/Classes/AppDelegate.m @@ -0,0 +1,181 @@ +// +// AppDelegate.m +// PXSourceList +// +// Created by Alex Rozanski on 08/01/2010. +// Copyright 2010 Alex Rozanski http://perspx.com +// + +#import "AppDelegate.h" + +#import "SourceListItem.h" + +@implementation AppDelegate + +//MARK: - + +#pragma mark Init/Dealloc + +- (void)awakeFromNib +{ + [selectedItemLabel setStringValue:@"(none)"]; + + sourceListItems = [[NSMutableArray alloc] init]; + + //Set up the "Library" parent item and children + SourceListItem *libraryItem = [SourceListItem itemWithTitle:@"LIBRARY" identifier:@"library"]; + SourceListItem *musicItem = [SourceListItem itemWithTitle:@"Music" identifier:@"music"]; + [musicItem setIcon:[NSImage imageNamed:@"music.png"]]; + SourceListItem *moviesItem = [SourceListItem itemWithTitle:@"Movies" identifier:@"movies"]; + [moviesItem setIcon:[NSImage imageNamed:@"movies.png"]]; + SourceListItem *podcastsItem = [SourceListItem itemWithTitle:@"Podcasts" identifier:@"podcasts"]; + [podcastsItem setIcon:[NSImage imageNamed:@"podcasts.png"]]; + [podcastsItem setBadgeValue:10]; + SourceListItem *audiobooksItem = [SourceListItem itemWithTitle:@"Audiobooks" identifier:@"audiobooks"]; + [audiobooksItem setIcon:[NSImage imageNamed:@"audiobooks.png"]]; + [libraryItem setChildren:[NSArray arrayWithObjects:musicItem, moviesItem, podcastsItem, + audiobooksItem, nil]]; + + //Set up the "Playlists" parent item and children + SourceListItem *playlistsItem = [SourceListItem itemWithTitle:@"PLAYLISTS" identifier:@"playlists"]; + SourceListItem *playlist1Item = [SourceListItem itemWithTitle:@"Playlist1" identifier:@"playlist1"]; + + //Create a second-level group to demonstrate + SourceListItem *playlist2Item = [SourceListItem itemWithTitle:@"Playlist2" identifier:@"playlist2"]; + SourceListItem *playlist3Item = [SourceListItem itemWithTitle:@"Playlist3" identifier:@"playlist3"]; + [playlist1Item setIcon:[NSImage imageNamed:@"playlist.png"]]; + [playlist2Item setIcon:[NSImage imageNamed:@"playlist.png"]]; + [playlist3Item setIcon:[NSImage imageNamed:@"playlist.png"]]; + + SourceListItem *playlistGroup = [SourceListItem itemWithTitle:@"Playlist Group" identifier:@"playlistgroup"]; + SourceListItem *playlistGroupItem = [SourceListItem itemWithTitle:@"Child Playlist" identifier:@"childplaylist"]; + [playlistGroup setIcon:[NSImage imageNamed:@"playlistFolder.png"]]; + [playlistGroupItem setIcon:[NSImage imageNamed:@"playlist.png"]]; + [playlistGroup setChildren:[NSArray arrayWithObject:playlistGroupItem]]; + + [playlistsItem setChildren:[NSArray arrayWithObjects:playlist1Item, playlistGroup,playlist2Item, + playlist3Item, nil]]; + + [sourceListItems addObject:libraryItem]; + [sourceListItems addObject:playlistsItem]; + + [sourceList reloadData]; +} + +- (void)dealloc +{ + [sourceListItems release]; + + [super dealloc]; +} + +//MARK: - + +#pragma mark Source List Data Source Methods + +- (NSUInteger)sourceList:(PXSourceList*)sourceList numberOfChildrenOfItem:(id)item +{ + //Works the same way as the NSOutlineView data source: `nil` means a parent item + if(item==nil) { + return [sourceListItems count]; + } + else { + return [[item children] count]; + } +} + + +- (id)sourceList:(PXSourceList*)aSourceList child:(NSUInteger)index ofItem:(id)item +{ + //Works the same way as the NSOutlineView data source: `nil` means a parent item + if(item==nil) { + return [sourceListItems objectAtIndex:index]; + } + else { + return [[item children] objectAtIndex:index]; + } +} + + +- (id)sourceList:(PXSourceList*)aSourceList objectValueForItem:(id)item +{ + return [item title]; +} + + +- (void)sourceList:(PXSourceList*)aSourceList setObjectValue:(id)object forItem:(id)item +{ + [item setTitle:object]; +} + + +- (BOOL)sourceList:(PXSourceList*)aSourceList isItemExpandable:(id)item +{ + return [item hasChildren]; +} + + +- (BOOL)sourceList:(PXSourceList*)aSourceList itemHasBadge:(id)item +{ + return [item hasBadge]; +} + + +- (NSInteger)sourceList:(PXSourceList*)aSourceList badgeValueForItem:(id)item +{ + return [item badgeValue]; +} + + +- (BOOL)sourceList:(PXSourceList*)aSourceList itemHasIcon:(id)item +{ + return [item hasIcon]; +} + + +- (NSImage*)sourceList:(PXSourceList*)aSourceList iconForItem:(id)item +{ + return [item icon]; +} + +//MARK: - + +#pragma mark Source List Delegate Methods + +- (BOOL)sourceList:(PXSourceList*)aSourceList isGroupAlwaysExpanded:(id)group +{ + if([[group identifier] isEqualToString:@"library"]) + return YES; + + return NO; +} + + +- (void)sourceListSelectionDidChange:(NSNotification *)notification +{ + NSIndexSet *selectedIndexes = [sourceList selectedRowIndexes]; + + //Set the label text to represent the new selection + if([selectedIndexes count]>1) + [selectedItemLabel setStringValue:@"(multiple)"]; + else if([selectedIndexes count]==1) { + NSString *identifier = [[sourceList itemAtRow:[selectedIndexes firstIndex]] identifier]; + + [selectedItemLabel setStringValue:identifier]; + } + else { + [selectedItemLabel setStringValue:@"(none)"]; + } +} + + +- (void)sourceListDeleteKeyPressedOnRows:(NSNotification *)notification +{ + NSIndexSet *rows = [[notification userInfo] objectForKey:@"rows"]; + + NSLog(@"Delete key pressed on rows %@", rows); + + //Do something here +} + +@end diff --git a/Classes/PXSourceList.h b/Classes/PXSourceList.h new file mode 100644 index 0000000..10bbbf8 --- /dev/null +++ b/Classes/PXSourceList.h @@ -0,0 +1,37 @@ +// +// PXSourceList.h +// PXSourceList +// +// Created by Alex Rozanski on 05/09/2009. +// Copyright 2009-10 Alex Rozanski http://perspx.com +// + +#import + +#import "PXSourceListDelegate.h" +#import "PXSourceListDataSource.h" + +@interface PXSourceList: NSOutlineView +{ + id _secondaryDelegate; //Used to store the publicly visible delegate + id _secondaryDataSource; //Used to store the publicly visible data source + + NSSize _iconSize; //The size of icons in the Source List. Defaults to 16x16 + BOOL _isRowRightClicked; //Whether an item has been right-clicked + NSUInteger _rightClickedRowIndex; //The index of the item that has been right-clicked +} + +@property NSSize iconSize; + +@property (assign) id dataSource; +@property (assign) id delegate; + +- (NSUInteger)numberOfGroups; //Returns the number of groups in the Source List +- (BOOL)isGroupItem:(id)item; //Returns whether `item` is a group +- (BOOL)isGroupAlwaysExpanded:(id)group; //Returns whether `group` is displayed as always expanded + +- (BOOL)itemHasBadge:(id)item; //Returns whether `item` has a badge +- (NSInteger)badgeValueForItem:(id)item; //Returns the badge value for `item` + +@end + diff --git a/Classes/PXSourceList.m b/Classes/PXSourceList.m new file mode 100644 index 0000000..4aafe20 --- /dev/null +++ b/Classes/PXSourceList.m @@ -0,0 +1,880 @@ +// +// PXSourceList.m +// PXSourceList +// +// Created by Alex Rozanski on 05/09/2009. +// Copyright 2009-10 Alex Rozanski http://perspx.com +// + + +#import "PXSourceList.h" + +//Layout constants +#define MIN_BADGE_WIDTH 22.0 //The minimum badge width for each item (default 22.0) +#define BADGE_HEIGHT 14.0 //The badge height for each item (default 14.0) +#define BADGE_MARGIN 5.0 //The spacing between the badge and the cell for that row +#define ROW_RIGHT_MARGIN 5.0 //The spacing between the right edge of the badge and the edge of the table column +#define ICON_SPACING 2.0 //The spacing between the icon and it's adjacent cell +#define DISCLOSURE_TRIANGLE_SPACE 18.0 //The indentation reserved for disclosure triangles for non-group items + +//Drawing constants +#define BADGE_BACKGROUND_COLOR [NSColor colorWithCalibratedRed:(152/255.0) green:(168/255.0) blue:(202/255.0) alpha:1] +#define BADGE_HIDDEN_BACKGROUND_COLOR [NSColor colorWithDeviceWhite:(180/255.0) alpha:1] +#define BADGE_SELECTED_TEXT_COLOR [NSColor keyboardFocusIndicatorColor] +#define BADGE_SELECTED_UNFOCUSED_TEXT_COLOR [NSColor colorWithCalibratedRed:(153/255.0) green:(169/255.0) blue:(203/255.0) alpha:1] +#define BADGE_SELECTED_HIDDEN_TEXT_COLOR [NSColor colorWithCalibratedWhite:(170/255.0) alpha:1] +#define BADGE_FONT [NSFont boldSystemFontOfSize:11] + +#define RIGHT_CLICKED_BGCOLOR [NSColor colorWithCalibratedRed:(207/255.0) green:(221/255.0) blue:(247/255.0) alpha:1] +#define RIGHT_CLICKED_OUTLINE_COLOR [NSColor colorWithCalibratedRed:(84/255.0) green:(101/255.0) blue:(226/255.0) alpha:1] +#define RIGHT_CLICKED_SELECTED_OUTLINE_COLOR [NSColor whiteColor] + +//Delegate notification constants +NSString * const PXSLSelectionIsChangingNotification = @"PXSourceListSelectionIsChanging"; +NSString * const PXSLSelectionDidChangeNotification = @"PXSourceListSelectionDidChange"; +NSString * const PXSLItemWillExpandNotification = @"PXSourceListItemWillExpand"; +NSString * const PXSLItemDidExpandNotification = @"PXSourceListItemDidExpand"; +NSString * const PXSLItemWillCollapseNotification = @"PXSourceListItemWillCollapse"; +NSString * const PXSLItemDidCollapseNotification = @"PXSourceListItemDidCollapse"; +NSString * const PXSLDeleteKeyPressedOnRowsNotification = @"PXSourceListDeleteKeyPressedOnRows"; + +@interface PXSourceList () + +- (NSSize)sizeOfBadgeAtRow:(NSInteger)rowIndex; +- (void)drawBadgeForRow:(NSInteger)rowIndex inRect:(NSRect)badgeFrame; +- (void)registerDelegateToReceiveNotification:(NSString*)notification withSelector:(SEL)selector; + +@end + + +//MARK: - + +@implementation PXSourceList + +@synthesize iconSize = _iconSize; +@dynamic dataSource; +@dynamic delegate; + +#pragma mark Init/Dealloc + +- (id)initWithCoder:(NSCoder*)decoder +{ + if(self=[super initWithCoder:decoder]) + { + [self setDelegate:(id)[super delegate]]; + [super setDelegate:self]; + + [self setDataSource:(id)[super dataSource]]; + [super setDataSource:self]; + + _iconSize = NSMakeSize(16,16); + } + + return self; +} + +- (void)dealloc +{ + //Remove ourselves as the delegate and data source to be safe + [super setDataSource:nil]; + [super setDelegate:nil]; + + [super dealloc]; +} + +//MARK: - + +#pragma mark Custom Accessors + +- (void)setDelegate:(id)aDelegate +{ + //Unregister the old delegate from receiving notifications + [[NSNotificationCenter defaultCenter] removeObserver:_secondaryDelegate name:nil object:self]; + + _secondaryDelegate = aDelegate; + + //Register the new delegate to receive notifications + [self registerDelegateToReceiveNotification:PXSLSelectionIsChangingNotification + withSelector:@selector(sourceListSelectionIsChanging:)]; + [self registerDelegateToReceiveNotification:PXSLSelectionDidChangeNotification + withSelector:@selector(sourceListSelectionDidChange:)]; + [self registerDelegateToReceiveNotification:PXSLItemWillExpandNotification + withSelector:@selector(sourceListItemWillExpand:)]; + [self registerDelegateToReceiveNotification:PXSLItemDidExpandNotification + withSelector:@selector(sourceListItemDidExpand:)]; + [self registerDelegateToReceiveNotification:PXSLItemWillCollapseNotification + withSelector:@selector(sourceListItemWillCollapse:)]; + [self registerDelegateToReceiveNotification:PXSLItemDidCollapseNotification + withSelector:@selector(sourceListItemWillCollapse:)]; + [self registerDelegateToReceiveNotification:PXSLDeleteKeyPressedOnRowsNotification + withSelector:@selector(sourceListDeleteKeyPressedOnRows:)]; +} + + +- (void)setDataSource:(id)aDataSource +{ + _secondaryDataSource = aDataSource; + + [self reloadData]; +} + +- (void)setIconSize:(NSSize)newIconSize +{ + _iconSize = newIconSize; + + CGFloat rowHeight = [self rowHeight]; + + //Make sure icon height does not exceed row height; if so constrain, keeping width and height in proportion + if(_iconSize.height>rowHeight) + { + _iconSize.width = _iconSize.width * (rowHeight/_iconSize.height); + _iconSize.height = rowHeight; + } +} + +//MARK: - + +#pragma mark Data Management + +- (void)reloadData +{ + [super reloadData]; + + //Expand items that are displayed as always expanded + if([_secondaryDataSource conformsToProtocol:@protocol(PXSourceListDataSource)] && + [_secondaryDelegate respondsToSelector:@selector(sourceList:isGroupAlwaysExpanded:)]) + { + for(NSUInteger i=0;i<[self numberOfGroups];i++) + { + id item = [_secondaryDataSource sourceList:self child:i ofItem:nil]; + + if([self isGroupAlwaysExpanded:item]) { + [self expandItem:item expandChildren:NO]; + } + } + + } + + //Select the first non-group row if no rows are selected, and empty selection is disallowed + if(![self allowsEmptySelection]&&[self numberOfSelectedRows]==0) + { + for(NSUInteger i=0;i<[self numberOfRows];i++) + { + if(![self isGroupItem:[self itemAtRow:i]]) { + [self selectRowIndexes:[NSIndexSet indexSetWithIndex:i] byExtendingSelection:NO]; + break; + } + } + } +} + +- (NSUInteger)numberOfGroups +{ + if([_secondaryDataSource respondsToSelector:@selector(sourceList:numberOfChildrenOfItem:)]) { + return [_secondaryDataSource sourceList:self numberOfChildrenOfItem:nil]; + } + + return 0; +} + + +- (BOOL)isGroupItem:(id)item +{ + //Groups are defined as root items (at level 0) + return 0==[self levelForItem:item]; +} + + +- (BOOL)isGroupAlwaysExpanded:(id)group +{ + //Make sure that the item IS a group to prevent unwanted queries sent to the data source + if([self isGroupItem:group]) { + //Query the data source + if([_secondaryDelegate respondsToSelector:@selector(sourceList:isGroupAlwaysExpanded:)]) { + return [_secondaryDelegate sourceList:self isGroupAlwaysExpanded:group]; + } + } + + return NO; +} + + +- (BOOL)itemHasBadge:(id)item +{ + if([_secondaryDataSource respondsToSelector:@selector(sourceList:itemHasBadge:)]) { + return [_secondaryDataSource sourceList:self itemHasBadge:item]; + } + + return NO; +} + +- (NSInteger)badgeValueForItem:(id)item +{ + //Make sure that the item has a badge + if(![self itemHasBadge:item]) { + return NSNotFound; + } + + if([_secondaryDataSource respondsToSelector:@selector(sourceList:badgeValueForItem:)]) { + return [_secondaryDataSource sourceList:self badgeValueForItem:item]; + } + + return NSNotFound; +} + +//MARK: - + +#pragma mark Selection Handling + +- (void)selectRowIndexes:(NSIndexSet*)indexes byExtendingSelection:(BOOL)extend +{ + NSUInteger numberOfIndexes = [indexes count]; + + //Prevent empty selection if we don't want it + if(![self allowsEmptySelection]&&0==numberOfIndexes) { + return; + } + + //Would use blocks but we're also targeting 10.5... + //Get the selected indexes + NSUInteger *selectedIndexes = malloc(sizeof(NSUInteger)*numberOfIndexes); + [indexes getIndexes:selectedIndexes maxCount:numberOfIndexes inIndexRange:nil]; + + //Loop through the indexes and only add non-group row indexes + //Allows selection across groups without selecting the group rows + NSMutableIndexSet *newSelectionIndexes = [NSMutableIndexSet indexSet]; + for(NSInteger i=0;i0) { + [super selectRowIndexes:newSelectionIndexes byExtendingSelection:extend]; + } + + //C memory management... *sigh* + free(selectedIndexes); +} + +//MARK: - + +#pragma mark Layout + +- (NSRect)frameOfOutlineCellAtRow:(NSInteger)row +{ + //Return a zero-rect if the item is always expanded (a disclosure triangle will not be drawn) + if([self isGroupAlwaysExpanded:[self itemAtRow:row]]) { + return NSZeroRect; + } + + return [super frameOfOutlineCellAtRow:row]; +} + + +- (NSRect)frameOfCellAtColumn:(NSInteger)column row:(NSInteger)row +{ + id item = [self itemAtRow:row]; + + NSCell *cell = [self preparedCellAtColumn:column row:row]; + NSSize cellSize = [cell cellSize]; + NSRect cellFrame = [super frameOfCellAtColumn:column row:row]; + + if([self isGroupItem:item]) + { + return NSMakeRect(NSMinX(cellFrame), + NSMidY(cellFrame)-(cellSize.height/2.0), + NSWidth(cellFrame), + cellSize.height); + } + else + { + CGFloat leftIndent = [self levelForRow:row]*[self indentationPerLevel]+DISCLOSURE_TRIANGLE_SPACE; + + //Calculate space left for a badge if need be + CGFloat rightIndent = [self sizeOfBadgeAtRow:row].width+ROW_RIGHT_MARGIN; + + //Allow space for an icon if need be + if(![self isGroupItem:item]&&[_secondaryDataSource respondsToSelector:@selector(sourceList:itemHasIcon:)]) + { + if([_secondaryDataSource sourceList:self itemHasIcon:item]) { + leftIndent += [self iconSize].width+(ICON_SPACING*2); + } + } + + return NSMakeRect(leftIndent, + NSMidY(cellFrame)-(cellSize.height/2.0), + NSWidth(cellFrame)-rightIndent-leftIndent, + cellSize.height); + } +} + + +//This method calculates and returns the size of the badge for the row index passed to the method. If the +//row for the row index passed to the method does not have a badge, then NSZeroSize is returned. +- (NSSize)sizeOfBadgeAtRow:(NSInteger)rowIndex +{ + id rowItem = [self itemAtRow:rowIndex]; + + //Make sure that the item has a badge + if(![self itemHasBadge:rowItem]) { + return NSZeroSize; + } + + NSAttributedString *badgeAttrString = [[NSAttributedString alloc] initWithString:[NSString stringWithFormat:@"%d", [self badgeValueForItem:rowItem]] + attributes:[NSDictionary dictionaryWithObjectsAndKeys:BADGE_FONT, NSFontAttributeName, nil]]; + + NSSize stringSize = [badgeAttrString size]; + + //Calculate the width needed to display the text or the minimum width if it's smaller + CGFloat width = stringSize.width+(2*BADGE_MARGIN); + + if(width0) + { + if([keyCharacters length]>0) + { + unichar firstKey = [keyCharacters characterAtIndex:0]; + + if(firstKey==NSUpArrowFunctionKey||firstKey==NSDownArrowFunctionKey) + { + //Handle keyboard navigation across groups + if([selectedIndexes count]==1&&!([theEvent modifierFlags] & NSShiftKeyMask)) + { + int delta = firstKey==NSDownArrowFunctionKey?1:-1; //Search "backwards" if up arrow, "forwards" if down + NSInteger newRow = [selectedIndexes firstIndex]; + + //Keep incrementing/decrementing the row until a non-header row is reached + do { + newRow+=delta; + + //If out of bounds of the number of rows.. + if(newRow<0||newRow==[self numberOfRows]) + break; + } while([self isGroupItem:[self itemAtRow:newRow]]); + + + [self selectRowIndexes:[NSIndexSet indexSetWithIndex:newRow] byExtendingSelection:NO]; + return; + } + } + else if(firstKey==NSDeleteCharacter||firstKey==NSBackspaceCharacter) + { + //Post the notification + [[NSNotificationCenter defaultCenter] postNotificationName:PXSLDeleteKeyPressedOnRowsNotification + object:self + userInfo:[NSDictionary dictionaryWithObject:selectedIndexes forKey:@"rows"]]; + + return; + } + } + } + + //We don't care about it + [super keyDown:theEvent]; +} + +#pragma mark Context Menu Handling + +- (void)rightMouseDown:(NSEvent*)event +{ + NSInteger selectedRow = [self rowAtPoint:[self convertPoint:[event locationInWindow] fromView:nil]]; + + if(selectedRow!=-1&&![self isGroupItem:[self itemAtRow:selectedRow]]) + { + if([_secondaryDataSource respondsToSelector:@selector(sourceList:contextMenuForItem:)]) + { + NSMenu *contextMenu = [_secondaryDataSource sourceList:self contextMenuForItem:[self itemAtRow:selectedRow]]; + + if(contextMenu!=nil) + { + [contextMenu setDelegate:self]; + + //Row needs to be redrawn with round selection rectangle + _isRowRightClicked = YES; + _rightClickedRowIndex = selectedRow; + + //Let's be economical + [self setNeedsDisplayInRect:[self rectOfRow:selectedRow]]; + + [NSMenu popUpContextMenu:contextMenu withEvent:event forView:self]; + } + } + } +} + +- (void)menuDidClose:(NSMenu *)menu +{ + _isRowRightClicked = NO; + + //Row needs to be redrawn to clear round selection rectangle + [self setNeedsDisplayInRect:[self rectOfRow:_rightClickedRowIndex]]; +} + +//MARK: - + +#pragma mark NSOutlineView Data Source methods + +- (NSInteger)outlineView:(NSOutlineView *)outlineView numberOfChildrenOfItem:(id)item +{ + if([_secondaryDataSource conformsToProtocol:@protocol(PXSourceListDataSource)]) { + return [_secondaryDataSource sourceList:self numberOfChildrenOfItem:item]; + } + + return 0; +} + + +- (id)outlineView:(NSOutlineView *)outlineView child:(NSInteger)index ofItem:(id)item +{ + if([_secondaryDataSource conformsToProtocol:@protocol(PXSourceListDataSource)]) { + return [_secondaryDataSource sourceList:self child:index ofItem:item]; + } + + return nil; +} + + +- (BOOL)outlineView:(NSOutlineView *)outlineView isItemExpandable:(id)item +{ + if([_secondaryDataSource conformsToProtocol:@protocol(PXSourceListDataSource)]) { + return [_secondaryDataSource sourceList:self isItemExpandable:item]; + } + + return NO; +} + + +- (id)outlineView:(NSOutlineView *)outlineView objectValueForTableColumn:(NSTableColumn *)tableColumn byItem:(id)item +{ + if([_secondaryDataSource conformsToProtocol:@protocol(PXSourceListDataSource)]) { + return [_secondaryDataSource sourceList:self objectValueForItem:item]; + } + + return nil; +} + + +- (void)outlineView:(NSOutlineView *)outlineView setObjectValue:(id)object forTableColumn:(NSTableColumn *)tableColumn byItem:(id)item +{ + if([_secondaryDataSource conformsToProtocol:@protocol(PXSourceListDataSource)]) { + [_secondaryDataSource sourceList:self setObjectValue:object forItem:item]; + } +} + + +- (id)outlineView:(NSOutlineView *)outlineView itemForPersistentObject:(id)object +{ + if([_secondaryDataSource respondsToSelector:@selector(sourceList:itemForPersistentObject:)]) { + return [_secondaryDataSource sourceList:self itemForPersistentObject:object]; + } + + return nil; +} + +- (id)outlineView:(NSOutlineView *)outlineView persistentObjectForItem:(id)item +{ + if([_secondaryDataSource respondsToSelector:@selector(sourceList:persistentObjectForItem:)]) { + return [_secondaryDataSource sourceList:self persistentObjectForItem:item]; + } + + return nil; +} + +- (BOOL)outlineView:(NSOutlineView *)outlineView writeItems:(NSArray *)items toPasteboard:(NSPasteboard *)pasteboard +{ + if([_secondaryDataSource respondsToSelector:@selector(sourceList:writeItems:toPasteboard:)]) { + return [_secondaryDataSource sourceList:self writeItems:items toPasteboard:pasteboard]; + } + + return NO; +} + +- (NSDragOperation)outlineView:(NSOutlineView *)outlineView validateDrop:(id )info proposedItem:(id)item proposedChildIndex:(NSInteger)index +{ + if([_secondaryDataSource respondsToSelector:@selector(sourceList:validateDrop:proposedItem:proposedChildIndex:)]) { + return [_secondaryDataSource sourceList:self validateDrop:info proposedItem:item proposedChildIndex:index]; + } + + return NSDragOperationNone; +} + +- (BOOL)outlineView:(NSOutlineView *)outlineView acceptDrop:(id )info item:(id)item childIndex:(NSInteger)index +{ + if([_secondaryDataSource respondsToSelector:@selector(sourceList:acceptDrop:item:childIndex:)]) { + return [_secondaryDataSource sourceList:self acceptDrop:info item:item childIndex:index]; + } + + return NO; +} +- (NSArray *)outlineView:(NSOutlineView *)outlineView namesOfPromisedFilesDroppedAtDestination:(NSURL *)dropDestination forDraggedItems:(NSArray *)items +{ + if([_secondaryDataSource respondsToSelector:@selector(sourceList:namesOfPromisedFilesDroppedAtDestination:forDraggedItems:)]) { + return [_secondaryDataSource sourceList:self namesOfPromisedFilesDroppedAtDestination:dropDestination forDraggedItems:items]; + } + + return nil; +} + + +//MARK: - + +#pragma mark NSOutlineView Delegate methods + +- (BOOL)outlineView:(NSOutlineView *)outlineView shouldExpandItem:(id)item +{ + if([_secondaryDelegate respondsToSelector:@selector(sourceList:shouldExpandItem:)]) { + return [_secondaryDelegate sourceList:self shouldExpandItem:item]; + } + + return YES; +} + +- (BOOL)outlineView:(NSOutlineView *)outlineView shouldCollapseItem:(id)item +{ + //Make sure the item isn't displayed as always expanded + if([self isGroupItem:item]) + { + if([self isGroupAlwaysExpanded:item]) { + return NO; + } + } + + if([_secondaryDelegate respondsToSelector:@selector(sourceList:shouldCollapseItem:)]) { + return [_secondaryDelegate sourceList:self shouldExpandItem:item]; + } + + return YES; +} + +- (NSCell *)outlineView:(NSOutlineView *)outlineView dataCellForTableColumn:(NSTableColumn *)tableColumn item:(id)item +{ + if([_secondaryDelegate respondsToSelector:@selector(sourceList:dataCellForItem:)]) { + return [_secondaryDelegate sourceList:self dataCellForItem:item]; + } + + NSInteger row = [self rowForItem:item]; + + //Return the default table column + return [[[self tableColumns] objectAtIndex:0] dataCellForRow:row]; +} + +- (BOOL)outlineView:(NSOutlineView *)outlineView shouldSelectItem:(id)item +{ + //Make sure that the item isn't a group as they can't be selected + if(![self isGroupItem:item]) { + if([_secondaryDelegate respondsToSelector:@selector(sourceList:shouldSelectItem:)]) { + return [_secondaryDelegate sourceList:self shouldSelectItem:item]; + } + } + else { + return NO; + } + + return YES; +} + + +- (NSIndexSet *)outlineView:(NSOutlineView *)outlineView selectionIndexesForProposedSelection:(NSIndexSet *)proposedSelectionIndexes +{ + //The outline view will try to select the first row if -[allowsEmptySelection:] is set to NO – if this is a group row + //stop it from doing so and leave it to our implementation of-[reloadData] which will select the first non-group row + //for us. + if([self numberOfSelectedRows]==0) { + if([self isGroupItem:[self itemAtRow:[proposedSelectionIndexes firstIndex]]]) { + return [NSIndexSet indexSet]; + } + } + + if([_secondaryDelegate respondsToSelector:@selector(sourceList:selectionIndexesForProposedSelection:)]) { + return [_secondaryDelegate sourceList:self selectionIndexesForProposedSelection:proposedSelectionIndexes]; + } + + //Since we implement this method, something must be returned to the outline view + return proposedSelectionIndexes; +} + +- (BOOL)outlineView:(NSOutlineView *)outlineView shouldEditTableColumn:(NSTableColumn *)tableColumn item:(id)item +{ + //Group titles can't be edited + if([self isGroupItem:item]) + return NO; + + if([_secondaryDelegate respondsToSelector:@selector(sourceList:shouldEditItem:)]) { + return [_secondaryDelegate sourceList:self shouldEditItem:item]; + } + + return YES; +} + + +- (BOOL)outlineView:(NSOutlineView *)outlineView shouldTrackCell:(NSCell *)cell forTableColumn:(NSTableColumn *)tableColumn item:(id)item +{ + if([_secondaryDelegate respondsToSelector:@selector(sourceList:shouldTrackCell:forItem:)]) { + return [_secondaryDelegate sourceList:self shouldTrackCell:cell forItem:item]; + } + + return NO; +} + +- (CGFloat)outlineView:(NSOutlineView *)outlineView heightOfRowByItem:(id)item +{ + if([_secondaryDelegate respondsToSelector:@selector(sourceList:heightOfRowByItem:)]) { + return [_secondaryDelegate sourceList:self heightOfRowByItem:item]; + } + + return [self rowHeight]; +} + +- (BOOL)outlineView:(NSOutlineView *)outlineView isGroupItem:(id)item +{ + return [self isGroupItem:item]; +} + +//MARK: - + +#pragma mark Notification handling + +/* Notification wrappers */ +- (void)outlineViewSelectionIsChanging:(NSNotification *)notification +{ + [[NSNotificationCenter defaultCenter] postNotificationName:PXSLSelectionIsChangingNotification object:self]; +} + + +- (void)outlineViewSelectionDidChange:(NSNotification *)notification +{ + [[NSNotificationCenter defaultCenter] postNotificationName:PXSLSelectionDidChangeNotification object:self]; +} + +- (void)outlineViewItemWillExpand:(NSNotification *)notification +{ + [[NSNotificationCenter defaultCenter] postNotificationName:PXSLItemWillExpandNotification + object:self + userInfo:[notification userInfo]]; +} + +- (void)outlineViewItemDidExpand:(NSNotification *)notification +{ + [[NSNotificationCenter defaultCenter] postNotificationName:PXSLItemDidExpandNotification + object:self + userInfo:[notification userInfo]]; +} + +- (void)outlineViewItemWillCollapse:(NSNotification *)notification +{ + [[NSNotificationCenter defaultCenter] postNotificationName:PXSLItemWillCollapseNotification + object:self + userInfo:[notification userInfo]]; +} + +- (void)outlineViewItemDidCollapse:(NSNotification *)notification +{ + [[NSNotificationCenter defaultCenter] postNotificationName:PXSLItemDidCollapseNotification + object:self + userInfo:[notification userInfo]]; +} + +- (void)registerDelegateToReceiveNotification:(NSString*)notification withSelector:(SEL)selector +{ + NSNotificationCenter *defaultCenter = [NSNotificationCenter defaultCenter]; + + //Set the delegate as a receiver of the notification if it implements the notification method + if([_secondaryDelegate respondsToSelector:selector]) { + [defaultCenter addObserver:_secondaryDelegate + selector:selector + name:notification + object:self]; + } +} + +@end + +//MARK: - diff --git a/Classes/PXSourceListDataSource.h b/Classes/PXSourceListDataSource.h new file mode 100644 index 0000000..248ccfe --- /dev/null +++ b/Classes/PXSourceListDataSource.h @@ -0,0 +1,43 @@ +// +// PXSourceListDataSource.h +// PXViewKit +// +// Created by Alex Rozanski on 17/10/2009. +// Copyright 2009-10 Alex Rozanski http://perspx.com +// + +#import + +@class PXSourceList; + +@protocol PXSourceListDataSource + +@required +- (NSUInteger)sourceList:(PXSourceList*)sourceList numberOfChildrenOfItem:(id)item; +- (id)sourceList:(PXSourceList*)aSourceList child:(NSUInteger)index ofItem:(id)item; +- (id)sourceList:(PXSourceList*)aSourceList objectValueForItem:(id)item; +- (BOOL)sourceList:(PXSourceList*)aSourceList isItemExpandable:(id)item; + +@optional +- (void)sourceList:(PXSourceList*)aSourceList setObjectValue:(id)object forItem:(id)item; + +- (BOOL)sourceList:(PXSourceList*)aSourceList itemHasBadge:(id)item; +- (NSInteger)sourceList:(PXSourceList*)aSourceList badgeValueForItem:(id)item; +- (NSColor*)sourceList:(PXSourceList*)aSourceList badgeTextColorForItem:(id)item; +- (NSColor*)sourceList:(PXSourceList*)aSourceList badgeBackgroundColorForItem:(id)item; + +- (BOOL)sourceList:(PXSourceList*)aSourceList itemHasIcon:(id)item; +- (NSImage*)sourceList:(PXSourceList*)aSourceList iconForItem:(id)item; + +- (NSMenu*)sourceList:(PXSourceList*)aSourceList contextMenuForItem:(id)item; + +//The rest of these methods are basically "wrappers" for the NSOutlineViewDataSource methods +- (id)sourceList:(PXSourceList*)aSourceList itemForPersistentObject:(id)object; +- (id)sourceList:(PXSourceList*)aSourceList persistentObjectForItem:(id)item; + +- (BOOL)sourceList:(PXSourceList*)aSourceList writeItems:(NSArray *)items toPasteboard:(NSPasteboard *)pboard; +- (NSDragOperation)sourceList:(PXSourceList*)sourceList validateDrop:(id < NSDraggingInfo >)info proposedItem:(id)item proposedChildIndex:(NSInteger)index; +- (BOOL)sourceList:(PXSourceList*)aSourceList acceptDrop:(id < NSDraggingInfo >)info item:(id)item childIndex:(NSInteger)index; +- (NSArray *)sourceList:(PXSourceList*)aSourceList namesOfPromisedFilesDroppedAtDestination:(NSURL *)dropDestination forDraggedItems:(NSArray *)items; + +@end diff --git a/Classes/PXSourceListDelegate.h b/Classes/PXSourceListDelegate.h new file mode 100644 index 0000000..03afaca --- /dev/null +++ b/Classes/PXSourceListDelegate.h @@ -0,0 +1,61 @@ +// +// PXSourceListDelegate.h +// PXViewKit +// +// Created by Alex Rozanski on 17/10/2009. +// Copyright 2009-10 Alex Rozanski http://perspx.com +// + +#import + +@class PXSourceList; + +@protocol PXSourceListDelegate + +@optional +//Extra methods +- (BOOL)sourceList:(PXSourceList*)aSourceList isGroupAlwaysExpanded:(id)group; + +//Basically NSOutlineViewDelegate wrapper methods +- (BOOL)sourceList:(PXSourceList*)aSourceList shouldSelectItem:(id)item; +- (NSIndexSet*)sourceList:(PXSourceList*)aSourceList selectionIndexesForProposedSelection:(NSIndexSet *)proposedSelectionIndexes; + +- (BOOL)sourceList:(PXSourceList*)aSourceList shouldEditItem:(id)item; + +- (BOOL)sourceList:(PXSourceList*)aSourceList shouldTrackCell:(NSCell *)cell forItem:(id)item; + +- (BOOL)sourceList:(PXSourceList*)aSourceList shouldExpandItem:(id)item; +- (BOOL)sourceList:(PXSourceList*)aSourceList shouldCollapseItem:(id)item; + +- (CGFloat)sourceList:(PXSourceList*)aSourceList heightOfRowByItem:(id)item; + +- (NSCell*)sourceList:(PXSourceList*)aSourceList dataCellForItem:(id)item; + +@end + +@interface NSObject (PXSourceListNotifications) + +//Selection +- (void)sourceListSelectionIsChanging:(NSNotification *)notification; +- (void)sourceListSelectionDidChange:(NSNotification *)notification; + +//Item expanding/collapsing +- (void)sourceListItemWillExpand:(NSNotification *)notification; +- (void)sourceListItemDidExpand:(NSNotification *)notification; +- (void)sourceListItemWillCollapse:(NSNotification *)notification; +- (void)sourceListItemDidCollapse:(NSNotification *)notification; + +- (void)sourceListDeleteKeyPressedOnRows:(NSNotification *)notification; + + +@end + +//PXSourceList delegate notifications +extern NSString * const PXSLSelectionIsChangingNotification; +extern NSString * const PXSLSelectionDidChangeNotification; +extern NSString * const PXSLItemWillExpandNotification; +extern NSString * const PXSLItemDidExpandNotification; +extern NSString * const PXSLItemWillCollapseNotification; +extern NSString * const PXSLItemDidCollapseNotification; +extern NSString * const PXSLDeleteKeyPressedOnRowsNotification; + diff --git a/Classes/SourceListItem.h b/Classes/SourceListItem.h new file mode 100644 index 0000000..5581b7e --- /dev/null +++ b/Classes/SourceListItem.h @@ -0,0 +1,53 @@ +// +// SourceListItem.h +// PXSourceList +// +// Created by Alex Rozanski on 08/01/2010. +// Copyright 2010 Alex Rozanski http://perspx.com +// + +#import + +/*An example of a class that could be used to represent a Source List Item + + Provides a title, an identifier, and an icon to be shown, as well as a badge value and a property to determine + whether the current item has a badge or not (`badgeValue` is set to -1 if no badge is shown) + + Used to form a hierarchical model of SourceListItem instances – similar to the Source List tree structure + and easily accessible by the data source with the "children" property + + SourceListItem *parent + - SourceListItem *child1; + - SourceListItem *child2; + - SourceListItem *childOfChild2; + - SourceListItem *anotherChildOfChild2; + - SourceListItem *child3; + + */ + +@interface SourceListItem : NSObject { + NSString *title; + NSString *identifier; + NSImage *icon; + NSInteger badgeValue; + + NSArray *children; +} + +@property (nonatomic, copy) NSString *title; +@property (nonatomic, copy) NSString *identifier; +@property (nonatomic, retain) NSImage *icon; +@property NSInteger badgeValue; + +@property (nonatomic, copy) NSArray *children; + +//Convenience methods ++ (id)itemWithTitle:(NSString*)aTitle identifier:(NSString*)anIdentifier; ++ (id)itemWithTitle:(NSString*)aTitle identifier:(NSString*)anIdentifier icon:(NSImage*)anIcon; + + +- (BOOL)hasBadge; +- (BOOL)hasChildren; +- (BOOL)hasIcon; + +@end diff --git a/Classes/SourceListItem.m b/Classes/SourceListItem.m new file mode 100644 index 0000000..badd01f --- /dev/null +++ b/Classes/SourceListItem.m @@ -0,0 +1,84 @@ +// +// SourceListItem.m +// PXSourceList +// +// Created by Alex Rozanski on 08/01/2010. +// Copyright 2010 Alex Rozanski http://perspx.com +// + +#import "SourceListItem.h" + + +@implementation SourceListItem + +@synthesize title; +@synthesize identifier; +@synthesize icon; +@synthesize badgeValue; +@synthesize children; + +//MARK: - + +#pragma mark Init/Dealloc + +- (id)init +{ + if(self=[super init]) + { + badgeValue = -1; //We don't want a badge value by default + } + + return self; +} + + ++ (id)itemWithTitle:(NSString*)aTitle identifier:(NSString*)anIdentifier +{ + SourceListItem *item = [SourceListItem itemWithTitle:aTitle identifier:anIdentifier icon:nil]; + + return item; +} + + ++ (id)itemWithTitle:(NSString*)aTitle identifier:(NSString*)anIdentifier icon:(NSImage*)anIcon +{ + SourceListItem *item = [[[SourceListItem alloc] init] autorelease]; + + [item setTitle:aTitle]; + [item setIdentifier:anIdentifier]; + [item setIcon:anIcon]; + + return item; +} + + +- (void)dealloc +{ + [title release]; + [identifier release]; + [icon release]; + [children release]; + + [super dealloc]; +} + +//MARK: - + +#pragma mark Custom Accessors + +- (BOOL)hasBadge +{ + return badgeValue!=-1; +} + +- (BOOL)hasChildren +{ + return [children count]>0; +} + +- (BOOL)hasIcon +{ + return icon!=nil; +} + +@end diff --git a/PXSourceList-Info.plist b/PXSourceList-Info.plist new file mode 100644 index 0000000..f5e01d9 --- /dev/null +++ b/PXSourceList-Info.plist @@ -0,0 +1,32 @@ + + + + + CFBundleDevelopmentRegion + English + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIconFile + + CFBundleIdentifier + com.yourcompany.${PRODUCT_NAME:rfc1034identifier} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + APPL + CFBundleSignature + ???? + CFBundleShortVersionString + 1.0 + LSMinimumSystemVersion + ${MACOSX_DEPLOYMENT_TARGET} + CFBundleVersion + 1 + NSMainNibFile + MainMenu + NSPrincipalClass + NSApplication + + diff --git a/PXSourceList.xcodeproj/alexrozanski.pbxuser b/PXSourceList.xcodeproj/alexrozanski.pbxuser new file mode 100644 index 0000000..81c0495 --- /dev/null +++ b/PXSourceList.xcodeproj/alexrozanski.pbxuser @@ -0,0 +1,1239 @@ +// !$*UTF8*$! +{ + 089C165DFE840E0CC02AAC07 /* InfoPlist.strings */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {804, 402}}"; + sepNavSelRange = "{45, 0}"; + sepNavVisRange = "{0, 45}"; + }; + }; + 256AC3F00F4B6AF500CF3369 /* PXSourceList_Prefix.pch */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {804, 605}}"; + sepNavSelRange = "{0, 0}"; + sepNavVisRange = "{0, 155}"; + }; + }; + 29B97313FDCFA39411CA2CEA /* Project object */ = { + activeBuildConfigurationName = Release; + activeExecutable = D2EA6EB110D9202800402758 /* PXSourceList */; + activeSDKPreference = macosx10.6; + activeTarget = 8D1107260486CEB800E47090 /* PXSourceList */; + addToTargets = ( + 8D1107260486CEB800E47090 /* PXSourceList */, + ); + breakpoints = ( + ); + codeSenseManager = D2EA6EBF10D9203500402758 /* Code sense */; + executables = ( + D2EA6EB110D9202800402758 /* PXSourceList */, + ); + perUserDictionary = { + PBXConfiguration.PBXFileTableDataSource3.PBXExecutablesDataSource = { + PBXFileTableDataSourceColumnSortingDirectionKey = "-1"; + PBXFileTableDataSourceColumnSortingKey = PBXExecutablesDataSource_NameID; + PBXFileTableDataSourceColumnWidthsKey = ( + 22, + 300, + 514, + ); + PBXFileTableDataSourceColumnsKey = ( + PBXExecutablesDataSource_ActiveFlagID, + PBXExecutablesDataSource_NameID, + PBXExecutablesDataSource_CommentsID, + ); + }; + PBXConfiguration.PBXFileTableDataSource3.PBXFileTableDataSource = { + PBXFileTableDataSourceColumnSortingDirectionKey = "-1"; + PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID; + PBXFileTableDataSourceColumnWidthsKey = ( + 20, + 10, + 20, + 48, + 43, + 43, + 20, + ); + PBXFileTableDataSourceColumnsKey = ( + PBXFileDataSource_FiletypeID, + PBXFileDataSource_Filename_ColumnID, + PBXFileDataSource_Built_ColumnID, + PBXFileDataSource_ObjectSize_ColumnID, + PBXFileDataSource_Errors_ColumnID, + PBXFileDataSource_Warnings_ColumnID, + PBXFileDataSource_Target_ColumnID, + ); + }; + PBXConfiguration.PBXFileTableDataSource3.XCSCMDataSource = { + PBXFileTableDataSourceColumnSortingDirectionKey = "-1"; + PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID; + PBXFileTableDataSourceColumnWidthsKey = ( + 20, + 20, + 602, + 20, + 48, + 43, + 43, + 20, + ); + PBXFileTableDataSourceColumnsKey = ( + PBXFileDataSource_SCM_ColumnID, + PBXFileDataSource_FiletypeID, + PBXFileDataSource_Filename_ColumnID, + PBXFileDataSource_Built_ColumnID, + PBXFileDataSource_ObjectSize_ColumnID, + PBXFileDataSource_Errors_ColumnID, + PBXFileDataSource_Warnings_ColumnID, + PBXFileDataSource_Target_ColumnID, + ); + }; + PBXConfiguration.PBXTargetDataSource.PBXTargetDataSource = { + PBXFileTableDataSourceColumnSortingDirectionKey = "-1"; + PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID; + PBXFileTableDataSourceColumnWidthsKey = ( + 20, + 586, + 60, + 20, + 48, + 43, + 43, + ); + PBXFileTableDataSourceColumnsKey = ( + PBXFileDataSource_FiletypeID, + PBXFileDataSource_Filename_ColumnID, + PBXTargetDataSource_PrimaryAttribute, + PBXFileDataSource_Built_ColumnID, + PBXFileDataSource_ObjectSize_ColumnID, + PBXFileDataSource_Errors_ColumnID, + PBXFileDataSource_Warnings_ColumnID, + ); + }; + PBXPerProjectTemplateStateSaveDate = 284755830; + PBXWorkspaceStateSaveDate = 284755830; + }; + perUserProjectItems = { + D205EDEA10F7A5D9004C6545 = D205EDEA10F7A5D9004C6545 /* PBXTextBookmark */; + D205EE4010F7A84B004C6545 = D205EE4010F7A84B004C6545 /* PBXTextBookmark */; + D205EE7810F7AB18004C6545 = D205EE7810F7AB18004C6545 /* PBXTextBookmark */; + D205EE7910F7AB18004C6545 = D205EE7910F7AB18004C6545 /* PBXTextBookmark */; + D2456C9B10F8F74500B8045C = D2456C9B10F8F74500B8045C /* PBXTextBookmark */; + D2456CB010F8F80F00B8045C = D2456CB010F8F80F00B8045C /* PBXTextBookmark */; + D2456CB110F8F80F00B8045C = D2456CB110F8F80F00B8045C /* PBXTextBookmark */; + D2456CB210F8F80F00B8045C = D2456CB210F8F80F00B8045C /* PBXTextBookmark */; + D2456CB310F8F80F00B8045C = D2456CB310F8F80F00B8045C /* PBXBookmark */; + D2456CB410F8F80F00B8045C = D2456CB410F8F80F00B8045C /* PBXTextBookmark */; + D2456CB610F8F85300B8045C = D2456CB610F8F85300B8045C /* PBXTextBookmark */; + D2456CB710F8F85300B8045C = D2456CB710F8F85300B8045C /* PBXTextBookmark */; + D2456CB810F8F85300B8045C = D2456CB810F8F85300B8045C /* PBXTextBookmark */; + D2456CB910F8F86500B8045C = D2456CB910F8F86500B8045C /* PBXTextBookmark */; + D2456CBA10F8F86500B8045C = D2456CBA10F8F86500B8045C /* PBXTextBookmark */; + D2456CCF10F8F8DE00B8045C = D2456CCF10F8F8DE00B8045C /* PBXTextBookmark */; + D2456CD010F8F8DE00B8045C = D2456CD010F8F8DE00B8045C /* PlistBookmark */; + D2456CD110F8F8DE00B8045C = D2456CD110F8F8DE00B8045C /* PlistBookmark */; + D2456CD210F8F8DF00B8045C = D2456CD210F8F8DF00B8045C /* PlistBookmark */; + D2456CDB10F8F8E000B8045C = D2456CDB10F8F8E000B8045C /* PlistBookmark */; + D2456CDC10F8F8E100B8045C = D2456CDC10F8F8E100B8045C /* PlistBookmark */; + D2456CE110F9059100B8045C = D2456CE110F9059100B8045C /* PBXTextBookmark */; + D2456CE210F9059100B8045C = D2456CE210F9059100B8045C /* PBXTextBookmark */; + D2456CE310F9059100B8045C = D2456CE310F9059100B8045C /* PBXTextBookmark */; + D2456CE410F9059100B8045C = D2456CE410F9059100B8045C /* PBXTextBookmark */; + D2456CE710F9059500B8045C = D2456CE710F9059500B8045C /* PBXTextBookmark */; + D2456CE810F9059600B8045C = D2456CE810F9059600B8045C /* PBXTextBookmark */; + D2456CEA10F9059800B8045C = D2456CEA10F9059800B8045C /* PBXTextBookmark */; + D2456CEB10F9059800B8045C = D2456CEB10F9059800B8045C /* PBXTextBookmark */; + D2456CEC10F9059900B8045C = D2456CEC10F9059900B8045C /* PBXTextBookmark */; + D2456CEF10F905A100B8045C = D2456CEF10F905A100B8045C /* PBXTextBookmark */; + D2456CF010F905A100B8045C = D2456CF010F905A100B8045C /* PBXTextBookmark */; + D2456CF210F905A900B8045C = D2456CF210F905A900B8045C /* PBXTextBookmark */; + D2456CF310F905AD00B8045C = D2456CF310F905AD00B8045C /* PBXTextBookmark */; + D2456CF410F905AD00B8045C = D2456CF410F905AD00B8045C /* PBXTextBookmark */; + D2456CF510F905AD00B8045C = D2456CF510F905AD00B8045C /* PBXTextBookmark */; + D2456CF610F9073200B8045C = D2456CF610F9073200B8045C /* PBXTextBookmark */; + D2456D0610F907AB00B8045C /* PBXTextBookmark */ = D2456D0610F907AB00B8045C /* PBXTextBookmark */; + D2456D0710F907AB00B8045C /* PBXTextBookmark */ = D2456D0710F907AB00B8045C /* PBXTextBookmark */; + D2456D0810F907AB00B8045C /* PBXTextBookmark */ = D2456D0810F907AB00B8045C /* PBXTextBookmark */; + D2456D0910F907AB00B8045C /* PBXTextBookmark */ = D2456D0910F907AB00B8045C /* PBXTextBookmark */; + D2456D0A10F907AB00B8045C /* PBXTextBookmark */ = D2456D0A10F907AB00B8045C /* PBXTextBookmark */; + D2456D0B10F907AB00B8045C /* PBXTextBookmark */ = D2456D0B10F907AB00B8045C /* PBXTextBookmark */; + D2456D0C10F907B700B8045C /* PBXTextBookmark */ = D2456D0C10F907B700B8045C /* PBXTextBookmark */; + D2456D0D10F907B800B8045C /* PBXTextBookmark */ = D2456D0D10F907B800B8045C /* PBXTextBookmark */; + D27B7D5B10E11399004D7DBC = D27B7D5B10E11399004D7DBC /* PBXTextBookmark */; + D27B7D5C10E11399004D7DBC = D27B7D5C10E11399004D7DBC /* PBXTextBookmark */; + D27B7D5E10E11399004D7DBC = D27B7D5E10E11399004D7DBC /* PBXTextBookmark */; + D27B7D6010E11399004D7DBC = D27B7D6010E11399004D7DBC /* PBXTextBookmark */; + D27B7D6210E11399004D7DBC = D27B7D6210E11399004D7DBC /* PBXTextBookmark */; + D27B7D6410E11399004D7DBC = D27B7D6410E11399004D7DBC /* PBXTextBookmark */; + D27B7D6610E11399004D7DBC = D27B7D6610E11399004D7DBC /* PBXTextBookmark */; + D27B7D6810E11399004D7DBC = D27B7D6810E11399004D7DBC /* PBXTextBookmark */; + D27B7D6C10E11399004D7DBC = D27B7D6C10E11399004D7DBC /* PBXTextBookmark */; + D27B7D6E10E11399004D7DBC = D27B7D6E10E11399004D7DBC /* PBXTextBookmark */; + D27B7D7010E11399004D7DBC = D27B7D7010E11399004D7DBC /* PBXTextBookmark */; + D27B7D7210E11399004D7DBC = D27B7D7210E11399004D7DBC /* PBXTextBookmark */; + D27B7D7410E11399004D7DBC = D27B7D7410E11399004D7DBC /* PBXTextBookmark */; + D2864D6510F8E89F00FC5203 = D2864D6510F8E89F00FC5203 /* PBXBookmark */; + D2864D7610F8E8E800FC5203 = D2864D7610F8E8E800FC5203 /* PBXBookmark */; + D2864D7710F8E8E800FC5203 = D2864D7710F8E8E800FC5203 /* PBXBookmark */; + D2864DAE10F8E9BB00FC5203 = D2864DAE10F8E9BB00FC5203 /* PBXBookmark */; + D2864DBE10F8E9F400FC5203 = D2864DBE10F8E9F400FC5203 /* PBXBookmark */; + D2864DCC10F8EE9800FC5203 = D2864DCC10F8EE9800FC5203 /* PBXBookmark */; + D2864DCD10F8EE9800FC5203 = D2864DCD10F8EE9800FC5203 /* PBXTextBookmark */; + D2864DCF10F8EE9800FC5203 = D2864DCF10F8EE9800FC5203 /* PBXTextBookmark */; + D2864DEA10F8EF1C00FC5203 = D2864DEA10F8EF1C00FC5203 /* PBXTextBookmark */; + D2864DEB10F8EF1C00FC5203 = D2864DEB10F8EF1C00FC5203 /* PBXTextBookmark */; + D2864DEE10F8EF1C00FC5203 = D2864DEE10F8EF1C00FC5203 /* PBXTextBookmark */; + D2864E0310F8F20800FC5203 = D2864E0310F8F20800FC5203 /* PBXTextBookmark */; + D2864E0410F8F20800FC5203 = D2864E0410F8F20800FC5203 /* PBXTextBookmark */; + D2864E0510F8F20800FC5203 = D2864E0510F8F20800FC5203 /* PBXTextBookmark */; + D2864E0610F8F20800FC5203 = D2864E0610F8F20800FC5203 /* PBXTextBookmark */; + D2864E1B10F8F52F00FC5203 = D2864E1B10F8F52F00FC5203 /* PBXTextBookmark */; + D2864E1C10F8F52F00FC5203 = D2864E1C10F8F52F00FC5203 /* PBXTextBookmark */; + D2864E2610F8F5B700FC5203 = D2864E2610F8F5B700FC5203 /* PBXTextBookmark */; + D2E0722E10F89C030056126C = D2E0722E10F89C030056126C /* PBXTextBookmark */; + }; + sourceControlManager = D2EA6EBE10D9203500402758 /* Source Control */; + userBuildSettings = { + }; + }; + 8D1107260486CEB800E47090 /* PXSourceList */ = { + activeExec = 0; + executables = ( + D2EA6EB110D9202800402758 /* PXSourceList */, + ); + }; + D205EDDD10F7A1EE004C6545 /* README.markdown */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {2805, 780}}"; + sepNavSelRange = "{4738, 0}"; + sepNavVisRange = "{2737, 2001}"; + }; + }; + D205EDEA10F7A5D9004C6545 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = D265C2D610E3814B00A1E824 /* TODO.rtf */; + name = "TODO.rtf: 5"; + rLen = 0; + rLoc = 309; + rType = 0; + vrLen = 487; + vrLoc = 0; + }; + D205EDF510F7A693004C6545 /* AppDelegate.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {804, 580}}"; + sepNavSelRange = "{164, 0}"; + sepNavVisRange = "{0, 419}"; + }; + }; + D205EDF610F7A693004C6545 /* AppDelegate.m */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {831, 2028}}"; + sepNavSelRange = "{135, 0}"; + sepNavVisRange = "{1192, 1853}"; + }; + }; + D205EE4010F7A84B004C6545 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = D27B7D7710E11399004D7DBC /* NSOutlineView.h */; + name = "NSOutlineView.h: 91"; + rLen = 41; + rLoc = 3604; + rType = 0; + vrLen = 1892; + vrLoc = 3390; + }; + D205EE7810F7AB18004C6545 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = D27B7D6B10E11399004D7DBC /* NSObjCRuntime.h */; + name = "NSObjCRuntime.h: 174"; + rLen = 8; + rLoc = 6073; + rType = 0; + vrLen = 1799; + vrLoc = 5296; + }; + D205EE7910F7AB18004C6545 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = D28AFF8110F69566000452E6 /* limits.h */; + name = "limits.h: 7"; + rLen = 9; + rLoc = 257; + rType = 0; + vrLen = 1172; + vrLoc = 0; + }; + D205EE7D10F7B5AB004C6545 /* SourceListItem.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {804, 702}}"; + sepNavSelRange = "{138, 0}"; + sepNavVisRange = "{24, 945}"; + }; + }; + D205EE7E10F7B5AB004C6545 /* PXSourceList.m */ = { + isa = PBXFileReference; + fileEncoding = 4; + lastKnownFileType = sourcecode.c.objc; + name = PXSourceList.m; + path = /Users/alexrozanski/Development/Xcode/OSX/Projects/PXSourceList/Classes/PXSourceList.m; + sourceTree = ""; + }; + D2456C9B10F8F74500B8045C /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = D205EDDD10F7A1EE004C6545 /* README.markdown */; + name = "README.markdown: 33"; + rLen = 0; + rLoc = 2738; + rType = 0; + vrLen = 2288; + vrLoc = 1752; + }; + D2456CA110F8F79D00B8045C /* SourceListItem.m */ = { + isa = PBXFileReference; + fileEncoding = 4; + lastKnownFileType = sourcecode.c.objc; + name = SourceListItem.m; + path = /Users/alexrozanski/Development/Xcode/OSX/Github/PXSourceList/SourceListItem.m; + sourceTree = ""; + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {804, 936}}"; + sepNavSelRange = "{0, 0}"; + sepNavVisRange = "{0, 857}"; + }; + }; + D2456CB010F8F80F00B8045C /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = D205EDDD10F7A1EE004C6545 /* README.markdown */; + name = "README.markdown: 33"; + rLen = 0; + rLoc = 2738; + rType = 0; + vrLen = 2288; + vrLoc = 1752; + }; + D2456CB110F8F80F00B8045C /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = D205EE7D10F7B5AB004C6545 /* SourceListItem.h */; + name = "SourceListItem.h: 6"; + rLen = 0; + rLoc = 138; + rType = 0; + vrLen = 945; + vrLoc = 24; + }; + D2456CB210F8F80F00B8045C /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = D2456CA110F8F79D00B8045C /* SourceListItem.m */; + name = "SourceListItem.m: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 468; + vrLoc = 0; + }; + D2456CB310F8F80F00B8045C /* PBXBookmark */ = { + isa = PBXBookmark; + fRef = D2EA6EC110D9205A00402758 /* PXSourceList.m */; + }; + D2456CB410F8F80F00B8045C /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = D2EA6EC110D9205A00402758 /* PXSourceList.m */; + name = "PXSourceList.m: 6"; + rLen = 17; + rLoc = 90; + rType = 0; + vrLen = 1281; + vrLoc = 3080; + }; + D2456CB610F8F85300B8045C /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = D2EA6EC010D9205A00402758 /* PXSourceList.h */; + name = "PXSourceList.h: 115"; + rLen = 0; + rLoc = 1358; + rType = 0; + vrLen = 0; + vrLoc = 1358; + }; + D2456CB710F8F85300B8045C /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = D2EA6EC110D9205A00402758 /* PXSourceList.m */; + name = "PXSourceList.m: 6"; + rLen = 17; + rLoc = 90; + rType = 0; + vrLen = 1281; + vrLoc = 3080; + }; + D2456CB810F8F85300B8045C /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = D2EA6EC110D9205A00402758 /* PXSourceList.m */; + name = "PXSourceList.m: 6"; + rLen = 17; + rLoc = 90; + rType = 0; + vrLen = 1281; + vrLoc = 3080; + }; + D2456CB910F8F86500B8045C /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = D2EA6EC010D9205A00402758 /* PXSourceList.h */; + name = "PXSourceList.h: 115"; + rLen = 0; + rLoc = 1358; + rType = 0; + vrLen = 0; + vrLoc = 1358; + }; + D2456CBA10F8F86500B8045C /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = D2EA6EC010D9205A00402758 /* PXSourceList.h */; + name = "PXSourceList.h: 71"; + rLen = 0; + rLoc = 1358; + rType = 0; + vrLen = 0; + vrLoc = 1358; + }; + D2456CCF10F8F8DE00B8045C /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = D2EA6EC010D9205A00402758 /* PXSourceList.h */; + name = "PXSourceList.h: 86"; + rLen = 0; + rLoc = 1358; + rType = 0; + vrLen = 0; + vrLoc = 1358; + }; + D2456CD010F8F8DE00B8045C /* PlistBookmark */ = { + isa = PlistBookmark; + fRef = 8D1107310486CEB800E47090 /* PXSourceList-Info.plist */; + fallbackIsa = PBXBookmark; + isK = 0; + kPath = ( + ); + name = "/Users/alexrozanski/Development/Xcode/OSX/Projects/PXSourceList/Resources/PXSourceList-Info.plist"; + rLen = 0; + rLoc = 9223372036854775808; + }; + D2456CD110F8F8DE00B8045C /* PlistBookmark */ = { + isa = PlistBookmark; + fRef = 8D1107310486CEB800E47090 /* PXSourceList-Info.plist */; + fallbackIsa = PBXBookmark; + isK = 0; + kPath = ( + CFBundleVersion, + ); + name = "/Users/alexrozanski/Development/Xcode/OSX/Projects/PXSourceList/Resources/PXSourceList-Info.plist"; + rLen = 0; + rLoc = 9223372036854775808; + }; + D2456CD210F8F8DF00B8045C /* PlistBookmark */ = { + isa = PlistBookmark; + fRef = 8D1107310486CEB800E47090 /* PXSourceList-Info.plist */; + fallbackIsa = PBXBookmark; + isK = 0; + kPath = ( + CFBundleVersion, + ); + name = "/Users/alexrozanski/Development/Xcode/OSX/Projects/PXSourceList/Resources/PXSourceList-Info.plist"; + rLen = 0; + rLoc = 9223372036854775808; + }; + D2456CDB10F8F8E000B8045C /* PlistBookmark */ = { + isa = PlistBookmark; + fRef = 8D1107310486CEB800E47090 /* PXSourceList-Info.plist */; + fallbackIsa = PBXBookmark; + isK = 0; + kPath = ( + CFBundleVersion, + ); + name = "/Users/alexrozanski/Development/Xcode/OSX/Projects/PXSourceList/Resources/PXSourceList-Info.plist"; + rLen = 0; + rLoc = 9223372036854775808; + }; + D2456CDC10F8F8E100B8045C /* PlistBookmark */ = { + isa = PlistBookmark; + fRef = 8D1107310486CEB800E47090 /* PXSourceList-Info.plist */; + fallbackIsa = PBXBookmark; + isK = 0; + kPath = ( + CFBundleVersion, + ); + name = "/Users/alexrozanski/Development/Xcode/OSX/Projects/PXSourceList/Resources/PXSourceList-Info.plist"; + rLen = 1; + rLoc = 0; + }; + D2456CE110F9059100B8045C /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = D2EA6EC010D9205A00402758 /* PXSourceList.h */; + name = "PXSourceList.h: 86"; + rLen = 0; + rLoc = 1358; + rType = 0; + vrLen = 0; + vrLoc = 1358; + }; + D2456CE210F9059100B8045C /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = D265C2D610E3814B00A1E824 /* TODO.rtf */; + name = "TODO.rtf: 5"; + rLen = 0; + rLoc = 309; + rType = 0; + vrLen = 487; + vrLoc = 0; + }; + D2456CE310F9059100B8045C /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 089C165DFE840E0CC02AAC07 /* InfoPlist.strings */; + name = "InfoPlist.strings: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 45; + vrLoc = 0; + }; + D2456CE410F9059100B8045C /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 089C165DFE840E0CC02AAC07 /* InfoPlist.strings */; + name = "InfoPlist.strings: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 45; + vrLoc = 0; + }; + D2456CE710F9059500B8045C /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 089C165DFE840E0CC02AAC07 /* InfoPlist.strings */; + name = "InfoPlist.strings: 3"; + rLen = 0; + rLoc = 45; + rType = 0; + vrLen = 45; + vrLoc = 0; + }; + D2456CE810F9059600B8045C /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 089C165DFE840E0CC02AAC07 /* InfoPlist.strings */; + name = "InfoPlist.strings: 3"; + rLen = 0; + rLoc = 45; + rType = 0; + vrLen = 45; + vrLoc = 0; + }; + D2456CEA10F9059800B8045C /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = D2EA6EC010D9205A00402758 /* PXSourceList.h */; + name = "PXSourceList.h: 86"; + rLen = 0; + rLoc = 1358; + rType = 0; + vrLen = 0; + vrLoc = 1358; + }; + D2456CEB10F9059800B8045C /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 089C165DFE840E0CC02AAC07 /* InfoPlist.strings */; + name = "InfoPlist.strings: 3"; + rLen = 0; + rLoc = 45; + rType = 0; + vrLen = 45; + vrLoc = 0; + }; + D2456CEC10F9059900B8045C /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 089C165DFE840E0CC02AAC07 /* InfoPlist.strings */; + name = "InfoPlist.strings: 3"; + rLen = 0; + rLoc = 45; + rType = 0; + vrLen = 45; + vrLoc = 0; + }; + D2456CEF10F905A100B8045C /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 089C165DFE840E0CC02AAC07 /* InfoPlist.strings */; + name = "InfoPlist.strings: 3"; + rLen = 0; + rLoc = 45; + rType = 0; + vrLen = 45; + vrLoc = 0; + }; + D2456CF010F905A100B8045C /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 089C165DFE840E0CC02AAC07 /* InfoPlist.strings */; + name = "InfoPlist.strings: 3"; + rLen = 0; + rLoc = 45; + rType = 0; + vrLen = 45; + vrLoc = 0; + }; + D2456CF210F905A900B8045C /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 089C165DFE840E0CC02AAC07 /* InfoPlist.strings */; + name = "InfoPlist.strings: 3"; + rLen = 0; + rLoc = 45; + rType = 0; + vrLen = 45; + vrLoc = 0; + }; + D2456CF310F905AD00B8045C /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 089C165DFE840E0CC02AAC07 /* InfoPlist.strings */; + name = "InfoPlist.strings: 3"; + rLen = 0; + rLoc = 45; + rType = 0; + vrLen = 45; + vrLoc = 0; + }; + D2456CF410F905AD00B8045C /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = D205EDDD10F7A1EE004C6545 /* README.markdown */; + name = "README.markdown: 33"; + rLen = 0; + rLoc = 2738; + rType = 0; + vrLen = 2288; + vrLoc = 1752; + }; + D2456CF510F905AD00B8045C /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = D205EDDD10F7A1EE004C6545 /* README.markdown */; + name = "README.markdown: 1"; + rLen = 4738; + rLoc = 0; + rType = 0; + vrLen = 2288; + vrLoc = 1752; + }; + D2456CF610F9073200B8045C /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = D205EDDD10F7A1EE004C6545 /* README.markdown */; + name = "README.markdown: 60"; + rLen = 0; + rLoc = 4738; + rType = 0; + vrLen = 2001; + vrLoc = 2737; + }; + D2456D0610F907AB00B8045C /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = D205EDDD10F7A1EE004C6545 /* README.markdown */; + name = "README.markdown: 60"; + rLen = 0; + rLoc = 4738; + rType = 0; + vrLen = 2001; + vrLoc = 2737; + }; + D2456D0710F907AB00B8045C /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = D2EA6EFF10D925AA00402758 /* PXSourceListDataSource.h */; + name = "PXSourceListDataSource.h: 6"; + rLen = 0; + rLoc = 114; + rType = 0; + vrLen = 2013; + vrLoc = 0; + }; + D2456D0810F907AB00B8045C /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = D2EA6F0010D925AA00402758 /* PXSourceListDelegate.h */; + name = "PXSourceListDelegate.h: 6"; + rLen = 0; + rLoc = 112; + rType = 0; + vrLen = 1568; + vrLoc = 0; + }; + D2456D0910F907AB00B8045C /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = D2EA6EC110D9205A00402758 /* PXSourceList.m */; + name = "PXSourceList.m: 6"; + rLen = 17; + rLoc = 90; + rType = 0; + vrLen = 1643; + vrLoc = 3006; + }; + D2456D0A10F907AB00B8045C /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = D2EA6EC010D9205A00402758 /* PXSourceList.h */; + name = "PXSourceList.h: 38"; + rLen = 0; + rLoc = 1358; + rType = 0; + vrLen = 1358; + vrLoc = 0; + }; + D2456D0B10F907AB00B8045C /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = D2EA6EC010D9205A00402758 /* PXSourceList.h */; + name = "PXSourceList.h: 14"; + rLen = 0; + rLoc = 252; + rType = 0; + vrLen = 1358; + vrLoc = 0; + }; + D2456D0C10F907B700B8045C /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = D2EA6EC010D9205A00402758 /* PXSourceList.h */; + name = "PXSourceList.h: 14"; + rLen = 0; + rLoc = 252; + rType = 0; + vrLen = 538; + vrLoc = 0; + }; + D2456D0D10F907B800B8045C /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = D2EA6EC010D9205A00402758 /* PXSourceList.h */; + name = "PXSourceList.h: 17"; + rLen = 0; + rLoc = 442; + rType = 0; + vrLen = 1358; + vrLoc = 0; + }; + D265C2D610E3814B00A1E824 /* TODO.rtf */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {818, 620}}"; + sepNavSelRange = "{261, 0}"; + sepNavVisRect = "{{0, 0}, {818, 620}}"; + }; + }; + D27B7D5B10E11399004D7DBC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 256AC3F00F4B6AF500CF3369 /* PXSourceList_Prefix.pch */; + name = "PXSourceList_Prefix.pch: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 155; + vrLoc = 0; + }; + D27B7D5C10E11399004D7DBC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = D27B7D5D10E11399004D7DBC /* Cocoa.h */; + name = "Cocoa.h: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 485; + vrLoc = 0; + }; + D27B7D5D10E11399004D7DBC /* Cocoa.h */ = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = Cocoa.h; + path = /Developer/SDKs/MacOSX10.6.sdk/System/Library/Frameworks/Cocoa.framework/Versions/A/Headers/Cocoa.h; + sourceTree = ""; + }; + D27B7D5E10E11399004D7DBC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = D27B7D5F10E11399004D7DBC /* CoreData.h */; + name = "CoreData.h: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 1082; + vrLoc = 0; + }; + D27B7D5F10E11399004D7DBC /* CoreData.h */ = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = CoreData.h; + path = /Developer/SDKs/MacOSX10.6.sdk/System/Library/Frameworks/CoreData.framework/Versions/A/Headers/CoreData.h; + sourceTree = ""; + }; + D27B7D6010E11399004D7DBC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = D27B7D6110E11399004D7DBC /* NSRelationshipDescription.h */; + name = "NSRelationshipDescription.h: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 1631; + vrLoc = 0; + }; + D27B7D6110E11399004D7DBC /* NSRelationshipDescription.h */ = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = NSRelationshipDescription.h; + path = /Developer/SDKs/MacOSX10.6.sdk/System/Library/Frameworks/CoreData.framework/Versions/A/Headers/NSRelationshipDescription.h; + sourceTree = ""; + }; + D27B7D6210E11399004D7DBC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = D27B7D6310E11399004D7DBC /* NSPropertyDescription.h */; + name = "NSPropertyDescription.h: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 1416; + vrLoc = 0; + }; + D27B7D6310E11399004D7DBC /* NSPropertyDescription.h */ = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = NSPropertyDescription.h; + path = /Developer/SDKs/MacOSX10.6.sdk/System/Library/Frameworks/CoreData.framework/Versions/A/Headers/NSPropertyDescription.h; + sourceTree = ""; + }; + D27B7D6410E11399004D7DBC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = D27B7D6510E11399004D7DBC /* TargetConditionals.h */; + name = "TargetConditionals.h: 1"; + rLen = 0; + rLoc = 2; + rType = 0; + vrLen = 2073; + vrLoc = 0; + }; + D27B7D6510E11399004D7DBC /* TargetConditionals.h */ = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = TargetConditionals.h; + path = /Developer/SDKs/MacOSX10.6.sdk/usr/include/TargetConditionals.h; + sourceTree = ""; + }; + D27B7D6610E11399004D7DBC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = D27B7D6710E11399004D7DBC /* objc-api.h */; + name = "objc-api.h: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 1631; + vrLoc = 0; + }; + D27B7D6710E11399004D7DBC /* objc-api.h */ = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "objc-api.h"; + path = "/Developer/SDKs/MacOSX10.6.sdk/usr/include/objc/objc-api.h"; + sourceTree = ""; + }; + D27B7D6810E11399004D7DBC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = D27B7D6910E11399004D7DBC /* objc.h */; + name = "objc.h: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 1486; + vrLoc = 0; + }; + D27B7D6910E11399004D7DBC /* objc.h */ = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = objc.h; + path = /Developer/SDKs/MacOSX10.6.sdk/usr/include/objc/objc.h; + sourceTree = ""; + }; + D27B7D6B10E11399004D7DBC /* NSObjCRuntime.h */ = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = NSObjCRuntime.h; + path = /Developer/SDKs/MacOSX10.6.sdk/System/Library/Frameworks/Foundation.framework/Versions/C/Headers/NSObjCRuntime.h; + sourceTree = ""; + }; + D27B7D6C10E11399004D7DBC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = D27B7D6D10E11399004D7DBC /* NSObject.h */; + name = "NSObject.h: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 972; + vrLoc = 0; + }; + D27B7D6D10E11399004D7DBC /* NSObject.h */ = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = NSObject.h; + path = /Developer/SDKs/MacOSX10.6.sdk/System/Library/Frameworks/Foundation.framework/Versions/C/Headers/NSObject.h; + sourceTree = ""; + }; + D27B7D6E10E11399004D7DBC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = D27B7D6F10E11399004D7DBC /* NSResponder.h */; + name = "NSResponder.h: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 1818; + vrLoc = 0; + }; + D27B7D6F10E11399004D7DBC /* NSResponder.h */ = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = NSResponder.h; + path = /Developer/SDKs/MacOSX10.6.sdk/System/Library/Frameworks/AppKit.framework/Versions/C/Headers/NSResponder.h; + sourceTree = ""; + }; + D27B7D7010E11399004D7DBC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = D27B7D7110E11399004D7DBC /* NSView.h */; + name = "NSView.h: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 1280; + vrLoc = 0; + }; + D27B7D7110E11399004D7DBC /* NSView.h */ = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = NSView.h; + path = /Developer/SDKs/MacOSX10.6.sdk/System/Library/Frameworks/AppKit.framework/Versions/C/Headers/NSView.h; + sourceTree = ""; + }; + D27B7D7210E11399004D7DBC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = D27B7D7310E11399004D7DBC /* NSControl.h */; + name = "NSControl.h: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 1173; + vrLoc = 0; + }; + D27B7D7310E11399004D7DBC /* NSControl.h */ = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = NSControl.h; + path = /Developer/SDKs/MacOSX10.6.sdk/System/Library/Frameworks/AppKit.framework/Versions/C/Headers/NSControl.h; + sourceTree = ""; + }; + D27B7D7410E11399004D7DBC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = D27B7D7510E11399004D7DBC /* NSTableView.h */; + name = "NSTableView.h: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 1819; + vrLoc = 0; + }; + D27B7D7510E11399004D7DBC /* NSTableView.h */ = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = NSTableView.h; + path = /Developer/SDKs/MacOSX10.6.sdk/System/Library/Frameworks/AppKit.framework/Versions/C/Headers/NSTableView.h; + sourceTree = ""; + }; + D27B7D7710E11399004D7DBC /* NSOutlineView.h */ = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = NSOutlineView.h; + path = /Developer/SDKs/MacOSX10.6.sdk/System/Library/Frameworks/AppKit.framework/Versions/C/Headers/NSOutlineView.h; + sourceTree = ""; + }; + D2864D4110F8E67A00FC5203 /* music.png */ = { + isa = PBXFileReference; + lastKnownFileType = image.png; + name = music.png; + path = /Users/alexrozanski/Development/Xcode/OSX/Projects/PXSourceList/music.png; + sourceTree = ""; + }; + D2864D4510F8E7D400FC5203 /* playlist.png */ = { + isa = PBXFileReference; + lastKnownFileType = image.png; + name = playlist.png; + path = /Users/alexrozanski/Development/Xcode/OSX/Projects/PXSourceList/playlist.png; + sourceTree = ""; + }; + D2864D4710F8E80100FC5203 /* movies.png */ = { + isa = PBXFileReference; + lastKnownFileType = image.png; + name = movies.png; + path = /Users/alexrozanski/Development/Xcode/OSX/Projects/PXSourceList/movies.png; + sourceTree = ""; + }; + D2864D4910F8E81D00FC5203 /* audiobooks.png */ = { + isa = PBXFileReference; + lastKnownFileType = image.png; + name = audiobooks.png; + path = /Users/alexrozanski/Development/Xcode/OSX/Projects/PXSourceList/audiobooks.png; + sourceTree = ""; + }; + D2864D6510F8E89F00FC5203 /* PBXBookmark */ = { + isa = PBXBookmark; + fRef = D2864D4110F8E67A00FC5203 /* music.png */; + }; + D2864D7610F8E8E800FC5203 /* PBXBookmark */ = { + isa = PBXBookmark; + fRef = D2864D4510F8E7D400FC5203 /* playlist.png */; + }; + D2864D7710F8E8E800FC5203 /* PBXBookmark */ = { + isa = PBXBookmark; + fRef = D2864D4710F8E80100FC5203 /* movies.png */; + }; + D2864D9810F8E99600FC5203 /* podcasts.png */ = { + isa = PBXFileReference; + lastKnownFileType = image.png; + name = podcasts.png; + path = /Users/alexrozanski/Development/Xcode/OSX/Projects/PXSourceList/podcasts.png; + sourceTree = ""; + }; + D2864DAE10F8E9BB00FC5203 /* PBXBookmark */ = { + isa = PBXBookmark; + fRef = D2864D4910F8E81D00FC5203 /* audiobooks.png */; + }; + D2864DB610F8E9D200FC5203 /* playlistFolder.png */ = { + isa = PBXFileReference; + lastKnownFileType = image.png; + name = playlistFolder.png; + path = /Users/alexrozanski/Development/Xcode/OSX/Projects/PXSourceList/playlistFolder.png; + sourceTree = ""; + }; + D2864DBE10F8E9F400FC5203 /* PBXBookmark */ = { + isa = PBXBookmark; + fRef = D2864D9810F8E99600FC5203 /* podcasts.png */; + }; + D2864DCC10F8EE9800FC5203 /* PBXBookmark */ = { + isa = PBXBookmark; + fRef = D2864DB610F8E9D200FC5203 /* playlistFolder.png */; + }; + D2864DCD10F8EE9800FC5203 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = D2864DCE10F8EE9800FC5203 /* PXSourceList.h */; + name = "PXSourceList.h: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 1355; + vrLoc = 0; + }; + D2864DCE10F8EE9800FC5203 /* PXSourceList.h */ = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = PXSourceList.h; + path = /Users/alexrozanski/Development/Xcode/OSX/Github/PXSourceList/PXSourceList.h; + sourceTree = ""; + }; + D2864DCF10F8EE9800FC5203 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = D2864DD010F8EE9800FC5203 /* PXSourceListDelegate.h */; + name = "PXSourceListDelegate.h: 14"; + rLen = 0; + rLoc = 235; + rType = 0; + vrLen = 1739; + vrLoc = 91; + }; + D2864DD010F8EE9800FC5203 /* PXSourceListDelegate.h */ = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = PXSourceListDelegate.h; + path = /Users/alexrozanski/Development/Xcode/OSX/Github/PXSourceList/PXSourceListDelegate.h; + sourceTree = ""; + }; + D2864DEA10F8EF1C00FC5203 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = D2EA6EFF10D925AA00402758 /* PXSourceListDataSource.h */; + name = "PXSourceListDataSource.h: 6"; + rLen = 0; + rLoc = 114; + rType = 0; + vrLen = 2013; + vrLoc = 0; + }; + D2864DEB10F8EF1C00FC5203 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = D2EA6F0010D925AA00402758 /* PXSourceListDelegate.h */; + name = "PXSourceListDelegate.h: 6"; + rLen = 0; + rLoc = 112; + rType = 0; + vrLen = 2096; + vrLoc = 3; + }; + D2864DEE10F8EF1C00FC5203 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = D205EE7E10F7B5AB004C6545 /* PXSourceList.m */; + name = "SourceListItem.m: 6"; + rLen = 0; + rLoc = 138; + rType = 0; + vrLen = 830; + vrLoc = 0; + }; + D2864E0310F8F20800FC5203 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = D205EDF510F7A693004C6545 /* AppDelegate.h */; + name = "AppDelegate.h: 10"; + rLen = 0; + rLoc = 164; + rType = 0; + vrLen = 419; + vrLoc = 0; + }; + D2864E0410F8F20800FC5203 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = D205EDF610F7A693004C6545 /* AppDelegate.m */; + name = "AppDelegate.m: 6"; + rLen = 0; + rLoc = 135; + rType = 0; + vrLen = 1853; + vrLoc = 1192; + }; + D2864E0510F8F20800FC5203 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = D205EE7D10F7B5AB004C6545 /* SourceListItem.h */; + name = "SourceListItem.h: 6"; + rLen = 0; + rLoc = 138; + rType = 0; + vrLen = 1382; + vrLoc = 3; + }; + D2864E0610F8F20800FC5203 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = D2EA6EC110D9205A00402758 /* PXSourceList.m */; + name = "PXSourceList.m: 6"; + rLen = 17; + rLoc = 90; + rType = 0; + vrLen = 1673; + vrLoc = 3080; + }; + D2864E1B10F8F52F00FC5203 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = D2EA6EC010D9205A00402758 /* PXSourceList.h */; + name = "PXSourceList.h: 115"; + rLen = 0; + rLoc = 1358; + rType = 0; + vrLen = 0; + vrLoc = 1358; + }; + D2864E1C10F8F52F00FC5203 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = D205EDDD10F7A1EE004C6545 /* README.markdown */; + name = "README.markdown: 45"; + rLen = 0; + rLoc = 4738; + rType = 0; + vrLen = 2433; + vrLoc = 1427; + }; + D2864E2610F8F5B700FC5203 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = D205EDDD10F7A1EE004C6545 /* README.markdown */; + name = "README.markdown: 33"; + rLen = 0; + rLoc = 2738; + rType = 0; + vrLen = 2320; + vrLoc = 1752; + }; + D28AFF8110F69566000452E6 /* limits.h */ = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = limits.h; + path = "/Developer/SDKs/MacOSX10.6.sdk/usr/lib/gcc/i686-apple-darwin10/4.2.1/include/limits.h"; + sourceTree = ""; + }; + D2E0722E10F89C030056126C /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = D2E0722F10F89C030056126C /* NSAlert.h */; + name = "NSAlert.h: 24"; + rLen = 30; + rLoc = 629; + rType = 0; + vrLen = 1224; + vrLoc = 0; + }; + D2E0722F10F89C030056126C /* NSAlert.h */ = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = NSAlert.h; + path = /Developer/SDKs/MacOSX10.6.sdk/System/Library/Frameworks/AppKit.framework/Versions/C/Headers/NSAlert.h; + sourceTree = ""; + }; + D2EA6EB110D9202800402758 /* PXSourceList */ = { + isa = PBXExecutable; + activeArgIndices = ( + ); + argumentStrings = ( + ); + autoAttachOnCrash = 1; + breakpointsEnabled = 0; + configStateDict = { + }; + customDataFormattersEnabled = 1; + dataTipCustomDataFormattersEnabled = 1; + dataTipShowTypeColumn = 1; + dataTipSortType = 0; + debuggerPlugin = GDBDebugging; + disassemblyDisplayState = 0; + dylibVariantSuffix = ""; + enableDebugStr = 1; + environmentEntries = ( + ); + executableSystemSymbolLevel = 0; + executableUserSymbolLevel = 0; + libgmallocEnabled = 0; + name = PXSourceList; + savedGlobals = { + }; + showTypeColumn = 0; + sourceDirectories = ( + ); + }; + D2EA6EBE10D9203500402758 /* Source Control */ = { + isa = PBXSourceControlManager; + fallbackIsa = XCSourceControlManager; + isSCMEnabled = 0; + scmConfiguration = { + repositoryNamesForRoots = { + "" = Xcode; + }; + }; + }; + D2EA6EBF10D9203500402758 /* Code sense */ = { + isa = PBXCodeSenseManager; + indexTemplatePath = ""; + }; + D2EA6EC010D9205A00402758 /* PXSourceList.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1085, 494}}"; + sepNavSelRange = "{252, 0}"; + sepNavVisRange = "{0, 538}"; + }; + }; + D2EA6EC110D9205A00402758 /* PXSourceList.m */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1006, 11180}}"; + sepNavSelRange = "{90, 17}"; + sepNavVisRange = "{3006, 1643}"; + }; + }; + D2EA6EFF10D925AA00402758 /* PXSourceListDataSource.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1097, 605}}"; + sepNavSelRange = "{114, 0}"; + sepNavVisRange = "{0, 2013}"; + }; + }; + D2EA6F0010D925AA00402758 /* PXSourceListDelegate.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {915, 806}}"; + sepNavSelRange = "{112, 0}"; + sepNavVisRange = "{0, 1568}"; + }; + }; +} diff --git a/PXSourceList.xcodeproj/alexrozanski.perspectivev3 b/PXSourceList.xcodeproj/alexrozanski.perspectivev3 new file mode 100644 index 0000000..2dea445 --- /dev/null +++ b/PXSourceList.xcodeproj/alexrozanski.perspectivev3 @@ -0,0 +1,1532 @@ + + + + + ActivePerspectiveName + Project + AllowedModules + + + BundleLoadPath + + MaxInstances + n + Module + PBXSmartGroupTreeModule + Name + Groups and Files Outline View + + + BundleLoadPath + + MaxInstances + n + Module + PBXNavigatorGroup + Name + Editor + + + BundleLoadPath + + MaxInstances + n + Module + XCTaskListModule + Name + Task List + + + BundleLoadPath + + MaxInstances + n + Module + XCDetailModule + Name + File and Smart Group Detail Viewer + + + BundleLoadPath + + MaxInstances + 1 + Module + PBXBuildResultsModule + Name + Detailed Build Results Viewer + + + BundleLoadPath + + MaxInstances + 1 + Module + PBXProjectFindModule + Name + Project Batch Find Tool + + + BundleLoadPath + + MaxInstances + n + Module + XCProjectFormatConflictsModule + Name + Project Format Conflicts List + + + BundleLoadPath + + MaxInstances + n + Module + PBXBookmarksModule + Name + Bookmarks Tool + + + BundleLoadPath + + MaxInstances + n + Module + PBXClassBrowserModule + Name + Class Browser + + + BundleLoadPath + + MaxInstances + n + Module + PBXCVSModule + Name + Source Code Control Tool + + + BundleLoadPath + + MaxInstances + n + Module + PBXDebugBreakpointsModule + Name + Debug Breakpoints Tool + + + BundleLoadPath + + MaxInstances + n + Module + XCDockableInspector + Name + Inspector + + + BundleLoadPath + + MaxInstances + n + Module + PBXOpenQuicklyModule + Name + Open Quickly Tool + + + BundleLoadPath + + MaxInstances + 1 + Module + PBXDebugSessionModule + Name + Debugger + + + BundleLoadPath + + MaxInstances + 1 + Module + PBXDebugCLIModule + Name + Debug Console + + + BundleLoadPath + + MaxInstances + n + Module + XCSnapshotModule + Name + Snapshots Tool + + + BundlePath + /Developer/Library/PrivateFrameworks/DevToolsInterface.framework/Resources + Description + AIODescriptionKey + DockingSystemVisible + + Extension + perspectivev3 + FavBarConfig + + PBXProjectModuleGUID + D2EA6EEC10D9255200402758 + XCBarModuleItemNames + + XCBarModuleItems + + + FirstTimeWindowDisplayed + + Identifier + com.apple.perspectives.project.defaultV3 + MajorVersion + 34 + MinorVersion + 0 + Name + All-In-One + Notifications + + OpenEditors + + PerspectiveWidths + + 1146 + 1146 + + Perspectives + + + ChosenToolbarItems + + XCToolbarPerspectiveControl + NSToolbarSeparatorItem + active-combo-popup + action + NSToolbarFlexibleSpaceItem + debugger-enable-breakpoints + build-and-go + com.apple.ide.PBXToolbarStopButton + get-info + NSToolbarFlexibleSpaceItem + com.apple.pbx.toolbar.searchfield + + ControllerClassBaseName + + IconName + WindowOfProject + Identifier + perspective.project + IsVertical + + Layout + + + ContentConfiguration + + PBXBottomSmartGroupGIDs + + 1C37FBAC04509CD000000102 + 1C37FAAC04509CD000000102 + 1C37FABC05509CD000000102 + 1C37FABC05539CD112110102 + E2644B35053B69B200211256 + 1C37FABC04509CD000100104 + 1CC0EA4004350EF90044410B + 1CC0EA4004350EF90041110B + 1C77FABC04509CD000000102 + + PBXProjectModuleGUID + 1CA23ED40692098700951B8B + PBXProjectModuleLabel + Files + PBXProjectStructureProvided + yes + PBXSmartGroupTreeModuleColumnData + + PBXSmartGroupTreeModuleColumnWidthsKey + + 22 + 237 + + PBXSmartGroupTreeModuleColumnsKey_v4 + + SCMStatusColumn + MainColumn + + + PBXSmartGroupTreeModuleOutlineStateKey_v7 + + PBXSmartGroupTreeModuleOutlineStateExpansionKey + + 29B97314FDCFA39411CA2CEA + 080E96DDFE201D6D7F000001 + D2EA702910D92EB300402758 + 29B97317FDCFA39411CA2CEA + D27B7D2710E0C925004D7DBC + 089C165CFE840E0CC02AAC07 + 1C37FBAC04509CD000000102 + + PBXSmartGroupTreeModuleOutlineStateSelectionKey + + + 9 + 8 + 3 + 0 + + + PBXSmartGroupTreeModuleOutlineStateVisibleRectKey + {{0, 1}, {259, 624}} + + PBXTopSmartGroupGIDs + + XCIncludePerspectivesSwitch + + + GeometryConfiguration + + Frame + {{0, 0}, {276, 642}} + GroupTreeTableConfiguration + + SCMStatusColumn + 22 + MainColumn + 237 + + RubberWindowFrame + 4 74 1146 683 0 0 1280 778 + + Module + PBXSmartGroupTreeModule + Proportion + 276pt + + + Dock + + + BecomeActive + + ContentConfiguration + + PBXProjectModuleGUID + D2EA6EDA10D9255200402758 + PBXProjectModuleLabel + PXSourceList.h + PBXSplitModuleInNavigatorKey + + Split0 + + PBXProjectModuleGUID + D2EA6EDB10D9255200402758 + PBXProjectModuleLabel + PXSourceList.h + _historyCapacity + 0 + bookmark + D2456D0D10F907B800B8045C + history + + D27B7D5B10E11399004D7DBC + D27B7D5C10E11399004D7DBC + D27B7D5E10E11399004D7DBC + D27B7D6010E11399004D7DBC + D27B7D6210E11399004D7DBC + D27B7D6410E11399004D7DBC + D27B7D6610E11399004D7DBC + D27B7D6810E11399004D7DBC + D27B7D6C10E11399004D7DBC + D27B7D6E10E11399004D7DBC + D27B7D7010E11399004D7DBC + D27B7D7210E11399004D7DBC + D27B7D7410E11399004D7DBC + D205EE4010F7A84B004C6545 + D205EE7810F7AB18004C6545 + D205EE7910F7AB18004C6545 + D2E0722E10F89C030056126C + D2456CB110F8F80F00B8045C + D2456CB210F8F80F00B8045C + D2456CE210F9059100B8045C + D2456CF310F905AD00B8045C + D2456D0610F907AB00B8045C + D2456D0710F907AB00B8045C + D2456D0810F907AB00B8045C + D2456D0910F907AB00B8045C + D2456D0C10F907B700B8045C + + + SplitCount + 1 + + StatusBarVisibility + + XCSharingToken + com.apple.Xcode.CommonNavigatorGroupSharingToken + + GeometryConfiguration + + Frame + {{0, 0}, {865, 637}} + RubberWindowFrame + 4 74 1146 683 0 0 1280 778 + + Module + PBXNavigatorGroup + Proportion + 637pt + + + Proportion + 0pt + Tabs + + + ContentConfiguration + + PBXProjectModuleGUID + 1CA23EDF0692099D00951B8B + PBXProjectModuleLabel + Detail + + GeometryConfiguration + + Frame + {{10, 27}, {865, -27}} + RubberWindowFrame + 4 74 1146 683 0 0 1280 778 + + Module + XCDetailModule + + + ContentConfiguration + + PBXProjectModuleGUID + 1CA23EE00692099D00951B8B + PBXProjectModuleLabel + Project Find + + GeometryConfiguration + + Frame + {{10, 31}, {603, 297}} + + Module + PBXProjectFindModule + + + ContentConfiguration + + PBXCVSModuleFilterTypeKey + 1032 + PBXCVSModuleTreeModuleColumnData + + PBXCVSModuleTreeModuleColumnWidthsKey + + 200 + 56 + 63 + 60 + 63 + 139 + + PBXCVSModuleTreeModuleColumnsKey + + Name + Status + Update + Revision + Author + Date + + + PBXProjectModuleGUID + 1CA23EE10692099D00951B8B + PBXProjectModuleLabel + SCM Results + + GeometryConfiguration + + Frame + {{10, 31}, {603, 297}} + + Module + PBXCVSModule + + + ContentConfiguration + + PBXProjectModuleGUID + XCMainBuildResultsModuleGUID + PBXProjectModuleLabel + Build Results + XCBuildResultsTrigger_Collapse + 1021 + XCBuildResultsTrigger_Open + 1011 + + GeometryConfiguration + + Frame + {{10, 27}, {865, 176}} + + Module + PBXBuildResultsModule + + + + + Proportion + 865pt + + + Name + Project + ServiceClasses + + XCModuleDock + PBXSmartGroupTreeModule + XCModuleDock + PBXNavigatorGroup + XCDockableTabModule + XCDetailModule + PBXProjectFindModule + PBXCVSModule + PBXBuildResultsModule + + TableOfContents + + D2456D0E10F907B800B8045C + 1CA23ED40692098700951B8B + D2456D0F10F907B800B8045C + D2EA6EDA10D9255200402758 + D2456D1010F907B800B8045C + 1CA23EDF0692099D00951B8B + 1CA23EE00692099D00951B8B + 1CA23EE10692099D00951B8B + XCMainBuildResultsModuleGUID + + ToolbarConfigUserDefaultsMinorVersion + 2 + ToolbarConfiguration + xcode.toolbar.config.defaultV3 + + + ChosenToolbarItems + + XCToolbarPerspectiveControl + NSToolbarSeparatorItem + build-and-go + go + NSToolbarFlexibleSpaceItem + debugger-fix-and-continue + debugger-restart-executable + debugger-pause + debugger-step-over + debugger-step-into + debugger-step-out + debugger-step-instruction + NSToolbarFlexibleSpaceItem + + ControllerClassBaseName + PBXDebugSessionModule + IconName + DebugTabIcon + Identifier + perspective.debug + IsVertical + + Layout + + + ContentConfiguration + + PBXProjectModuleGUID + 1CCC7628064C1048000F2A68 + PBXProjectModuleLabel + Debugger Console + + GeometryConfiguration + + Frame + {{0, 0}, {1146, 164}} + + Module + PBXDebugCLIModule + Proportion + 164pt + + + ContentConfiguration + + Debugger + + HorizontalSplitView + + _collapsingFrameDimension + 0.0 + _indexOfCollapsedView + 0 + _percentageOfCollapsedView + 0.0 + isCollapsed + yes + sizes + + {{0, 0}, {559, 229}} + {{559, 0}, {587, 229}} + + + VerticalSplitView + + _collapsingFrameDimension + 0.0 + _indexOfCollapsedView + 0 + _percentageOfCollapsedView + 0.0 + isCollapsed + yes + sizes + + {{0, 0}, {1146, 229}} + {{0, 229}, {1146, 244}} + + + + LauncherConfigVersion + 8 + PBXProjectModuleGUID + 1CCC7629064C1048000F2A68 + PBXProjectModuleLabel + Debug + + GeometryConfiguration + + DebugConsoleVisible + None + DebugConsoleWindowFrame + {{200, 200}, {500, 300}} + DebugSTDIOWindowFrame + {{200, 200}, {500, 300}} + Frame + {{0, 169}, {1146, 473}} + PBXDebugSessionStackFrameViewKey + + DebugVariablesTableConfiguration + + Name + 120 + Value + 85 + Summary + 357 + + Frame + {{559, 0}, {587, 229}} + + + Module + PBXDebugSessionModule + Proportion + 473pt + + + Name + Debug + ServiceClasses + + XCModuleDock + PBXDebugCLIModule + PBXDebugSessionModule + PBXDebugProcessAndThreadModule + PBXDebugProcessViewModule + PBXDebugThreadViewModule + PBXDebugStackFrameViewModule + PBXNavigatorGroup + + TableOfContents + + D2456D1110F907B800B8045C + 1CCC7628064C1048000F2A68 + 1CCC7629064C1048000F2A68 + D2456D1210F907B800B8045C + D2456D1310F907B800B8045C + D2456D1410F907B800B8045C + D2456D1510F907B800B8045C + D2EA6EDA10D9255200402758 + + ToolbarConfigUserDefaultsMinorVersion + 2 + ToolbarConfiguration + xcode.toolbar.config.debugV3 + + + PerspectivesBarVisible + + ShelfIsVisible + + SourceDescription + file at '/Developer/Library/PrivateFrameworks/DevToolsInterface.framework/Resources/XCPerspectivesSpecification.xcperspec' + StatusbarIsVisible + + TimeStamp + 0.0 + ToolbarConfigUserDefaultsMinorVersion + 2 + ToolbarDisplayMode + 1 + ToolbarIsVisible + + ToolbarSizeMode + 1 + Type + Perspectives + UpdateMessage + + WindowJustification + 5 + WindowOrderList + + D2456D1610F907B800B8045C + D2456D1710F907B800B8045C + /Users/alexrozanski/Development/Xcode/OSX/Github/PXSourceList/PXSourceList.xcodeproj + + WindowString + 4 74 1146 683 0 0 1280 778 + WindowToolsV3 + + + Identifier + windowTool.debugger + Layout + + + Dock + + + ContentConfiguration + + Debugger + + HorizontalSplitView + + _collapsingFrameDimension + 0.0 + _indexOfCollapsedView + 0 + _percentageOfCollapsedView + 0.0 + isCollapsed + yes + sizes + + {{0, 0}, {317, 164}} + {{317, 0}, {377, 164}} + + + VerticalSplitView + + _collapsingFrameDimension + 0.0 + _indexOfCollapsedView + 0 + _percentageOfCollapsedView + 0.0 + isCollapsed + yes + sizes + + {{0, 0}, {694, 164}} + {{0, 164}, {694, 216}} + + + + LauncherConfigVersion + 8 + PBXProjectModuleGUID + 1C162984064C10D400B95A72 + PBXProjectModuleLabel + Debug - GLUTExamples (Underwater) + + GeometryConfiguration + + DebugConsoleDrawerSize + {100, 120} + DebugConsoleVisible + None + DebugConsoleWindowFrame + {{200, 200}, {500, 300}} + DebugSTDIOWindowFrame + {{200, 200}, {500, 300}} + Frame + {{0, 0}, {694, 380}} + RubberWindowFrame + 321 238 694 422 0 0 1440 878 + + Module + PBXDebugSessionModule + Proportion + 100% + + + Proportion + 100% + + + Name + Debugger + ServiceClasses + + PBXDebugSessionModule + + StatusbarIsVisible + 1 + TableOfContents + + 1CD10A99069EF8BA00B06720 + 1C0AD2AB069F1E9B00FABCE6 + 1C162984064C10D400B95A72 + 1C0AD2AC069F1E9B00FABCE6 + + ToolbarConfiguration + xcode.toolbar.config.debugV3 + WindowString + 321 238 694 422 0 0 1440 878 + WindowToolGUID + 1CD10A99069EF8BA00B06720 + WindowToolIsVisible + 0 + + + Identifier + windowTool.build + Layout + + + Dock + + + ContentConfiguration + + PBXProjectModuleGUID + 1CD0528F0623707200166675 + PBXProjectModuleLabel + <No Editor> + PBXSplitModuleInNavigatorKey + + Split0 + + PBXProjectModuleGUID + 1CD052900623707200166675 + + SplitCount + 1 + + StatusBarVisibility + 1 + + GeometryConfiguration + + Frame + {{0, 0}, {500, 215}} + RubberWindowFrame + 192 257 500 500 0 0 1280 1002 + + Module + PBXNavigatorGroup + Proportion + 218pt + + + BecomeActive + 1 + ContentConfiguration + + PBXProjectModuleGUID + XCMainBuildResultsModuleGUID + PBXProjectModuleLabel + Build Results + + GeometryConfiguration + + Frame + {{0, 222}, {500, 236}} + RubberWindowFrame + 192 257 500 500 0 0 1280 1002 + + Module + PBXBuildResultsModule + Proportion + 236pt + + + Proportion + 458pt + + + Name + Build Results + ServiceClasses + + PBXBuildResultsModule + + StatusbarIsVisible + 1 + TableOfContents + + 1C78EAA5065D492600B07095 + 1C78EAA6065D492600B07095 + 1CD0528F0623707200166675 + XCMainBuildResultsModuleGUID + + ToolbarConfiguration + xcode.toolbar.config.buildV3 + WindowString + 192 257 500 500 0 0 1280 1002 + + + Identifier + windowTool.find + Layout + + + Dock + + + Dock + + + ContentConfiguration + + PBXProjectModuleGUID + 1CDD528C0622207200134675 + PBXProjectModuleLabel + <No Editor> + PBXSplitModuleInNavigatorKey + + Split0 + + PBXProjectModuleGUID + 1CD0528D0623707200166675 + + SplitCount + 1 + + StatusBarVisibility + 1 + + GeometryConfiguration + + Frame + {{0, 0}, {781, 167}} + RubberWindowFrame + 62 385 781 470 0 0 1440 878 + + Module + PBXNavigatorGroup + Proportion + 781pt + + + Proportion + 50% + + + BecomeActive + 1 + ContentConfiguration + + PBXProjectModuleGUID + 1CD0528E0623707200166675 + PBXProjectModuleLabel + Project Find + + GeometryConfiguration + + Frame + {{8, 0}, {773, 254}} + RubberWindowFrame + 62 385 781 470 0 0 1440 878 + + Module + PBXProjectFindModule + Proportion + 50% + + + Proportion + 428pt + + + Name + Project Find + ServiceClasses + + PBXProjectFindModule + + StatusbarIsVisible + 1 + TableOfContents + + 1C530D57069F1CE1000CFCEE + 1C530D58069F1CE1000CFCEE + 1C530D59069F1CE1000CFCEE + 1CDD528C0622207200134675 + 1C530D5A069F1CE1000CFCEE + 1CE0B1FE06471DED0097A5F4 + 1CD0528E0623707200166675 + + WindowString + 62 385 781 470 0 0 1440 878 + WindowToolGUID + 1C530D57069F1CE1000CFCEE + WindowToolIsVisible + 0 + + + Identifier + windowTool.snapshots + Layout + + + Dock + + + Module + XCSnapshotModule + Proportion + 100% + + + Proportion + 100% + + + Name + Snapshots + ServiceClasses + + XCSnapshotModule + + StatusbarIsVisible + Yes + ToolbarConfiguration + xcode.toolbar.config.snapshots + WindowString + 315 824 300 550 0 0 1440 878 + WindowToolIsVisible + Yes + + + Identifier + windowTool.debuggerConsole + Layout + + + Dock + + + BecomeActive + 1 + ContentConfiguration + + PBXProjectModuleGUID + 1C78EAAC065D492600B07095 + PBXProjectModuleLabel + Debugger Console + + GeometryConfiguration + + Frame + {{0, 0}, {700, 358}} + RubberWindowFrame + 149 87 700 400 0 0 1440 878 + + Module + PBXDebugCLIModule + Proportion + 358pt + + + Proportion + 358pt + + + Name + Debugger Console + ServiceClasses + + PBXDebugCLIModule + + StatusbarIsVisible + 1 + TableOfContents + + 1C530D5B069F1CE1000CFCEE + 1C530D5C069F1CE1000CFCEE + 1C78EAAC065D492600B07095 + + ToolbarConfiguration + xcode.toolbar.config.consoleV3 + WindowString + 149 87 440 400 0 0 1440 878 + WindowToolGUID + 1C530D5B069F1CE1000CFCEE + WindowToolIsVisible + 0 + + + Identifier + windowTool.scm + Layout + + + Dock + + + ContentConfiguration + + PBXProjectModuleGUID + 1C78EAB2065D492600B07095 + PBXProjectModuleLabel + <No Editor> + PBXSplitModuleInNavigatorKey + + Split0 + + PBXProjectModuleGUID + 1C78EAB3065D492600B07095 + + SplitCount + 1 + + StatusBarVisibility + 1 + + GeometryConfiguration + + Frame + {{0, 0}, {452, 0}} + RubberWindowFrame + 743 379 452 308 0 0 1280 1002 + + Module + PBXNavigatorGroup + Proportion + 0pt + + + BecomeActive + 1 + ContentConfiguration + + PBXProjectModuleGUID + 1CD052920623707200166675 + PBXProjectModuleLabel + SCM + + GeometryConfiguration + + ConsoleFrame + {{0, 259}, {452, 0}} + Frame + {{0, 7}, {452, 259}} + RubberWindowFrame + 743 379 452 308 0 0 1280 1002 + TableConfiguration + + Status + 30 + FileName + 199 + Path + 197.09500122070312 + + TableFrame + {{0, 0}, {452, 250}} + + Module + PBXCVSModule + Proportion + 262pt + + + Proportion + 266pt + + + Name + SCM + ServiceClasses + + PBXCVSModule + + StatusbarIsVisible + 1 + TableOfContents + + 1C78EAB4065D492600B07095 + 1C78EAB5065D492600B07095 + 1C78EAB2065D492600B07095 + 1CD052920623707200166675 + + ToolbarConfiguration + xcode.toolbar.config.scmV3 + WindowString + 743 379 452 308 0 0 1280 1002 + + + Identifier + windowTool.breakpoints + IsVertical + 0 + Layout + + + Dock + + + BecomeActive + 1 + ContentConfiguration + + PBXBottomSmartGroupGIDs + + 1C77FABC04509CD000000102 + + PBXProjectModuleGUID + 1CE0B1FE06471DED0097A5F4 + PBXProjectModuleLabel + Files + PBXProjectStructureProvided + no + PBXSmartGroupTreeModuleColumnData + + PBXSmartGroupTreeModuleColumnWidthsKey + + 168 + + PBXSmartGroupTreeModuleColumnsKey_v4 + + MainColumn + + + PBXSmartGroupTreeModuleOutlineStateKey_v7 + + PBXSmartGroupTreeModuleOutlineStateExpansionKey + + 1C77FABC04509CD000000102 + + PBXSmartGroupTreeModuleOutlineStateSelectionKey + + + 0 + + + PBXSmartGroupTreeModuleOutlineStateVisibleRectKey + {{0, 0}, {168, 350}} + + PBXTopSmartGroupGIDs + + XCIncludePerspectivesSwitch + 0 + + GeometryConfiguration + + Frame + {{0, 0}, {185, 368}} + GroupTreeTableConfiguration + + MainColumn + 168 + + RubberWindowFrame + 315 424 744 409 0 0 1440 878 + + Module + PBXSmartGroupTreeModule + Proportion + 185pt + + + ContentConfiguration + + PBXProjectModuleGUID + 1CA1AED706398EBD00589147 + PBXProjectModuleLabel + Detail + + GeometryConfiguration + + Frame + {{190, 0}, {554, 368}} + RubberWindowFrame + 315 424 744 409 0 0 1440 878 + + Module + XCDetailModule + Proportion + 554pt + + + Proportion + 368pt + + + MajorVersion + 3 + MinorVersion + 0 + Name + Breakpoints + ServiceClasses + + PBXSmartGroupTreeModule + XCDetailModule + + StatusbarIsVisible + 1 + TableOfContents + + 1CDDB66807F98D9800BB5817 + 1CDDB66907F98D9800BB5817 + 1CE0B1FE06471DED0097A5F4 + 1CA1AED706398EBD00589147 + + ToolbarConfiguration + xcode.toolbar.config.breakpointsV3 + WindowString + 315 424 744 409 0 0 1440 878 + WindowToolGUID + 1CDDB66807F98D9800BB5817 + WindowToolIsVisible + 1 + + + Identifier + windowTool.debugAnimator + Layout + + + Dock + + + Module + PBXNavigatorGroup + Proportion + 100% + + + Proportion + 100% + + + Name + Debug Visualizer + ServiceClasses + + PBXNavigatorGroup + + StatusbarIsVisible + 1 + ToolbarConfiguration + xcode.toolbar.config.debugAnimatorV3 + WindowString + 100 100 700 500 0 0 1280 1002 + + + Identifier + windowTool.bookmarks + Layout + + + Dock + + + Module + PBXBookmarksModule + Proportion + 166pt + + + Proportion + 166pt + + + Name + Bookmarks + ServiceClasses + + PBXBookmarksModule + + StatusbarIsVisible + 0 + WindowString + 538 42 401 187 0 0 1280 1002 + + + Identifier + windowTool.projectFormatConflicts + Layout + + + Dock + + + Module + XCProjectFormatConflictsModule + Proportion + 100% + + + Proportion + 100% + + + Name + Project Format Conflicts + ServiceClasses + + XCProjectFormatConflictsModule + + StatusbarIsVisible + 0 + WindowContentMinSize + 450 300 + WindowString + 50 850 472 307 0 0 1440 877 + + + Identifier + windowTool.classBrowser + Layout + + + Dock + + + BecomeActive + 1 + ContentConfiguration + + OptionsSetName + Hierarchy, all classes + PBXProjectModuleGUID + 1CA6456E063B45B4001379D8 + PBXProjectModuleLabel + Class Browser - NSObject + + GeometryConfiguration + + ClassesFrame + {{0, 0}, {369, 96}} + ClassesTreeTableConfiguration + + PBXClassNameColumnIdentifier + 208 + PBXClassBookColumnIdentifier + 22 + + Frame + {{0, 0}, {616, 353}} + MembersFrame + {{0, 105}, {369, 395}} + MembersTreeTableConfiguration + + PBXMemberTypeIconColumnIdentifier + 22 + PBXMemberNameColumnIdentifier + 216 + PBXMemberTypeColumnIdentifier + 94 + PBXMemberBookColumnIdentifier + 22 + + PBXModuleWindowStatusBarHidden2 + 1 + RubberWindowFrame + 597 125 616 374 0 0 1280 1002 + + Module + PBXClassBrowserModule + Proportion + 354pt + + + Proportion + 354pt + + + Name + Class Browser + ServiceClasses + + PBXClassBrowserModule + + StatusbarIsVisible + 0 + TableOfContents + + 1C78EABA065D492600B07095 + 1C78EABB065D492600B07095 + 1CA6456E063B45B4001379D8 + + ToolbarConfiguration + xcode.toolbar.config.classbrowser + WindowString + 597 125 616 374 0 0 1280 1002 + + + Identifier + windowTool.refactoring + IncludeInToolsMenu + 0 + Layout + + + Dock + + + BecomeActive + 1 + GeometryConfiguration + + Frame + {0, 0}, {500, 335} + RubberWindowFrame + {0, 0}, {500, 335} + + Module + XCRefactoringModule + Proportion + 100% + + + Proportion + 100% + + + Name + Refactoring + ServiceClasses + + XCRefactoringModule + + WindowString + 200 200 500 356 0 0 1920 1200 + + + + diff --git a/PXSourceList.xcodeproj/project.pbxproj b/PXSourceList.xcodeproj/project.pbxproj new file mode 100644 index 0000000..12dbe1d --- /dev/null +++ b/PXSourceList.xcodeproj/project.pbxproj @@ -0,0 +1,353 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 45; + objects = { + +/* Begin PBXBuildFile section */ + 8D11072B0486CEB800E47090 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 089C165CFE840E0CC02AAC07 /* InfoPlist.strings */; }; + 8D11072D0486CEB800E47090 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 29B97316FDCFA39411CA2CEA /* main.m */; settings = {ATTRIBUTES = (); }; }; + 8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; + D205EDF010F7A609004C6545 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = D205EDEF10F7A609004C6545 /* MainMenu.xib */; }; + D205EDF710F7A693004C6545 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = D205EDF610F7A693004C6545 /* AppDelegate.m */; }; + D2456CAA10F8F7F500B8045C /* audiobooks.png in Resources */ = {isa = PBXBuildFile; fileRef = D2456CA410F8F7F500B8045C /* audiobooks.png */; }; + D2456CAB10F8F7F500B8045C /* movies.png in Resources */ = {isa = PBXBuildFile; fileRef = D2456CA510F8F7F500B8045C /* movies.png */; }; + D2456CAC10F8F7F500B8045C /* music.png in Resources */ = {isa = PBXBuildFile; fileRef = D2456CA610F8F7F500B8045C /* music.png */; }; + D2456CAD10F8F7F500B8045C /* playlist.png in Resources */ = {isa = PBXBuildFile; fileRef = D2456CA710F8F7F500B8045C /* playlist.png */; }; + D2456CAE10F8F7F500B8045C /* playlistFolder.png in Resources */ = {isa = PBXBuildFile; fileRef = D2456CA810F8F7F500B8045C /* playlistFolder.png */; }; + D2456CAF10F8F7F500B8045C /* podcasts.png in Resources */ = {isa = PBXBuildFile; fileRef = D2456CA910F8F7F500B8045C /* podcasts.png */; }; + D2456D1A10F9093800B8045C /* PXSourceList.m in Sources */ = {isa = PBXBuildFile; fileRef = D2456D1910F9093800B8045C /* PXSourceList.m */; }; + D265C2D710E3814B00A1E824 /* TODO.rtf in Resources */ = {isa = PBXBuildFile; fileRef = D265C2D610E3814B00A1E824 /* TODO.rtf */; }; + D2EA6EC210D9205A00402758 /* PXSourceList.m in Sources */ = {isa = PBXBuildFile; fileRef = D2EA6EC110D9205A00402758 /* PXSourceList.m */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + 089C165DFE840E0CC02AAC07 /* InfoPlist.strings */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = InfoPlist.strings; path = Resources/English.lproj/InfoPlist.strings; sourceTree = ""; }; + 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = ""; }; + 13E42FB307B3F0F600E4EEF1 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = /System/Library/Frameworks/CoreData.framework; sourceTree = ""; }; + 256AC3F00F4B6AF500CF3369 /* PXSourceList_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PXSourceList_Prefix.pch; sourceTree = ""; }; + 29B97316FDCFA39411CA2CEA /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; + 29B97324FDCFA39411CA2CEA /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = ""; }; + 29B97325FDCFA39411CA2CEA /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = ""; }; + 8D1107310486CEB800E47090 /* PXSourceList-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "PXSourceList-Info.plist"; sourceTree = ""; }; + 8D1107320486CEB800E47090 /* PXSourceList.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = PXSourceList.app; sourceTree = BUILT_PRODUCTS_DIR; }; + D205EDDD10F7A1EE004C6545 /* README.markdown */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.markdown; sourceTree = ""; }; + D205EDEF10F7A609004C6545 /* MainMenu.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = MainMenu.xib; path = Resources/MainMenu.xib; sourceTree = ""; }; + D205EDF510F7A693004C6545 /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = Classes/AppDelegate.h; sourceTree = ""; }; + D205EDF610F7A693004C6545 /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AppDelegate.m; path = Classes/AppDelegate.m; sourceTree = ""; }; + D205EE7D10F7B5AB004C6545 /* SourceListItem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SourceListItem.h; path = Classes/SourceListItem.h; sourceTree = ""; }; + D2456CA410F8F7F500B8045C /* audiobooks.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = audiobooks.png; path = Resources/audiobooks.png; sourceTree = ""; }; + D2456CA510F8F7F500B8045C /* movies.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = movies.png; path = Resources/movies.png; sourceTree = ""; }; + D2456CA610F8F7F500B8045C /* music.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = music.png; path = Resources/music.png; sourceTree = ""; }; + D2456CA710F8F7F500B8045C /* playlist.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = playlist.png; path = Resources/playlist.png; sourceTree = ""; }; + D2456CA810F8F7F500B8045C /* playlistFolder.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = playlistFolder.png; path = Resources/playlistFolder.png; sourceTree = ""; }; + D2456CA910F8F7F500B8045C /* podcasts.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = podcasts.png; path = Resources/podcasts.png; sourceTree = ""; }; + D2456D1910F9093800B8045C /* PXSourceList.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = PXSourceList.m; path = Classes/PXSourceList.m; sourceTree = ""; }; + D265C2D610E3814B00A1E824 /* TODO.rtf */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; path = TODO.rtf; sourceTree = ""; }; + D2EA6EC010D9205A00402758 /* PXSourceList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PXSourceList.h; path = Classes/PXSourceList.h; sourceTree = ""; }; + D2EA6EC110D9205A00402758 /* PXSourceList.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = PXSourceList.m; path = Classes/PXSourceList.m; sourceTree = ""; }; + D2EA6EFF10D925AA00402758 /* PXSourceListDataSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PXSourceListDataSource.h; path = Classes/PXSourceListDataSource.h; sourceTree = ""; }; + D2EA6F0010D925AA00402758 /* PXSourceListDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PXSourceListDelegate.h; path = Classes/PXSourceListDelegate.h; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 8D11072E0486CEB800E47090 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 080E96DDFE201D6D7F000001 /* Classes */ = { + isa = PBXGroup; + children = ( + D205EDF510F7A693004C6545 /* AppDelegate.h */, + D205EDF610F7A693004C6545 /* AppDelegate.m */, + D205EE7D10F7B5AB004C6545 /* SourceListItem.h */, + D2456D1910F9093800B8045C /* PXSourceList.m */, + D2EA702910D92EB300402758 /* PXSourceList */, + ); + name = Classes; + sourceTree = ""; + }; + 1058C7A0FEA54F0111CA2CBB /* Linked Frameworks */ = { + isa = PBXGroup; + children = ( + 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */, + ); + name = "Linked Frameworks"; + sourceTree = ""; + }; + 1058C7A2FEA54F0111CA2CBB /* Other Frameworks */ = { + isa = PBXGroup; + children = ( + 29B97324FDCFA39411CA2CEA /* AppKit.framework */, + 13E42FB307B3F0F600E4EEF1 /* CoreData.framework */, + 29B97325FDCFA39411CA2CEA /* Foundation.framework */, + ); + name = "Other Frameworks"; + sourceTree = ""; + }; + 19C28FACFE9D520D11CA2CBB /* Products */ = { + isa = PBXGroup; + children = ( + 8D1107320486CEB800E47090 /* PXSourceList.app */, + ); + name = Products; + sourceTree = ""; + }; + 29B97314FDCFA39411CA2CEA /* PXSourceList */ = { + isa = PBXGroup; + children = ( + D265C2D610E3814B00A1E824 /* TODO.rtf */, + D205EDDD10F7A1EE004C6545 /* README.markdown */, + 080E96DDFE201D6D7F000001 /* Classes */, + 29B97315FDCFA39411CA2CEA /* Other Sources */, + 29B97317FDCFA39411CA2CEA /* Resources */, + 29B97323FDCFA39411CA2CEA /* Frameworks */, + 19C28FACFE9D520D11CA2CBB /* Products */, + ); + name = PXSourceList; + sourceTree = ""; + }; + 29B97315FDCFA39411CA2CEA /* Other Sources */ = { + isa = PBXGroup; + children = ( + 256AC3F00F4B6AF500CF3369 /* PXSourceList_Prefix.pch */, + 29B97316FDCFA39411CA2CEA /* main.m */, + ); + name = "Other Sources"; + sourceTree = ""; + }; + 29B97317FDCFA39411CA2CEA /* Resources */ = { + isa = PBXGroup; + children = ( + D27B7D2710E0C925004D7DBC /* Icons */, + 8D1107310486CEB800E47090 /* PXSourceList-Info.plist */, + 089C165CFE840E0CC02AAC07 /* InfoPlist.strings */, + D205EDEF10F7A609004C6545 /* MainMenu.xib */, + ); + name = Resources; + sourceTree = ""; + }; + 29B97323FDCFA39411CA2CEA /* Frameworks */ = { + isa = PBXGroup; + children = ( + 1058C7A0FEA54F0111CA2CBB /* Linked Frameworks */, + 1058C7A2FEA54F0111CA2CBB /* Other Frameworks */, + ); + name = Frameworks; + sourceTree = ""; + }; + D27B7D2710E0C925004D7DBC /* Icons */ = { + isa = PBXGroup; + children = ( + D2456CA410F8F7F500B8045C /* audiobooks.png */, + D2456CA510F8F7F500B8045C /* movies.png */, + D2456CA610F8F7F500B8045C /* music.png */, + D2456CA710F8F7F500B8045C /* playlist.png */, + D2456CA810F8F7F500B8045C /* playlistFolder.png */, + D2456CA910F8F7F500B8045C /* podcasts.png */, + ); + name = Icons; + sourceTree = ""; + }; + D2EA702910D92EB300402758 /* PXSourceList */ = { + isa = PBXGroup; + children = ( + D2EA6EC010D9205A00402758 /* PXSourceList.h */, + D2EA6EC110D9205A00402758 /* PXSourceList.m */, + D2EA6EFF10D925AA00402758 /* PXSourceListDataSource.h */, + D2EA6F0010D925AA00402758 /* PXSourceListDelegate.h */, + ); + name = PXSourceList; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 8D1107260486CEB800E47090 /* PXSourceList */ = { + isa = PBXNativeTarget; + buildConfigurationList = C01FCF4A08A954540054247B /* Build configuration list for PBXNativeTarget "PXSourceList" */; + buildPhases = ( + 8D1107290486CEB800E47090 /* Resources */, + 8D11072C0486CEB800E47090 /* Sources */, + 8D11072E0486CEB800E47090 /* Frameworks */, + D205F09310F7D40E004C6545 /* ShellScript */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = PXSourceList; + productInstallPath = "$(HOME)/Applications"; + productName = PXSourceList; + productReference = 8D1107320486CEB800E47090 /* PXSourceList.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 29B97313FDCFA39411CA2CEA /* Project object */ = { + isa = PBXProject; + buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "PXSourceList" */; + compatibilityVersion = "Xcode 3.1"; + hasScannedForEncodings = 1; + mainGroup = 29B97314FDCFA39411CA2CEA /* PXSourceList */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 8D1107260486CEB800E47090 /* PXSourceList */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 8D1107290486CEB800E47090 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 8D11072B0486CEB800E47090 /* InfoPlist.strings in Resources */, + D265C2D710E3814B00A1E824 /* TODO.rtf in Resources */, + D205EDF010F7A609004C6545 /* MainMenu.xib in Resources */, + D2456CAA10F8F7F500B8045C /* audiobooks.png in Resources */, + D2456CAB10F8F7F500B8045C /* movies.png in Resources */, + D2456CAC10F8F7F500B8045C /* music.png in Resources */, + D2456CAD10F8F7F500B8045C /* playlist.png in Resources */, + D2456CAE10F8F7F500B8045C /* playlistFolder.png in Resources */, + D2456CAF10F8F7F500B8045C /* podcasts.png in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + D205F09310F7D40E004C6545 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "DOXYGEN=/Users/alexrozanski/Development/Xcode/OSX/Documentation/doxygen\nDOXYFILE=$SOURCE_ROOT/Doxyfile\n\nAPPLEDOC=/Users/alexrozanski/Development/Xcode/osx/Documentation/appledoc\nSTRIPDTAGS=/Users/alexrozanski/Development/Xcode/osx/Documentation/StripDoxygenTags\n\n#THE OUTPUT DIRECTORY HAS ITS CONTENTS REMOVED ON BUILD!\n\n#$APPLEDOC -p \"$PROJECT_NAME\" -i $SOURCE_ROOT -o $SOURCE_ROOT/documentation/output -t \"/Library/Application Support/appledoc\" -c $SOURCE_ROOT/Doxyfile --date-time-template \"Last updated: %Y-%m-%d\" --xhtml\n\n#Strip the Doxygen tags\n\n#$STRIPDTAGS -i $SOURCE_ROOT -o /Users/alexrozanski/Development/Xcode/osx/Github/PXSourceList\n"; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 8D11072C0486CEB800E47090 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 8D11072D0486CEB800E47090 /* main.m in Sources */, + D2EA6EC210D9205A00402758 /* PXSourceList.m in Sources */, + D205EDF710F7A693004C6545 /* AppDelegate.m in Sources */, + D2456D1A10F9093800B8045C /* PXSourceList.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + 089C165CFE840E0CC02AAC07 /* InfoPlist.strings */ = { + isa = PBXVariantGroup; + children = ( + 089C165DFE840E0CC02AAC07 /* InfoPlist.strings */, + ); + name = InfoPlist.strings; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + C01FCF4B08A954540054247B /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + COPY_PHASE_STRIP = NO; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_MODEL_TUNING = G5; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = PXSourceList_Prefix.pch; + INFOPLIST_FILE = "PXSourceList-Info.plist"; + INSTALL_PATH = "$(HOME)/Applications"; + PRODUCT_NAME = PXSourceList; + }; + name = Debug; + }; + C01FCF4C08A954540054247B /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + GCC_MODEL_TUNING = G5; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = PXSourceList_Prefix.pch; + INFOPLIST_FILE = "PXSourceList-Info.plist"; + INSTALL_PATH = "$(HOME)/Applications"; + PRODUCT_NAME = PXSourceList; + }; + name = Release; + }; + C01FCF4F08A954540054247B /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_32_64_BIT)"; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + ONLY_ACTIVE_ARCH = YES; + PREBINDING = NO; + SDKROOT = macosx10.6; + }; + name = Debug; + }; + C01FCF5008A954540054247B /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_32_64_BIT)"; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + PREBINDING = NO; + SDKROOT = macosx10.5; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + C01FCF4A08A954540054247B /* Build configuration list for PBXNativeTarget "PXSourceList" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + C01FCF4B08A954540054247B /* Debug */, + C01FCF4C08A954540054247B /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + C01FCF4E08A954540054247B /* Build configuration list for PBXProject "PXSourceList" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + C01FCF4F08A954540054247B /* Debug */, + C01FCF5008A954540054247B /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 29B97313FDCFA39411CA2CEA /* Project object */; +} diff --git a/PXSourceList_Prefix.pch b/PXSourceList_Prefix.pch new file mode 100644 index 0000000..af0d2b7 --- /dev/null +++ b/PXSourceList_Prefix.pch @@ -0,0 +1,7 @@ +// +// Prefix header for all source files of the 'PXSourceList' target in the 'PXSourceList' project +// + +#ifdef __OBJC__ + #import +#endif diff --git a/README.markdown b/README.markdown new file mode 100644 index 0000000..3998d6d --- /dev/null +++ b/README.markdown @@ -0,0 +1,60 @@ +#PXSourceList + +A Source List control for use with the Mac OS X 10.5 SDK or above. + +[Download the documentation][1] + +##Intention +[Source Lists][2] are used in a lot of Mac OS X applications, but the support for such controls is quite primitive – at best you create an Outline View with Source List highlighting, but none of the features such as badging are built in by default. `PXSourceList` is a reusable control – within the context of Source Lists – which makes creating applications with Source Lists a much easier process. + +##Using the code +There are only a few steps involved: + + 1. Download the source, and copy `PXSourceList.h`, `PXSourceList.m`, `PXSourceListDelegate.h` and `PXSourceListDataSource.h` into your Xcode project. + 2. To create the control in Interface Builder, drag an `NSOutlineView` object over to a window and in the Identity Inspector for the Outline View, change the class to `PXSourceList`. In the Attributes Inspector, set it to have only 1 column, uncheck "Headers" in the "Columns" section and set "Highlight" to "Source List" – there is an NIB in the example project bundled with the source. + 3. Make sure to `#import "PXSourceList.h"` for files that require it (the delegate and data source protocol files are imported in this main header), and ensure that your class(es) that are the `delegate` and/or `dataSource` for the Source List conform to the `PXSourceListDelegate` and `PXSourceListDataSource` protocols respectively. + +**Note:** If you intend to use PXSourceList with the 10.5 SDK, you will need to remove some of the protocols that PXSourceList conforms to which do not exist – in `PXSourceList.h`, remove the `` from the interface declaration. + +There is also an example project bundled with the source to see how the control is used. + +##How the control works +I have tried to structure PXSourceList in a way such that it fits common Cocoa design patterns and therefore makes it easier to use. + +PXSourceList adapts the delegate and data source design patterns, and extends those of the `NSOutlineViewDelegate` and `NSOutlineViewDataSource`, much in the way that these extend the appropriate `NSTableView` protocols. + +If you want more information have a look at the [Outline View Programming Topics for Cocoa][3] – the Source List delegate and data source implementation work in much the same way, but with methods added and removed, as detailed in the documentation. + +##Documentation +Documentation is available for PXSourceList, downloadable [here][4]. Provided in the ZIP file is a folder containing HTML documentation, or a docset which can be opened in Xcode and which is then searchable from the Xcode Developer Documentation. + +If you feel that any areas of the documentation are lacking or missing, please feel free to [let me know][5], which will be much appreciated. + +**Note:** the documentation for the Source List notifications can be found in the `NSObject(PXSourceListNotifications)` reference, which is linked to from the documentation index page. + +##Known Issues + + - Calling `delegate` or `dataSource` on the Source List returns the Source List instance. This is, unfortunately, a side effect of how delegate and data source methods are handled within the Source List – I hope to work around it in the future. + - No bindings implementation (yet). + +##Attribution + +I was spurred along the way by many sources, but in particular [BWToolkit][6] by Brandon Walkin and Fraser Kuyvenhoven, which gave me the idea of how to handle the Source List delegate and data source methods. + +Also Brian Dunagan's post on [Source List badging][7] and determining state for the various colours was a great help when I came to the drawing code for that. + +The documentation was created using [Doxygen][8] and [appledoc][9], thanks of which go to the developers of both. + +The icons used in the demo project bundled with the source code are from the [Fugue icon set][10] by Yusuke Kamiyamane. + + + [1]: http://perspx.com/wp-content/uploads/2010/01/PXSourceList_0-7_Documentation.zip + [2]: http://developer.apple.com/Mac/library/documentation/UserExperience/Conceptual/AppleHIGuidelines/XHIGWindows/XHIGWindows.html#//apple_ref/doc/uid/20000961-CHDDIGDE + [3]: http://developer.apple.com/mac/library/DOCUMENTATION/Cocoa/Conceptual/OutlineView/Articles/UsingOutlineDataSource.html + [4]: http://perspx.com/wp-content/uploads/2010/01/PXSourceList_0-7_Documentation.zip + [5]: http://perspx.com/contact + [6]: http://brandonwalkin.com/bwtoolkit/ + [7]: http://www.bdunagan.com/2008/11/10/cocoa-tutorial-source-list-badges-part-2/ + [8]: http://www.doxygen.org/ + [9]: http://www.gentlebytes.com/freeware/appledoc/ + [10]: http://www.pinvoke.com/ \ No newline at end of file diff --git a/Resources/DocSet-Info.plist b/Resources/DocSet-Info.plist new file mode 100644 index 0000000..91c026a --- /dev/null +++ b/Resources/DocSet-Info.plist @@ -0,0 +1,12 @@ + + + + + CFBundleIdentifier + com.custom.PXSourceList.docset + CFBundleName + PXSourceList + DocSetFeedName + Custom documentation + + diff --git a/Resources/English.lproj/InfoPlist.strings b/Resources/English.lproj/InfoPlist.strings new file mode 100644 index 0000000..477b28f --- /dev/null +++ b/Resources/English.lproj/InfoPlist.strings @@ -0,0 +1,2 @@ +/* Localized versions of Info.plist keys */ + diff --git a/Resources/MainMenu.xib b/Resources/MainMenu.xib new file mode 100644 index 0000000..77302d3 --- /dev/null +++ b/Resources/MainMenu.xib @@ -0,0 +1,4419 @@ + + + + 1060 + 10C540 + 740 + 1038.25 + 458.00 + + com.apple.InterfaceBuilder.CocoaPlugin + 740 + + + YES + + + + + YES + com.apple.InterfaceBuilder.CocoaPlugin + + + YES + + YES + + + YES + + + + YES + + NSApplication + + + FirstResponder + + + NSApplication + + + NSFontManager + + + Main Menu + + YES + + + New Application + + 2147483647 + + NSImage + NSMenuCheckmark + + + NSImage + NSMenuMixedState + + submenuAction: + + New Application + + YES + + + About New Application + + 2147483647 + + + + + + YES + YES + + + 2147483647 + + + + + + Preferences… + , + 1048576 + 2147483647 + + + + + + YES + YES + + + 2147483647 + + + + + + Services + + 2147483647 + + + submenuAction: + + Services + + YES + + _NSServicesMenu + + + + + YES + YES + + + 2147483647 + + + + + + Hide New Application + h + 1048576 + 2147483647 + + + + + + Hide Others + h + 1572864 + 2147483647 + + + + + + Show All + + 2147483647 + + + + + + YES + YES + + + 2147483647 + + + + + + Quit New Application + q + 1048576 + 2147483647 + + + + + _NSAppleMenu + + + + + File + + 2147483647 + + + submenuAction: + + File + + YES + + + New + n + 1048576 + 2147483647 + + + + + + Open… + o + 1048576 + 2147483647 + + + + + + Open Recent + + 2147483647 + + + submenuAction: + + Open Recent + + YES + + + Clear Menu + + 2147483647 + + + + + _NSRecentDocumentsMenu + + + + + YES + YES + + + 2147483647 + + + + + + Close + w + 1048576 + 2147483647 + + + + + + Save + s + 1048576 + 2147483647 + + + + + + Save As… + S + 1179648 + 2147483647 + + + + + + Revert to Saved + + 2147483647 + + + + + + YES + YES + + + 2147483647 + + + + + + Page Setup... + P + 1179648 + 2147483647 + + + + + + + Print… + p + 1048576 + 2147483647 + + + + + + + + + Edit + + 2147483647 + + + submenuAction: + + Edit + + YES + + + Undo + z + 1048576 + 2147483647 + + + + + + Redo + Z + 1048576 + 2147483647 + + + + + + YES + YES + + + 2147483647 + + + + + + Cut + x + 1048576 + 2147483647 + + + + + + Copy + c + 1048576 + 2147483647 + + + + + + Paste + v + 1048576 + 2147483647 + + + + + + Paste and Match Style + V + 1572864 + 2147483647 + + + + + + Delete + + 2147483647 + + + + + + Select All + a + 1048576 + 2147483647 + + + + + + YES + YES + + + 2147483647 + + + + + + Find + + 2147483647 + + + submenuAction: + + Find + + YES + + + Find… + f + 1048576 + 2147483647 + + + 1 + + + + Find Next + g + 1048576 + 2147483647 + + + 2 + + + + Find Previous + G + 1048576 + 2147483647 + + + 3 + + + + Use Selection for Find + e + 1048576 + 2147483647 + + + 7 + + + + Jump to Selection + j + 1048576 + 2147483647 + + + + + + + + + Spelling and Grammar + + 2147483647 + + + submenuAction: + + Spelling + + YES + + + Show Spelling and Grammar + : + 1048576 + 2147483647 + + + + + + Check Document Now + ; + 1048576 + 2147483647 + + + + + + YES + YES + + + 2147483647 + + + + + + Check Spelling While Typing + + 2147483647 + + + + + + Check Grammar With Spelling + + 2147483647 + + + + + + Correct Spelling Automatically + + 2147483647 + + + + + + + + + Substitutions + + 2147483647 + + + submenuAction: + + Substitutions + + YES + + + Show Substitutions + + 2147483647 + + + + + + YES + YES + + + 2147483647 + + + + + + Smart Copy/Paste + + 2147483647 + + + + + + Smart Quotes + + 2147483647 + + + + + + Smart Dashes + + 2147483647 + + + + + + Smart Links + + 2147483647 + + + + + + Data Detectors + + 2147483647 + + + + + + Text Replacement + + 2147483647 + + + + + + + + + Transformations + + 2147483647 + + + submenuAction: + + Transformations + + YES + + + Make Upper Case + + 2147483647 + + + + + + Make Lower Case + + 2147483647 + + + + + + Capitalize + + 2147483647 + + + + + + + + + Speech + + 2147483647 + + + submenuAction: + + Speech + + YES + + + Start Speaking + + 2147483647 + + + + + + Stop Speaking + + 2147483647 + + + + + + + + + + + + Format + + 2147483647 + + + submenuAction: + + Format + + YES + + + Font + + 2147483647 + + + submenuAction: + + Font + + YES + + + Show Fonts + t + 1048576 + 2147483647 + + + + + + Bold + b + 1048576 + 2147483647 + + + 2 + + + + Italic + i + 1048576 + 2147483647 + + + 1 + + + + Underline + u + 1048576 + 2147483647 + + + + + + YES + YES + + + 2147483647 + + + + + + Bigger + + + 1048576 + 2147483647 + + + 3 + + + + Smaller + - + 1048576 + 2147483647 + + + 4 + + + + YES + YES + + + 2147483647 + + + + + + Kern + + 2147483647 + + + submenuAction: + + Kern + + YES + + + Use Default + + 2147483647 + + + + + + Use None + + 2147483647 + + + + + + Tighten + + 2147483647 + + + + + + Loosen + + 2147483647 + + + + + + + + + Ligature + + 2147483647 + + + submenuAction: + + Ligature + + YES + + + Use Default + + 2147483647 + + + + + + Use None + + 2147483647 + + + + + + Use All + + 2147483647 + + + + + + + + + Baseline + + 2147483647 + + + submenuAction: + + Baseline + + YES + + + Use Default + + 2147483647 + + + + + + Superscript + + 2147483647 + + + + + + Subscript + + 2147483647 + + + + + + Raise + + 2147483647 + + + + + + Lower + + 2147483647 + + + + + + + + + YES + YES + + + 2147483647 + + + + + + Show Colors + C + 1048576 + 2147483647 + + + + + + YES + YES + + + 2147483647 + + + + + + Copy Style + c + 1572864 + 2147483647 + + + + + + Paste Style + v + 1572864 + 2147483647 + + + + + _NSFontMenu + + + + + Text + + 2147483647 + + + submenuAction: + + Text + + YES + + + Align Left + { + 1048576 + 2147483647 + + + + + + Center + | + 1048576 + 2147483647 + + + + + + Justify + + 2147483647 + + + + + + Align Right + } + 1048576 + 2147483647 + + + + + + YES + YES + + + 2147483647 + + + + + + Writing Direction + + 2147483647 + + + submenuAction: + + Writing Direction + + YES + + + YES + Paragraph + + 2147483647 + + + + + + CURlZmF1bHQ + + 2147483647 + + + + + + CUxlZnQgdG8gUmlnaHQ + + 2147483647 + + + + + + CVJpZ2h0IHRvIExlZnQ + + 2147483647 + + + + + + YES + YES + + + 2147483647 + + + + + + YES + Selection + + 2147483647 + + + + + + CURlZmF1bHQ + + 2147483647 + + + + + + CUxlZnQgdG8gUmlnaHQ + + 2147483647 + + + + + + CVJpZ2h0IHRvIExlZnQ + + 2147483647 + + + + + + + + + YES + YES + + + 2147483647 + + + + + + Show Ruler + + 2147483647 + + + + + + Copy Ruler + c + 1310720 + 2147483647 + + + + + + Paste Ruler + v + 1310720 + 2147483647 + + + + + + + + + + + + View + + 2147483647 + + + submenuAction: + + View + + YES + + + Show Toolbar + t + 1572864 + 2147483647 + + + + + + Customize Toolbar… + + 2147483647 + + + + + + + + + Window + + 2147483647 + + + submenuAction: + + Window + + YES + + + Minimize + m + 1048576 + 2147483647 + + + + + + Zoom + + 2147483647 + + + + + + YES + YES + + + 2147483647 + + + + + + Bring All to Front + + 2147483647 + + + + + _NSWindowsMenu + + + + + Help + + 2147483647 + + + submenuAction: + + Help + + YES + + + New Application Help + ? + 1048576 + 2147483647 + + + + + _NSHelpMenu + + + + _NSMainMenu + + + 15 + 2 + {{196, -60}, {853, 570}} + 611844096 + Window + NSWindow + + {3.40282e+38, 3.40282e+38} + + + 256 + + YES + + + 276 + + YES + + + 2304 + + YES + + + 256 + {212, 570} + + YES + + + -2147483392 + {{198, 0}, {16, 17}} + + + YES + + 209 + 16 + 1000 + + 75628096 + 2048 + + + LucidaGrande + 11 + 3100 + + + 3 + MC4zMzMzMzI5ODU2AA + + + 6 + System + headerTextColor + + 3 + MAA + + + + + 337772096 + 2048 + Text Cell + + LucidaGrande + 11 + 16 + + + + 6 + System + controlBackgroundColor + + 3 + MC42NjY2NjY2ODY1AA + + + + 6 + System + controlTextColor + + + + 3 + YES + YES + + + + 3 + 0.0 + + 6 + System + _sourceListBackgroundColor + + 1 + MC44MzkyMTU2OTU5IDAuODY2NjY2Njc0NiAwLjg5ODAzOTIyMTgAA + + + + 6 + System + gridColor + + 3 + MC41AA + + + 20 + -633339904 + + + 4 + 15 + 0 + YES + 1 + 1 + 14 + + + {{1, 1}, {212, 570}} + + + + + 4 + + + + -2147483392 + {{198, 17}, {15, 539}} + + + _doScroller: + 0.99824869632720947 + + + + -2147483392 + {{1, 556}, {212, 15}} + + 1 + + _doScroller: + 0.99530518054962158 + + + {{-1, -1}, {214, 572}} + + + 562 + + + + QSAAAEEgAABBoAAAQaAAAA + + + + 268 + {{361, 277}, {195, 17}} + + YES + + 68288064 + 272630784 + The currently selected item is: + + LucidaGrande + 13 + 1044 + + + + 6 + System + controlColor + + + + + + + + 268 + {{558, 277}, {252, 17}} + + YES + + 68288064 + 272630784 + + + LucidaGrande-Bold + 13 + 16 + + + + + + + + {853, 570} + + + {{0, 0}, {1680, 1028}} + {3.40282e+38, 3.40282e+38} + + + AppDelegate + + + + + YES + + + performMiniaturize: + + + + 37 + + + + arrangeInFront: + + + + 39 + + + + print: + + + + 86 + + + + runPageLayout: + + + + 87 + + + + clearRecentDocuments: + + + + 127 + + + + orderFrontStandardAboutPanel: + + + + 142 + + + + performClose: + + + + 193 + + + + performZoom: + + + + 240 + + + + showHelp: + + + + 360 + + + + saveDocument: + + + + 362 + + + + saveDocumentAs: + + + + 363 + + + + revertDocumentToSaved: + + + + 364 + + + + runToolbarCustomizationPalette: + + + + 365 + + + + toggleToolbarShown: + + + + 366 + + + + hide: + + + + 369 + + + + hideOtherApplications: + + + + 370 + + + + unhideAllApplications: + + + + 372 + + + + addFontTrait: + + + + 420 + + + + addFontTrait: + + + + 421 + + + + modifyFont: + + + + 422 + + + + orderFrontFontPanel: + + + + 423 + + + + modifyFont: + + + + 424 + + + + raiseBaseline: + + + + 425 + + + + lowerBaseline: + + + + 426 + + + + copyFont: + + + + 427 + + + + subscript: + + + + 428 + + + + superscript: + + + + 429 + + + + tightenKerning: + + + + 430 + + + + underline: + + + + 431 + + + + orderFrontColorPanel: + + + + 432 + + + + useAllLigatures: + + + + 433 + + + + loosenKerning: + + + + 434 + + + + pasteFont: + + + + 435 + + + + unscript: + + + + 436 + + + + useStandardKerning: + + + + 437 + + + + useStandardLigatures: + + + + 438 + + + + turnOffLigatures: + + + + 439 + + + + turnOffKerning: + + + + 440 + + + + terminate: + + + + 448 + + + + capitalizeWord: + + + + 740 + + + + cut: + + + + 741 + + + + paste: + + + + 742 + + + + toggleSmartInsertDelete: + + + + 743 + + + + toggleAutomaticQuoteSubstitution: + + + + 744 + + + + redo: + + + + 745 + + + + toggleAutomaticDashSubstitution: + + + + 746 + + + + toggleContinuousSpellChecking: + + + + 747 + + + + toggleAutomaticDataDetection: + + + + 748 + + + + undo: + + + + 749 + + + + toggleGrammarChecking: + + + + 750 + + + + startSpeaking: + + + + 751 + + + + showGuessPanel: + + + + 752 + + + + checkSpelling: + + + + 753 + + + + pasteAsPlainText: + + + + 754 + + + + copy: + + + + 755 + + + + delete: + + + + 756 + + + + lowercaseWord: + + + + 757 + + + + selectAll: + + + + 758 + + + + stopSpeaking: + + + + 759 + + + + orderFrontSubstitutionsPanel: + + + + 760 + + + + toggleAutomaticTextReplacement: + + + + 761 + + + + toggleAutomaticLinkDetection: + + + + 762 + + + + toggleAutomaticSpellingCorrection: + + + + 763 + + + + uppercaseWord: + + + + 764 + + + + performFindPanelAction: + + + + 771 + + + + performFindPanelAction: + + + + 772 + + + + performFindPanelAction: + + + + 773 + + + + centerSelectionInVisibleArea: + + + + 774 + + + + performFindPanelAction: + + + + 775 + + + + toggleRuler: + + + + 798 + + + + pasteRuler: + + + + 799 + + + + alignCenter: + + + + 800 + + + + copyRuler: + + + + 801 + + + + alignJustified: + + + + 802 + + + + alignRight: + + + + 803 + + + + alignLeft: + + + + 804 + + + + makeBaseWritingDirectionNatural: + + + + 805 + + + + makeBaseWritingDirectionLeftToRight: + + + + 806 + + + + makeBaseWritingDirectionRightToLeft: + + + + 807 + + + + makeTextWritingDirectionNatural: + + + + 808 + + + + makeTextWritingDirectionLeftToRight: + + + + 809 + + + + makeTextWritingDirectionRightToLeft: + + + + 810 + + + + delegate + + + + 823 + + + + dataSource + + + + 824 + + + + sourceList + + + + 825 + + + + selectedItemLabel + + + + 835 + + + + + YES + + 0 + + + + + + -2 + + + File's Owner + + + -1 + + + First Responder + + + -3 + + + Application + + + 29 + + + YES + + + + + + + + + + + + 19 + + + YES + + + + + + 56 + + + YES + + + + + + 103 + + + YES + + + + + + 83 + + + YES + + + + + + 81 + + + YES + + + + + + + + + + + + + + + + 75 + + + + + 80 + + + + + 78 + + + + + 72 + + + + + 82 + + + + + 124 + + + YES + + + + + + 77 + + + + + 73 + + + + + 112 + + + + + 74 + + + + + 125 + + + YES + + + + + + 126 + + + + + 106 + + + YES + + + + + + 111 + + + + + 57 + + + YES + + + + + + + + + + + + + + + + 58 + + + + + 134 + + + + + 150 + + + + + 136 + + + + + 144 + + + + + 129 + + + + + 143 + + + + + 236 + + + + + 131 + + + YES + + + + + + 149 + + + + + 145 + + + + + 130 + + + + + 24 + + + YES + + + + + + + + + 92 + + + + + 5 + + + + + 239 + + + + + 23 + + + + + 295 + + + YES + + + + + + 296 + + + YES + + + + + + + 297 + + + + + 298 + + + + + 367 + + + YES + + + + + + 368 + + + YES + + + + + + + + 373 + + + + + 375 + + + YES + + + + + + 376 + + + YES + + + + + + + 377 + + + YES + + + + + + 388 + + + YES + + + + + + + + + + + + + + + + + + + + + 389 + + + + + 390 + + + + + 391 + + + + + 392 + + + + + 393 + + + + + 394 + + + + + 395 + + + + + 396 + + + + + 397 + + + YES + + + + + + 398 + + + YES + + + + + + 399 + + + YES + + + + + + 400 + + + + + 401 + + + + + 402 + + + + + 403 + + + + + 404 + + + + + 405 + + + YES + + + + + + + + + + 406 + + + + + 407 + + + + + 408 + + + + + 409 + + + + + 410 + + + + + 411 + + + YES + + + + + + + + 412 + + + + + 413 + + + + + 414 + + + + + 415 + + + YES + + + + + + + + + 416 + + + + + 417 + + + + + 418 + + + + + 419 + + + + + 79 + + + + + 684 + + + YES + + + + + + 685 + + + YES + + + + + + + + + + + + + + + + + + + + 686 + + + + + 687 + + + + + 688 + + + + + 689 + + + + + 690 + + + + + 691 + + + + + 692 + + + + + 693 + + + + + 694 + + + + + 695 + + + + + 696 + + + YES + + + + + + 697 + + + YES + + + + + + 698 + + + YES + + + + + + 699 + + + YES + + + + + + 700 + + + YES + + + + + + 711 + + + YES + + + + + + + 712 + + + + + 713 + + + + + 714 + + + YES + + + + + + + + 715 + + + + + 716 + + + + + 717 + + + + + 718 + + + YES + + + + + + + + + + + + + 719 + + + + + 720 + + + + + 721 + + + + + 722 + + + + + 723 + + + + + 724 + + + + + 725 + + + + + 726 + + + + + 727 + + + YES + + + + + + + + + + + 728 + + + + + 729 + + + + + 730 + + + + + 731 + + + + + 732 + + + + + 733 + + + + + 734 + + + YES + + + + + + + + + + 735 + + + + + 736 + + + + + 737 + + + + + 738 + + + + + 739 + + + + + 776 + + + YES + + + + + + 777 + + + YES + + + + + + + + + + + + + + + 778 + + + + + 779 + + + + + 780 + + + + + 781 + + + + + 782 + + + + + 783 + + + YES + + + + + + 784 + + + + + 785 + + + + + 786 + + + + + 787 + + + + + 788 + + + YES + + + + + + + + + + + + + + 789 + + + + + 790 + + + + + 791 + + + + + 792 + + + + + 793 + + + + + 794 + + + + + 795 + + + + + 796 + + + + + 797 + + + + + 811 + + + YES + + + + + + + + 812 + + + + + 813 + + + + + 814 + + + YES + + + + + + 816 + + + YES + + + + + + 819 + + + + + 820 + + + + + 830 + + + YES + + + + + + 831 + + + + + 832 + + + YES + + + + + + 833 + + + + + + + YES + + YES + -3.IBPluginDependency + 103.IBPluginDependency + 103.ImportedFromIB2 + 106.IBEditorWindowLastContentRect + 106.IBPluginDependency + 106.ImportedFromIB2 + 106.editorWindowContentRectSynchronizationRect + 111.IBPluginDependency + 111.ImportedFromIB2 + 112.IBPluginDependency + 112.ImportedFromIB2 + 124.IBPluginDependency + 124.ImportedFromIB2 + 125.IBEditorWindowLastContentRect + 125.IBPluginDependency + 125.ImportedFromIB2 + 125.editorWindowContentRectSynchronizationRect + 126.IBPluginDependency + 126.ImportedFromIB2 + 129.IBPluginDependency + 129.ImportedFromIB2 + 130.IBEditorWindowLastContentRect + 130.IBPluginDependency + 130.ImportedFromIB2 + 130.editorWindowContentRectSynchronizationRect + 131.IBPluginDependency + 131.ImportedFromIB2 + 134.IBPluginDependency + 134.ImportedFromIB2 + 136.IBPluginDependency + 136.ImportedFromIB2 + 143.IBPluginDependency + 143.ImportedFromIB2 + 144.IBPluginDependency + 144.ImportedFromIB2 + 145.IBPluginDependency + 145.ImportedFromIB2 + 149.IBPluginDependency + 149.ImportedFromIB2 + 150.IBPluginDependency + 150.ImportedFromIB2 + 19.IBPluginDependency + 19.ImportedFromIB2 + 23.IBPluginDependency + 23.ImportedFromIB2 + 236.IBPluginDependency + 236.ImportedFromIB2 + 239.IBPluginDependency + 239.ImportedFromIB2 + 24.IBEditorWindowLastContentRect + 24.IBPluginDependency + 24.ImportedFromIB2 + 24.editorWindowContentRectSynchronizationRect + 29.IBEditorWindowLastContentRect + 29.IBPluginDependency + 29.ImportedFromIB2 + 29.WindowOrigin + 29.editorWindowContentRectSynchronizationRect + 295.IBPluginDependency + 296.IBEditorWindowLastContentRect + 296.IBPluginDependency + 296.editorWindowContentRectSynchronizationRect + 297.IBPluginDependency + 298.IBPluginDependency + 367.IBEditorWindowLastContentRect + 367.IBPluginDependency + 367.IBWindowTemplateEditedContentRect + 367.NSWindowTemplate.visibleAtLaunch + 367.editorWindowContentRectSynchronizationRect + 367.windowTemplate.maxSize + 368.IBPluginDependency + 375.IBPluginDependency + 376.IBEditorWindowLastContentRect + 376.IBPluginDependency + 377.IBPluginDependency + 388.IBEditorWindowLastContentRect + 388.IBPluginDependency + 389.IBPluginDependency + 390.IBPluginDependency + 391.IBPluginDependency + 392.IBPluginDependency + 393.IBPluginDependency + 394.IBPluginDependency + 395.IBPluginDependency + 396.IBPluginDependency + 397.IBPluginDependency + 398.IBPluginDependency + 399.IBPluginDependency + 400.IBPluginDependency + 401.IBPluginDependency + 402.IBPluginDependency + 403.IBPluginDependency + 404.IBPluginDependency + 405.IBPluginDependency + 406.IBPluginDependency + 407.IBPluginDependency + 408.IBPluginDependency + 409.IBPluginDependency + 410.IBPluginDependency + 411.IBPluginDependency + 412.IBPluginDependency + 413.IBPluginDependency + 414.IBPluginDependency + 415.IBPluginDependency + 416.IBPluginDependency + 417.IBPluginDependency + 418.IBPluginDependency + 419.IBPluginDependency + 5.IBPluginDependency + 5.ImportedFromIB2 + 56.IBPluginDependency + 56.ImportedFromIB2 + 57.IBEditorWindowLastContentRect + 57.IBPluginDependency + 57.ImportedFromIB2 + 57.editorWindowContentRectSynchronizationRect + 58.IBPluginDependency + 58.ImportedFromIB2 + 684.IBPluginDependency + 685.IBEditorWindowLastContentRect + 685.IBPluginDependency + 686.IBPluginDependency + 687.IBPluginDependency + 688.IBPluginDependency + 689.IBPluginDependency + 690.IBPluginDependency + 691.IBPluginDependency + 692.IBPluginDependency + 693.IBPluginDependency + 694.IBPluginDependency + 695.IBPluginDependency + 696.IBPluginDependency + 697.IBPluginDependency + 698.IBPluginDependency + 699.IBPluginDependency + 700.IBPluginDependency + 711.IBPluginDependency + 712.IBPluginDependency + 713.IBPluginDependency + 714.IBPluginDependency + 715.IBPluginDependency + 716.IBPluginDependency + 717.IBPluginDependency + 718.IBPluginDependency + 719.IBPluginDependency + 72.IBPluginDependency + 72.ImportedFromIB2 + 720.IBPluginDependency + 721.IBPluginDependency + 722.IBPluginDependency + 723.IBPluginDependency + 724.IBPluginDependency + 725.IBPluginDependency + 726.IBPluginDependency + 727.IBPluginDependency + 728.IBPluginDependency + 729.IBPluginDependency + 73.IBPluginDependency + 73.ImportedFromIB2 + 730.IBPluginDependency + 731.IBPluginDependency + 732.IBPluginDependency + 733.IBPluginDependency + 734.IBPluginDependency + 735.IBPluginDependency + 736.IBPluginDependency + 737.IBPluginDependency + 738.IBPluginDependency + 739.IBPluginDependency + 74.IBPluginDependency + 74.ImportedFromIB2 + 75.IBPluginDependency + 75.ImportedFromIB2 + 77.IBPluginDependency + 77.ImportedFromIB2 + 776.IBPluginDependency + 777.IBEditorWindowLastContentRect + 777.IBPluginDependency + 778.IBPluginDependency + 779.IBPluginDependency + 78.IBPluginDependency + 78.ImportedFromIB2 + 780.IBPluginDependency + 781.IBPluginDependency + 782.IBPluginDependency + 783.IBPluginDependency + 784.IBPluginDependency + 785.IBPluginDependency + 786.IBPluginDependency + 787.IBPluginDependency + 788.IBEditorWindowLastContentRect + 788.IBPluginDependency + 789.IBPluginDependency + 79.IBPluginDependency + 79.ImportedFromIB2 + 790.IBPluginDependency + 791.IBPluginDependency + 792.IBPluginDependency + 793.IBPluginDependency + 794.IBPluginDependency + 795.IBPluginDependency + 796.IBPluginDependency + 797.IBPluginDependency + 80.IBPluginDependency + 80.ImportedFromIB2 + 81.IBEditorWindowLastContentRect + 81.IBPluginDependency + 81.ImportedFromIB2 + 81.editorWindowContentRectSynchronizationRect + 811.IBPluginDependency + 812.IBPluginDependency + 813.IBPluginDependency + 814.CustomClassName + 814.IBPluginDependency + 816.IBPluginDependency + 819.IBPluginDependency + 82.IBPluginDependency + 82.ImportedFromIB2 + 83.IBPluginDependency + 83.ImportedFromIB2 + 830.IBPluginDependency + 831.IBPluginDependency + 832.IBPluginDependency + 833.IBPluginDependency + 92.IBPluginDependency + 92.ImportedFromIB2 + + + YES + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + {{743, 629}, {217, 23}} + com.apple.InterfaceBuilder.CocoaPlugin + + {{596, 852}, {216, 23}} + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + {{449, 589}, {132, 23}} + com.apple.InterfaceBuilder.CocoaPlugin + + {{522, 812}, {146, 23}} + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + {{509, 573}, {64, 6}} + com.apple.InterfaceBuilder.CocoaPlugin + + {{436, 809}, {64, 6}} + 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 + + {{452, 579}, {197, 73}} + com.apple.InterfaceBuilder.CocoaPlugin + + {{525, 802}, {197, 73}} + {{349, 736}, {482, 20}} + com.apple.InterfaceBuilder.CocoaPlugin + + {74, 862} + {{11, 977}, {478, 20}} + com.apple.InterfaceBuilder.CocoaPlugin + {{402, 609}, {234, 43}} + com.apple.InterfaceBuilder.CocoaPlugin + {{475, 832}, {234, 43}} + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + {{33, 103}, {853, 570}} + com.apple.InterfaceBuilder.CocoaPlugin + {{33, 103}, {853, 570}} + + {{11, 666}, {480, 270}} + {3.40282e+38, 3.40282e+38} + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + {{583, 1041}, {83, 43}} + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + {{422, 369}, {178, 283}} + 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 + 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 + + {{334, 469}, {246, 183}} + com.apple.InterfaceBuilder.CocoaPlugin + + {{23, 794}, {245, 183}} + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + {{539, 801}, {254, 283}} + 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 + 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 + 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 + {{666, 881}, {204, 183}} + 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 + {{870, 801}, {164, 173}} + 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 + + {{470, 449}, {196, 203}} + com.apple.InterfaceBuilder.CocoaPlugin + + {{323, 672}, {199, 203}} + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + PXSourceList + 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 + + + + + YES + + + YES + + + + + YES + + + YES + + + + 835 + + + + YES + + AppDelegate + NSObject + + YES + + YES + selectedItemLabel + sourceList + + + YES + NSTextField + PXSourceList + + + + IBProjectSource + AppDelegate.h + + + + NSObject + + IBProjectSource + PXSourceListDelegate.h + + + + PXSourceList + NSOutlineView + + IBProjectSource + PXSourceList.h + + + + + YES + + NSActionCell + NSCell + + IBFrameworkSource + AppKit.framework/Headers/NSActionCell.h + + + + NSApplication + NSResponder + + IBFrameworkSource + AppKit.framework/Headers/NSApplication.h + + + + NSApplication + + IBFrameworkSource + AppKit.framework/Headers/NSApplicationScripting.h + + + + NSApplication + + IBFrameworkSource + AppKit.framework/Headers/NSColorPanel.h + + + + NSApplication + + IBFrameworkSource + AppKit.framework/Headers/NSHelpManager.h + + + + NSApplication + + IBFrameworkSource + AppKit.framework/Headers/NSPageLayout.h + + + + NSApplication + + IBFrameworkSource + AppKit.framework/Headers/NSUserInterfaceItemSearching.h + + + + NSBrowser + NSControl + + IBFrameworkSource + AppKit.framework/Headers/NSBrowser.h + + + + NSCell + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSCell.h + + + + NSControl + NSView + + IBFrameworkSource + AppKit.framework/Headers/NSControl.h + + + + NSDocument + NSObject + + YES + + YES + printDocument: + revertDocumentToSaved: + runPageLayout: + saveDocument: + saveDocumentAs: + saveDocumentTo: + + + YES + id + id + id + id + id + id + + + + IBFrameworkSource + AppKit.framework/Headers/NSDocument.h + + + + NSDocument + + IBFrameworkSource + AppKit.framework/Headers/NSDocumentScripting.h + + + + NSDocumentController + NSObject + + YES + + YES + clearRecentDocuments: + newDocument: + openDocument: + saveAllDocuments: + + + YES + id + id + id + id + + + + IBFrameworkSource + AppKit.framework/Headers/NSDocumentController.h + + + + NSFontManager + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSFontManager.h + + + + NSFormatter + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSFormatter.h + + + + NSMatrix + NSControl + + IBFrameworkSource + AppKit.framework/Headers/NSMatrix.h + + + + NSMenu + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSMenu.h + + + + NSMenuItem + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSMenuItem.h + + + + NSMovieView + NSView + + IBFrameworkSource + AppKit.framework/Headers/NSMovieView.h + + + + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSAccessibility.h + + + + NSObject + + + + NSObject + + + + NSObject + + + + NSObject + + + + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSDictionaryController.h + + + + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSDragging.h + + + + NSObject + + + + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSFontPanel.h + + + + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSKeyValueBinding.h + + + + NSObject + + + + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSNibLoading.h + + + + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSOutlineView.h + + + + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSPasteboard.h + + + + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSSavePanel.h + + + + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSTableView.h + + + + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSToolbarItem.h + + + + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSView.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSArchiver.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSClassDescription.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSError.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSFileManager.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSKeyValueCoding.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSKeyValueObserving.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSKeyedArchiver.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSObject.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSObjectScripting.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSPortCoder.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSRunLoop.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSScriptClassDescription.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSScriptKeyValueCoding.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSScriptObjectSpecifiers.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSScriptWhoseTests.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSThread.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSURL.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSURLConnection.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSURLDownload.h + + + + NSOutlineView + NSTableView + + + + NSResponder + + IBFrameworkSource + AppKit.framework/Headers/NSInterfaceStyle.h + + + + NSResponder + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSResponder.h + + + + NSScrollView + NSView + + IBFrameworkSource + AppKit.framework/Headers/NSScrollView.h + + + + NSScroller + NSControl + + IBFrameworkSource + AppKit.framework/Headers/NSScroller.h + + + + NSTableColumn + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSTableColumn.h + + + + NSTableView + NSControl + + + + NSText + NSView + + IBFrameworkSource + AppKit.framework/Headers/NSText.h + + + + NSTextField + NSControl + + IBFrameworkSource + AppKit.framework/Headers/NSTextField.h + + + + NSTextFieldCell + NSActionCell + + IBFrameworkSource + AppKit.framework/Headers/NSTextFieldCell.h + + + + NSTextView + NSText + + IBFrameworkSource + AppKit.framework/Headers/NSTextView.h + + + + NSView + + IBFrameworkSource + AppKit.framework/Headers/NSClipView.h + + + + NSView + + + + NSView + + IBFrameworkSource + AppKit.framework/Headers/NSRulerView.h + + + + NSView + NSResponder + + + + NSWindow + + IBFrameworkSource + AppKit.framework/Headers/NSDrawer.h + + + + NSWindow + NSResponder + + IBFrameworkSource + AppKit.framework/Headers/NSWindow.h + + + + NSWindow + + IBFrameworkSource + AppKit.framework/Headers/NSWindowScripting.h + + + + + 0 + + com.apple.InterfaceBuilder.CocoaPlugin.macosx + + + + com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3 + + + YES + PXSourceList.xcodeproj + 3 + + diff --git a/Resources/audiobooks.png b/Resources/audiobooks.png new file mode 100755 index 0000000000000000000000000000000000000000..5345d21d1f26496c4ad988a91b7394f00684f35c GIT binary patch literal 415 zcmV;Q0bu@#P)tHh=c@4E>P?{n;qke!12j6jI`Rj+1v4) zyf-jSlN#J`OzzIb1@$B5xW>Z#K~5ePi(A{W$gyo2InFK)U6)3~AvwHuxIUfD?p4!( zq1KOK7+zi-uX;cKx{TrAtnI)Ef`FzcV=9V5+ibCer{{RL|0PhCCFOZeNs?#`mq|Njnv zE(eM)Gy>+I9SDtpa!^%Orvt?+2kTF60@;kSrRD$}a+d)3Ef4C;mT12DcHnYh%z2C= z{xu$r4yb?dh|J&Ul($(ez=6#wilU>9P3ykL^j^`j=@DN73;-Mr#U<4No!bBa002ov JPDHLkV1mHlu7>~s literal 0 HcmV?d00001 diff --git a/Resources/movies.png b/Resources/movies.png new file mode 100755 index 0000000000000000000000000000000000000000..c8bd25903d8b637cc9268a4d148e7a7c19323e5e GIT binary patch literal 654 zcmV;90&)F`P)gJ)vu&G$&B-0 zj1qCii3=C5#HIfb5(tEB#f=+rLAuc3YhJiq0{=pv*W+5{MQE*fUB1w!%o9R@Q zx7tqV=)!5ZeXDMtbL;e}DyEczVHghp?8kAD=YtL@Fe2&(x`$S&$J6o8B-X(4rE|C2J*3Q) zl(Z6|nI=hyFhnq&;oZq6oSvR(ERV6qnu2n<{E_mFU=m_7okJ`Hm?4qN8TcgwgmOV@ z*b@7%f=;J%U3V9X!E!8Qw>{)9XK*dUadS6?d_D^=>qiP=?7D(VrK0s6rgJVht*-xh zJexyu1=Hf-rj5eEr6hK(0dKe4SE|)2fA!+wi7pHV1JUpI=YQ`XV@zWUg#8lD<8#o6 zzZai2j_(P{FrF?Tgjx|bPD+8sle@2J+SfHY2lrPV9336)X(evT0k=#zu7$K`ufp>k z_?c9sHpZ@*$ZNIQcb%a)&I1L`3^pv)8CC|wdQotEp--W-C!j5mCxCzYuVC@)dt`v|# zUbETUpqwEpQbgP>Y+`#a2iK)l4HKVxP?;F(t#*O7<{6D|QQW@ZZ9JxUOWa4x o25Bl}6Q2C|2l@j9rGiBlF4Rr2W+NzWT-Z&;mKG5TE~=%Pq%n!H zrjyCn+_|1RGilO*2cF5z$vJP{bM7!HCFUNiW8~5`^n~<2*N6=9mN3y5Yx96l9r~J` zNF;!87>k@^jWLuc^^&+jgnR3J_)laq+t}IJN2T%ynr4SJ4T~hC9My;qojR@_rYTP~ z`&`+PY__sMkPF{jGMV56hKAx`%y(j$sU6HbZubc=*=QK-@bFtFHB2lJi^TQ$`O8kP z+JWOhSZ$QbzEchu(-84hzz0w(ZWJOriSsGdNGuGLy*Xh3BwOKt(9TFh0g$ z)|EgvKM=c!Tu#C;Tv635U5oBDN@>s9!rGMd;9SZWjTs*RIt1A-oS$eR65$S^5T|i? zcL&u#EU{e3MPh?7RF6!eO7jLE z`ng6$0?oRKKu~vzHEtuJTQmdrmh6pi^t*WX%g2r5-R-ShDWAP9gm{#Db00rm-*bvc zXx6e?n{?fl6fMbQTlksPbzlpz+}e4y-1Pg=3%-BFQi7#MqnCE z{5&Y_*Y-Ann+xun$U1jIE{TALIy*lM+{%2NzH&9Dz7+F$G`?@&$v$6tLcQhQYg7Vi z*r-RSGorEker3z3E^*F}*}0J*mEuB|{s12fH*Q?Cl-h-BDcGG*$VU4EiUldQi|!gXK``{1R~s6W zR7~6Zm^;@qx08obMGqWi?#wyg`Mz`KDEFtQAxu$}JG3P5cl*FOFLKX=@B8??z7Ab% zgwbj&&de+@#=z*zp&-UNxV+Ej^H^M2c_?a;e-USwvRSACO}b*5`zV(!)XFw?s|?MW zhgOY~d+2mJSel((ptwoO9q&@oJxZ3Qrp`s+I8IR2Be#i-?YaS*R;z{iTn;xgnb)s! zxhaaDI|85}X-c_j1=@&tu=>7=7o|8JB|6Anxh;f3C|cg!Z1)(jK7g7UjliXE9)L*w zC19x?#gp+C6rUj$i-B^~zJvh=rJ5xxqsOFDVQ~B%y!jr-g9|q7Jr2rIj%SdJK=dSF zAiY>*c>8P^H|Bw-*L~>W@UIL80lpH0uFfu#gmD6u`aY70Fxm}=&e(4N)a9;(v|vEI zMRI8bch(;n zsOgbtpj!lwX-#}wF5vmy%Q$Oa8&l)f9UB%HW_ED|7 z1AoVbZCRSQscdXO?=%|NT3f@ZOlIi35$R1$cLulw^yNxZhjz0$)Gie0m+l3FF-&em zQmI>NG#bZ07(X~@9Gd2P+HMN~QTC*ega0$p{U1LC7yv0ocz~J?-`4;D002ovPDHLk FV1k_aD)s;X literal 0 HcmV?d00001 diff --git a/Resources/playlistFolder.png b/Resources/playlistFolder.png new file mode 100755 index 0000000000000000000000000000000000000000..22e52015398dc19224eb0c354a2be3cd248ec5f8 GIT binary patch literal 511 zcmVt^L38G-5Aov4PTjWQG2MHqBYiz7k6hw*UT=#gF^EQdcnh2T) z!|d+NcMLlZX{{r@96GUn+_i`hNb`o3 z#xsY@M_aRNLTc}uHGIUva| z?VaViO-YqfSSl^SfecqGHh)Y{k4~Bh*DQ+I!ge9sB#>Hx3)xA6JL25UyZ z0vzy=179d!cX*@W3ftq#YYSKu6Gkx`8H{Oz4IBuVfeWPqMXC5p-7nVwtXfNg%pYl{ zh+%?oDmJYI4w?j7f}*s2;glP^27C&3AW9JWZAYSQ0>S}Mb@-d@3I{Nh;E$%R1QoJD@ic23@kAGsnvSXU)WHDARJ(+=Xs1-IF^XBMA&6>^dC7meT>8mmf8=+ zQfkA`|K}p{=j)PTjY7oD_Wlts%&wtcuk*VA0|1>F`{vr{5{m!;002ovPDHLkV1jW* B*Tet- literal 0 HcmV?d00001 diff --git a/Resources/podcasts.png b/Resources/podcasts.png new file mode 100755 index 0000000000000000000000000000000000000000..02432a4b671d949940430b002cf6d9e23ba98ff7 GIT binary patch literal 702 zcmV;v0zv(WP)!j}0wm+QAV0v!Y=)bZoD6 zX}E9uHa>O9d%*(ZAkTMP`ljs}y?86xH4lt4dN z0i!>xfE7)Q#1N1((K_vjcA8dN_ayiw!D{~Lj zo=7B>0Q=>@A+YLKP?uqGHk$T#4rG$aBxSQ%wfi>qs}aWgOP&(2r7SWm+wp_r@i^u4 zdA0jC_RGtbB~J;EbhKt}b;)&IavX=M)hg+_u6F)rJNxBi)1MLUf%kf??YvrR^{&^# zt#Y|sOr=sI^?IEcUXe(I*uGwCv}T{%+UZQpIF;$&8M0l|n$|Q;@9F8`KUR$XUo8yR k2g|ZnrIEzb`dfej0J{n-s86D(OaK4?07*qoM6N<$f~Rsr`Tzg` literal 0 HcmV?d00001 diff --git a/TODO.rtf b/TODO.rtf new file mode 100644 index 0000000..3a9b38a --- /dev/null +++ b/TODO.rtf @@ -0,0 +1,13 @@ +{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf250 +{\fonttbl\f0\fnil\fcharset0 Monaco;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural\pardirnatural + +\f0\fs20 \cf0 \strike \strikec0 1. Source List badge colours for Graphite theme set in system preferences\strike0\striked0 \ +2. Implement custom drawing for drag and drop\ +\strike \strikec0 3. Sort out way that Source List returns badge values \'96 use NSNumber?\strike0\striked0 \ + - No, return NSNotFound for -badgeValueForItem: instead if item doesn't have badge \ +4. Provide a bindings interface\ +5. Cross-group keyboard implementation?\ +6. Provide an isGroupItem: delegate method?\ +7. Change the way the Source List handles drag and drop to something more like iTunes/Finder?} \ No newline at end of file diff --git a/main.m b/main.m new file mode 100644 index 0000000..b5dc63b --- /dev/null +++ b/main.m @@ -0,0 +1,14 @@ +// +// main.m +// PXSourceList +// +// Created by Alex Rozanski on 16/12/2009. +// Copyright 2009 __MyCompanyName__. All rights reserved. +// + +#import + +int main(int argc, char *argv[]) +{ + return NSApplicationMain(argc, (const char **) argv); +}