Changeset 5461

Show
Ignore:
Timestamp:
04/18/08 02:14:44 (1 month ago)
Author:
morris
Message:

Redo drill system using only views and make it animated with CoreAnimation?

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • Spiral/trunk/English.lproj/Drill.nib/info.nib

    r5121 r5461  
    55        <key>IBFramework Version</key> 
    66        <string>629</string> 
    7         <key>IBLastKnownRelativeProjectPath</key> 
    8         <string>../../Spiral.xcodeproj</string> 
    97        <key>IBOldestOS</key> 
    108        <integer>5</integer> 
    119        <key>IBOpenObjects</key> 
    12         <array/> 
     10        <array> 
     11                <integer>2</integer> 
     12        </array> 
    1313        <key>IBSystem Version</key> 
    14         <string>9B18</string> 
     14        <string>9C7010</string> 
    1515        <key>targetFramework</key> 
    1616        <string>IBCocoaFramework</string> 
  • Spiral/trunk/SPDrillController.m

    r5139 r5461  
    221221        [_movieController setMovie:NULL]; 
    222222         
    223         [_drillView selectItem:[_movieController playlistFile]]; 
    224  
    225223        [[self window] setContentView:_drillContentView]; 
    226224        [[self window] makeFirstResponder:_drillView]; 
  • Spiral/trunk/SPDrillView.h

    r5139 r5461  
    2727 */ 
    2828 
    29 @class SPPlaylistGroup, SPPlaylistFile, SPPlaylistContainer, SPPlaylistItem
     29@class SPDrillListView, SPPlaylistGroup, SPPlaylistFile, SPPlaylistContainer
    3030@protocol SPDrillViewDelegate; 
    3131 
    3232@interface SPDrillView : NSControl { 
    3333        IBOutlet id <SPDrillViewDelegate>       delegate; 
     34         
     35        SPDrillListView                                         *_currentListView; 
     36        id                                                                      _currentPlaylistItem; 
    3437 
    3538        SPPlaylistGroup                                         *_playlist; 
    36         NSMutableArray                                          *_path; 
    37          
    38         NSRect                                                          _screenFrame; 
    39         NSRange                                                         _visibleRange; 
    40         NSUInteger                                                      _selectedIndex; 
    4139} 
    4240 
     
    4543- (void)setPlaylist:(SPPlaylistGroup *)playlist; 
    4644- (SPPlaylistGroup *)playlist; 
    47  
    48 - (void)selectItem:(SPPlaylistItem *)item; 
    4945 
    5046- (void)openSelection; 
  • Spiral/trunk/SPDrillView.m

    r5139 r5461  
    2727 */ 
    2828 
    29 #import "SPDrillCell.h" 
     29#import "SPDrillItem.h" 
     30#import "SPDrillListView.h" 
    3031#import "SPDrillView.h" 
    3132#import "SPPlaylistController.h" 
     
    3536@interface SPDrillView(Private) 
    3637 
    37 - (void)_initDrillView; 
    38 - (NSRange)_visibleRangeForIndex:(NSUInteger)index; 
    39 - (SPPlaylistContainer *)_currentContainer; 
    40 - (id)_selectedItem; 
     38- (void)_addListViewWithItem:(id)item selectCurrentItem:(BOOL)selectCurrentItem; 
    4139 
    4240@end 
     
    4543@implementation SPDrillView(Private) 
    4644 
    47 - (void)_initDrillView { 
    48         _path                   = [[NSMutableArray alloc] init]; 
    49         _screenFrame    = [[[self window] screen] frame]; 
     45- (void)_addListViewWithItem:(id)item selectCurrentItem:(BOOL)selectCurrentItem { 
     46        NSMutableArray          *drillItems; 
     47        SPDrillItem                     *drillItem, *selectItem = NULL; 
     48        SPDrillListView         *previousListView; 
     49        id                                      playlistItem; 
     50         
     51        previousListView = _currentListView; 
     52         
     53        _currentListView = [[SPDrillListView alloc] initWithFrame:[SPDrillListView frameSizedToFitFromFrame:[self frame]]]; 
    5054 
    51         [[self cell] setTextColor:[NSColor whiteColor]]; 
    52         [[self cell] setFont:[NSFont systemFontOfSize:72.0]]; 
    53         [[self cell] setLineBreakMode:NSLineBreakByTruncatingMiddle]; 
    54 
    55  
    56  
    57  
    58 - (NSRange)_visibleRangeForIndex:(NSUInteger)index { 
    59         NSArray                 *items; 
    60         NSUInteger              cells; 
     55        drillItems = [NSMutableArray array]; 
    6156         
    62         items = [[self _currentContainer] items]; 
    63         cells = floor([self frame].size.height / [[self cell] cellSize].height); 
     57        for(playlistItem in [item items]) { 
     58                drillItem = [[SPDrillItem alloc] init]; 
     59                [drillItem setPlaylistItem:playlistItem]; 
     60                [drillItem setStringValue:[playlistItem name]]; 
     61                [drillItem setImage:[playlistItem iconWithSize:NSMakeSize(128.0, 128.0)]]; 
     62                [drillItems addObject:drillItem]; 
     63                 
     64                if([playlistItem isEqual:_currentPlaylistItem]) 
     65                        selectItem = [drillItem retain]; 
     66                 
     67                [drillItem release]; 
     68        } 
    6469         
    65         if([items count] < cells) 
    66                 return NSMakeRange(0, [items count]); 
    67         else if([items count] < index + cells) 
    68                 return NSMakeRange([items count] - cells, cells); 
    69         else 
    70                 return NSMakeRange(index, cells); 
    71 
    72  
    73  
    74  
    75 - (SPPlaylistContainer *)_currentContainer { 
    76         return [_path lastObject]; 
    77 
    78  
    79  
    80  
    81 - (id)_selectedItem { 
    82         NSArray                 *items; 
    83         NSUInteger              index; 
     70        [_currentListView setItems:drillItems selectItem:selectItem]; 
    8471         
    85         items = [[self _currentContainer] items]; 
    86         index = _visibleRange.location + _selectedIndex; 
     72        [selectItem release]; 
    8773         
    88         if(index < [items count]) 
    89                return [items objectAtIndex:index]; 
     74        [item retain]; 
     75        [_currentPlaylistItem release]; 
    9076         
    91         return NULL; 
     77        _currentPlaylistItem = item; 
     78         
     79        [self addSubview:_currentListView]; 
     80        [previousListView removeFromSuperviewWithoutNeedingDisplay]; 
    9281} 
    9382 
     
    9887@implementation SPDrillView 
    9988 
    100 + (Class)cellClass { 
    101         return [SPDrillCell class]; 
    102 } 
    103  
    104  
    105  
    106 #pragma mark - 
    107  
    108 - (id)initWithFrame:(NSRect)frame { 
    109         self = [super initWithFrame:frame]; 
    110          
    111         [self _initDrillView]; 
    112          
    113         return self; 
    114 } 
    115  
    116  
    117  
    118 - (id)initWithCoder:(NSCoder *)coder { 
    119         self = [super initWithCoder:coder]; 
    120          
    121         [self _initDrillView]; 
    122          
    123         return self; 
    124 } 
    125  
    126  
    127  
    12889- (void)dealloc { 
    12990        [_playlist release]; 
    130         [_path release]; 
    13191         
    13292        [super dealloc]; 
     
    156116        _playlist = playlist; 
    157117         
    158         [_path setArray:[NSArray arrayWithObject:playlist]]; 
    159          
    160         _selectedIndex = 0; 
    161         _visibleRange = [self _visibleRangeForIndex:0]; 
    162          
    163         [self setNeedsDisplay:YES]; 
     118        [self _addListViewWithItem:playlist selectCurrentItem:NO]; 
    164119} 
    165120 
     
    174129#pragma mark - 
    175130 
    176 - (void)selectItem:(SPPlaylistItem *)item { 
    177         NSArray                 *items; 
    178         NSUInteger              index; 
    179          
    180         items = [[self _currentContainer] items]; 
    181         index = [items indexOfObject:item]; 
    182          
    183         if(index == NSNotFound) 
    184                 return; 
    185          
    186         if(index > 0) 
    187                 index--; 
    188          
    189         _visibleRange = [self _visibleRangeForIndex:index]; 
    190         _selectedIndex = [[items subarrayWithRange:_visibleRange] indexOfObject:item]; 
    191          
    192         [self setNeedsDisplay:YES]; 
    193 } 
    194  
    195  
    196  
    197 #pragma mark - 
    198  
    199131- (void)openSelection { 
    200132        id              item; 
    201133 
    202         item = [self _selectedItem]; 
     134        item = [[_currentListView selectedItem] playlistItem]; 
    203135         
    204136        if([item isKindOfClass:[SPPlaylistContainer class]]) { 
    205137                [[self delegate] drillView:self willOpenContainer:item]; 
    206138                 
    207                 [_path addObject:item]; 
    208  
    209                 _selectedIndex = 0; 
    210                 _visibleRange = [self _visibleRangeForIndex:0]; 
    211                  
    212                 [self setNeedsDisplay:YES]; 
     139                [self _addListViewWithItem:item selectCurrentItem:NO]; 
    213140        } 
    214141        else if([item isKindOfClass:[SPPlaylistFile class]]) { 
     
    220147 
    221148- (void)closeSelection { 
    222         NSArray         *items; 
    223         NSUInteger      index; 
    224         id                      item; 
     149        id              parentItem; 
    225150         
    226         if([_path count] > 1) { 
    227                 item = [[[_path lastObject] retain] autorelease]; 
    228  
    229                 [_path removeObjectAtIndex:[_path count] - 1]; 
    230  
    231                 items = [[self _currentContainer] items]; 
    232                 index = [items indexOfObject:item]; 
    233                  
    234                 if(index == NSNotFound) { 
    235                         _selectedIndex = 0; 
    236                         _visibleRange = [self _visibleRangeForIndex:0]; 
    237                 } else { 
    238                         if(index > 0) 
    239                                 index--; 
    240                          
    241                         _visibleRange = [self _visibleRangeForIndex:index]; 
    242                         _selectedIndex = [[items subarrayWithRange:_visibleRange] indexOfObject:item]; 
    243                 } 
    244                  
    245                 [self setNeedsDisplay:YES]; 
    246         } 
     151        parentItem = [_currentPlaylistItem parentItem]; 
     152         
     153        if(parentItem) 
     154                [self _addListViewWithItem:parentItem selectCurrentItem:YES]; 
    247155} 
    248156 
     
    250158 
    251159- (void)moveSelectionUp { 
    252         if(_visibleRange.location + _selectedIndex > 0) { 
    253                 if(_visibleRange.location > 0 && _selectedIndex <= 1) 
    254                         _visibleRange = [self _visibleRangeForIndex:_visibleRange.location + _selectedIndex - 2]; 
    255                 else if(_selectedIndex > 1 || (_selectedIndex > 0 && _visibleRange.location == 0)) 
    256                         _selectedIndex--; 
    257                  
    258                 [self setNeedsDisplay:YES]; 
    259         } 
     160        [_currentListView moveSelectionUp]; 
    260161} 
    261162 
     
    263164 
    264165- (void)moveSelectionDown { 
    265         NSUInteger              items, visibleItems; 
    266          
    267         items = [[self _currentContainer] numberOfItems]; 
    268         visibleItems = _visibleRange.location + _visibleRange.length; 
    269          
    270         if(_visibleRange.location + _selectedIndex + 1 < items) { 
    271                 if(_selectedIndex + 2 >= _visibleRange.length && visibleItems < items) 
    272                         _visibleRange = [self _visibleRangeForIndex:_visibleRange.location + _selectedIndex - _visibleRange.length + 3]; 
    273                 else if(_selectedIndex + 2 < _visibleRange.length || (visibleItems >= items && _selectedIndex + 1 < _visibleRange.length)) 
    274                         _selectedIndex++; 
    275          
    276                 [self setNeedsDisplay:YES]; 
    277         } 
     166        [_currentListView moveSelectionDown]; 
    278167} 
    279168 
     
    294183 
    295184- (void)keyDown:(NSEvent *)event { 
    296         id                      item; 
    297185        unichar         key; 
    298186         
    299187        key = [event character]; 
    300         item = [self _selectedItem]; 
    301188         
    302189    if(key == NSEnterCharacter || key == NSCarriageReturnCharacter || key == NSRightArrowFunctionKey) 
     
    310197} 
    311198 
    312  
    313  
    314 - (void)drawRect:(NSRect)rect { 
    315         NSArray                         *items; 
    316         NSBezierPath            *path; 
    317         NSGradient                      *gradient; 
    318         SPDrillCell                     *cell; 
    319         id                                      item; 
    320         NSRect                          cellFrame, selectionFrame, firstCellFrame, lastCellFrame; 
    321         NSSize                          cellSize; 
    322         NSUInteger                      index; 
    323         CGFloat                         heightOffset; 
    324         BOOL                            selection; 
    325          
    326         items = [[self _currentContainer] items]; 
    327         index = 0; 
    328         selection = NO; 
    329          
    330         cellSize = [[self cell] cellSize]; 
    331         heightOffset = floor((rect.size.height - (_visibleRange.length * cellSize.height)) / 2.0); 
    332         selectionFrame = NSMakeRect(3.0, rect.size.height - cellSize.height - heightOffset - 3.0, rect.size.width - 8.0, cellSize.height); 
    333         firstCellFrame = cellFrame = selectionFrame; 
    334         cellFrame.origin.x += 20.0; 
    335         cellFrame.size.width -= 40.0; 
    336          
    337         for(item in [items subarrayWithRange:_visibleRange]) { 
    338                 cell = [[self cell] copy]; 
    339                  
    340                 if([SPSettings boolForKey:SPSimplifyFilenames]) 
    341                         [cell setObjectValue:[item cleanName]]; 
    342                 else 
    343                         [cell setObjectValue:[item name]]; 
    344  
    345                 [cell setImage:[item iconWithSize:[[self cell] imageSize]]]; 
    346                 [cell drawWithFrame:cellFrame inView:self]; 
    347                 [cell release]; 
    348                  
    349                 if(index == _selectedIndex) { 
    350                         selection = YES; 
    351                         selectionFrame.origin.y = cellFrame.origin.y; 
    352                 } 
    353                  
    354                 lastCellFrame = cellFrame; 
    355                 cellFrame.origin.y -= cellFrame.size.height; 
    356                  
    357                 index++; 
    358         } 
    359          
    360         if(_visibleRange.location > 0 || [items count] > _visibleRange.location + _visibleRange.length) { 
    361                 gradient = [[NSGradient alloc] initWithStartingColor:[NSColor colorWithCalibratedWhite:0.0 alpha:0.0] 
    362                                                                                                  endingColor:[NSColor colorWithCalibratedWhite:0.0 alpha:1.0]]; 
    363                  
    364                 if(_visibleRange.location > 0) 
    365                         [gradient drawInRect:firstCellFrame angle:90.0]; 
    366                  
    367                 if([items count] > _visibleRange.location + _visibleRange.length) 
    368                         [gradient drawInRect:lastCellFrame angle:270.0]; 
    369                  
    370                 [gradient release]; 
    371         } 
    372  
    373         if(selection) { 
    374                 [[NSColor colorWithCalibratedWhite:1.0 alpha:1.0] set]; 
    375                  
    376                 path = [NSBezierPath bezierPathWithRoundedRect:selectionFrame xRadius:16.0 yRadius:16.0]; 
    377                 [path setLineWidth:6.0]; 
    378                 [path stroke]; 
    379         } 
    380 } 
    381  
    382199@end 
  • Spiral/trunk/SPPlaylistItem.m

    r5142 r5461  
    227227        SPPlaylistItem  *item = other; 
    228228         
    229         return [_identifier isEqualToString:item->_identifier]
     229        return (item && [_identifier isEqualToString:item->_identifier])
    230230} 
    231231 
  • Spiral/trunk/Spiral.xcodeproj/project.pbxproj

    r5460 r5461  
    119119                A56D50FF0DB7BD0200F1B2EF /* RemoteConnected.tiff in Resources */ = {isa = PBXBuildFile; fileRef = A56D50FC0DB7BD0200F1B2EF /* RemoteConnected.tiff */; }; 
    120120                A59356FA0CCFD068009A8245 /* SPDrillView.m in Sources */ = {isa = PBXBuildFile; fileRef = A59356F80CCFD068009A8245 /* SPDrillView.m */; }; 
    121                 A59357C20CCFD506009A8245 /* SPDrillCell.m in Sources */ = {isa = PBXBuildFile; fileRef = A59357C00CCFD506009A8245 /* SPDrillCell.m */; }; 
    122121                A5935A250CCFE2A9009A8245 /* SPMovieController.m in Sources */ = {isa = PBXBuildFile; fileRef = A5935A230CCFE2A9009A8245 /* SPMovieController.m */; }; 
    123122                A59630E30CC005EF008728CB /* SPApplicationController.m in Sources */ = {isa = PBXBuildFile; fileRef = A59630E10CC005EF008728CB /* SPApplicationController.m */; }; 
     
    145144                A5E545D40CC244A000A608D1 /* SPQTMovieView.m in Sources */ = {isa = PBXBuildFile; fileRef = A5E545D20CC244A000A608D1 /* SPQTMovieView.m */; }; 
    146145                A5E54A4B0CC2A8E800A608D1 /* SPFullscreenWindow.m in Sources */ = {isa = PBXBuildFile; fileRef = A5E54A490CC2A8E800A608D1 /* SPFullscreenWindow.m */; }; 
     146                A5F34DC50DB7F8EB004C3DF6 /* SPDrillItem.m in Sources */ = {isa = PBXBuildFile; fileRef = A5F34DC10DB7F8EB004C3DF6 /* SPDrillItem.m */; }; 
     147                A5F34DC60DB7F8EB004C3DF6 /* SPDrillListView.m in Sources */ = {isa = PBXBuildFile; fileRef = A5F34DC20DB7F8EB004C3DF6 /* SPDrillListView.m */; }; 
     148                A5F34DE00DB7FA03004C3DF6 /* DrillItem.nib in Resources */ = {isa = PBXBuildFile; fileRef = A5F34DDE0DB7FA03004C3DF6 /* DrillItem.nib */; }; 
     149                A5F34EEB0DB804F3004C3DF6 /* SPDrillGradientView.m in Sources */ = {isa = PBXBuildFile; fileRef = A5F34EE90DB804F3004C3DF6 /* SPDrillGradientView.m */; }; 
     150                A5F34FBC0DB80CD8004C3DF6 /* SPDrillSelectionView.m in Sources */ = {isa = PBXBuildFile; fileRef = A5F34FBB0DB80CD8004C3DF6 /* SPDrillSelectionView.m */; }; 
    147151                A5F518810DB669D7001BE2F8 /* IOBluetooth.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A5F518800DB669D7001BE2F8 /* IOBluetooth.framework */; }; 
    148152                A5F5189A0DB66E1D001BE2F8 /* SPPS3Remote.m in Sources */ = {isa = PBXBuildFile; fileRef = A5F518990DB66E1D001BE2F8 /* SPPS3Remote.m */; }; 
     
    305309                A59356F70CCFD068009A8245 /* SPDrillView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SPDrillView.h; sourceTree = "<group>"; }; 
    306310                A59356F80CCFD068009A8245 /* SPDrillView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SPDrillView.m; sourceTree = "<group>"; }; 
    307                 A59357BF0CCFD506009A8245 /* SPDrillCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SPDrillCell.h; sourceTree = "<group>"; }; 
    308                 A59357C00CCFD506009A8245 /* SPDrillCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SPDrillCell.m; sourceTree = "<group>"; }; 
    309311                A5935A220CCFE2A9009A8245 /* SPMovieController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SPMovieController.h; sourceTree = "<group>"; }; 
    310312                A5935A230CCFE2A9009A8245 /* SPMovieController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SPMovieController.m; sourceTree = "<group>"; }; 
     
    344346                A5E54A480CC2A8E800A608D1 /* SPFullscreenWindow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SPFullscreenWindow.h; sourceTree = "<group>"; }; 
    345347                A5E54A490CC2A8E800A608D1 /* SPFullscreenWindow.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SPFullscreenWindow.m; sourceTree = "<group>"; }; 
     348                A5F34DC10DB7F8EB004C3DF6 /* SPDrillItem.m */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.objc; path = SPDrillItem.m; sourceTree = "<group>"; }; 
     349                A5F34DC20DB7F8EB004C3DF6 /* SPDrillListView.m */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.objc; path = SPDrillListView.m; sourceTree = "<group>"; }; 
     350                A5F34DC30DB7F8EB004C3DF6 /* SPDrillListView.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = SPDrillListView.h; sourceTree = "<group>"; }; 
     351                A5F34DC40DB7F8EB004C3DF6 /* SPDrillItem.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = SPDrillItem.h; sourceTree = "<group>"; }; 
     352                A5F34DDF0DB7FA03004C3DF6 /* English */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = English; path = English.lproj/DrillItem.nib; sourceTree = "<group>"; }; 
     353                A5F34EE90DB804F3004C3DF6 /* SPDrillGradientView.m */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.objc; path = SPDrillGradientView.m; sourceTree = "<group>"; }; 
     354                A5F34EEA0DB804F3004C3DF6 /* SPDrillGradientView.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = SPDrillGradientView.h; sourceTree = "<group>"; }; 
     355                A5F34FBA0DB80CD8004C3DF6 /* SPDrillSelectionView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SPDrillSelectionView.h; sourceTree = "<group>"; }; 
     356                A5F34FBB0DB80CD8004C3DF6 /* SPDrillSelectionView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SPDrillSelectionView.m; sourceTree = "<group>"; }; 
    346357                A5F518800DB669D7001BE2F8 /* IOBluetooth.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOBluetooth.framework; path = /System/Library/Frameworks/IOBluetooth.framework; sourceTree = "<absolute>"; }; 
    347358                A5F518980DB66E1D001BE2F8 /* SPPS3Remote.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SPPS3Remote.h; sourceTree = "<group>"; }; 
     
    463474                                77CDAE70083B3515003BE654 /* ReleaseNotes.rtf */, 
    464475                                775BF1300CCF730100E93928 /* Drill.nib */, 
     476                                A5F34DDE0DB7FA03004C3DF6 /* DrillItem.nib */, 
    465477                                775BF86B0CD0C5B800E93928 /* HUD.nib */, 
    466478                                77A2722D0CC4D03A0040B352 /* Inspector.nib */, 
     
    665677                        isa = PBXGroup; 
    666678                        children = ( 
    667                                 A59357C00CCFD506009A8245 /* SPDrillCell.m */, 
    668                                 A59357BF0CCFD506009A8245 /* SPDrillCell.h */, 
     679                                A5F34EE90DB804F3004C3DF6 /* SPDrillGradientView.m */, 
     680                                A5F34EEA0DB804F3004C3DF6 /* SPDrillGradientView.h */, 
     681                                A5F34DC10DB7F8EB004C3DF6 /* SPDrillItem.m */, 
     682                                A5F34DC40DB7F8EB004C3DF6 /* SPDrillItem.h */, 
     683                                A5F34DC20DB7F8EB004C3DF6 /* SPDrillListView.m */, 
     684                                A5F34DC30DB7F8EB004C3DF6 /* SPDrillListView.h */, 
     685                                A5F34FBB0DB80CD8004C3DF6 /* SPDrillSelectionView.m */, 
     686                                A5F34FBA0DB80CD8004C3DF6 /* SPDrillSelectionView.h */, 
    669687                                A59356F80CCFD068009A8245 /* SPDrillView.m */, 
    670688                                A59356F70CCFD068009A8245 /* SPDrillView.h */, 
     
    858876                                A50E4A6A0CCD456A0070EBAF /* flv.icns in Resources */, 
    859877                                A50E4A730CCD46CF0070EBAF /* wmv.icns in Resources */, 
     878                                A5F34DE00DB7FA03004C3DF6 /* DrillItem.nib in Resources */, 
    860879                        ); 
    861880                        runOnlyForDeploymentPostprocessing = 0; 
     
    957976                                775BF12B0CCF722000E93928 /* SPDrillController.m in Sources */, 
    958977                                A59356FA0CCFD068009A8245 /* SPDrillView.m in Sources */, 
    959                                 A59357C20CCFD506009A8245 /* SPDrillCell.m in Sources */, 
    960978                                A5935A250CCFE2A9009A8245 /* SPMovieController.m in Sources */, 
    961979                                A5F5189A0DB66E1D001BE2F8 /* SPPS3Remote.m in Sources */, 
     980                                A5F34DC50DB7F8EB004C3DF6 /* SPDrillItem.m in Sources */, 
     981                                A5F34DC60DB7F8EB004C3DF6 /* SPDrillListView.m in Sources */, 
     982                                A5F34EEB0DB804F3004C3DF6 /* SPDrillGradientView.m in Sources */, 
     983                                A5F34FBC0DB80CD8004C3DF6 /* SPDrillSelectionView.m in Sources */, 
    962984                        ); 
    963985                        runOnlyForDeploymentPostprocessing = 0; 
     
    10951117                        ); 
    10961118                        name = Preferences.nib; 
     1119                        sourceTree = "<group>"; 
     1120                }; 
     1121                A5F34DDE0DB7FA03004C3DF6 /* DrillItem.nib */ = { 
     1122                        isa = PBXVariantGroup; 
     1123                        children = ( 
     1124                                A5F34DDF0DB7FA03004C3DF6 /* English */, 
     1125                        ); 
     1126                        name = DrillItem.nib; 
    10971127                        sourceTree = "<group>"; 
    10981128                };