mirror of https://github.com/HandBrake/HandBrake
139 lines
3.9 KiB
Objective-C
139 lines
3.9 KiB
Objective-C
/* HBToolbarItem.m $
|
|
|
|
This file is part of the HandBrake source code.
|
|
Homepage: <http://handbrake.fr/>.
|
|
It may be used under the terms of the GNU General Public License. */
|
|
|
|
#import "HBToolbarItem.h"
|
|
#import "HBBadgeView.h"
|
|
|
|
@interface HBToolbarItem ()
|
|
|
|
@property (nonatomic, nullable) HBBadgeView *HB_badgeView;
|
|
|
|
@end
|
|
|
|
@implementation HBToolbarItem
|
|
|
|
- (instancetype)init
|
|
{
|
|
self = [super init];
|
|
return self;
|
|
}
|
|
|
|
- (void)setHB_badgeValue:(NSString *)badgeValue
|
|
{
|
|
if (![_HB_badgeValue isEqualToString:badgeValue])
|
|
{
|
|
_HB_badgeValue = [badgeValue copy];
|
|
}
|
|
|
|
#if __MAC_OS_X_VERSION_MAX_ALLOWED >= 160000
|
|
if (@available(macOS 26.0, *))
|
|
{
|
|
self.badge = badgeValue.length ? [NSItemBadge badgeWithText:badgeValue] : nil;
|
|
}
|
|
else
|
|
#endif
|
|
{
|
|
if (self.view && self.HB_badgeView == nil)
|
|
{
|
|
NSSize size = self.view.frame.size;
|
|
NSRect frame = NSMakeRect(0, 0, size.width, size.height);
|
|
self.HB_badgeView = [[HBBadgeView alloc] initWithFrame:frame];
|
|
self.HB_badgeView.autoresizingMask = NSViewWidthSizable | NSViewHeightSizable;
|
|
[self.view addSubview:self.HB_badgeView];
|
|
}
|
|
self.HB_badgeView.badgeValue = badgeValue;
|
|
}
|
|
}
|
|
|
|
- (NSMenuItem *)menuFormRepresentation
|
|
{
|
|
if ([self.view respondsToSelector:@selector(menu)])
|
|
{
|
|
NSMenuItem *menuItem = [[NSMenuItem alloc] init];
|
|
menuItem.title = self.label;
|
|
|
|
BOOL comboButton = NO;
|
|
if (@available(macOS 13.0, *))
|
|
{
|
|
if ([self.view isKindOfClass:[NSComboButton class]])
|
|
{
|
|
comboButton = YES;
|
|
}
|
|
}
|
|
|
|
if (comboButton)
|
|
{
|
|
menuItem.submenu = [[NSMenu alloc] init];
|
|
[menuItem.submenu addItem:[[NSMenuItem alloc] initWithTitle:self.label action:self.action keyEquivalent:@""]];
|
|
[menuItem.submenu addItem:[NSMenuItem separatorItem]];
|
|
|
|
NSMenu *menu = [self.view menu];
|
|
for (NSMenuItem *item in menu.itemArray)
|
|
{
|
|
[menuItem.submenu addItem:[item copy]];
|
|
}
|
|
}
|
|
else if ([self.view isKindOfClass:[NSSegmentedControl class]])
|
|
{
|
|
menuItem.submenu = [[NSMenu alloc] init];
|
|
NSSegmentedControl *control = (NSSegmentedControl *)self.view;
|
|
for (int index = 0; index < control.segmentCount; index += 1)
|
|
{
|
|
if (menuItem.submenu.numberOfItems)
|
|
{
|
|
[menuItem.submenu addItem:[NSMenuItem separatorItem]];
|
|
}
|
|
|
|
NSMenu *controlMenu = [control menuForSegment:index];
|
|
if (controlMenu)
|
|
{
|
|
for (NSMenuItem *item in controlMenu.itemArray)
|
|
{
|
|
[menuItem.submenu addItem:[item copy]];
|
|
}
|
|
}
|
|
else
|
|
{
|
|
[menuItem.submenu addItem:[[NSMenuItem alloc] initWithTitle:self.label action:self.action keyEquivalent:@""]];
|
|
}
|
|
}
|
|
}
|
|
else if ([[self.view menu] numberOfItems])
|
|
{
|
|
menuItem.submenu = [self.view menu];
|
|
}
|
|
else
|
|
{
|
|
menuItem.action = self.action;
|
|
}
|
|
|
|
return menuItem;
|
|
}
|
|
else
|
|
{
|
|
return [[NSMenuItem alloc] initWithTitle:self.label action:self.action keyEquivalent:@""];
|
|
}
|
|
}
|
|
|
|
- (void)validate
|
|
{
|
|
id target = [NSApplication.sharedApplication targetForAction:self.action to:self.target from:self];
|
|
if ([target respondsToSelector:@selector(validateToolbarItem:)])
|
|
{
|
|
self.enabled = [target validateToolbarItem:self];
|
|
}
|
|
else if ([target respondsToSelector:@selector(validateUserInterfaceItem:)])
|
|
{
|
|
self.enabled = [target validateUserInterfaceItem:self];
|
|
}
|
|
else
|
|
{
|
|
[super validate];
|
|
}
|
|
}
|
|
|
|
@end
|