129 lines
3.7 KiB
Objective-C
129 lines
3.7 KiB
Objective-C
/* NSToolbar+HBAdditions.h $
|
|
|
|
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 "NSToolbar+HBAdditions.h"
|
|
#import "HBToolbarItem.h"
|
|
|
|
@implementation NSToolbarItem (HBAdditions)
|
|
|
|
+ (instancetype)HB_toolbarItemWithIdentifier:(NSString *)itemIdentifier
|
|
label:(NSString *)label
|
|
paletteLabel:(nullable NSString *)palettelabel
|
|
symbolName:(NSString *)symbolName
|
|
image:(NSString *)imageName
|
|
style:(HBToolbarItemStyle)style
|
|
target:(nullable id)target
|
|
action:(SEL)action
|
|
{
|
|
NSToolbarItem *item = [[HBToolbarItem alloc] initWithItemIdentifier:itemIdentifier];
|
|
item.label = label;
|
|
item.paletteLabel = palettelabel ? palettelabel : label;
|
|
item.toolTip = palettelabel;
|
|
item.target = target;
|
|
item.action = action;
|
|
[item HB_setSymbol:symbolName configuration:nil fallbackImage:imageName];
|
|
|
|
BOOL bordered = (style & HBToolbarItemStyleBordered) != 0;
|
|
BOOL button = (style & HBToolbarItemStyleButton) != 0;
|
|
|
|
if (style & HBToolbarItemStyleDefault)
|
|
{
|
|
if (@available(macOS 14, *))
|
|
{
|
|
bordered = YES;
|
|
item.bordered = bordered;
|
|
}
|
|
else if (@available(macOS 11, *))
|
|
{
|
|
bordered = YES;
|
|
button = YES;
|
|
item.bordered = bordered;
|
|
}
|
|
}
|
|
|
|
if (button)
|
|
{
|
|
NSButton *buttonView = [NSButton buttonWithImage:item.image target:item.target action:item.action];
|
|
buttonView.bordered = bordered;
|
|
|
|
if (bordered)
|
|
{
|
|
buttonView.bezelStyle = NSBezelStyleTexturedRounded;
|
|
}
|
|
else
|
|
{
|
|
buttonView.imageScaling = NSImageScaleProportionallyUpOrDown;
|
|
}
|
|
if (@available(macOS 11, *))
|
|
{
|
|
NSDictionary *items = NSDictionaryOfVariableBindings(buttonView);
|
|
NSArray *constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"H:[buttonView(>=40)]" options:0 metrics:nil views:items];
|
|
[NSLayoutConstraint activateConstraints:constraints];
|
|
}
|
|
else
|
|
{
|
|
item.minSize = bordered ? NSMakeSize(32, 16) : NSMakeSize(32, 32);
|
|
}
|
|
item.view = buttonView;
|
|
}
|
|
|
|
return item;
|
|
}
|
|
|
|
- (void)HB_setSymbol:(NSString *)symbolName configuration:(nullable id)configuration fallbackImage:(NSString *)imageName
|
|
{
|
|
NSImage *image = nil;
|
|
|
|
if (@available(macOS 11, *))
|
|
{
|
|
image = [NSImage imageWithSystemSymbolName:symbolName accessibilityDescription:nil];
|
|
if (configuration)
|
|
{
|
|
image = [image imageWithSymbolConfiguration:configuration];
|
|
}
|
|
if (image == nil)
|
|
{
|
|
image = [NSImage imageNamed:symbolName];
|
|
}
|
|
}
|
|
else
|
|
{
|
|
image = [NSImage imageNamed:imageName];
|
|
}
|
|
self.image = image;
|
|
}
|
|
|
|
@end
|
|
|
|
|
|
@implementation NSToolbar (HBAdditions)
|
|
|
|
- (nullable NSToolbarItem *)HB_toolbarItemWithIdentifier:(NSString *)itemIdentifier
|
|
{
|
|
for (NSToolbarItem *item in self.items)
|
|
{
|
|
if ([item.itemIdentifier isEqualToString:itemIdentifier])
|
|
{
|
|
return item;
|
|
}
|
|
}
|
|
return nil;
|
|
}
|
|
|
|
- (nullable NSToolbarItem *)HB_visibleToolbarItemWithIdentifier:(NSString *)itemIdentifier
|
|
{
|
|
for (NSToolbarItem *item in self.visibleItems)
|
|
{
|
|
if ([item.itemIdentifier isEqualToString:itemIdentifier])
|
|
{
|
|
return item;
|
|
}
|
|
}
|
|
return nil;
|
|
}
|
|
|
|
@end
|