Revision: 2605 http://skim-app.svn.sourceforge.net/skim-app/?rev=2605&view=rev Author: hofman Date: 2007-08-05 09:45:53 -0700 (Sun, 05 Aug 2007)
Log Message: ----------- Add new toolbar item to add new notes in a single segmentedControl. Add contextual menus for thumbnail table views. Validate custom menu items for those tables. Hard code the superclass for checking wether super responds to a selector, as the class of super is implicitly also hard coded. Otherwise it may check the wrong (sub)class. Modified Paths: -------------- trunk/BDSKZoomablePDFView.m trunk/Dutch.lproj/Localizable.strings trunk/Dutch.lproj/MainWindow.nib/classes.nib trunk/Dutch.lproj/MainWindow.nib/data.dependency trunk/Dutch.lproj/MainWindow.nib/info.nib trunk/Dutch.lproj/MainWindow.nib/keyedobjects.nib trunk/Dutch.lproj/NoteWindow.nib/info.nib trunk/Dutch.lproj/NoteWindow.nib/keyedobjects.nib trunk/English.lproj/MainWindow.nib/classes.nib trunk/English.lproj/MainWindow.nib/info.nib trunk/English.lproj/MainWindow.nib/keyedobjects.nib trunk/French.lproj/Localizable.strings trunk/French.lproj/MainWindow.nib/classes.nib trunk/French.lproj/MainWindow.nib/info.nib trunk/French.lproj/MainWindow.nib/keyedobjects.nib trunk/Italian.lproj/Localizable.strings trunk/Italian.lproj/MainWindow.nib/classes.nib trunk/Italian.lproj/MainWindow.nib/info.nib trunk/Italian.lproj/MainWindow.nib/keyedobjects.nib trunk/NSImage_SKExtensions.m trunk/SKApplication.m trunk/SKMainWindowController.h trunk/SKMainWindowController.m trunk/SKPDFView.m trunk/SKThumbnailTableView.h trunk/SKThumbnailTableView.m Modified: trunk/BDSKZoomablePDFView.m =================================================================== --- trunk/BDSKZoomablePDFView.m 2007-08-05 12:58:57 UTC (rev 2604) +++ trunk/BDSKZoomablePDFView.m 2007-08-05 16:45:53 UTC (rev 2605) @@ -88,7 +88,7 @@ id document = [[[self window] windowController] document]; if ([document respondsToSelector:_cmd]) [document printDocument:sender]; - else if ([[self superclass] instancesRespondToSelector:_cmd]) + else if ([PDFView instancesRespondToSelector:_cmd]) [(id)super printDocument:sender]; } Modified: trunk/Dutch.lproj/Localizable.strings =================================================================== (Binary files differ) Modified: trunk/Dutch.lproj/MainWindow.nib/classes.nib =================================================================== --- trunk/Dutch.lproj/MainWindow.nib/classes.nib 2007-08-05 12:58:57 UTC (rev 2604) +++ trunk/Dutch.lproj/MainWindow.nib/classes.nib 2007-08-05 16:45:53 UTC (rev 2605) @@ -134,6 +134,7 @@ leftSideGradientView = BDSKGradientView; markupPopUpButton = BDSKImagePopUpButton; noteArrayController = NSArrayController; + noteButton = NSSegmentedControl; noteOutlineView = SKNoteOutlineView; notePopUpButton = BDSKImagePopUpButton; noteSearchField = NSSearchField; Modified: trunk/Dutch.lproj/MainWindow.nib/data.dependency =================================================================== --- trunk/Dutch.lproj/MainWindow.nib/data.dependency 2007-08-05 12:58:57 UTC (rev 2604) +++ trunk/Dutch.lproj/MainWindow.nib/data.dependency 2007-08-05 16:45:53 UTC (rev 2605) @@ -4,6 +4,7 @@ <dict> <key>IBPaletteDependency</key> <array> + <string>Controllers</string> <string>PDFKit</string> </array> </dict> Modified: trunk/Dutch.lproj/MainWindow.nib/info.nib =================================================================== --- trunk/Dutch.lproj/MainWindow.nib/info.nib 2007-08-05 12:58:57 UTC (rev 2604) +++ trunk/Dutch.lproj/MainWindow.nib/info.nib 2007-08-05 16:45:53 UTC (rev 2605) @@ -7,7 +7,7 @@ <key>IBEditorPositions</key> <dict> <key>168</key> - <string>601 521 237 239 0 0 1440 938 </string> + <string>601 495 237 265 0 0 1440 938 </string> <key>224</key> <string>610 420 220 442 0 0 1440 938 </string> <key>256</key> @@ -29,11 +29,6 @@ <array> <integer>208</integer> </array> - <key>IBOpenObjects</key> - <array> - <integer>687</integer> - <integer>694</integer> - </array> <key>IBSystem Version</key> <string>8R218</string> </dict> Modified: trunk/Dutch.lproj/MainWindow.nib/keyedobjects.nib =================================================================== (Binary files differ) Modified: trunk/Dutch.lproj/NoteWindow.nib/info.nib =================================================================== --- trunk/Dutch.lproj/NoteWindow.nib/info.nib 2007-08-05 12:58:57 UTC (rev 2604) +++ trunk/Dutch.lproj/NoteWindow.nib/info.nib 2007-08-05 16:45:53 UTC (rev 2605) @@ -6,10 +6,6 @@ <string>69 58 356 240 0 0 1440 938 </string> <key>IBFramework Version</key> <string>446.1</string> - <key>IBOpenObjects</key> - <array> - <integer>7</integer> - </array> <key>IBSystem Version</key> <string>8R218</string> </dict> Modified: trunk/Dutch.lproj/NoteWindow.nib/keyedobjects.nib =================================================================== (Binary files differ) Modified: trunk/English.lproj/MainWindow.nib/classes.nib =================================================================== --- trunk/English.lproj/MainWindow.nib/classes.nib 2007-08-05 12:58:57 UTC (rev 2604) +++ trunk/English.lproj/MainWindow.nib/classes.nib 2007-08-05 16:45:53 UTC (rev 2605) @@ -134,6 +134,7 @@ leftSideGradientView = BDSKGradientView; markupPopUpButton = BDSKImagePopUpButton; noteArrayController = NSArrayController; + noteButton = NSSegmentedControl; noteOutlineView = SKNoteOutlineView; notePopUpButton = BDSKImagePopUpButton; noteSearchField = NSSearchField; Modified: trunk/English.lproj/MainWindow.nib/info.nib =================================================================== --- trunk/English.lproj/MainWindow.nib/info.nib 2007-08-05 12:58:57 UTC (rev 2604) +++ trunk/English.lproj/MainWindow.nib/info.nib 2007-08-05 16:45:53 UTC (rev 2605) @@ -7,7 +7,7 @@ <key>IBEditorPositions</key> <dict> <key>168</key> - <string>601 521 237 239 0 0 1440 938 </string> + <string>601 495 237 265 0 0 1440 938 </string> <key>224</key> <string>610 420 220 442 0 0 1440 938 </string> <key>256</key> @@ -31,20 +31,20 @@ </array> <key>IBOpenObjects</key> <array> - <integer>553</integer> - <integer>208</integer> - <integer>687</integer> + <integer>314</integer> + <integer>633</integer> <integer>511</integer> - <integer>585</integer> - <integer>633</integer> + <integer>539</integer> + <integer>168</integer> <integer>256</integer> <integer>5</integer> - <integer>314</integer> <integer>502</integer> + <integer>687</integer> + <integer>224</integer> + <integer>585</integer> <integer>694</integer> - <integer>168</integer> - <integer>224</integer> - <integer>539</integer> + <integer>208</integer> + <integer>553</integer> </array> <key>IBSystem Version</key> <string>8R218</string> Modified: trunk/English.lproj/MainWindow.nib/keyedobjects.nib =================================================================== (Binary files differ) Modified: trunk/French.lproj/Localizable.strings =================================================================== (Binary files differ) Modified: trunk/French.lproj/MainWindow.nib/classes.nib =================================================================== --- trunk/French.lproj/MainWindow.nib/classes.nib 2007-08-05 12:58:57 UTC (rev 2604) +++ trunk/French.lproj/MainWindow.nib/classes.nib 2007-08-05 16:45:53 UTC (rev 2605) @@ -134,6 +134,7 @@ leftSideGradientView = BDSKGradientView; markupPopUpButton = BDSKImagePopUpButton; noteArrayController = NSArrayController; + noteButton = NSSegmentedControl; noteOutlineView = SKNoteOutlineView; notePopUpButton = BDSKImagePopUpButton; noteSearchField = NSSearchField; Modified: trunk/French.lproj/MainWindow.nib/info.nib =================================================================== --- trunk/French.lproj/MainWindow.nib/info.nib 2007-08-05 12:58:57 UTC (rev 2604) +++ trunk/French.lproj/MainWindow.nib/info.nib 2007-08-05 16:45:53 UTC (rev 2605) @@ -7,7 +7,7 @@ <key>IBEditorPositions</key> <dict> <key>168</key> - <string>601 521 237 239 0 0 1440 938 </string> + <string>601 493 237 267 0 0 1440 938 </string> <key>224</key> <string>610 420 220 442 0 0 1440 938 </string> <key>256</key> @@ -31,16 +31,16 @@ </array> <key>IBOpenObjects</key> <array> - <integer>256</integer> + <integer>511</integer> + <integer>168</integer> <integer>314</integer> + <integer>5</integer> <integer>661</integer> + <integer>256</integer> <integer>660</integer> + <integer>633</integer> + <integer>502</integer> <integer>224</integer> - <integer>5</integer> - <integer>511</integer> - <integer>168</integer> - <integer>502</integer> - <integer>633</integer> </array> <key>IBSystem Version</key> <string>8R218</string> Modified: trunk/French.lproj/MainWindow.nib/keyedobjects.nib =================================================================== (Binary files differ) Modified: trunk/Italian.lproj/Localizable.strings =================================================================== (Binary files differ) Modified: trunk/Italian.lproj/MainWindow.nib/classes.nib =================================================================== --- trunk/Italian.lproj/MainWindow.nib/classes.nib 2007-08-05 12:58:57 UTC (rev 2604) +++ trunk/Italian.lproj/MainWindow.nib/classes.nib 2007-08-05 16:45:53 UTC (rev 2605) @@ -134,6 +134,7 @@ leftSideGradientView = BDSKGradientView; markupPopUpButton = BDSKImagePopUpButton; noteArrayController = NSArrayController; + noteButton = NSSegmentedControl; noteOutlineView = SKNoteOutlineView; notePopUpButton = BDSKImagePopUpButton; noteSearchField = NSSearchField; Modified: trunk/Italian.lproj/MainWindow.nib/info.nib =================================================================== --- trunk/Italian.lproj/MainWindow.nib/info.nib 2007-08-05 12:58:57 UTC (rev 2604) +++ trunk/Italian.lproj/MainWindow.nib/info.nib 2007-08-05 16:45:53 UTC (rev 2605) @@ -7,7 +7,7 @@ <key>IBEditorPositions</key> <dict> <key>168</key> - <string>601 521 237 239 0 0 1440 938 </string> + <string>601 493 237 267 0 0 1440 938 </string> <key>224</key> <string>610 420 220 442 0 0 1440 938 </string> <key>256</key> @@ -31,19 +31,19 @@ </array> <key>IBOpenObjects</key> <array> + <integer>511</integer> + <integer>314</integer> + <integer>208</integer> <integer>224</integer> + <integer>502</integer> + <integer>256</integer> <integer>628</integer> - <integer>314</integer> - <integer>502</integer> + <integer>676</integer> <integer>677</integer> - <integer>676</integer> + <integer>553</integer> <integer>168</integer> - <integer>511</integer> + <integer>539</integer> <integer>5</integer> - <integer>539</integer> - <integer>553</integer> - <integer>208</integer> - <integer>256</integer> </array> <key>IBSystem Version</key> <string>8R218</string> Modified: trunk/Italian.lproj/MainWindow.nib/keyedobjects.nib =================================================================== (Binary files differ) Modified: trunk/NSImage_SKExtensions.m =================================================================== --- trunk/NSImage_SKExtensions.m 2007-08-05 12:58:57 UTC (rev 2604) +++ trunk/NSImage_SKExtensions.m 2007-08-05 16:45:53 UTC (rev 2605) @@ -41,6 +41,32 @@ @implementation NSImage (SKExtensions) +- (NSImage *)createMenuAdornImage { + NSBezierPath *arrowPath = [NSBezierPath bezierPath]; + [arrowPath moveToPoint:NSMakePoint(20.5,4.0)]; + [arrowPath lineToPoint:NSMakePoint(18.0,7.0)]; + [arrowPath lineToPoint:NSMakePoint(23.0,7.0)]; + [arrowPath closePath]; + + NSImage *image = [[NSImage alloc] initWithSize:NSMakeSize(25.0, 13.0)]; + [image lockFocus]; + [self compositeToPoint:NSMakePoint(2.0, 1.0) operation:NSCompositeCopy]; + [[NSColor colorWithCalibratedWhite:0.0 alpha:0.85] setFill]; + [arrowPath fill]; + [image unlockFocus]; + + return image; +} + +- (NSImage *)createLargeNoteAdornImage { + NSImage *image = [[NSImage alloc] initWithSize:NSMakeSize(19.0, 11.0)]; + [image lockFocus]; + [self compositeToPoint:NSMakePoint(2.0, 0.0) operation:NSCompositeCopy]; + [image unlockFocus]; + + return image; +} + + (void)makeAdornImages { static NSImage *backAdornImage = nil; static NSImage *forwardAdornImage = nil; @@ -68,6 +94,14 @@ static NSImage *underlineNoteAdornImage = nil; static NSImage *strikeOutNoteAdornImage = nil; static NSImage *lineNoteAdornImage = nil; + static NSImage *textNoteAdorn2Image = nil; + static NSImage *anchoredNoteAdorn2Image = nil; + static NSImage *circleNoteAdorn2Image = nil; + static NSImage *squareNoteAdorn2Image = nil; + static NSImage *highlightNoteAdorn2Image = nil; + static NSImage *underlineNoteAdorn2Image = nil; + static NSImage *strikeOutNoteAdorn2Image = nil; + static NSImage *lineNoteAdorn2Image = nil; NSShadow *shadow = [[NSShadow alloc] init]; [shadow setShadowBlurRadius:0.0]; @@ -78,13 +112,7 @@ NSSize size = NSMakeSize(25.0, 13.0); NSSize noteSize = NSMakeSize(15.0, 11.0); - NSPoint point = NSMakePoint(2.0, 1.0); NSBezierPath *path; - NSBezierPath *arrowPath = [NSBezierPath bezierPath]; - [arrowPath moveToPoint:NSMakePoint(20.5,4.0)]; - [arrowPath lineToPoint:NSMakePoint(18.0,7.0)]; - [arrowPath lineToPoint:NSMakePoint(23.0,7.0)]; - [arrowPath closePath]; backAdornImage = [[NSImage alloc] initWithSize:size]; [backAdornImage lockFocus]; @@ -347,13 +375,10 @@ [textNoteAdornImage unlockFocus]; [textNoteAdornImage setName:@"TextNoteAdorn"]; - textNoteToolAdornImage = [[NSImage alloc] initWithSize:size]; - [textNoteToolAdornImage lockFocus]; - [[NSGraphicsContext currentContext] saveGraphicsState]; - [textNoteAdornImage compositeToPoint:point operation:NSCompositeCopy]; - [color setFill]; - [arrowPath fill]; - [textNoteToolAdornImage unlockFocus]; + textNoteAdorn2Image = [textNoteAdornImage createLargeNoteAdornImage]; + [textNoteAdorn2Image setName:@"TextNoteAdorn2"]; + + textNoteToolAdornImage = [textNoteAdornImage createMenuAdornImage]; [textNoteToolAdornImage setName:@"TextNoteToolAdorn"]; anchoredNoteAdornImage = [[NSImage alloc] initWithSize:noteSize]; @@ -380,12 +405,10 @@ [anchoredNoteAdornImage unlockFocus]; [anchoredNoteAdornImage setName:@"AnchoredNoteAdorn"]; - anchoredNoteToolAdornImage = [[NSImage alloc] initWithSize:size]; - [anchoredNoteToolAdornImage lockFocus]; - [anchoredNoteAdornImage compositeToPoint:point operation:NSCompositeCopy]; - [shadow set]; - [arrowPath fill]; - [anchoredNoteToolAdornImage unlockFocus]; + anchoredNoteAdorn2Image = [anchoredNoteAdornImage createLargeNoteAdornImage]; + [anchoredNoteAdorn2Image setName:@"AnchoredNoteAdorn2"]; + + anchoredNoteToolAdornImage = [anchoredNoteAdornImage createMenuAdornImage]; [anchoredNoteToolAdornImage setName:@"AnchoredNoteToolAdorn"]; circleNoteAdornImage = [[NSImage alloc] initWithSize:noteSize]; @@ -410,12 +433,10 @@ [circleNoteAdornImage unlockFocus]; [circleNoteAdornImage setName:@"CircleNoteAdorn"]; - circleNoteToolAdornImage = [[NSImage alloc] initWithSize:size]; - [circleNoteToolAdornImage lockFocus]; - [circleNoteAdornImage compositeToPoint:point operation:NSCompositeCopy]; - [color setFill]; - [arrowPath fill]; - [circleNoteToolAdornImage unlockFocus]; + circleNoteAdorn2Image = [circleNoteAdornImage createLargeNoteAdornImage]; + [circleNoteAdorn2Image setName:@"CircleNoteAdorn2"]; + + circleNoteToolAdornImage = [circleNoteAdornImage createMenuAdornImage]; [circleNoteToolAdornImage setName:@"CircleNoteToolAdorn"]; squareNoteAdornImage = [[NSImage alloc] initWithSize:noteSize]; @@ -432,12 +453,10 @@ [squareNoteAdornImage unlockFocus]; [squareNoteAdornImage setName:@"SquareNoteAdorn"]; - squareNoteToolAdornImage = [[NSImage alloc] initWithSize:size]; - [squareNoteToolAdornImage lockFocus]; - [squareNoteAdornImage compositeToPoint:point operation:NSCompositeCopy]; - [color setFill]; - [arrowPath fill]; - [squareNoteToolAdornImage unlockFocus]; + squareNoteAdorn2Image = [squareNoteAdornImage createLargeNoteAdornImage]; + [squareNoteAdorn2Image setName:@"SquareNoteAdorn2"]; + + squareNoteToolAdornImage = [squareNoteAdornImage createMenuAdornImage]; [squareNoteToolAdornImage setName:@"SquareNoteToolAdorn"]; highlightNoteAdornImage = [[NSImage alloc] initWithSize:noteSize]; @@ -458,12 +477,10 @@ [highlightNoteAdornImage unlockFocus]; [highlightNoteAdornImage setName:@"HighlightNoteAdorn"]; - highlightNoteToolAdornImage = [[NSImage alloc] initWithSize:size]; - [highlightNoteToolAdornImage lockFocus]; - [highlightNoteAdornImage compositeToPoint:point operation:NSCompositeCopy]; - [color setFill]; - [arrowPath fill]; - [highlightNoteToolAdornImage unlockFocus]; + highlightNoteAdorn2Image = [highlightNoteAdornImage createLargeNoteAdornImage]; + [highlightNoteAdorn2Image setName:@"HighlightNoteAdorn2"]; + + highlightNoteToolAdornImage = [highlightNoteAdornImage createMenuAdornImage]; [highlightNoteToolAdornImage setName:@"HighlightNoteToolAdorn"]; underlineNoteAdornImage = [[NSImage alloc] initWithSize:noteSize]; @@ -479,12 +496,10 @@ [underlineNoteAdornImage unlockFocus]; [underlineNoteAdornImage setName:@"UnderlineNoteAdorn"]; - underlineNoteToolAdornImage = [[NSImage alloc] initWithSize:size]; - [underlineNoteToolAdornImage lockFocus]; - [underlineNoteAdornImage compositeToPoint:point operation:NSCompositeCopy]; - [color setFill]; - [arrowPath fill]; - [underlineNoteToolAdornImage unlockFocus]; + underlineNoteAdorn2Image = [underlineNoteAdornImage createLargeNoteAdornImage]; + [underlineNoteAdorn2Image setName:@"UnderlineNoteAdorn2"]; + + underlineNoteToolAdornImage = [underlineNoteAdornImage createMenuAdornImage]; [underlineNoteToolAdornImage setName:@"UnderlineNoteToolAdorn"]; strikeOutNoteAdornImage = [[NSImage alloc] initWithSize:noteSize]; @@ -500,12 +515,10 @@ [strikeOutNoteAdornImage unlockFocus]; [strikeOutNoteAdornImage setName:@"StrikeOutNoteAdorn"]; - strikeOutNoteToolAdornImage = [[NSImage alloc] initWithSize:size]; - [strikeOutNoteToolAdornImage lockFocus]; - [strikeOutNoteAdornImage compositeToPoint:point operation:NSCompositeCopy]; - [color setFill]; - [arrowPath fill]; - [strikeOutNoteToolAdornImage unlockFocus]; + strikeOutNoteAdorn2Image = [strikeOutNoteAdornImage createLargeNoteAdornImage]; + [strikeOutNoteAdorn2Image setName:@"StrikeOutNoteAdorn2"]; + + strikeOutNoteToolAdornImage = [strikeOutNoteAdornImage createMenuAdornImage]; [strikeOutNoteToolAdornImage setName:@"StrikeOutNoteToolAdorn"]; lineNoteAdornImage = [[NSImage alloc] initWithSize:noteSize]; @@ -523,12 +536,10 @@ [lineNoteAdornImage unlockFocus]; [lineNoteAdornImage setName:@"LineNoteAdorn"]; - lineNoteToolAdornImage = [[NSImage alloc] initWithSize:size]; - [lineNoteToolAdornImage lockFocus]; - [lineNoteAdornImage compositeToPoint:point operation:NSCompositeCopy]; - [color setFill]; - [arrowPath fill]; - [lineNoteToolAdornImage unlockFocus]; + lineNoteAdorn2Image = [lineNoteAdornImage createLargeNoteAdornImage]; + [lineNoteAdorn2Image setName:@"LineNoteAdorn2"]; + + lineNoteToolAdornImage = [lineNoteAdornImage createMenuAdornImage]; [lineNoteToolAdornImage setName:@"LineNoteToolAdorn"]; [shadow release]; Modified: trunk/SKApplication.m =================================================================== --- trunk/SKApplication.m 2007-08-05 12:58:57 UTC (rev 2604) +++ trunk/SKApplication.m 2007-08-05 16:45:53 UTC (rev 2605) @@ -103,7 +103,7 @@ id source = [args objectForKey:@"source"]; if (lineNumber == nil || ([file isKindOfClass:[NSArray class]] && [file count] != 1)) { - if ([[self superclass] instancesRespondToSelector:_cmd]) + if ([NSApplication instancesRespondToSelector:_cmd]) [super handleOpenScriptCommand:command]; return; } Modified: trunk/SKMainWindowController.h =================================================================== --- trunk/SKMainWindowController.h 2007-08-05 12:58:57 UTC (rev 2604) +++ trunk/SKMainWindowController.h 2007-08-05 16:45:53 UTC (rev 2605) @@ -150,6 +150,7 @@ IBOutlet BDSKImagePopUpButton *notePopUpButton; IBOutlet BDSKImagePopUpButton *circlePopUpButton; IBOutlet BDSKImagePopUpButton *markupPopUpButton; + IBOutlet NSSegmentedControl *noteButton; IBOutlet SKColorSwatch *colorSwatch; NSMutableDictionary *toolbarItems; NSToolbarItem *colorSwatchToolbarItem; Modified: trunk/SKMainWindowController.m =================================================================== --- trunk/SKMainWindowController.m 2007-08-05 12:58:57 UTC (rev 2604) +++ trunk/SKMainWindowController.m 2007-08-05 16:45:53 UTC (rev 2605) @@ -105,6 +105,7 @@ static NSString *SKDocumentToolbarNewCircleNoteItemIdentifier = @"SKDocumentToolbarNewCircleNoteItemIdentifier"; static NSString *SKDocumentToolbarNewMarkupItemIdentifier = @"SKDocumentToolbarNewMarkupItemIdentifier"; static NSString *SKDocumentToolbarNewLineItemIdentifier = @"SKDocumentToolbarNewLineItemIdentifier"; +static NSString *SKDocumentToolbarNewNotesItemIdentifier = @"SKDocumentToolbarNewNotesItemIdentifier"; static NSString *SKDocumentToolbarInfoItemIdentifier = @"SKDocumentToolbarInfoItemIdentifier"; static NSString *SKDocumentToolbarToolModeItemIdentifier = @"SKDocumentToolbarToolModeItemIdentifier"; static NSString *SKDocumentToolbarDisplayBoxItemIdentifier = @"SKDocumentToolbarDisplayBoxItemIdentifier"; @@ -1118,7 +1119,8 @@ - (IBAction)createNewNote:(id)sender{ if ([pdfView hideNotes] == NO) { - [pdfView addAnnotationFromSelectionWithType:[sender tag]]; + int type = [sender respondsToSelector:@selector(selectedSegment)] ? [sender selectedSegment] : [sender tag]; + [pdfView addAnnotationFromSelectionWithType:type]; } else NSBeep(); } @@ -3339,6 +3341,13 @@ } } +- (BOOL)tableView:(NSTableView *)tv canDeleteRowsWithIndexes:(NSIndexSet *)rowIndexes { + if ([tv isEqual:snapshotTableView]) { + return [rowIndexes count] > 0; + } + return NO; +} + - (void)tableView:(NSTableView *)tv copyRowsWithIndexes:(NSIndexSet *)rowIndexes { if ([tv isEqual:thumbnailTableView]) { unsigned int index = [rowIndexes firstIndex]; @@ -3354,6 +3363,13 @@ } } +- (BOOL)tableView:(NSTableView *)tv canCopyRowsWithIndexes:(NSIndexSet *)rowIndexes { + if ([tv isEqual:thumbnailTableView]) { + return [rowIndexes count] > 0; + } + return NO; +} + - (NSArray *)tableViewHighlightedRows:(NSTableView *)tv { if ([tv isEqual:thumbnailTableView]) { return lastViewedPages; @@ -3882,6 +3898,13 @@ [toolbarItems setObject:item forKey:SKDocumentToolbarNewMarkupItemIdentifier]; [item release]; + [markupPopUpButton setShowsMenuWhenIconClicked:NO]; + [[markupPopUpButton cell] setAltersStateOfSelectedItem:YES]; + [[markupPopUpButton cell] setAlwaysUsesFirstItemAsSelected:NO]; + [[markupPopUpButton cell] setUsesItemFromMenu:YES]; + [markupPopUpButton setRefreshesMenu:NO]; + [markupPopUpButton setMenu:menu]; + item = [[SKToolbarItem alloc] initWithItemIdentifier:SKDocumentToolbarNewLineItemIdentifier]; [item setLabels:NSLocalizedString(@"Add Line", @"Toolbar item label")]; [item setToolTip:NSLocalizedString(@"Add New Line", @"Tool tip message")]; @@ -3892,12 +3915,59 @@ [toolbarItems setObject:item forKey:SKDocumentToolbarNewLineItemIdentifier]; [item release]; - [markupPopUpButton setShowsMenuWhenIconClicked:NO]; - [[markupPopUpButton cell] setAltersStateOfSelectedItem:YES]; - [[markupPopUpButton cell] setAlwaysUsesFirstItemAsSelected:NO]; - [[markupPopUpButton cell] setUsesItemFromMenu:YES]; - [markupPopUpButton setRefreshesMenu:NO]; - [markupPopUpButton setMenu:menu]; + menu = [[[NSMenu allocWithZone:[NSMenu menuZone]] initWithTitle:@""] autorelease]; + menuItem = [menu addItemWithTitle:NSLocalizedString(@"Text Note", @"Menu item title") action:@selector(createNewNote:) keyEquivalent:@""]; + [menuItem setTarget:self]; + [menuItem setTag:SKFreeTextNote]; + [menuItem setImage:[NSImage imageNamed:@"TextNoteAdorn"]]; + menuItem = [menu addItemWithTitle:NSLocalizedString(@"Anchored Note", @"Menu item title") action:@selector(createNewNote:) keyEquivalent:@""]; + [menuItem setTarget:self]; + [menuItem setTag:SKAnchoredNote]; + [menuItem setImage:[NSImage imageNamed:@"AnchoredNoteAdorn"]]; + menuItem = [menu addItemWithTitle:NSLocalizedString(@"Circle", @"Menu item title") action:@selector(createNewNote:) keyEquivalent:@""]; + [menuItem setTarget:self]; + [menuItem setTag:SKCircleNote]; + [menuItem setImage:[NSImage imageNamed:@"CircleNoteAdorn"]]; + menuItem = [menu addItemWithTitle:NSLocalizedString(@"Box", @"Menu item title") action:@selector(createNewNote:) keyEquivalent:@""]; + [menuItem setTarget:self]; + [menuItem setTag:SKSquareNote]; + [menuItem setImage:[NSImage imageNamed:@"SquareNoteAdorn"]]; + menuItem = [menu addItemWithTitle:NSLocalizedString(@"Highlight", @"Menu item title") action:@selector(createNewNote:) keyEquivalent:@""]; + [menuItem setTarget:self]; + [menuItem setTag:SKHighlightNote]; + [menuItem setImage:[NSImage imageNamed:@"HighlightNoteAdorn"]]; + menuItem = [menu addItemWithTitle:NSLocalizedString(@"Underline", @"Menu item title") action:@selector(createNewNote:) keyEquivalent:@""]; + [menuItem setTarget:self]; + [menuItem setTag:SKUnderlineNote]; + [menuItem setImage:[NSImage imageNamed:@"UnderlineNoteAdorn"]]; + menuItem = [menu addItemWithTitle:NSLocalizedString(@"Strike Out", @"Menu item title") action:@selector(createNewNote:) keyEquivalent:@""]; + [menuItem setTarget:self]; + [menuItem setTag:SKStrikeOutNote]; + [menuItem setImage:[NSImage imageNamed:@"StrikeOutNoteAdorn"]]; + menuItem = [menu addItemWithTitle:NSLocalizedString(@"Line", @"Menu item title") action:@selector(createNewNote:) keyEquivalent:@""]; + [menuItem setTarget:self]; + [menuItem setTag:SKLineNote]; + [menuItem setImage:[NSImage imageNamed:@"LineNoteAdorn"]]; + menuItem = [[[NSMenuItem allocWithZone:[NSMenu menuZone]] initWithTitle:NSLocalizedString(@"Add Note", @"Toolbar item label") action:NULL keyEquivalent:@""] autorelease]; + [menuItem setSubmenu:menu]; + item = [[SKToolbarItem alloc] initWithItemIdentifier:SKDocumentToolbarNewNotesItemIdentifier]; + [item setLabels:NSLocalizedString(@"Add Note", @"Toolbar item label")]; + [item setToolTip:NSLocalizedString(@"Add New Note", @"Tool tip message")]; + [[noteButton cell] setToolTip:NSLocalizedString(@"Add New Text Note", @"Tool tip message") forSegment:SKFreeTextNote]; + [[noteButton cell] setToolTip:NSLocalizedString(@"Add New Anchored Note", @"Tool tip message") forSegment:SKAnchoredNote]; + [[noteButton cell] setToolTip:NSLocalizedString(@"Add New Circle", @"Tool tip message") forSegment:SKCircleNote]; + [[noteButton cell] setToolTip:NSLocalizedString(@"Add New Box", @"Tool tip message") forSegment:SKSquareNote]; + [[noteButton cell] setToolTip:NSLocalizedString(@"Add New Highlight", @"Tool tip message") forSegment:SKHighlightNote]; + [[noteButton cell] setToolTip:NSLocalizedString(@"Add New Underline", @"Tool tip message") forSegment:SKUnderlineNote]; + [[noteButton cell] setToolTip:NSLocalizedString(@"Add New Strike Out", @"Tool tip message") forSegment:SKStrikeOutNote]; + [[noteButton cell] setToolTip:NSLocalizedString(@"Add New Line", @"Tool tip message") forSegment:SKLineNote]; + frame = [noteButton frame]; + frame.size.height = SEGMENTED_CONTROL_HEIGHT; + [noteButton setFrame:frame]; + [item setViewWithSizes:noteButton]; + [item setMenuFormRepresentation:menuItem]; + [toolbarItems setObject:item forKey:SKDocumentToolbarNewNotesItemIdentifier]; + [item release]; menu = [[[NSMenu allocWithZone:[NSMenu menuZone]] initWithTitle:@""] autorelease]; menuItem = [menu addItemWithTitle:NSLocalizedString(@"Text Tool", @"Menu item title") action:@selector(changeToolMode:) keyEquivalent:@""]; @@ -4143,6 +4213,7 @@ SKDocumentToolbarNewCircleNoteItemIdentifier, SKDocumentToolbarNewMarkupItemIdentifier, SKDocumentToolbarNewLineItemIdentifier, + SKDocumentToolbarNewNotesItemIdentifier, SKDocumentToolbarContentsPaneItemIdentifier, SKDocumentToolbarNotesPaneItemIdentifier, SKDocumentToolbarInfoItemIdentifier, @@ -4185,6 +4256,14 @@ return ([pdfView toolMode] == SKTextToolMode || [pdfView toolMode] == SKNoteToolMode) && [pdfView hideNotes] == NO; } else if ([identifier isEqualToString:SKDocumentToolbarNewMarkupItemIdentifier]) { return ([pdfView toolMode] == SKTextToolMode || [pdfView toolMode] == SKNoteToolMode) && [[[pdfView currentSelection] pages] count] && [pdfView hideNotes] == NO; + } else if ([identifier isEqualToString:SKDocumentToolbarNewNotesItemIdentifier]) { + if (([pdfView toolMode] != SKTextToolMode && [pdfView toolMode] != SKNoteToolMode) || [pdfView hideNotes]) + return NO; + BOOL enabled = [[[pdfView currentSelection] pages] count] > 0; + [noteButton setEnabled:enabled forSegment:SKHighlightNote]; + [noteButton setEnabled:enabled forSegment:SKUnderlineNote]; + [noteButton setEnabled:enabled forSegment:SKStrikeOutNote]; + return YES; } else if ([identifier isEqualToString:SKDocumentToolbarInfoItemIdentifier]) { return YES; } else { Modified: trunk/SKPDFView.m =================================================================== --- trunk/SKPDFView.m 2007-08-05 12:58:57 UTC (rev 2604) +++ trunk/SKPDFView.m 2007-08-05 16:45:53 UTC (rev 2605) @@ -618,7 +618,7 @@ id document = [[[self window] windowController] document]; if ([document respondsToSelector:_cmd]) [document printDocument:sender]; - else if ([[self superclass] instancesRespondToSelector:_cmd]) + else if ([PDFView instancesRespondToSelector:_cmd]) [(id)super printDocument:sender]; } @@ -1404,7 +1404,7 @@ NSString *pboardType = [pboard availableTypeFromArray:[NSArray arrayWithObjects:NSColorPboardType, SKLineStylePboardType, nil]]; if (pboardType) { return [self draggingUpdated:sender]; - } else if ([[self superclass] instancesRespondToSelector:_cmd]) { + } else if ([PDFView instancesRespondToSelector:_cmd]) { dragOp = [super draggingEntered:sender]; } return dragOp; @@ -1442,7 +1442,7 @@ [self setNeedsDisplayForAnnotation:highlightAnnotation]; highlightAnnotation = nil; } - } else if ([[self superclass] instancesRespondToSelector:_cmd]) { + } else if ([PDFView instancesRespondToSelector:_cmd]) { dragOp = [super draggingUpdated:sender]; } return dragOp; @@ -1456,7 +1456,7 @@ [self setNeedsDisplayForAnnotation:highlightAnnotation]; highlightAnnotation = nil; } - } else if ([[self superclass] instancesRespondToSelector:_cmd]) { + } else if ([PDFView instancesRespondToSelector:_cmd]) { [super draggingExited:sender]; } } @@ -1490,7 +1490,7 @@ [self setNeedsDisplayForAnnotation:highlightAnnotation]; highlightAnnotation = nil; } - } else if ([[self superclass] instancesRespondToSelector:_cmd]) { + } else if ([PDFView instancesRespondToSelector:_cmd]) { performedDrag = [super performDragOperation:sender]; } return performedDrag; @@ -1792,7 +1792,7 @@ if (editAnnotation && (command == @selector(insertNewline:) || command == @selector(insertTab:) || command == @selector(insertBacktab:))) { [self endAnnotationEdit:self]; [[self window] makeFirstResponder:self]; - } else if ([[self superclass] instancesRespondToSelector:_cmd]) { + } else if ([PDFView instancesRespondToSelector:_cmd]) { rv = [super control:control textView:textView doCommandBySelector:command]; } return rv; Modified: trunk/SKThumbnailTableView.h =================================================================== --- trunk/SKThumbnailTableView.h 2007-08-05 12:58:57 UTC (rev 2604) +++ trunk/SKThumbnailTableView.h 2007-08-05 16:45:53 UTC (rev 2605) @@ -44,10 +44,12 @@ BOOL isScrolling; } - (BOOL)isScrolling; +- (BOOL)canCopy; @end @interface SKSnapshotTableView : SKThumbnailTableView +- (BOOL)canDelete; @end @@ -59,6 +61,7 @@ @interface NSObject (SKSnapshotTableViewDelegate) - (void)tableView:(NSTableView *)aTableView deleteRowsWithIndexes:(NSIndexSet *)rowIndexes; +- (BOOL)tableView:(NSTableView *)aTableView canDeleteRowsWithIndexes:(NSIndexSet *)rowIndexes; @end @@ -66,4 +69,5 @@ - (NSArray *)tableViewHighlightedRows:(NSTableView *)tableView; - (BOOL)tableView:(NSTableView *)tableView commandSelectRow:(int)rowIndex; - (void)tableView:(NSTableView *)aTableView copyRowsWithIndexes:(NSIndexSet *)rowIndexes; +- (BOOL)tableView:(NSTableView *)aTableView canCopyRowsWithIndexes:(NSIndexSet *)rowIndexes; @end Modified: trunk/SKThumbnailTableView.m =================================================================== --- trunk/SKThumbnailTableView.m 2007-08-05 12:58:57 UTC (rev 2604) +++ trunk/SKThumbnailTableView.m 2007-08-05 16:45:53 UTC (rev 2605) @@ -131,24 +131,73 @@ [super mouseDown:theEvent]; } +- (BOOL)canCopy { + NSIndexSet *indexes = [self selectedRowIndexes]; + return [indexes count] && + [[self delegate] respondsToSelector:@selector(tableView:canCopyRowsWithIndexes:)] && + [[self delegate] respondsToSelector:@selector(tableView:copyRowsWithIndexes:)] && + [[self delegate] tableView:self canCopyRowsWithIndexes:indexes]; +} + - (void)copy:(id)sender { - if ([[self delegate] respondsToSelector:@selector(tableView:copyRowsWithIndexes:)]) + if ([self canCopy]) [[self delegate] tableView:self copyRowsWithIndexes:[self selectedRowIndexes]]; + else + NSBeep(); } +- (void)copyFromContextualMenu:(id)sender { + [[self delegate] tableView:self copyRowsWithIndexes:[sender representedObject]]; +} + +- (NSMenu *)menuForEvent:(NSEvent *)theEvent { + NSMenu *menu = [super menuForEvent:theEvent]; + NSPoint mouseLoc = [self convertPoint:[theEvent locationInWindow] fromView:nil]; + int row = [self rowAtPoint:mouseLoc]; + if (row != -1) { + NSIndexSet *indexes = [NSIndexSet indexSetWithIndex:row]; + if ([[self delegate] respondsToSelector:@selector(tableView:canCopyRowsWithIndexes:)] && + [[self delegate] respondsToSelector:@selector(tableView:copyRowsWithIndexes:)] && + [[self delegate] tableView:self canCopyRowsWithIndexes:indexes]) { + if (menu == nil) + menu = [[[NSMenu allocWithZone:[NSMenu menuZone]] init] autorelease]; + NSMenuItem *item = [menu addItemWithTitle:NSLocalizedString(@"Copy", @"Menu item title") action:@selector(copyFromContextualMenu:) keyEquivalent:@""]; + [item setTarget:self]; + [item setRepresentedObject:indexes]; + } + } + return menu; +} + +- (BOOL)validateMenuItem:(NSMenuItem *)menuItem { + if ([menuItem action] == @selector(copy:)) + return [self canCopy]; + else if ([menuItem action] == @selector(copyFromContextualMenu:)) + return YES; + else if ([NSTableView instancesRespondToSelector:@selector(validateMenuItem:)]) + return [super validateMenuItem:menuItem]; + return YES; +} + @end #pragma mark - @implementation SKSnapshotTableView +- (BOOL)canDelete { + NSIndexSet *indexes = [self selectedRowIndexes]; + return [indexes count] && + [[self delegate] respondsToSelector:@selector(tableView:canDeleteRowsWithIndexes:)] && + [[self delegate] respondsToSelector:@selector(tableView:deleteRowsWithIndexes:)] && + [[self delegate] tableView:self canDeleteRowsWithIndexes:indexes]; +} + - (void)delete:(id)sender { - if ([[self delegate] respondsToSelector:@selector(tableView:deleteRowsWithIndexes:)]) { - if ([self selectedRow] == -1) - NSBeep(); - else - [[self delegate] tableView:self deleteRowsWithIndexes:[self selectedRowIndexes]]; - } + if ([self canDelete]) + [[self delegate] tableView:self deleteRowsWithIndexes:[self selectedRowIndexes]]; + else + NSBeep(); } - (void)keyDown:(NSEvent *)theEvent { @@ -156,12 +205,43 @@ unichar eventChar = [characters length] > 0 ? [characters characterAtIndex:0] : 0; unsigned int modifiers = [theEvent modifierFlags] & NSDeviceIndependentModifierFlagsMask; - if ((eventChar == NSDeleteCharacter || eventChar == NSDeleteFunctionKey) && modifiers == 0) + if ((eventChar == NSDeleteCharacter || eventChar == NSDeleteFunctionKey) && modifiers == 0 && [self canDelete]) [self delete:self]; else [super keyDown:theEvent]; } +- (void)deleteFromContextualMenu:(id)sender { + [[self delegate] tableView:self deleteRowsWithIndexes:[sender representedObject]]; +} + +- (NSMenu *)menuForEvent:(NSEvent *)theEvent { + NSMenu *menu = [super menuForEvent:theEvent]; + NSPoint mouseLoc = [self convertPoint:[theEvent locationInWindow] fromView:nil]; + int row = [self rowAtPoint:mouseLoc]; + if (row != -1) { + NSIndexSet *indexes = [NSIndexSet indexSetWithIndex:row]; + if ([[self delegate] respondsToSelector:@selector(tableView:canDeleteRowsWithIndexes:)] && + [[self delegate] respondsToSelector:@selector(tableView:deleteRowsWithIndexes:)] && + [[self delegate] tableView:self canDeleteRowsWithIndexes:indexes]) { + if (menu == nil) + menu = [[[NSMenu allocWithZone:[NSMenu menuZone]] init] autorelease]; + NSMenuItem *item = [menu addItemWithTitle:NSLocalizedString(@"Delete", @"Menu item title") action:@selector(deleteFromContextualMenu:) keyEquivalent:@""]; + [item setTarget:self]; + [item setRepresentedObject:indexes]; + } + } + return menu; +} + +- (BOOL)validateMenuItem:(NSMenuItem *)menuItem { + if ([menuItem action] == @selector(delete:)) + return [self canDelete]; + else if ([menuItem action] == @selector(deleteFromContextualMenu:)) + return YES; + return [super validateMenuItem:menuItem]; +} + @end #pragma mark - This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. ------------------------------------------------------------------------- This SF.net email is sponsored by: Splunk Inc. Still grepping through log files to find problems? Stop. Now Search log events and configuration files using AJAX and a browser. Download your FREE copy of Splunk now >> http://get.splunk.com/ _______________________________________________ Skim-app-commit mailing list Skim-app-commit@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/skim-app-commit