diff --git a/macosx/ButtonGroupToolbarItem.h b/macosx/ButtonGroupToolbarItem.h index d8b449726..8d2b08f8a 100644 --- a/macosx/ButtonGroupToolbarItem.h +++ b/macosx/ButtonGroupToolbarItem.h @@ -27,6 +27,8 @@ @interface ButtonGroupToolbarItem : NSToolbarItem { NSArray * fLabels, * fIdentifiers; + + BOOL fMenuCreated; } - (void) setLabels: (NSArray *) labels; diff --git a/macosx/ButtonGroupToolbarItem.m b/macosx/ButtonGroupToolbarItem.m index 6b5031fec..5c302f13f 100644 --- a/macosx/ButtonGroupToolbarItem.m +++ b/macosx/ButtonGroupToolbarItem.m @@ -56,28 +56,41 @@ - (NSMenuItem *) menuFormRepresentation { - NSMenuItem * menuItem = [[NSMenuItem alloc] initWithTitle: [self label] action: NULL keyEquivalent: @""]; - NSMenu * menu = [[NSMenu alloc] initWithTitle: [self label]]; - [menuItem setSubmenu: menu]; + NSMenuItem * menuItem; + if (!fMenuCreated) + { + fMenuCreated = YES; + + menuItem = [[[NSMenuItem alloc] initWithTitle: [self label] action: NULL keyEquivalent: @""] autorelease]; + NSMenu * menu = [[NSMenu alloc] initWithTitle: [self label]]; + [menuItem setSubmenu: menu]; + + [menu setAutoenablesItems: NO]; + + NSMenuItem * addItem; + int i; + for (i = 0; i < [(NSSegmentedControl *)[self view] segmentCount]; i++) + { + addItem = [[NSMenuItem alloc] initWithTitle: [fLabels objectAtIndex: i] action: [self action] keyEquivalent: @""]; + [addItem setTarget: [self target]]; + [addItem setTag: i]; + + [menu addItem: addItem]; + [addItem release]; + } + + [menu release]; + [self setMenuFormRepresentation: menuItem]; + } + else + menuItem = [super menuFormRepresentation]; - [menu setAutoenablesItems: NO]; - - NSMenuItem * addItem; int i; for (i = 0; i < [(NSSegmentedControl *)[self view] segmentCount]; i++) - { - addItem = [[NSMenuItem alloc] initWithTitle: [fLabels objectAtIndex: i] action: [self action] keyEquivalent: @""]; - [addItem setTarget: [self target]]; - [addItem setTag: i]; - [addItem setEnabled: [[self target] validateToolbarItem: + [[[menuItem submenu] itemAtIndex: i] setEnabled: [[self target] validateToolbarItem: [[[NSToolbarItem alloc] initWithItemIdentifier: [fIdentifiers objectAtIndex: i]] autorelease]]]; - - [menu addItem: addItem]; - [addItem release]; - } - [menu release]; - return [menuItem autorelease]; + return menuItem; } @end diff --git a/macosx/Controller.h b/macosx/Controller.h index 29d9c67d0..d148f3207 100644 --- a/macosx/Controller.h +++ b/macosx/Controller.h @@ -213,6 +213,7 @@ - (void) toggleFilterBar: (id) sender; - (void) showFilterBar: (BOOL) show animate: (BOOL) animate; +- (void) allToolbarClicked: (id) sender; - (void) selectedToolbarClicked: (id) sender; - (void) doNothing: (id) sender; //needed for menu items that use bindings with no associated action diff --git a/macosx/Controller.m b/macosx/Controller.m index 75ddc1a6a..84c252be6 100644 --- a/macosx/Controller.m +++ b/macosx/Controller.m @@ -56,6 +56,12 @@ #define TOOLBAR_PAUSE_RESUME_SELECTED @"Toolbar Pause / Resume Selected" #define TOOLBAR_FILTER @"Toolbar Toggle Filter" +typedef enum +{ + TOOLBAR_PAUSE_TAG = 0, + TOOLBAR_RESUME_TAG = 1 +} toolbarGroupTag; + #define SORT_DATE @"Date" #define SORT_NAME @"Name" #define SORT_STATE @"State" @@ -2692,24 +2698,6 @@ void sleepCallBack(void * controller, io_service_t y, natural_t messageType, voi [item setAction: @selector(showInfo:)]; [item setAutovalidates: NO]; } - else if ([ident isEqualToString: TOOLBAR_PAUSE_ALL]) - { - [item setLabel: NSLocalizedString(@"Pause All", "Pause All toolbar item -> label")]; - [item setPaletteLabel: [item label]]; - [item setToolTip: NSLocalizedString(@"Pause all transfers", "Pause All toolbar item -> tooltip")]; - [item setImage: [NSImage imageNamed: @"PauseAll.png"]]; - [item setTarget: self]; - [item setAction: @selector(stopAllTorrents:)]; - } - else if ([ident isEqualToString: TOOLBAR_RESUME_ALL]) - { - [item setLabel: NSLocalizedString(@"Resume All", "Resume All toolbar item -> label")]; - [item setPaletteLabel: [item label]]; - [item setToolTip: NSLocalizedString(@"Resume all transfers", "Resume All toolbar item -> tooltip")]; - [item setImage: [NSImage imageNamed: @"ResumeAll.png"]]; - [item setTarget: self]; - [item setAction: @selector(resumeAllTorrents:)]; - } else if ([ident isEqualToString: TOOLBAR_PAUSE_RESUME_ALL]) { ButtonGroupToolbarItem * groupItem = [[[ButtonGroupToolbarItem alloc] initWithItemIdentifier: ident] autorelease]; @@ -2733,13 +2721,13 @@ void sleepCallBack(void * controller, io_service_t y, natural_t messageType, voi [groupItem setLabels: [NSArray arrayWithObjects: NSLocalizedString(@"Pause All", "All toolbar item -> label"), NSLocalizedString(@"Resume All", "All toolbar item -> label"), nil]]; - [segmentedControl setImage: [NSImage imageNamed: @"PauseAll.png"] forSegment: 0]; + [segmentedControl setImage: [NSImage imageNamed: @"PauseAll.png"] forSegment: TOOLBAR_PAUSE_TAG]; [(NSSegmentedCell *)[segmentedControl cell] setToolTip: NSLocalizedString(@"Pause all transfers", - "All toolbar item -> tooltip") forSegment: 0]; + "All toolbar item -> tooltip") forSegment: TOOLBAR_PAUSE_TAG]; - [segmentedControl setImage: [NSImage imageNamed: @"ResumeAll.png"] forSegment: 1]; + [segmentedControl setImage: [NSImage imageNamed: @"ResumeAll.png"] forSegment: TOOLBAR_RESUME_TAG]; [(NSSegmentedCell *)[segmentedControl cell] setToolTip: NSLocalizedString(@"Resume all transfers", - "All toolbar item -> tooltip") forSegment: 1]; + "All toolbar item -> tooltip") forSegment: TOOLBAR_RESUME_TAG]; [segmentedControl release]; return groupItem; @@ -2768,13 +2756,13 @@ void sleepCallBack(void * controller, io_service_t y, natural_t messageType, voi [groupItem setLabels: [NSArray arrayWithObjects: NSLocalizedString(@"Pause Selected", "Selected toolbar item -> label"), NSLocalizedString(@"Resume Selected", "Selected toolbar item -> label"), nil]]; - [segmentedControl setImage: [NSImage imageNamed: @"PauseSelected.png"] forSegment: 0]; + [segmentedControl setImage: [NSImage imageNamed: @"PauseSelected.png"] forSegment: TOOLBAR_PAUSE_TAG]; [(NSSegmentedCell *)[segmentedControl cell] setToolTip: NSLocalizedString(@"Pause selected transfers", - "Selected toolbar item -> tooltip") forSegment: 0]; + "Selected toolbar item -> tooltip") forSegment: TOOLBAR_PAUSE_TAG]; - [segmentedControl setImage: [NSImage imageNamed: @"ResumeSelected.png"] forSegment: 1]; + [segmentedControl setImage: [NSImage imageNamed: @"ResumeSelected.png"] forSegment: TOOLBAR_RESUME_TAG]; [(NSSegmentedCell *)[segmentedControl cell] setToolTip: NSLocalizedString(@"Resume selected transfers", - "Selected toolbar item -> tooltip") forSegment: 1]; + "Selected toolbar item -> tooltip") forSegment: TOOLBAR_RESUME_TAG]; [segmentedControl release]; return groupItem; @@ -2795,24 +2783,30 @@ void sleepCallBack(void * controller, io_service_t y, natural_t messageType, voi return item; } -#warning use constants - (void) allToolbarClicked: (id) sender { - if ([sender tag] == 0) - [self stopAllTorrents: sender]; - else if ([sender tag] == 1) - [self resumeAllTorrents: sender]; - else; + switch ([sender tag]) + { + case TOOLBAR_PAUSE_TAG: + [self stopAllTorrents: sender]; + break; + case TOOLBAR_RESUME_TAG: + [self resumeAllTorrents: sender]; + break; + } } -#warning use constants - (void) selectedToolbarClicked: (id) sender { - if ([sender tag] == 0) - [self stopSelectedTorrents: sender]; - else if ([sender tag] == 1) - [self resumeSelectedTorrents: sender]; - else; + switch ([sender tag]) + { + case TOOLBAR_PAUSE_TAG: + [self stopSelectedTorrents: sender]; + break; + case TOOLBAR_RESUME_TAG: + [self resumeSelectedTorrents: sender]; + break; + } } - (NSArray *) toolbarAllowedItemIdentifiers: (NSToolbar *) toolbar