From: Adam M. <ama...@us...> - 2005-08-30 21:42:50
|
Update of /cvsroot/bibdesk/bibdesk In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv31118 Modified Files: Tag: BR_1x BDSKForm.h BDSKForm.m BDSKFormCell.m BibEditor.m BibItem.m Log Message: Add support for displaying local/remote icons in form cells. Needs cleanup that I don't have time for at the moment, but is otherwise functional. - NSImage method needs to be moved to proper category - Declare delegate methods - Figure out how to handle local/remote URLs (see fixme in BibItem) - Implement dragging icons from cells Index: BibEditor.m =================================================================== RCS file: /cvsroot/bibdesk/bibdesk/BibEditor.m,v retrieving revision 1.159.2.71 retrieving revision 1.159.2.72 diff -C2 -d -r1.159.2.71 -r1.159.2.72 *** BibEditor.m 30 Aug 2005 17:44:14 -0000 1.159.2.71 --- BibEditor.m 30 Aug 2005 21:42:38 -0000 1.159.2.72 *************** *** 1676,1679 **** --- 1676,1683 ---- } + - (void)iconClickedInFormCell:(id)cell{ + [[NSWorkspace sharedWorkspace] openURL:[theBib remoteURLForField:[cell title]]]; + } + - (BOOL)formCellHasArrowButton:(id)cell{ return ([[theBib valueOfField:[cell title]] isInherited] || *************** *** 1681,1684 **** --- 1685,1694 ---- } + - (BOOL)formCellHasFileIcon:(id)cell{ + NSString *title = [cell title]; + return ([[[OFPreferenceWrapper sharedPreferenceWrapper] stringArrayForKey:BDSKLocalFileFieldsKey] containsObject:title] || + [[[OFPreferenceWrapper sharedPreferenceWrapper] stringArrayForKey:BDSKRemoteURLFieldsKey] containsObject:title]); + } + #pragma mark dragging delegate methods Index: BDSKForm.m =================================================================== RCS file: /cvsroot/bibdesk/bibdesk/Attic/BDSKForm.m,v retrieving revision 1.1.4.6 retrieving revision 1.1.4.7 diff -C2 -d -r1.1.4.6 -r1.1.4.7 *** BDSKForm.m 30 Aug 2005 13:55:31 -0000 1.1.4.6 --- BDSKForm.m 30 Aug 2005 21:42:38 -0000 1.1.4.7 *************** *** 95,100 **** break; case NSLeftMouseUp: ! if (isInside && [[self delegate] respondsToSelector:@selector(arrowClickedInFormCell:)]) ! [[self delegate] arrowClickedInFormCell:cell]; [cell setButtonHighlighted:NO]; keepOn = NO; --- 95,104 ---- break; case NSLeftMouseUp: ! if (isInside){ ! if([cell hasArrowButton] && [[self delegate] respondsToSelector:@selector(arrowClickedInFormCell:)]) ! [[self delegate] arrowClickedInFormCell:cell]; ! if([cell hasFileIcon] && [[self delegate] respondsToSelector:@selector(iconClickedInFormCell:)]) ! [[self delegate] iconClickedInFormCell:cell]; ! } [cell setButtonHighlighted:NO]; keepOn = NO; *************** *** 277,287 **** if(usingButton){ // see if there is an arrow button ! if([[self delegate] respondsToSelector:@selector(formCellHasArrowButton:)] && ! [[self delegate] formCellHasArrowButton:cell]){ NSRect aRect = [self cellFrameAtRow:row column:column]; // check if point is in the button rect if( NSMouseInRect(point, [cell buttonRectForBounds:aRect], [self isFlipped]) ) return cell; ! } // there is no button, or point was outside its rect return nil; --- 281,293 ---- if(usingButton){ // see if there is an arrow button ! if( ([[self delegate] respondsToSelector:@selector(formCellHasArrowButton:)] && ! [[self delegate] formCellHasArrowButton:cell]) || ! ([[self delegate] respondsToSelector:@selector(formCellHasFileIcon:)] && ! [[self delegate] formCellHasFileIcon:cell]) ){ NSRect aRect = [self cellFrameAtRow:row column:column]; // check if point is in the button rect if( NSMouseInRect(point, [cell buttonRectForBounds:aRect], [self isFlipped]) ) return cell; ! } // there is no button, or point was outside its rect return nil; Index: BibItem.m =================================================================== RCS file: /cvsroot/bibdesk/bibdesk/BibItem.m,v retrieving revision 1.221.2.30 retrieving revision 1.221.2.31 diff -C2 -d -r1.221.2.30 -r1.221.2.31 *** BibItem.m 29 Aug 2005 15:00:20 -0000 1.221.2.30 --- BibItem.m 30 Aug 2005 21:42:38 -0000 1.221.2.31 *************** *** 1539,1542 **** --- 1539,1543 ---- // we need to validate URL strings, as some doi URL's contain characters that need to be escaped + #warning FIXME adds %25 to existing %20 urlString = CFURLCreateStringByAddingPercentEscapes(CFAllocatorGetDefault(), urlString, NULL, NULL, kCFStringEncodingUTF8); Index: BDSKForm.h =================================================================== RCS file: /cvsroot/bibdesk/bibdesk/Attic/BDSKForm.h,v retrieving revision 1.1.4.5 retrieving revision 1.1.4.6 diff -C2 -d -r1.1.4.5 -r1.1.4.6 *** BDSKForm.h 30 Aug 2005 13:39:44 -0000 1.1.4.5 --- BDSKForm.h 30 Aug 2005 21:42:37 -0000 1.1.4.6 *************** *** 68,71 **** --- 68,72 ---- - (void)arrowClickedInFormCell:(id)aCell; - (BOOL)formCellHasArrowButton:(id)aCell; + - (BOOL)formCellHasFileIcon:(id)cell; - (BOOL)control:(NSControl *)control textShouldStartEditing:(NSText *)fieldEditor; - (BOOL)canReceiveDrag:(id <NSDraggingInfo>)sender forFormCell:(id)aCell; Index: BDSKFormCell.m =================================================================== RCS file: /cvsroot/bibdesk/bibdesk/Attic/BDSKFormCell.m,v retrieving revision 1.1.4.6 retrieving revision 1.1.4.7 diff -C2 -d -r1.1.4.6 -r1.1.4.7 *** BDSKFormCell.m 14 Aug 2005 16:36:50 -0000 1.1.4.6 --- BDSKFormCell.m 30 Aug 2005 21:42:38 -0000 1.1.4.7 *************** *** 41,46 **** --- 41,53 ---- #import "BDSKComplexString.h" + static Class BDSKFormCellClass = Nil; + @implementation BDSKFormCell + + (void)initialize{ + if(BDSKFormCellClass == Nil) + BDSKFormCellClass = NSClassFromString(@"BDSKFormCell"); + } + + (NSImage *)arrowImage{ static NSImage *arrowImage = nil; *************** *** 84,87 **** --- 91,103 ---- } + - (BOOL)hasFileIcon{ + id delegate = [(BDSKForm *)[self controlView] delegate]; + if([[self stringValue] isEqualToString:@""]) + return NO; + if([delegate respondsToSelector:@selector(formCellHasFileIcon:)]) + return [delegate formCellHasFileIcon:self]; + return NO; + } + # pragma mark Drawing methods *************** *** 89,94 **** NSRect buttonRect = NSZeroRect; ! if([self hasArrowButton]){ ! NSSize size = [[[self class] arrowImage] size]; buttonRect.size = size; buttonRect.origin.x = NSMaxX(theRect) - size.width - 3; --- 105,110 ---- NSRect buttonRect = NSZeroRect; ! if([self hasArrowButton] || [self hasFileIcon]){ ! NSSize size = [[BDSKFormCellClass arrowImage] size]; buttonRect.size = size; buttonRect.origin.x = NSMaxX(theRect) - size.width - 3; *************** *** 112,117 **** NSRect rect = [super drawingRectForBounds:theRect]; ! if([self hasArrowButton]){ ! NSSize size = [[[self class] arrowImage] size]; rect.size.width -= NSMaxX(rect) - NSMaxX(theRect) + size.width + 4; } --- 128,133 ---- NSRect rect = [super drawingRectForBounds:theRect]; ! if([self hasArrowButton] || [self hasFileIcon]){ ! NSSize size = [[BDSKFormCellClass arrowImage] size]; rect.size.width -= NSMaxX(rect) - NSMaxX(theRect) + size.width + 4; } *************** *** 125,139 **** [super drawWithFrame:cellFrame inView:controlView]; - if(![self hasArrowButton]) - return; - // get the correct arrow image from the class NSImage *buttonImage; ! if(buttonHighlighted) ! buttonImage = [[self class] arrowPressedImage]; ! else ! buttonImage = [[self class] arrowImage]; - NSRect buttonRect = [self buttonRectForBounds:cellFrame]; NSPoint thePoint = buttonRect.origin; if([controlView isFlipped]) --- 141,167 ---- [super drawWithFrame:cellFrame inView:controlView]; // get the correct arrow image from the class NSImage *buttonImage; ! NSRect buttonRect = [self buttonRectForBounds:cellFrame]; ! ! if([self hasArrowButton]){ ! if(buttonHighlighted) ! buttonImage = [BDSKFormCellClass arrowPressedImage]; ! else ! buttonImage = [BDSKFormCellClass arrowImage]; ! } else if(![self hasFileIcon]){ ! return; ! } else { ! NSURL *fileURL = [[NSURL alloc] initWithString:[self stringValue]]; ! if([fileURL isFileURL]) ! buttonImage = [NSImage imageForFile:[fileURL path]]; ! else ! buttonImage = [NSImage imageForFileType:@"webloc"]; ! [fileURL release]; ! [buttonImage setSize:buttonRect.size]; ! if(buttonHighlighted) ! buttonImage = [buttonImage highlightedImage]; ! } NSPoint thePoint = buttonRect.origin; if([controlView isFlipped]) *************** *** 170,171 **** --- 198,221 ---- @end + + @interface NSImage (Highlighting) + - (NSImage *)highlightedImage; + @end + + @implementation NSImage (Highlighting) + + - (NSImage *)highlightedImage{ + NSSize iconSize = [self size]; + NSRect iconRect = {NSZeroPoint, iconSize}; + NSImage *newImage = [[NSImage alloc] initWithSize:iconSize]; + + [newImage lockFocus]; + [self drawInRect:iconRect fromRect:NSZeroRect operation:NSCompositeCopy fraction:1.0]; + [[[NSColor blackColor] colorWithAlphaComponent:0.3] set]; + NSRectFillUsingOperation(iconRect, NSCompositeSourceAtop); + [newImage unlockFocus]; + + return [newImage autorelease]; + } + + @end |