Browse Source

Add more options

Samuel Attard 8 years ago
parent
commit
a55cddaa53

+ 42 - 2
atom/browser/ui/cocoa/atom_touch_bar.mm

@@ -515,7 +515,6 @@ static NSString* const ImageScrubberItemIdentifier = @"scrubber.image.item";
   scrubber.delegate = self;
   scrubber.dataSource = self;
   scrubber.identifier = id;
-  scrubber.mode = NSScrubberModeFree;
 
   [item setView:scrubber];
   [self updateScrubber:item withSettings:settings];
@@ -526,6 +525,44 @@ static NSString* const ImageScrubberItemIdentifier = @"scrubber.image.item";
 - (void)updateScrubber:(NSCustomTouchBarItem*)item
           withSettings:(const mate::PersistentDictionary&)settings {
   NSScrubber* scrubber = item.view;
+
+  bool showsArrowButtons = false;
+  settings.Get("showArrowButtons", &showsArrowButtons);
+  scrubber.showsArrowButtons = showsArrowButtons;
+
+  std::string selectedStyle;
+  std::string overlayStyle;
+  settings.Get("selectedStyle", &selectedStyle);
+  settings.Get("overlayStyle", &overlayStyle);
+
+  if (selectedStyle == "outline") {
+    scrubber.selectionBackgroundStyle = [NSScrubberSelectionStyle outlineOverlayStyle];
+  } else if (selectedStyle == "background") {
+    scrubber.selectionBackgroundStyle = [NSScrubberSelectionStyle roundedBackgroundStyle];
+  } else {
+    scrubber.selectionBackgroundStyle = nil;
+  }
+
+  if (overlayStyle == "outline") {
+    scrubber.selectionOverlayStyle = [NSScrubberSelectionStyle outlineOverlayStyle];
+  } else if (overlayStyle == "background") {
+    scrubber.selectionOverlayStyle = [NSScrubberSelectionStyle roundedBackgroundStyle];
+  } else {
+    scrubber.selectionOverlayStyle = nil;
+  }
+
+  std::string mode;
+  settings.Get("mode", &mode);
+  if (mode == "fixed") {
+    scrubber.mode = NSScrubberModeFixed;
+  } else {
+    scrubber.mode = NSScrubberModeFree;
+  }
+
+  bool continuous = true;
+  settings.Get("continuous", &continuous);
+  scrubber.continuous = continuous;
+
   [scrubber reloadData];
 }
 
@@ -546,7 +583,10 @@ static NSString* const ImageScrubberItemIdentifier = @"scrubber.image.item";
 
   mate::PersistentDictionary settings = settings_[s_id];
   std::vector<mate::PersistentDictionary> items;
-  settings.Get("items", &items);
+  if (!settings.Get("items", &items)) return nil;
+
+  if ((long)index >= (long)items.size()) return nil;
+
   mate::PersistentDictionary item = items[index];
 
   NSScrubberItemView* itemView;

+ 37 - 0
docs/api/touch-bar-scrubber.md

@@ -21,3 +21,40 @@ The following properties are available on instances of `TouchBarScrubber`:
 
 A `ScrubberItem[]` array representing the items in this scrubber.  Updating this value immediately
 updates the control in the touch bar.  Updating deep properties inside this array **does not update the touch bar**.
+
+#### `touchBarSegmentedControl.selectedStyle`
+
+A `String` representing the style that selected items in the scrubber should have.  Updating this value immediately
+updates the control in the touch bar.  Possible values:
+
+* `background` - Maps to `[NSScrubberSelectionStyle roundedBackgroundStyle]`
+* `outline` - Maps to `[NSScrubberSelectionStyle outlineOverlayStyle]`
+* `null` - Actually null, not a string, removes all styles
+
+#### `touchBarSegmentedControl.overlayStyle`
+
+A `String` retpresenting the style that selected items in the scrubber should have.  This style is overlayed on top
+of the scrubber item instead of being placed behind it  Updating this value immediately updates the control in the
+touch bar.  Possible values:
+
+* `background` - Maps to `[NSScrubberSelectionStyle roundedBackgroundStyle]`
+* `outline` - Maps to `[NSScrubberSelectionStyle outlineOverlayStyle]`
+* `null` - Actually null, not a string, removes all styles
+
+#### `touchBarSegmentedControl.showArrowButtons`
+
+A `Boolean` representing whether to show the left / right selection arrows in this scrubber.  Updating this value
+immediately updates the control in the touch bar.  
+
+#### `touchBarSegmentedControl.mode`
+
+A `String` representing the mode of this scrubber.  Updating this value immediately
+updates the control in the touch bar.  Possible values:
+
+* `fixed` - Maps to `NSScrubberModeFixed`
+* `free` - Maps to `NSScrubberModeFree`
+
+#### `touchBarSegmentedControl.continuous`
+
+A `Boolean` representing whether this scrubber is continous or not.  Updating this value immediately
+updates the control in the touch bar.

+ 6 - 1
lib/browser/api/touch-bar.js

@@ -236,9 +236,14 @@ TouchBar.TouchBarScrubber = class TouchBarScrubber extends TouchBarItem {
     super()
     if (config == null) config = {}
     const {items} = config
-    let {onSelect, onHighlight} = config
+    let {onSelect, onHighlight, selectedStyle, highlightedStyle, showArrowButtons, continuous, mode} = config
     this.type = 'scrubber'
     this._addLiveProperty('items', items)
+    this._addLiveProperty('selectedStyle', selectedStyle || null)
+    this._addLiveProperty('overlayStyle', highlightedStyle || null)
+    this._addLiveProperty('showArrowButtons', showArrowButtons || false)
+    this._addLiveProperty('mode', mode || 'free')
+    this._addLiveProperty('continuous', continuous || true)
 
     if (typeof onSelect === 'function' || typeof onHighlight === 'function') {
       if (onSelect == null) onSelect = () => {}