From cc43e948dc1cc499fbbe2189e08e41eba17da551 Mon Sep 17 00:00:00 2001 From: Sergii Stoian Date: Tue, 30 Dec 2008 23:58:11 +0000 Subject: [PATCH] * Framework/PCFileNameIcon.m: * Headers/ProjectCenter/PCFileNameIcon.h: Implementation of dragging functionality. * Framework/PCProjectBrowser.m: Implement file icon delegate methods. Dragging files to category icon adds files to project. git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/apps/projectcenter/trunk@27472 72102866-910b-0410-8b05-ffd578937521 --- ChangeLog | 9 ++++++++ Framework/PCFileNameIcon.m | 30 ++++++++++++++++++++++++-- Framework/PCProjectBrowser.m | 26 +++++++++++++++++++++- Headers/ProjectCenter/PCFileNameIcon.h | 3 +++ 4 files changed, 65 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index cdbe57c..34d7a8d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2008-12-31 Sergii Stoian + + * Framework/PCFileNameIcon.m: + * Headers/ProjectCenter/PCFileNameIcon.h: + Implementation of dragging functionality. + + * Framework/PCProjectBrowser.m: Implement file icon delegate methods. + Dragging files to category icon adds files to project. + 2008-12-30 Richard frith-Macdonald * PCMenuController.m: diff --git a/Framework/PCFileNameIcon.m b/Framework/PCFileNameIcon.m index 6afbb58..806f4f9 100644 --- a/Framework/PCFileNameIcon.m +++ b/Framework/PCFileNameIcon.m @@ -122,12 +122,22 @@ - (void)draggingExited:(id )sender { + NSLog(@"Dragging exited"); } // -- After the image is released - (BOOL)prepareForDragOperation:(id )sender { + NSPasteboard *pb = [sender draggingPasteboard]; + NSArray *paths = [pb propertyListForType:NSFilenamesPboardType]; + NSLog(@"Prepare for drag operation"); + + if (delegate && + [delegate respondsToSelector:@selector(prepareForDraggingOf:)]) + { + return [delegate prepareForDraggingOf:paths]; + } return YES; } @@ -138,11 +148,27 @@ NSLog(@"performDragOperation: %@", paths); - return NO; + if (delegate && + [delegate respondsToSelector:@selector(performDraggingOf:)]) + { + return [delegate performDraggingOf:paths]; + } + + return YES; } -- (void)concludeDragOperation:(id )sendera +- (void)concludeDragOperation:(id )sender { + NSPasteboard *pb = [sender draggingPasteboard]; + NSArray *paths = [pb propertyListForType:NSFilenamesPboardType]; + + NSLog(@"Conclude drag operation"); + + if (delegate && + [delegate respondsToSelector:@selector(concludeDraggingOf:)]) + { + [delegate concludeDraggingOf:paths]; + } } @end diff --git a/Framework/PCProjectBrowser.m b/Framework/PCProjectBrowser.m index e5740db..f0423ae 100644 --- a/Framework/PCProjectBrowser.m +++ b/Framework/PCProjectBrowser.m @@ -685,7 +685,7 @@ NSString *PCBrowserDidSetPathNotification = @"PCBrowserDidSetPathNotification"; NSLog(@"PCBrowser: canPerformDraggingOf -> %@", category); - if (!category) + if (!category || ([self nameOfSelectedFile] != nil)) { return NO; } @@ -695,6 +695,7 @@ NSString *PCBrowserDidSetPathNotification = @"PCBrowserDidSetPathNotification"; return NO; } + // Check if we can accept files of such types while ((s = [e nextObject])) { if (![fileTypes containsObject:[s pathExtension]]) @@ -706,4 +707,27 @@ NSString *PCBrowserDidSetPathNotification = @"PCBrowserDidSetPathNotification"; return YES; } +- (BOOL)prepareForDraggingOf:(NSArray *)paths +{ + return YES; +} + +- (BOOL)performDraggingOf:(NSArray *)paths +{ + NSString *category = [self nameOfSelectedCategory]; + NSString *categoryKey = [project keyForCategory:category]; + NSEnumerator *pathsEnum = [paths objectEnumerator]; + NSString *file = nil; + + while ((file = [[pathsEnum nextObject] lastPathComponent])) + { + if (![project doesAcceptFile:file forKey:categoryKey]) + { + return NO; + } + } + + return [project addAndCopyFiles:paths forKey:categoryKey]; +} + @end diff --git a/Headers/ProjectCenter/PCFileNameIcon.h b/Headers/ProjectCenter/PCFileNameIcon.h index 39ed92b..5007503 100644 --- a/Headers/ProjectCenter/PCFileNameIcon.h +++ b/Headers/ProjectCenter/PCFileNameIcon.h @@ -46,6 +46,9 @@ - (NSImage *)fileNameIconImage; - (NSString *)fileNameIconTitle; - (BOOL)canPerformDraggingOf:(NSArray *)paths; +- (BOOL)prepareForDraggingOf:(NSArray *)paths; +- (BOOL)performDraggingOf:(NSArray *)paths; +- (BOOL)concludeDraggingOf:(NSArray *)paths; @end