File sharing made easy.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

87 lines
2.5 KiB

//
// MGMMenuItem.m
// CocoaShare
//
// Created by James on 1/16/11.
// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/
//
#import "MGMMenuItem.h"
@implementation MGMMenuItem
- (id)initWithFrame:(NSRect)frame {
if ((self = [super initWithFrame:NSMakeRect(0, 0, 22, 22)])) {
[self registerForDraggedTypes:[NSArray arrayWithObject:NSFilenamesPboardType]];
}
return self;
}
- (void)dealloc {
[image release];
[alternateImage release];
[super dealloc];
}
- (void)setDelegate:(id)theDelegate {
delegate = theDelegate;
}
- (id<MGMMenuItemDelegate>)delegate {
return delegate;
}
- (void)setImage:(NSImage *)theImage {
[image release];
image = [theImage copy];
[self display];
}
- (NSImage *)image {
return image;
}
- (void)setAlternateImage:(NSImage *)theImage {
[alternateImage release];
alternateImage = [theImage copy];
}
- (NSImage *)alternateImage {
return alternateImage;
}
- (void)drawRect:(NSRect)theRect {
NSImage *displayImage = image;
if (isHighlighted) {
NSBezierPath *path = [NSBezierPath bezierPathWithRect:theRect];
[[NSColor selectedMenuItemColor] set];
[path fill];
displayImage = alternateImage;
}
[displayImage drawInRect:NSMakeRect((22-[image size].width)/2, (22-[image size].height)/2, [image size].width, [image size].height) fromRect:NSZeroRect operation:NSCompositeSourceOver fraction:1.0];
}
- (void)mouseDown:(NSEvent *)theEvent {
isHighlighted = YES;
[self display];
if ([delegate respondsToSelector:@selector(menuClicked:)]) [delegate menuClicked:self];
isHighlighted = NO;
[self display];
}
- (NSDragOperation)draggingEntered:(id <NSDraggingInfo>)sender {
if ([[[sender draggingPasteboard] types] containsObject:NSFilenamesPboardType]) {
if ([delegate respondsToSelector:@selector(menuDraggingEntered:)]) [delegate menuDraggingEntered:self];
return NSDragOperationEvery;
}
return NSDragOperationNone;
}
- (void)draggingExited:(id <NSDraggingInfo>)sender {
if ([delegate respondsToSelector:@selector(menuDraggingExited:)]) [delegate menuDraggingExited:self];
}
- (BOOL)performDragOperation:(id <NSDraggingInfo>)sender {
NSPasteboard *pboard = [sender draggingPasteboard];
if ([delegate respondsToSelector:@selector(menuDraggingExited:)]) [delegate menuDraggingExited:self];
if ([[pboard types] containsObject:NSFilenamesPboardType]) {
NSArray *files = [pboard propertyListForType:NSFilenamesPboardType];
if ([delegate respondsToSelector:@selector(menu:droppedFiles:)]) [delegate menu:self droppedFiles:files];
return YES;
}
return NO;
}
@end