136 lines
3.9 KiB
Objective-C
136 lines
3.9 KiB
Objective-C
//
|
|
// SpotlightPlaylistController.m
|
|
// Cog
|
|
//
|
|
// Created by Matthew Grinshpun on 13/02/08.
|
|
// Copyright 2008 Matthew Leon Grinshpun. All rights reserved.
|
|
//
|
|
|
|
#import "SpotlightPlaylistController.h"
|
|
#import "SpotlightWindowController.h"
|
|
|
|
#import "PlaylistEntry.h"
|
|
|
|
static NSArray *cellIdentifiers = nil;
|
|
|
|
@implementation SpotlightPlaylistController
|
|
|
|
+ (void)initialize {
|
|
cellIdentifiers = @[@"title", @"artist", @"album", @"length", @"year", @"genre", @"track"];
|
|
}
|
|
|
|
// Allow drag and drop from Spotlight into main playlist
|
|
- (BOOL)tableView:(NSTableView *)tv
|
|
writeRowsWithIndexes:(NSIndexSet *)rowIndexes
|
|
toPasteboard:(NSPasteboard *)pboard {
|
|
[spotlightWindowController.query disableUpdates];
|
|
|
|
NSArray *urls = [[self selectedObjects] valueForKey:@"URL"];
|
|
NSError *error = nil;
|
|
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:urls
|
|
requiringSecureCoding:YES
|
|
error:&error];
|
|
if(error) return NO;
|
|
[pboard declareTypes:@[CogUrlsPboardType] owner:nil]; // add it to pboard
|
|
[pboard setData:data forType:CogUrlsPboardType];
|
|
|
|
[spotlightWindowController.query enableUpdates];
|
|
|
|
return YES;
|
|
}
|
|
|
|
// Do not accept drag operations, necessary as long as this class inherits from PlaylistController
|
|
- (NSDragOperation)tableView:(NSTableView *)tv
|
|
validateDrop:(id<NSDraggingInfo>)info
|
|
proposedRow:(NSInteger)row
|
|
proposedDropOperation:(NSTableViewDropOperation)op {
|
|
return NSDragOperationNone;
|
|
}
|
|
|
|
- (NSView *_Nullable)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *_Nullable)tableColumn row:(NSInteger)row {
|
|
NSString *cellText = @"";
|
|
NSString *cellIdentifier = @"";
|
|
NSTextAlignment cellTextAlignment = NSTextAlignmentLeft;
|
|
|
|
PlaylistEntry *pe = [[self arrangedObjects] objectAtIndex:row];
|
|
|
|
if(pe) {
|
|
cellIdentifier = [tableColumn identifier];
|
|
NSUInteger index = [cellIdentifiers indexOfObject:cellIdentifier];
|
|
|
|
switch(index) {
|
|
case 0:
|
|
if([pe title]) cellText = pe.title;
|
|
break;
|
|
|
|
case 1:
|
|
if([pe artist]) cellText = pe.artist;
|
|
break;
|
|
|
|
case 2:
|
|
if([pe album]) cellText = pe.album;
|
|
break;
|
|
|
|
case 3:
|
|
cellText = pe.lengthText;
|
|
cellTextAlignment = NSTextAlignmentRight;
|
|
break;
|
|
|
|
case 4:
|
|
if([pe year]) cellText = pe.yearText;
|
|
cellTextAlignment = NSTextAlignmentRight;
|
|
break;
|
|
|
|
case 5:
|
|
if([pe genre]) cellText = pe.genre;
|
|
break;
|
|
|
|
case 6:
|
|
if([pe track]) cellText = pe.trackText;
|
|
cellTextAlignment = NSTextAlignmentRight;
|
|
break;
|
|
}
|
|
}
|
|
|
|
NSString *cellTextTruncated = cellText;
|
|
if([cellTextTruncated length] > 1023) {
|
|
cellTextTruncated = [cellTextTruncated substringToIndex:1023];
|
|
cellTextTruncated = [cellTextTruncated stringByAppendingString:@"…"];
|
|
}
|
|
|
|
NSView *view = [tableView makeViewWithIdentifier:cellIdentifier owner:nil];
|
|
if(view && [view isKindOfClass:[NSTableCellView class]]) {
|
|
NSTableCellView *cellView = (NSTableCellView *)view;
|
|
NSRect frameRect = cellView.frame;
|
|
frameRect.origin.y = 1;
|
|
frameRect.size.height = tableView.rowHeight;
|
|
cellView.frame = frameRect;
|
|
|
|
if(cellView.textField) {
|
|
cellView.textField.allowsDefaultTighteningForTruncation = YES;
|
|
|
|
NSFont *font = [NSFont monospacedDigitSystemFontOfSize:13 weight:NSFontWeightRegular];
|
|
|
|
cellView.textField.font = font;
|
|
cellView.textField.stringValue = cellTextTruncated;
|
|
cellView.textField.alignment = cellTextAlignment;
|
|
|
|
if(cellView.textField.intrinsicContentSize.width > cellView.textField.frame.size.width - 4)
|
|
cellView.textField.toolTip = cellTextTruncated;
|
|
else
|
|
cellView.textField.toolTip = [pe statusMessage];
|
|
|
|
NSRect cellFrameRect = cellView.textField.frame;
|
|
cellFrameRect.origin.y = 1;
|
|
cellFrameRect.size.height = frameRect.size.height;
|
|
cellView.textField.frame = cellFrameRect;
|
|
}
|
|
|
|
cellView.rowSizeStyle = NSTableViewRowSizeStyleCustom;
|
|
}
|
|
|
|
return view;
|
|
}
|
|
|
|
@end
|