diff --git a/Classes/AppDelegate.m b/Classes/AppDelegate.m index 1efee47..c8fbdf0 100644 --- a/Classes/AppDelegate.m +++ b/Classes/AppDelegate.m @@ -14,7 +14,7 @@ #pragma mark Constants #define LISTVIEW_CELL_IDENTIFIER @"MyListViewCell" -#define NUM_EXAMPLE_ITEMS 10 +#define NUM_EXAMPLE_ITEMS 1000 @implementation AppDelegate @@ -74,11 +74,14 @@ - (PXListViewCell*)listView:(PXListView*)aListView cellForRow:(NSUInteger)row - (CGFloat)listView:(PXListView*)aListView heightOfRow:(NSUInteger)row { +#pragma unused(aListView) +#pragma unused(row) return 50; } - (void)listViewSelectionDidChange:(NSNotification*)aNotification { +#pragma unused(aNotification) NSLog(@"Selection changed"); } @@ -86,6 +89,8 @@ - (void)listViewSelectionDidChange:(NSNotification*)aNotification // The following are only needed for drag'n drop: - (BOOL)listView:(PXListView*)aListView writeRowsWithIndexes:(NSIndexSet*)rowIndexes toPasteboard:(NSPasteboard*)dragPasteboard { +#pragma unused(aListView) +#pragma unused(rowIndexes) // +++ Actually drag the items, not just dummy data. [dragPasteboard declareTypes: [NSArray arrayWithObjects: NSStringPboardType, nil] owner: self]; [dragPasteboard setString: @"Just Testing" forType: NSStringPboardType]; @@ -96,11 +101,16 @@ - (BOOL)listView:(PXListView*)aListView writeRowsWithIndexes:(NSIndexSet*)rowInd - (NSDragOperation)listView:(PXListView*)aListView validateDrop:(id )info proposedRow:(NSUInteger)row proposedDropHighlight:(PXListViewDropHighlight)dropHighlight; { +#pragma unused(aListView) +#pragma unused(dropHighlight) +#pragma unused(info) +#pragma unused(row) return NSDragOperationCopy; } - (IBAction) reloadTable:(id)sender { +#pragma unused(sender) [listView reloadData]; } diff --git a/Classes/MyListViewCell.m b/Classes/MyListViewCell.m index a9dbbf4..5a46e48 100644 --- a/Classes/MyListViewCell.m +++ b/Classes/MyListViewCell.m @@ -47,6 +47,7 @@ - (void)prepareForReuse - (void)drawRect:(NSRect)dirtyRect { +#pragma unused(dirtyRect) if([self isSelected]) { [[NSColor selectedControlColor] set]; } diff --git a/Classes/PXListDocumentView.h b/Classes/PXListDocumentView.h index 4b820f5..a47d379 100644 --- a/Classes/PXListDocumentView.h +++ b/Classes/PXListDocumentView.h @@ -19,7 +19,7 @@ } @property (assign) PXListView *listView; -@property (assign) PXListViewDropHighlight dropHighlight; +@property (assign,nonatomic) PXListViewDropHighlight dropHighlight; -(void) setDropHighlight: (PXListViewDropHighlight)inState; diff --git a/Classes/PXListView+Private.h b/Classes/PXListView+Private.h index 65d2e96..ee69f99 100644 --- a/Classes/PXListView+Private.h +++ b/Classes/PXListView+Private.h @@ -6,6 +6,13 @@ // Copyright 2010 Alex Rozanski. http://perspx.com. All rights reserved. // +// Apple sadly doesn't provide CGFloat variants of these: +#if CGFLOAT_IS_DOUBLE +#define CGFLOATABS(n) fabs(n) +#else +#define CGFLOATABS(n) fabsf(n) +#endif + // This is a renamed copy of UKIsDragStart from : // Possible return values from UKIsDragStart: enum @@ -40,4 +47,6 @@ typedef NSInteger PXIsDragStartResult; - (void)contentViewBoundsDidChange:(NSNotification*)notification; -(void)layoutCellsForResizeEvent; +- (void)windowSizing:(NSNotification *)inNot; + @end diff --git a/Classes/PXListView+UserInteraction.m b/Classes/PXListView+UserInteraction.m index c034727..fc4fe63 100644 --- a/Classes/PXListView+UserInteraction.m +++ b/Classes/PXListView+UserInteraction.m @@ -11,13 +11,6 @@ #import "PXListView+UserInteraction.h" #import "PXListView+Private.h" -// Apple sadly doesn't provide CGFloat variants of these: -#if CGFLOAT_IS_DOUBLE -#define CGFLOATABS(n) fabs(n) -#else -#define CGFLOATABS(n) fabsf(n) -#endif - // This is a renamed copy of UKIsDragStart from : static PXIsDragStartResult PXIsDragStart( NSEvent *startEvent, NSTimeInterval theTimeout ) { @@ -31,7 +24,7 @@ static PXIsDragStartResult PXIsDragStart( NSEvent *startEvent, NSTimeInterval th NSAutoreleasePool *pool = nil; while( ([expireTime timeIntervalSinceReferenceDate] -[NSDate timeIntervalSinceReferenceDate]) > 0 ) { - [pool release]; + [pool drain]; pool = [[NSAutoreleasePool alloc] init]; NSEvent* currEvent = [NSApp nextEventMatchingMask: NSLeftMouseUpMask | NSRightMouseUpMask | NSOtherMouseUpMask @@ -45,7 +38,7 @@ static PXIsDragStartResult PXIsDragStart( NSEvent *startEvent, NSTimeInterval th case NSRightMouseUp: case NSOtherMouseUp: { - [pool release]; + [pool drain]; return PXIsDragStartMouseReleased; // Mouse released within the wait time. break; } @@ -59,7 +52,7 @@ static PXIsDragStartResult PXIsDragStart( NSEvent *startEvent, NSTimeInterval th CGFloat yMouseMovement = CGFLOATABS(newPos.y -startPos.y); if( xMouseMovement > 2 or yMouseMovement > 2 ) { - [pool release]; + [pool drain]; return (xMouseMovement > yMouseMovement) ? PXIsDragStartMouseMovedHorizontally : PXIsDragStartMouseMovedVertically; // Mouse moved within the wait time, probably a drag! } break; @@ -69,7 +62,7 @@ static PXIsDragStartResult PXIsDragStart( NSEvent *startEvent, NSTimeInterval th } - [pool release]; + [pool drain]; return PXIsDragStartTimedOut; // If they held the mouse that long, they probably wanna drag. } @@ -112,6 +105,7 @@ - (void)keyDown:(NSEvent *)theEvent - (void)moveUp:(id)sender { +#pragma unused(sender) if([_selectedRows count]>0) { NSUInteger firstIndex = [_selectedRows firstIndex]; @@ -126,6 +120,7 @@ - (void)moveUp:(id)sender - (void)moveDown:(id)sender { +#pragma unused(sender) if([_selectedRows count]>0) { NSUInteger lastIndex = [_selectedRows lastIndex]; @@ -217,7 +212,6 @@ - (void)handleMouseDown:(NSEvent*)theEvent inCell:(PXListViewCell*)theCell // Ce - (void)handleMouseDownOutsideCells: (NSEvent*)theEvent { -#pragma unused(theEvent) //[[self window] makeFirstResponder: self]; // if( _allowsEmptySelection ) @@ -243,6 +237,9 @@ - (void)handleMouseDownOutsideCells: (NSEvent*)theEvent - (BOOL)attemptDragWithMouseDown:(NSEvent*)theEvent inCell:(PXListViewCell*)theCell { + if(!_dragSupported) + return NO; + PXIsDragStartResult dragResult = PXIsDragStart( theEvent, 0.0 ); if( dragResult != PXIsDragStartMouseReleased /*&& (_verticalMotionCanBeginDrag || dragResult != PXIsDragStartMouseMovedVertically)*/ ) // Was a drag, not a click? Cool! { @@ -271,7 +268,7 @@ -(NSImage*) dragImageForRowsWithIndexes: (NSIndexSet *)dragRows event: (NSEvent* NSPoint localMouse = [self convertPoint: NSZeroPoint fromView: clickedCell]; if ([clickedCell isFlipped]) { - localMouse = [self convertPoint:CGPointMake(0, NSHeight(clickedCell.frame) * 2) fromView:clickedCell]; + localMouse = [self convertPoint:NSMakePoint(0, NSHeight(clickedCell.frame) * 2) fromView:clickedCell]; } localMouse.y += [self documentVisibleRect].origin.y; diff --git a/Classes/PXListView.h b/Classes/PXListView.h index db37ce6..4cabbcc 100644 --- a/Classes/PXListView.h +++ b/Classes/PXListView.h @@ -10,7 +10,7 @@ #import "PXListViewDelegate.h" #import "PXListViewCell.h" - +#import "PXListDocumentView.h" #if DEBUG #define PXLog(...) NSLog(__VA_ARGS__) @@ -38,6 +38,7 @@ BOOL _allowsMultipleSelection; NSInteger _lastSelectedRow; + BOOL _dragSupported; BOOL _verticalMotionCanBeginDrag; BOOL _usesLiveResize; @@ -54,11 +55,15 @@ @property (nonatomic, assign) BOOL allowsEmptySelection; @property (nonatomic, assign) BOOL allowsMultipleSelection; + @property (nonatomic, assign) BOOL verticalMotionCanBeginDrag; +@property (nonatomic, assign) BOOL dragSupported; @property (nonatomic, assign) CGFloat cellSpacing; @property (nonatomic, assign) BOOL usesLiveResize; +- (PXListDocumentView *)documentView; + - (void)reloadData; -(void)reloadRowAtIndex:(NSInteger)inIndex; @@ -72,7 +77,6 @@ - (void)deselectRows; - (void)selectRowIndexes:(NSIndexSet*)rows byExtendingSelection:(BOOL)doExtend; -- (void)scrollToRow:(NSUInteger)row; - (void)scrollRowToVisible:(NSUInteger)row; @end diff --git a/Classes/PXListView.m b/Classes/PXListView.m index e7cb1a0..08485e8 100644 --- a/Classes/PXListView.m +++ b/Classes/PXListView.m @@ -13,6 +13,8 @@ #import "PXListViewCell+Private.h" #import "PXListView+UserInteraction.h" +#import "PXListDocumentView.h" + NSString * const PXListViewSelectionDidChange = @"PXListViewSelectionDidChange"; @@ -21,9 +23,14 @@ @implementation PXListView @synthesize cellSpacing = _cellSpacing; @synthesize allowsMultipleSelection = _allowsMultipleSelection; @synthesize allowsEmptySelection = _allowsEmptySelection; +@synthesize dragSupported = _dragSupported; @synthesize verticalMotionCanBeginDrag = _verticalMotionCanBeginDrag; @synthesize usesLiveResize = _usesLiveResize; +- (PXListDocumentView *)documentView { + return [super documentView]; +} + #pragma mark - #pragma mark Init/Dealloc @@ -36,6 +43,7 @@ - (id)initWithFrame:(NSRect)theFrame _selectedRows = [[NSMutableIndexSet alloc] init]; _allowsEmptySelection = YES; _usesLiveResize = YES; + _dragSupported = YES; } return self; @@ -50,6 +58,7 @@ - (id)initWithCoder:(NSCoder*)decoder _selectedRows = [[NSMutableIndexSet alloc] init]; _allowsEmptySelection = YES; _usesLiveResize = YES; + _dragSupported = YES; } return self; @@ -108,6 +117,7 @@ - (void)setDelegate:(id)delegate -(void)reloadRowAtIndex:(NSInteger)inIndex; { +#pragma unused(inIndex) [self cacheCellLayout]; [self layoutCells]; //[self layoutCellsForResizeEvent]; @@ -337,7 +347,9 @@ - (void)updateCells { for(NSUInteger i = NSMaxRange(_currentRange); i > NSMaxRange(visibleRange); i--) { - [self enqueueCell:[_visibleCells lastObject]]; + if([_visibleCells lastObject]) { + [self enqueueCell:[_visibleCells lastObject]]; + } } } } @@ -350,6 +362,7 @@ - (void)updateCells - (void)selectAll:(id)sender { +#pragma unused(sender) if(_allowsMultipleSelection) { [self setSelectedRows:[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, _numberOfRows)]]; } @@ -357,6 +370,7 @@ - (void)selectAll:(id)sender - (void)deselectAll:(id)sender { +#pragma unused(sender) [self setSelectedRows:[NSIndexSet indexSet]]; } @@ -502,7 +516,7 @@ - (void)cacheCellLayout - (void)layoutCells { //Set the frames of the cells - for(id cell in _visibleCells) + for(PXListViewCell *cell in _visibleCells) { NSInteger row = [cell row]; [cell setFrame:[self rectOfRow:row]]; @@ -552,30 +566,10 @@ - (void)resizeWithOldSuperviewSize:(NSSize)oldBoundsSize - (void)contentViewBoundsDidChange:(NSNotification *)notification { +#pragma unused(notification) [self updateCells]; } -- (void)scrollToRow:(NSUInteger)row -{ - if(row >= _numberOfRows) { - return; - } - - // Use minimal scroll necessary, so we don't force the selection to upper left of window: - NSRect visibleRect = [self documentVisibleRect]; - NSRect rowRect = [self rectOfRow:row]; - - NSPoint newScrollPoint = rowRect.origin; - - //Have we over-scrolled? - if(NSMaxY(rowRect) > NSMaxY(visibleRect)) { - newScrollPoint.y = _totalHeight - NSHeight(visibleRect); - } - - [[self contentView] scrollToPoint:newScrollPoint]; - [self reflectScrolledClipView:[self contentView]]; -} - - (void)scrollRowToVisible:(NSUInteger)row { if(row >= _numberOfRows) { @@ -592,11 +586,11 @@ - (void)scrollRowToVisible:(NSUInteger)row NSPoint newScrollPoint = rowRect.origin; - //Have we over-scrolled? - if(NSMaxY(rowRect) > NSMaxY(visibleRect)) { - newScrollPoint.y = _totalHeight - NSHeight(visibleRect); - } - + if(NSMaxY(visibleRect) > NSMaxY(rowRect)) + newScrollPoint.y = NSMinY(rowRect); + else + newScrollPoint.y = NSMinY(visibleRect) - (NSMaxY(visibleRect) - NSMinY(rowRect)) + NSHeight(rowRect); + [[self contentView] scrollToPoint:newScrollPoint]; [self reflectScrolledClipView:[self contentView]]; } @@ -657,6 +651,7 @@ -(void)viewDidEndLiveResize -(void)windowSizing:(NSNotification *)inNot { +#pragma unused(inNot) [self layoutCellsForResizeEvent]; } diff --git a/Classes/PXListViewCell.h b/Classes/PXListViewCell.h index 44b3835..9c676d5 100644 --- a/Classes/PXListViewCell.h +++ b/Classes/PXListViewCell.h @@ -27,7 +27,7 @@ @property (readonly) NSUInteger row; @property (readonly,getter=isSelected) BOOL selected; -@property (assign) PXListViewDropHighlight dropHighlight; +@property (assign,nonatomic) PXListViewDropHighlight dropHighlight; + (id)cellLoadedFromNibNamed:(NSString*)nibName reusableIdentifier:(NSString*)identifier; + (id)cellLoadedFromNibNamed:(NSString*)nibName bundle:(NSBundle*)bundle reusableIdentifier:(NSString*)identifier; diff --git a/Classes/PXListViewCell.m b/Classes/PXListViewCell.m index 736f665..5fcf04f 100644 --- a/Classes/PXListViewCell.m +++ b/Classes/PXListViewCell.m @@ -55,7 +55,7 @@ + (id)cellLoadedFromNibNamed:(NSString*)nibName bundle:(NSBundle*)bundle reusabl - (id)initWithReusableIdentifier:(NSString*)identifier { - if((self = [super initWithFrame: NSZeroRect])) + if((self = [self initWithFrame: NSZeroRect])) { _reusableIdentifier = [identifier copy]; } @@ -66,7 +66,7 @@ - (id)initWithReusableIdentifier:(NSString*)identifier - (id)initWithCoder:(NSCoder *)aDecoder { - if((self = [super initWithCoder: aDecoder])) + if((self = [self initWithCoder: aDecoder])) { _reusableIdentifier = NSStringFromClass([self class]); } @@ -108,6 +108,7 @@ - (void)setDropHighlight:(PXListViewDropHighlight)inState - (void)drawRect:(NSRect)dirtyRect { +#pragma unused(dirtyRect) if(_dropHighlight == PXListViewDropAbove) { [[NSColor alternateSelectedControlColor] set]; diff --git a/PXListView.xcodeproj/project.pbxproj b/PXListView.xcodeproj/project.pbxproj index 112dd9e..10465fa 100644 --- a/PXListView.xcodeproj/project.pbxproj +++ b/PXListView.xcodeproj/project.pbxproj @@ -9,6 +9,19 @@ /* Begin PBXBuildFile section */ 8D11072D0486CEB800E47090 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 29B97316FDCFA39411CA2CEA /* main.m */; settings = {ATTRIBUTES = (); }; }; 8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; + C53B006E138D6FE90026A20F /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C53B006D138D6FE90026A20F /* Cocoa.framework */; }; + C53B007A138D700B0026A20F /* PXListView.m in Sources */ = {isa = PBXBuildFile; fileRef = D27858D111B1B5EA00F1CF30 /* PXListView.m */; }; + C53B007E138D700B0026A20F /* PXListView+UserInteraction.m in Sources */ = {isa = PBXBuildFile; fileRef = D25DDA7E133F58A10086783B /* PXListView+UserInteraction.m */; }; + C53B0081138D700B0026A20F /* PXListViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = D27858D411B1B5FC00F1CF30 /* PXListViewCell.m */; }; + C53B0084138D700B0026A20F /* PXListDocumentView.m in Sources */ = {isa = PBXBuildFile; fileRef = D278592311B1BA6C00F1CF30 /* PXListDocumentView.m */; }; + C53B00AB138D8D860026A20F /* PXListView.h in Headers */ = {isa = PBXBuildFile; fileRef = D27858D011B1B5EA00F1CF30 /* PXListView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C53B00AC138D8D860026A20F /* PXListView+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = D279A64311B4E95600771B2A /* PXListView+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; + C53B00AD138D8D860026A20F /* PXListViewDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = D27858D711B1B6D400F1CF30 /* PXListViewDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C53B00AE138D8D860026A20F /* PXListView+UserInteraction.h in Headers */ = {isa = PBXBuildFile; fileRef = D25DDA7D133F58A10086783B /* PXListView+UserInteraction.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C53B00AF138D8D860026A20F /* PXListViewDropHighlight.h in Headers */ = {isa = PBXBuildFile; fileRef = 55B9AC9E11EA384C00416532 /* PXListViewDropHighlight.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C53B00B0138D8D860026A20F /* PXListViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = D27858D311B1B5FC00F1CF30 /* PXListViewCell.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C53B00B1138D8D860026A20F /* PXListViewCell+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = D279A6DD11B4EFCD00771B2A /* PXListViewCell+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; + C53B00B2138D8D860026A20F /* PXListDocumentView.h in Headers */ = {isa = PBXBuildFile; fileRef = D278592211B1BA6C00F1CF30 /* PXListDocumentView.h */; settings = {ATTRIBUTES = (Public, ); }; }; D25DDA7F133F58A20086783B /* PXListView+UserInteraction.m in Sources */ = {isa = PBXBuildFile; fileRef = D25DDA7E133F58A10086783B /* PXListView+UserInteraction.m */; }; D26669CB11B1B2F1007597F1 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = D26669CA11B1B2F1007597F1 /* AppDelegate.m */; }; D26669D211B1B302007597F1 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = D26669CE11B1B302007597F1 /* InfoPlist.strings */; }; @@ -30,6 +43,11 @@ 29B97325FDCFA39411CA2CEA /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = ""; }; 55B9AC9E11EA384C00416532 /* PXListViewDropHighlight.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PXListViewDropHighlight.h; path = Classes/PXListViewDropHighlight.h; sourceTree = ""; }; 8D1107320486CEB800E47090 /* PXListView.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = PXListView.app; sourceTree = BUILT_PRODUCTS_DIR; }; + C53B006C138D6FE90026A20F /* PXListView.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = PXListView.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + C53B006D138D6FE90026A20F /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; }; + C53B0071138D6FEA0026A20F /* PXListView-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "PXListView-Info.plist"; sourceTree = ""; }; + C53B0073138D6FEA0026A20F /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; + C53B0075138D6FEA0026A20F /* PXListView-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "PXListView-Prefix.pch"; sourceTree = ""; }; D25DDA7D133F58A10086783B /* PXListView+UserInteraction.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "PXListView+UserInteraction.h"; path = "Classes/PXListView+UserInteraction.h"; sourceTree = ""; }; D25DDA7E133F58A10086783B /* PXListView+UserInteraction.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "PXListView+UserInteraction.m"; path = "Classes/PXListView+UserInteraction.m"; sourceTree = ""; }; D26669C911B1B2F1007597F1 /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = Classes/AppDelegate.h; sourceTree = ""; }; @@ -61,6 +79,14 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + C53B0068138D6FE90026A20F /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + C53B006E138D6FE90026A20F /* Cocoa.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ @@ -86,6 +112,7 @@ isa = PBXGroup; children = ( 8D1107320486CEB800E47090 /* PXListView.app */, + C53B006C138D6FE90026A20F /* PXListView.framework */, ); name = Products; sourceTree = ""; @@ -117,11 +144,23 @@ isa = PBXGroup; children = ( 1058C7A0FEA54F0111CA2CBB /* Linked Frameworks */, + C53B006D138D6FE90026A20F /* Cocoa.framework */, 1058C7A2FEA54F0111CA2CBB /* Other Frameworks */, ); name = Frameworks; sourceTree = ""; }; + C53B0070138D6FEA0026A20F /* Supporting Files */ = { + isa = PBXGroup; + children = ( + C53B0071138D6FEA0026A20F /* PXListView-Info.plist */, + C53B0072138D6FEA0026A20F /* InfoPlist.strings */, + C53B0075138D6FEA0026A20F /* PXListView-Prefix.pch */, + ); + name = "Supporting Files"; + path = PXListView; + sourceTree = ""; + }; D25DDA7A133F568F0086783B /* PXListView */ = { isa = PBXGroup; children = ( @@ -133,6 +172,7 @@ D25DDA7E133F58A10086783B /* PXListView+UserInteraction.m */, D279A68911B4ECAB00771B2A /* Cells */, D278592911B1BA7900F1CF30 /* Misc */, + C53B0070138D6FEA0026A20F /* Supporting Files */, ); name = PXListView; sourceTree = ""; @@ -181,10 +221,28 @@ }; /* End PBXGroup section */ +/* Begin PBXHeadersBuildPhase section */ + C53B0069138D6FE90026A20F /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + C53B00AB138D8D860026A20F /* PXListView.h in Headers */, + C53B00AD138D8D860026A20F /* PXListViewDelegate.h in Headers */, + C53B00AE138D8D860026A20F /* PXListView+UserInteraction.h in Headers */, + C53B00AF138D8D860026A20F /* PXListViewDropHighlight.h in Headers */, + C53B00B0138D8D860026A20F /* PXListViewCell.h in Headers */, + C53B00B2138D8D860026A20F /* PXListDocumentView.h in Headers */, + C53B00AC138D8D860026A20F /* PXListView+Private.h in Headers */, + C53B00B1138D8D860026A20F /* PXListViewCell+Private.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXHeadersBuildPhase section */ + /* Begin PBXNativeTarget section */ - 8D1107260486CEB800E47090 /* PXListView */ = { + 8D1107260486CEB800E47090 /* Demo App */ = { isa = PBXNativeTarget; - buildConfigurationList = C01FCF4A08A954540054247B /* Build configuration list for PBXNativeTarget "PXListView" */; + buildConfigurationList = C01FCF4A08A954540054247B /* Build configuration list for PBXNativeTarget "Demo App" */; buildPhases = ( 8D1107290486CEB800E47090 /* Resources */, 8D11072C0486CEB800E47090 /* Sources */, @@ -194,12 +252,30 @@ ); dependencies = ( ); - name = PXListView; + name = "Demo App"; productInstallPath = "$(HOME)/Applications"; productName = PXListView; productReference = 8D1107320486CEB800E47090 /* PXListView.app */; productType = "com.apple.product-type.application"; }; + C53B006B138D6FE90026A20F /* PXListView */ = { + isa = PBXNativeTarget; + buildConfigurationList = C53B0076138D6FEA0026A20F /* Build configuration list for PBXNativeTarget "PXListView" */; + buildPhases = ( + C53B0067138D6FE90026A20F /* Sources */, + C53B0068138D6FE90026A20F /* Frameworks */, + C53B0069138D6FE90026A20F /* Headers */, + C53B006A138D6FE90026A20F /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = PXListView; + productName = PXListView; + productReference = C53B006C138D6FE90026A20F /* PXListView.framework */; + productType = "com.apple.product-type.framework"; + }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ @@ -216,7 +292,8 @@ projectDirPath = ""; projectRoot = ""; targets = ( - 8D1107260486CEB800E47090 /* PXListView */, + 8D1107260486CEB800E47090 /* Demo App */, + C53B006B138D6FE90026A20F /* PXListView */, ); }; /* End PBXProject section */ @@ -233,6 +310,13 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + C53B006A138D6FE90026A20F /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXResourcesBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -250,9 +334,28 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + C53B0067138D6FE90026A20F /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + C53B007A138D700B0026A20F /* PXListView.m in Sources */, + C53B007E138D700B0026A20F /* PXListView+UserInteraction.m in Sources */, + C53B0081138D700B0026A20F /* PXListViewCell.m in Sources */, + C53B0084138D700B0026A20F /* PXListDocumentView.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXSourcesBuildPhase section */ /* Begin PBXVariantGroup section */ + C53B0072138D6FEA0026A20F /* InfoPlist.strings */ = { + isa = PBXVariantGroup; + children = ( + C53B0073138D6FEA0026A20F /* en */, + ); + name = InfoPlist.strings; + sourceTree = ""; + }; D26669CE11B1B302007597F1 /* InfoPlist.strings */ = { isa = PBXVariantGroup; children = ( @@ -284,6 +387,7 @@ GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = PXListView_Prefix.pch; GCC_PREPROCESSOR_DEFINITIONS = "DEBUG=1"; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_GLOBAL_CONSTRUCTORS = YES; GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES; @@ -316,6 +420,7 @@ GCC_MODEL_TUNING = G5; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = PXListView_Prefix.pch; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_GLOBAL_CONSTRUCTORS = YES; GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES; @@ -365,10 +470,56 @@ }; name = Release; }; + C53B0077138D6FEA0026A20F /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + COPY_PHASE_STRIP = NO; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + FRAMEWORK_VERSION = A; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_OBJC_EXCEPTIONS = YES; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "PXListView/PXListView-Prefix.pch"; + GCC_PREPROCESSOR_DEFINITIONS = DEBUG; + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + INFOPLIST_FILE = "PXListView/PXListView-Info.plist"; + MACOSX_DEPLOYMENT_TARGET = 10.6; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = macosx; + WRAPPER_EXTENSION = framework; + }; + name = Debug; + }; + C53B0078138D6FEA0026A20F /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + COPY_PHASE_STRIP = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + FRAMEWORK_VERSION = A; + GCC_ENABLE_OBJC_EXCEPTIONS = YES; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "PXListView/PXListView-Prefix.pch"; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + INFOPLIST_FILE = "PXListView/PXListView-Info.plist"; + MACOSX_DEPLOYMENT_TARGET = 10.6; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = macosx; + WRAPPER_EXTENSION = framework; + }; + name = Release; + }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - C01FCF4A08A954540054247B /* Build configuration list for PBXNativeTarget "PXListView" */ = { + C01FCF4A08A954540054247B /* Build configuration list for PBXNativeTarget "Demo App" */ = { isa = XCConfigurationList; buildConfigurations = ( C01FCF4B08A954540054247B /* Debug */, @@ -386,6 +537,15 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; + C53B0076138D6FEA0026A20F /* Build configuration list for PBXNativeTarget "PXListView" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + C53B0077138D6FEA0026A20F /* Debug */, + C53B0078138D6FEA0026A20F /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; /* End XCConfigurationList section */ }; rootObject = 29B97313FDCFA39411CA2CEA /* Project object */; diff --git a/PXListView/PXListView-Info.plist b/PXListView/PXListView-Info.plist new file mode 100644 index 0000000..a75c8be --- /dev/null +++ b/PXListView/PXListView-Info.plist @@ -0,0 +1,30 @@ + + + + + CFBundleDevelopmentRegion + English + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIconFile + + CFBundleIdentifier + com.perspx.${PRODUCT_NAME:rfc1034identifier} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + NSHumanReadableCopyright + Copyright © 2011 __MyCompanyName__. All rights reserved. + NSPrincipalClass + + + diff --git a/PXListView/PXListView-Prefix.pch b/PXListView/PXListView-Prefix.pch new file mode 100644 index 0000000..24e1f1d --- /dev/null +++ b/PXListView/PXListView-Prefix.pch @@ -0,0 +1,7 @@ +// +// Prefix header for all source files of the 'PXListView' target in the 'PXListView' project +// + +#ifdef __OBJC__ + #import +#endif diff --git a/PXListView/en.lproj/InfoPlist.strings b/PXListView/en.lproj/InfoPlist.strings new file mode 100644 index 0000000..477b28f --- /dev/null +++ b/PXListView/en.lproj/InfoPlist.strings @@ -0,0 +1,2 @@ +/* Localized versions of Info.plist keys */ +