Implement group item

This commit is contained in:
Samuel Attard 2016-11-29 18:36:57 +11:00 committed by Kevin Sawicki
parent 269d899a99
commit 43cc5079d8
3 changed files with 62 additions and 13 deletions

View file

@ -395,6 +395,8 @@ bool ScopedDisableResize::disable_resize_ = false;
[idents addObject:[NSString stringWithFormat:@"%@%@", SliderIdentifier, [NSString stringWithUTF8String:item_id.c_str()]]]; [idents addObject:[NSString stringWithFormat:@"%@%@", SliderIdentifier, [NSString stringWithUTF8String:item_id.c_str()]]];
} else if (type == "popover") { } else if (type == "popover") {
[idents addObject:[NSString stringWithFormat:@"%@%@", PopOverIdentifier, [NSString stringWithUTF8String:item_id.c_str()]]]; [idents addObject:[NSString stringWithFormat:@"%@%@", PopOverIdentifier, [NSString stringWithUTF8String:item_id.c_str()]]];
} else if (type == "group") {
[idents addObject:[NSString stringWithFormat:@"%@%@", GroupIdentifier, [NSString stringWithUTF8String:item_id.c_str()]]];
} }
} }
} }
@ -627,14 +629,43 @@ bool ScopedDisableResize::disable_resize_ = false;
return popOverItem; return popOverItem;
} }
- (nullable NSTouchBarItem*) makeGroupForID:(NSString*)id withIdentifier:(NSString*)identifier {
std::string s_id = std::string([id UTF8String]);
if (![self hasTBDict:s_id]) return nil;
mate::PersistentDictionary item = item_id_map[s_id];
std::vector<mate::PersistentDictionary> items;
if (!item.Get("items", &items)) {
return nil;
}
NSMutableArray<NSTouchBarItem*>* generatedItems = [[NSMutableArray alloc] init];
NSMutableArray<NSString*>* identList = [self identifierArrayFromDicts:items];
for (NSUInteger i = 0; i < [identList count]; i++) {
NSTouchBarItem* generatedItem = [self makeItemForIdentifier:[identList objectAtIndex:i]];
if (generatedItem) {
[generatedItems addObject:generatedItem];
}
}
NSGroupTouchBarItem *groupItem = [NSGroupTouchBarItem groupItemWithIdentifier:identifier items:generatedItems];
std::string customizationLabel;
if (item.Get("customizationLabel", &customizationLabel)) {
groupItem.customizationLabel = [NSString stringWithUTF8String:customizationLabel.c_str()];
}
return groupItem;
}
static NSTouchBarItemIdentifier ButtonIdentifier = @"com.electron.tb.button."; static NSTouchBarItemIdentifier ButtonIdentifier = @"com.electron.tb.button.";
static NSTouchBarItemIdentifier ColorPickerIdentifier = @"com.electron.tb.colorpicker."; static NSTouchBarItemIdentifier ColorPickerIdentifier = @"com.electron.tb.colorpicker.";
// static NSTouchBarItemIdentifier ListIdentifier = @"com.electron.tb.list."; // static NSTouchBarItemIdentifier ListIdentifier = @"com.electron.tb.list.";
static NSTouchBarItemIdentifier GroupIdentifier = @"com.electron.tb.group.";
static NSTouchBarItemIdentifier LabelIdentifier = @"com.electron.tb.label."; static NSTouchBarItemIdentifier LabelIdentifier = @"com.electron.tb.label.";
static NSTouchBarItemIdentifier PopOverIdentifier = @"com.electron.tb.popover."; static NSTouchBarItemIdentifier PopOverIdentifier = @"com.electron.tb.popover.";
static NSTouchBarItemIdentifier SliderIdentifier = @"com.electron.tb.slider."; static NSTouchBarItemIdentifier SliderIdentifier = @"com.electron.tb.slider.";
- (nullable NSTouchBarItem *)touchBar:(NSTouchBar *)touchBar makeItemForIdentifier:(NSTouchBarItemIdentifier)identifier { - (nullable NSTouchBarItem *)makeItemForIdentifier:(NSTouchBarItemIdentifier)identifier {
if ([identifier hasPrefix:ButtonIdentifier]) { if ([identifier hasPrefix:ButtonIdentifier]) {
NSString* id = [self idFromIdentifier:identifier withPrefix:ButtonIdentifier]; NSString* id = [self idFromIdentifier:identifier withPrefix:ButtonIdentifier];
return [self makeButtonForID:id withIdentifier:identifier]; return [self makeButtonForID:id withIdentifier:identifier];
@ -650,11 +681,18 @@ static NSTouchBarItemIdentifier SliderIdentifier = @"com.electron.tb.slider.";
} else if ([identifier hasPrefix:PopOverIdentifier]) { } else if ([identifier hasPrefix:PopOverIdentifier]) {
NSString* id = [self idFromIdentifier:identifier withPrefix:PopOverIdentifier]; NSString* id = [self idFromIdentifier:identifier withPrefix:PopOverIdentifier];
return [self makePopOverForID:id withIdentifier:identifier]; return [self makePopOverForID:id withIdentifier:identifier];
} else if ([identifier hasPrefix:GroupIdentifier]) {
NSString* id = [self idFromIdentifier:identifier withPrefix:GroupIdentifier];
return [self makeGroupForID:id withIdentifier:identifier];
} }
return nil; return nil;
} }
- (nullable NSTouchBarItem *)touchBar:(NSTouchBar *)touchBar makeItemForIdentifier:(NSTouchBarItemIdentifier)identifier {
return [self makeItemForIdentifier:identifier];
}
// NSWindow overrides. // NSWindow overrides.

View file

@ -48,11 +48,15 @@ exports.load = (appUrl) => {
label: 'foo', label: 'foo',
showCloseButton: true, showCloseButton: true,
touchBar: new TouchBar([ touchBar: new TouchBar([
new (TouchBar.Button)({ new (TouchBar.Group)({
label: 'Sub Button', items: new TouchBar(
click: () => { [1, 2, 3].map((i) => new (TouchBar.Button)({
console.log('Sub Button Clicked') label: `Button ${i}`,
} click: () => {
console.log(`Button ${i} (group) Clicked`)
}
}))
)
}) })
]) ])
}), }),

View file

@ -74,6 +74,20 @@ TouchBar.ColorPicker = class TouchBarColorPicker extends TouchBarItem {
} }
} }
TouchBar.Group = class TouchBarGroup extends TouchBarItem {
constructor (config) {
super(config)
this.config.type = 'group'
}
toJSON () {
const config = this.config;
return Object.assign({}, config, {
items: config.items && config.items.toJSON ? config.items.toJSON() : []
})
}
}
TouchBar.Label = class TouchBarLabel extends TouchBarItem { TouchBar.Label = class TouchBarLabel extends TouchBarItem {
constructor (config) { constructor (config) {
super(config) super(config)
@ -81,13 +95,6 @@ TouchBar.Label = class TouchBarLabel extends TouchBarItem {
} }
} }
TouchBar.List = class TouchBarList extends TouchBarItem {
constructor (config) {
super(config)
this.config.type = 'list'
}
}
TouchBar.PopOver = class TouchBarPopOver extends TouchBarItem { TouchBar.PopOver = class TouchBarPopOver extends TouchBarItem {
constructor (config) { constructor (config) {
super(config) super(config)