2010-02-07 14:26:50 +00:00
|
|
|
/*
|
2011-04-12 08:04:01 +00:00
|
|
|
Copyright 2011 Hardcoded Software (http://www.hardcoded.net)
|
2010-02-07 14:26:50 +00:00
|
|
|
|
2010-09-30 10:17:41 +00:00
|
|
|
This software is licensed under the "BSD" License as described in the "LICENSE" file,
|
2010-02-07 14:26:50 +00:00
|
|
|
which should be included with this package. The terms are also available at
|
2010-09-30 10:17:41 +00:00
|
|
|
http://www.hardcoded.net/licenses/bsd_license
|
2010-02-07 14:26:50 +00:00
|
|
|
*/
|
|
|
|
|
|
|
|
#import "DirectoryOutline.h"
|
2012-01-12 20:19:40 +00:00
|
|
|
#import "Utils.h"
|
2010-02-07 14:26:50 +00:00
|
|
|
|
|
|
|
@implementation DirectoryOutline
|
2012-01-13 20:25:34 +00:00
|
|
|
- (id)initWithPyRef:(PyObject *)aPyRef outlineView:(HSOutlineView *)aOutlineView
|
2010-02-07 14:26:50 +00:00
|
|
|
{
|
2012-01-13 20:25:34 +00:00
|
|
|
PyDirectoryOutline *model = [[PyDirectoryOutline alloc] initWithModel:aPyRef];
|
2012-01-12 20:19:40 +00:00
|
|
|
self = [super initWithPy:model view:aOutlineView];
|
|
|
|
[model bindCallback:createCallback(@"DirectoryOutlineView", self)];
|
|
|
|
[model release];
|
2010-02-07 14:26:50 +00:00
|
|
|
[outlineView registerForDraggedTypes:[NSArray arrayWithObject:NSFilenamesPboardType]];
|
|
|
|
return self;
|
|
|
|
}
|
|
|
|
|
|
|
|
- (PyDirectoryOutline *)py
|
|
|
|
{
|
|
|
|
return (PyDirectoryOutline *)py;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Delegate */
|
|
|
|
- (NSDragOperation)outlineView:(NSOutlineView *)outlineView validateDrop:(id < NSDraggingInfo >)info proposedItem:(id)item proposedChildIndex:(NSInteger)index
|
|
|
|
{
|
|
|
|
NSPasteboard *pboard;
|
|
|
|
NSDragOperation sourceDragMask;
|
|
|
|
sourceDragMask = [info draggingSourceOperationMask];
|
|
|
|
pboard = [info draggingPasteboard];
|
|
|
|
if ([[pboard types] containsObject:NSFilenamesPboardType]) {
|
|
|
|
if (sourceDragMask & NSDragOperationLink)
|
|
|
|
return NSDragOperationLink;
|
|
|
|
}
|
|
|
|
return NSDragOperationNone;
|
|
|
|
}
|
|
|
|
|
|
|
|
- (BOOL)outlineView:(NSOutlineView *)outlineView acceptDrop:(id < NSDraggingInfo >)info item:(id)item childIndex:(NSInteger)index
|
|
|
|
{
|
|
|
|
NSPasteboard *pboard;
|
|
|
|
NSDragOperation sourceDragMask;
|
|
|
|
sourceDragMask = [info draggingSourceOperationMask];
|
|
|
|
pboard = [info draggingPasteboard];
|
|
|
|
if ([[pboard types] containsObject:NSFilenamesPboardType]) {
|
2011-01-27 09:27:17 +00:00
|
|
|
NSArray *foldernames = [pboard propertyListForType:NSFilenamesPboardType];
|
2010-02-07 14:26:50 +00:00
|
|
|
if (!(sourceDragMask & NSDragOperationLink))
|
|
|
|
return NO;
|
2011-01-27 09:27:17 +00:00
|
|
|
for (NSString *foldername in foldernames) {
|
|
|
|
[[self py] addDirectory:foldername];
|
2010-02-07 14:26:50 +00:00
|
|
|
}
|
2011-01-27 09:27:17 +00:00
|
|
|
NSDictionary *userInfo = [NSDictionary dictionaryWithObject:foldernames forKey:@"foldernames"];
|
|
|
|
[[NSNotificationCenter defaultCenter] postNotificationName:DGAddedFoldersNotification
|
|
|
|
object:self userInfo:userInfo];
|
2010-02-07 14:26:50 +00:00
|
|
|
}
|
|
|
|
return YES;
|
|
|
|
}
|
|
|
|
|
|
|
|
- (void)outlineView:(NSOutlineView *)aOutlineView willDisplayCell:(id)cell forTableColumn:(NSTableColumn *)tableColumn item:(id)item
|
|
|
|
{
|
|
|
|
if ([cell isKindOfClass:[NSTextFieldCell class]]) {
|
|
|
|
NSTextFieldCell *textCell = cell;
|
|
|
|
NSIndexPath *path = item;
|
|
|
|
BOOL selected = [path isEqualTo:[outlineView selectedPath]];
|
|
|
|
if (selected) {
|
|
|
|
[textCell setTextColor:[NSColor blackColor]];
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
NSInteger state = [self intProperty:@"state" valueAtPath:path];
|
|
|
|
if (state == 1) {
|
|
|
|
[textCell setTextColor:[NSColor blueColor]];
|
|
|
|
}
|
|
|
|
else if (state == 2) {
|
|
|
|
[textCell setTextColor:[NSColor redColor]];
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
[textCell setTextColor:[NSColor blackColor]];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
@end
|