Revision: 15109 http://sourceforge.net/p/skim-app/code/15109 Author: hofman Date: 2025-04-10 16:46:15 +0000 (Thu, 10 Apr 2025) Log Message: ----------- Group toolbar items with subitems for previous/next and back/forward toolbar items. Use also separate menu for representations.
Modified Paths: -------------- trunk/SKMainToolbarController.m trunk/SKToolbarItem.h trunk/SKToolbarItem.m trunk/de.lproj/Localizable.strings trunk/en.lproj/Localizable.strings trunk/es.lproj/Localizable.strings trunk/fr.lproj/Localizable.strings trunk/it.lproj/Localizable.strings trunk/ja.lproj/Localizable.strings trunk/nl.lproj/Localizable.strings trunk/pl.lproj/Localizable.strings trunk/ru.lproj/Localizable.strings trunk/zh_CN.lproj/Localizable.strings trunk/zh_TW.lproj/Localizable.strings Modified: trunk/SKMainToolbarController.m =================================================================== --- trunk/SKMainToolbarController.m 2025-04-10 08:57:35 UTC (rev 15108) +++ trunk/SKMainToolbarController.m 2025-04-10 16:46:15 UTC (rev 15109) @@ -105,9 +105,6 @@ #define SKDocumentToolbarColorSwatchItemIdentifier @"SKDocumentToolbarColorSwatchItemIdentifier" #define SKDocumentToolbarShareItemIdentifier @"SKDocumentToolbarShareItemIdentifier" #define SKDocumentToolbarPacerItemIdentifier @"SKDocumentToolbarPacerItemIdentifier" -#define SKDocumentToolbarPacerButtonItemIdentifier @"SKDocumentToolbarPacerButtonItemIdentifier" -#define SKDocumentToolbarPacerSpeedFieldItemIdentifier @"SKDocumentToolbarPacerSpeedFieldItemIdentifier" -#define SKDocumentToolbarPacerSpeedStepperItemIdentifier @"SKDocumentToolbarPacerSpeedStepperItemIdentifier" #define SKDocumentToolbarColorsItemIdentifier @"SKDocumentToolbarColorsItemIdentifier" #define SKDocumentToolbarFontsItemIdentifier @"SKDocumentToolbarFontsItemIdentifier" #define SKDocumentToolbarLinesItemIdentifier @"SKDocumentToolbarLinesItemIdentifier" @@ -184,25 +181,35 @@ if (toolbarItems == nil) toolbarItems = [[NSMutableDictionary alloc] init]; - - item = [[SKToolbarItem alloc] initWithItemIdentifier:identifier]; + + static NSSet *groupIdentifiers = nil; + if (groupIdentifiers == nil) + groupIdentifiers = [NSSet setWithObjects:SKDocumentToolbarPreviousNextItemIdentifier, SKDocumentToolbarPreviousNextFirstLastItemIdentifier, SKDocumentToolbarBackForwardItemIdentifier, SKDocumentToolbarPacerItemIdentifier, nil]; + + if ([groupIdentifiers containsObject:identifier]) + item = [[SKToolbarItemGroup alloc] initWithItemIdentifier:identifier]; + else + item = [[SKToolbarItem alloc] initWithItemIdentifier:identifier]; [toolbarItems setObject:item forKey:identifier]; if ([identifier isEqualToString:SKDocumentToolbarPreviousNextItemIdentifier]) { - menuItem = [[NSMenuItem alloc] initWithSubmenuAndTitle:NSLocalizedString(@"Previous/Next", @"Toolbar item label")]; - menu = [menuItem submenu]; - [menu addItemWithTitle:NSLocalizedString(@"Previous", @"Menu item title") action:@selector(doGoToPreviousPage:) target:mainController]; - [menu addItemWithTitle:NSLocalizedString(@"Next", @"Menu item title") action:@selector(doGoToNextPage:) target:mainController]; - - [item setLabels:NSLocalizedString(@"Previous/Next", @"Toolbar item label")]; [item setToolTip:NSLocalizedString(@"Previous/Next", @"Tool tip message")]; [previousNextPageButton setHelp:NSLocalizedString(@"Go To Previous Page", @"Tool tip message") forSegment:0]; [previousNextPageButton setHelp:NSLocalizedString(@"Go To Next Page", @"Tool tip message") forSegment:1]; [previousNextPageButton setSegmentStyle:NSSegmentStyleSeparated]; [item setView:previousNextPageButton]; - [item setMenuFormRepresentation:menuItem]; + NSToolbarItem *item1 = [[NSToolbarItem alloc] initWithItemIdentifier:@""]; + [item1 setLabels:NSLocalizedString(@"Previous", @"Toolbar item label")]; + menuItem = [[NSMenuItem alloc] initWithTitle:NSLocalizedString(@"Previous", @"Toolbar item label") action:@selector(doGoToPreviousPage:) target:mainController]; + [item1 setMenuFormRepresentation:menuItem]; + NSToolbarItem *item2 = [[NSToolbarItem alloc] initWithItemIdentifier:@""]; + [item2 setLabels:NSLocalizedString(@"Next", @"Toolbar item label")]; + [(NSToolbarItemGroup *)item setSubitems:@[item1, item2]]; + menuItem = [[NSMenuItem alloc] initWithTitle:NSLocalizedString(@"Next", @"Toolbar item label") action:@selector(doGoToNextPage:) target:mainController]; + [item2 setMenuFormRepresentation:menuItem]; + } else if ([identifier isEqualToString:SKDocumentToolbarPreviousItemIdentifier]) { menuItem = [[NSMenuItem alloc] initWithSubmenuAndTitle:NSLocalizedString(@"Previous", @"Toolbar item label")]; @@ -242,7 +249,6 @@ [menu addItemWithTitle:NSLocalizedString(@"First", @"Menu item title") action:@selector(doGoToFirstPage:) target:mainController]; [menu addItemWithTitle:NSLocalizedString(@"Last", @"Menu item title") action:@selector(doGoToLastPage:) target:mainController]; - [item setLabels:NSLocalizedString(@"Previous/Next", @"Toolbar item label")]; [item setToolTip:NSLocalizedString(@"Go To First, Previous, Next or Last Page", @"Tool tip message")]; [previousNextFirstLastPageButton setHelp:NSLocalizedString(@"Go To First page", @"Tool tip message") forSegment:0]; [previousNextFirstLastPageButton setHelp:NSLocalizedString(@"Go To Previous Page", @"Tool tip message") forSegment:1]; @@ -252,21 +258,32 @@ [item setView:previousNextFirstLastPageButton]; [item setMenuFormRepresentation:menuItem]; + NSToolbarItem *item1 = [[NSToolbarItem alloc] initWithItemIdentifier:@""]; + NSToolbarItem *item2 = [[NSToolbarItem alloc] initWithItemIdentifier:@""]; + [item2 setLabels:NSLocalizedString(@"Previous", @"Toolbar item label")]; + NSToolbarItem *item3 = [[NSToolbarItem alloc] initWithItemIdentifier:@""]; + [item3 setLabels:NSLocalizedString(@"Next", @"Toolbar item label")]; + NSToolbarItem *item4 = [[NSToolbarItem alloc] initWithItemIdentifier:@""]; + [(NSToolbarItemGroup *)item setSubitems:@[item1, item2, item3, item4]]; + } else if ([identifier isEqualToString:SKDocumentToolbarBackForwardItemIdentifier]) { - menuItem = [[NSMenuItem alloc] initWithSubmenuAndTitle:NSLocalizedString(@"Back/Forward", @"Toolbar item label")]; - menu = [menuItem submenu]; - [menu addItemWithTitle:NSLocalizedString(@"Back", @"Menu item title") action:@selector(doGoBack:) target:mainController]; - [menu addItemWithTitle:NSLocalizedString(@"Forward", @"Menu item title") action:@selector(doGoForward:) target:mainController]; - - [item setLabels:NSLocalizedString(@"Back/Forward", @"Toolbar item label")]; [item setToolTip:NSLocalizedString(@"Back/Forward", @"Tool tip message")]; [backForwardButton setHelp:NSLocalizedString(@"Go Back", @"Tool tip message") forSegment:0]; [backForwardButton setHelp:NSLocalizedString(@"Go Forward", @"Tool tip message") forSegment:1]; [backForwardButton setSegmentStyle:NSSegmentStyleSeparated]; [item setView:backForwardButton]; - [item setMenuFormRepresentation:menuItem]; + NSToolbarItem *item1 = [[NSToolbarItem alloc] initWithItemIdentifier:@""]; + [item1 setLabels:NSLocalizedString(@"Back", @"Toolbar item label")]; + menuItem = [[NSMenuItem alloc] initWithTitle:NSLocalizedString(@"Back", @"Menu item title") action:@selector(doGoBack:) target:mainController]; + [item1 setMenuFormRepresentation:menuItem]; + NSToolbarItem *item2 = [[NSToolbarItem alloc] initWithItemIdentifier:@""]; + [item2 setLabels:NSLocalizedString(@"Forward", @"Toolbar item label")]; + menuItem = [[NSMenuItem alloc] initWithTitle:NSLocalizedString(@"Forward", @"Menu item title") action:@selector(doGoForward:) target:mainController]; + [item2 setMenuFormRepresentation:menuItem]; + [(NSToolbarItemGroup *)item setSubitems:@[item1, item2]]; + } else if ([identifier isEqualToString:SKDocumentToolbarPageNumberItemIdentifier]) { menuItem = [[NSMenuItem alloc] initWithTitle:NSLocalizedString(@"Page", @"Menu item title") action:@selector(doGoToPage:) target:mainController]; @@ -720,10 +737,6 @@ } else if ([identifier isEqualToString:SKDocumentToolbarPacerItemIdentifier]) { - NSToolbarItemGroup *group = [[NSToolbarItemGroup alloc] initWithItemIdentifier:identifier]; - [toolbarItems setObject:group forKey:identifier]; - item = (id)group; - [pacerButton sizeToFit]; NSRect frame; frame = [pacerButton frame]; @@ -753,13 +766,13 @@ [pacerSpeedStepper setToolTip:NSLocalizedString(@"Pacer Speed", @"Tool tip message")]; [item setMenuFormRepresentation:menuItem]; - NSToolbarItem *item1 = [[SKToolbarItem alloc] initWithItemIdentifier:SKDocumentToolbarPacerButtonItemIdentifier]; + NSToolbarItem *item1 = [[SKToolbarItem alloc] initWithItemIdentifier:@""]; [item1 setView:pacerButton]; - NSToolbarItem *item2 = [[SKToolbarItem alloc] initWithItemIdentifier:SKDocumentToolbarPacerSpeedFieldItemIdentifier]; + NSToolbarItem *item2 = [[SKToolbarItem alloc] initWithItemIdentifier:@""]; [item2 setView:pacerSpeedField]; - NSToolbarItem *item3 = [[SKToolbarItem alloc] initWithItemIdentifier:SKDocumentToolbarPacerSpeedStepperItemIdentifier]; + NSToolbarItem *item3 = [[SKToolbarItem alloc] initWithItemIdentifier:@""]; [item3 setView:pacerSpeedStepper]; - [group setSubitems:@[item1, item2, item3]]; + [(NSToolbarItemGroup *)item setSubitems:@[item1, item2, item3]]; } else if ([identifier isEqualToString:SKDocumentToolbarColorsItemIdentifier]) { Modified: trunk/SKToolbarItem.h =================================================================== --- trunk/SKToolbarItem.h 2025-04-10 08:57:35 UTC (rev 15108) +++ trunk/SKToolbarItem.h 2025-04-10 16:46:15 UTC (rev 15109) @@ -41,3 +41,7 @@ @interface SKToolbarItem : NSToolbarItem @end + + +@interface SKToolbarItemGroup : NSToolbarItemGroup +@end Modified: trunk/SKToolbarItem.m =================================================================== --- trunk/SKToolbarItem.m 2025-04-10 08:57:35 UTC (rev 15108) +++ trunk/SKToolbarItem.m 2025-04-10 16:46:15 UTC (rev 15109) @@ -57,3 +57,23 @@ } @end + + +@implementation SKToolbarItemGroup + +- (void)validate { + if ([self view] && [[[self toolbar] delegate] respondsToSelector:@selector(validateToolbarItem:)]) { + BOOL enabled = [(id)[[self toolbar] delegate] validateToolbarItem:self]; + [self setEnabled:enabled]; + } + [super validate]; +} + +- (void)setView:(NSView *)view { + if ([view isKindOfClass:[NSSegmentedControl class]] || [view isKindOfClass:[NSStepper class]]) { + [(NSSegmentedControl *)view sizeToFit]; + } + [super setView:view]; +} + +@end Modified: trunk/de.lproj/Localizable.strings =================================================================== (Binary files differ) Modified: trunk/en.lproj/Localizable.strings =================================================================== (Binary files differ) Modified: trunk/es.lproj/Localizable.strings =================================================================== (Binary files differ) Modified: trunk/fr.lproj/Localizable.strings =================================================================== (Binary files differ) Modified: trunk/it.lproj/Localizable.strings =================================================================== (Binary files differ) Modified: trunk/ja.lproj/Localizable.strings =================================================================== (Binary files differ) Modified: trunk/nl.lproj/Localizable.strings =================================================================== (Binary files differ) Modified: trunk/pl.lproj/Localizable.strings =================================================================== (Binary files differ) Modified: trunk/ru.lproj/Localizable.strings =================================================================== (Binary files differ) Modified: trunk/zh_CN.lproj/Localizable.strings =================================================================== (Binary files differ) Modified: trunk/zh_TW.lproj/Localizable.strings =================================================================== (Binary files differ) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. _______________________________________________ Skim-app-commit mailing list Skim-app-commit@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/skim-app-commit