Add move live updating properties

This commit is contained in:
Kevin Sawicki 2017-03-01 14:54:43 -08:00
parent 61aa9bbff4
commit 5f9e9d4b36
2 changed files with 53 additions and 84 deletions

View file

@ -196,11 +196,6 @@ static NSTouchBarItemIdentifier SliderIdentifier = @"com.electron.touchbar.slide
withSettings:(const mate::PersistentDictionary&)settings {
NSButton* button = (NSButton*)item.view;
std::string customizationLabel;
if (settings.Get("customizationLabel", &customizationLabel)) {
item.customizationLabel = base::SysUTF8ToNSString(customizationLabel);
}
std::string backgroundColor;
if (settings.Get("backgroundColor", &backgroundColor)) {
button.bezelColor = [self colorFromHexColorString:backgroundColor];
@ -211,17 +206,6 @@ static NSTouchBarItemIdentifier SliderIdentifier = @"com.electron.touchbar.slide
button.title = base::SysUTF8ToNSString(label);
}
std::string labelColor;
if (!label.empty() && settings.Get("labelColor", &labelColor)) {
NSMutableAttributedString* attrTitle = [[[NSMutableAttributedString alloc] initWithString:base::SysUTF8ToNSString(label)] autorelease];
NSRange range = NSMakeRange(0, [attrTitle length]);
[attrTitle addAttribute:NSForegroundColorAttributeName
value:[self colorFromHexColorString:labelColor]
range:range];
[attrTitle fixAttributesInRange:range];
button.attributedTitle = attrTitle;
}
gfx::Image image;
if (settings.Get("image", &image)) {
button.image = image.AsNSImage();
@ -247,11 +231,6 @@ static NSTouchBarItemIdentifier SliderIdentifier = @"com.electron.touchbar.slide
settings.Get("label", &label);
NSTextField* text_field = (NSTextField*)item.view;
text_field.stringValue = base::SysUTF8ToNSString(label);
std::string customizationLabel;
if (settings.Get("customizationLabel", &customizationLabel)) {
item.customizationLabel = base::SysUTF8ToNSString(customizationLabel);
}
}
- (NSTouchBarItem*)makeColorPickerForID:(NSString*)id
@ -263,32 +242,26 @@ static NSTouchBarItemIdentifier SliderIdentifier = @"com.electron.touchbar.slide
NSColorPickerTouchBarItem* item = [[NSClassFromString(@"NSColorPickerTouchBarItem") alloc] initWithIdentifier:identifier];
item.target = self;
item.action = @selector(colorPickerAction:);
std::string selectedColor;
if (settings.Get("selectedColor", &selectedColor)) {
item.color = [self colorFromHexColorString:selectedColor];
}
std::vector<std::string> colors;
if (settings.Get("availableColors", &colors) && colors.size() > 0) {
NSColorList* color_list = [[[NSColorList alloc] initWithName:identifier] autorelease];
for (size_t i = 0; i < colors.size(); ++i) {
[color_list insertColor:[self colorFromHexColorString:colors[i]]
key:base::SysUTF8ToNSString(colors[i])
atIndex:i];
}
item.colorList = color_list;
}
[self updateColorPicker:item withSettings:settings];
return item;
}
- (void)updateColorPicker:(NSColorPickerTouchBarItem*)item
withSettings:(const mate::PersistentDictionary&)settings {
std::string customizationLabel;
if (settings.Get("customizationLabel", &customizationLabel)) {
item.customizationLabel = base::SysUTF8ToNSString(customizationLabel);
std::vector<std::string> colors;
if (settings.Get("availableColors", &colors) && colors.size() > 0) {
NSColorList* color_list = [[[NSColorList alloc] initWithName:@""] autorelease];
for (size_t i = 0; i < colors.size(); ++i) {
[color_list insertColor:[self colorFromHexColorString:colors[i]]
key:base::SysUTF8ToNSString(colors[i])
atIndex:i];
}
item.colorList = color_list;
}
std::string selectedColor;
if (settings.Get("selectedColor", &selectedColor)) {
item.color = [self colorFromHexColorString:selectedColor];
}
}
@ -307,25 +280,20 @@ static NSTouchBarItemIdentifier SliderIdentifier = @"com.electron.touchbar.slide
- (void)updateSlider:(NSSliderTouchBarItem*)item
withSettings:(const mate::PersistentDictionary&)settings {
std::string customizationLabel;
if (settings.Get("customizationLabel", &customizationLabel)) {
item.customizationLabel = base::SysUTF8ToNSString(customizationLabel);
}
std::string label;
settings.Get("label", &label);
item.label = base::SysUTF8ToNSString(label);
int maxValue = 100;
int minValue = 0;
int initialValue = 50;
int value = 50;
settings.Get("minValue", &minValue);
settings.Get("maxValue", &maxValue);
settings.Get("initialValue", &initialValue);
settings.Get("value", &value);
item.slider.minValue = minValue;
item.slider.maxValue = maxValue;
item.slider.doubleValue = initialValue;
item.slider.doubleValue = value;
}
- (NSTouchBarItem*)makePopoverForID:(NSString*)id
@ -341,11 +309,6 @@ static NSTouchBarItemIdentifier SliderIdentifier = @"com.electron.touchbar.slide
- (void)updatePopover:(NSPopoverTouchBarItem*)item
withSettings:(const mate::PersistentDictionary&)settings {
std::string customizationLabel;
if (settings.Get("customizationLabel", &customizationLabel)) {
item.customizationLabel = base::SysUTF8ToNSString(customizationLabel);
}
std::string label;
gfx::Image image;
if (settings.Get("label", &label)) {
@ -387,13 +350,8 @@ static NSTouchBarItemIdentifier SliderIdentifier = @"com.electron.touchbar.slide
}
}
}
NSGroupTouchBarItem* item = [NSClassFromString(@"NSGroupTouchBarItem") groupItemWithIdentifier:identifier items:generatedItems];
std::string customizationLabel;
if (settings.Get("customizationLabel", &customizationLabel)) {
item.customizationLabel = base::SysUTF8ToNSString(customizationLabel);;
}
return item;
return [NSClassFromString(@"NSGroupTouchBarItem") groupItemWithIdentifier:identifier
items:generatedItems];
}
@end

View file

@ -96,16 +96,33 @@ class TouchBarItem extends EventEmitter {
super()
this.id = `${nextItemID++}`
}
_addLiveProperty (name, initialValue) {
const privateName = `_${name}`
this[privateName] = initialValue
Object.defineProperty(this, name, {
get: function () {
return this[privateName]
},
set: function (value) {
this[privateName] = value
this.emit('change')
},
enumerable: true
})
}
}
TouchBar.Button = class TouchBarButton extends TouchBarItem {
constructor (config) {
super(config)
this.type = 'button'
this.label = config.label
this.backgroundColor = config.backgroundColor
this.labelColor = config.labelColor
this.onInteraction = config.click
const {click, label, backgroundColor} = config
this._addLiveProperty('label', label)
this._addLiveProperty('backgroundColor', backgroundColor)
if (typeof click === 'function') {
this.onInteraction = config.click
}
}
}
@ -113,12 +130,13 @@ TouchBar.ColorPicker = class TouchBarColorPicker extends TouchBarItem {
constructor (config) {
super(config)
this.type = 'colorpicker'
this.availableColors = config.availableColors
this.selectedColor = config.selectedColor
const {availableColors, change, selectedColor} = config
this._addLiveProperty('availableColors', availableColors)
this._addLiveProperty('selectedColor', selectedColor)
const {change} = config
if (typeof change === 'function') {
this.onInteraction = (details) => {
this._selectedColor = details.color
change(details.color)
}
}
@ -140,16 +158,7 @@ TouchBar.Label = class TouchBarLabel extends TouchBarItem {
constructor (config) {
super(config)
this.type = 'label'
this._label = config.label
}
set label (newLabel) {
this._label = newLabel
this.emit('change')
}
get label () {
return this._label
this._addLiveProperty('label', config.label)
}
}
@ -157,7 +166,7 @@ TouchBar.Spacer = class TouchBarSpacer extends TouchBarItem {
constructor (config) {
super(config)
this.type = 'spacer'
this.size = config.size
this._addLiveProperty('size', config.size)
}
}
@ -165,7 +174,7 @@ TouchBar.Popover = class TouchBarPopover extends TouchBarItem {
constructor (config) {
super(config)
this.type = 'popover'
this.label = config.label
this._addLiveProperty('label', config.label)
this.showCloseButton = config.showCloseButton
this.child = config.items
if (!(this.child instanceof TouchBar)) {
@ -178,13 +187,15 @@ TouchBar.Slider = class TouchBarSlider extends TouchBarItem {
constructor (config) {
super(config)
this.type = 'slider'
this.minValue = config.minValue
this.maxValue = config.maxValue
this.initialValue = config.initialValue
const {change, label, minValue, maxValue, value} = config
this._addLiveProperty('label', label)
this._addLiveProperty('minValue', minValue)
this._addLiveProperty('maxValue', maxValue)
this._addLiveProperty('value', value)
const {change} = config
if (typeof change === 'function') {
this.onInteraction = (details) => {
this._value = details.value
change(details.value)
}
}