apps-projectcenter/Framework/PCFileNameIcon.m
Sergii Stoian c3aa1d47a0 2009-01-17 Sergii Stoian <stoyan255@gmail.com>
* Framework/GNUmakefile: Include PCFileNameField.h and
  PCFileNameIcon.h in ProjectCenter_HEADER_FILES as 
  referenced by PCProjectInspector.h


git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/apps/projectcenter/trunk@27613 72102866-910b-0410-8b05-ffd578937521
2009-01-16 23:02:48 +00:00

190 lines
4.7 KiB
Objective-C

/*
GNUstep ProjectCenter - http://www.gnustep.org/experience/ProjectCenter.html
Copyright (C) 2005 Free Software Foundation
Authors: Serg Stoyan
This file is part of GNUstep.
This application is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This application is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU General Public
License along with this library; if not, write to the Free
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA.
*/
#import <AppKit/AppKit.h>
#import <ProjectCenter/PCDefines.h>
#import <ProjectCenter/PCFileNameIcon.h>
#import <ProjectCenter/PCProjectBrowser.h>
@implementation PCFileNameIcon
- (void)awakeFromNib
{
filePath = nil;
// [self setEditable:NO]; // prevents dragging
[self setImage:[NSImage imageNamed:@"ProjectCenter"]];
[self
registerForDraggedTypes:[NSArray arrayWithObject:NSFilenamesPboardType]];
}
- (id)initWithFrame:(NSRect)frameRect
{
self = [super initWithFrame:frameRect];
filePath = nil;
[self setRefusesFirstResponder:YES];
// [self setEditable:NO]; // prevents dragging
[self setImage:[NSImage imageNamed:@"ProjectCenter"]];
return self;
}
- (void)dealloc
{
#ifdef DEVELOPMENT
NSLog (@"PCFileNameIcon: dealloc");
#endif
[[NSNotificationCenter defaultCenter] removeObserver:self];
RELEASE(fileNameField);
RELEASE(delegate);
[super dealloc];
}
- (void)setFileNameField:(NSTextField *)field
{
fileNameField = RETAIN(field);
}
- (void)setDelegate:(id)object
{
delegate = object;
}
- (void)updateIcon
{
if (delegate)
{
if ([delegate respondsToSelector:@selector(fileNameIconImage)])
{
[self setImage:[delegate fileNameIconImage]];
}
if ([delegate respondsToSelector:@selector(fileNameIconTitle)])
{
[fileNameField setStringValue:[delegate fileNameIconTitle]];
}
if ([delegate respondsToSelector:@selector(isFileNameIconDraggable)])
{
[self setEditable:[delegate isFileNameIconDraggable]];
}
/* if ([delegate respondsToSelector:@selector(fileNameIconTitle)])
{
[fileNameField setStringValue:[delegate fileNameIconTitle]];
}*/
}
}
// --- Drag and drop
// --- NSDraggingDestination protocol methods
// -- Before the image is released
- (unsigned int)draggingEntered:(id <NSDraggingInfo>)sender
{
NSPasteboard *pb = [sender draggingPasteboard];
NSArray *paths = [pb propertyListForType:NSFilenamesPboardType];
unsigned int draggingOp = NSDragOperationNone;
NSLog(@"Dragging entered");
if (![paths isKindOfClass:[NSArray class]] || [paths count] == 0)
{
return draggingOp;
}
if (delegate &&
[delegate respondsToSelector:@selector(canPerformDraggingOf:)] &&
[delegate canPerformDraggingOf:paths] == YES)
{
draggingOp = NSDragOperationCopy;
}
if (draggingOp == NSDragOperationCopy)
{ // TODO: Change icon to icon that shows open state of destination
}
return draggingOp;
}
- (void)draggingExited:(id <NSDraggingInfo>)sender
{
NSLog(@"Dragging exited");
}
// -- After the image is released
- (BOOL)prepareForDragOperation:(id <NSDraggingInfo>)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;
}
- (BOOL)performDragOperation:(id <NSDraggingInfo>)sender
{
NSPasteboard *pb = [sender draggingPasteboard];
NSArray *paths = [pb propertyListForType:NSFilenamesPboardType];
NSLog(@"performDragOperation: %@", paths);
if (delegate &&
[delegate respondsToSelector:@selector(performDraggingOf:)])
{
return [delegate performDraggingOf:paths];
}
return YES;
}
- (void)concludeDragOperation:(id <NSDraggingInfo>)sender
{
NSPasteboard *pb = [sender draggingPasteboard];
NSArray *paths = [pb propertyListForType:NSFilenamesPboardType];
NSLog(@"Conclude drag operation");
if (delegate &&
[delegate respondsToSelector:@selector(concludeDraggingOf:)])
{
[delegate concludeDraggingOf:paths];
}
}
// --- NSDraggingSource protocol methods
- (void)draggedImage:(NSImage *)anImage beganAt:(NSPoint)aPoint
{
NSLog(@"Icon dragging started");
}
@end