class DrinkMenu::Menu
Attributes
builder[R]
itemAddedSubject[RW]
label[R]
memberCommand[RW]
memberTitleProperty[RW]
statusItem[RW]
statusItemIcon[RW]
statusItemTitle[RW]
Public Class Methods
new(label, &block)
click to toggle source
# File lib/drink-menu/menu.rb, line 78 def initialize(label, &block) @menuItems = {} @label = label @builder = block @menu = NSMenu.alloc.init @needsStatusItem = false @needsMenuItem = false end
statusMenuWithLabel(label, icon: image, statusItemViewClass: statusItemViewClass, &block)
click to toggle source
# File lib/drink-menu/menu.rb, line 21 def self.statusMenuWithLabel(label, icon: image, statusItemViewClass: statusItemViewClass, &block) new(label, &block).tap do |menu| menu.createStatusItemWithIcon image, viewClass: statusItemViewClass end end
Public Instance Methods
<<(item)
click to toggle source
# File lib/drink-menu/menu.rb, line 87 def <<(item) previousItemTag = @menuItems.keys.last || 0 item.tag = previousItemTag + 1 @menuItems[item.tag] = item @menu.addItem item.menuItem end
[](labelOrTag)
click to toggle source
# File lib/drink-menu/menu.rb, line 160 def [](labelOrTag) if labelOrTag.is_a? Fixnum @menuItems[labelOrTag] else @menuItems.values.find do |item| item.label == labelOrTag end end end
addMenuItemForMember(member)
click to toggle source
# File lib/drink-menu/menu.rb, line 98 def addMenuItemForMember(member) item = MenuItem.itemWithLabel(member.hash.to_s, title: member.send(memberTitleProperty)) item.representedObject = member item.rac_stateSignal = memberCommand.signal.map ->((_,value)){ value.representedObject == item.representedObject } self << item itemAddedSubject.sendNext(item) end
createMenuItemWithTitle(title)
click to toggle source
# File lib/drink-menu/menu.rb, line 127 def createMenuItemWithTitle(title) @needsMenuItem = true @statusItemTitle = title end
createStatusItem!()
click to toggle source
# File lib/drink-menu/menu.rb, line 178 def createStatusItem! statusBar = NSStatusBar.systemStatusBar @statusItem = statusBar.statusItemWithLength(NSSquareStatusItemLength) @statusItem.highlightMode = true @statusItem.menu = menu if @statusItemViewClass statusItemView = @statusItemViewClass.viewWithStatusItem(@statusItem) @statusItem.menu.delegate = @statusItemView @statusItem.view = statusItemView end @statusItem.title = @statusItemTitle @statusItem.image = @statusItemIcon @statusItem end
createStatusItemWithIcon(image)
click to toggle source
# File lib/drink-menu/menu.rb, line 137 def createStatusItemWithIcon(image) @needsStatusItem = true @statusItemIcon = image end
createStatusItemWithTitle(title)
click to toggle source
# File lib/drink-menu/menu.rb, line 132 def createStatusItemWithTitle(title) @needsStatusItem = true @statusItemTitle = title end
needsMenuItem?()
click to toggle source
# File lib/drink-menu/menu.rb, line 174 def needsMenuItem? @needsMenuItem end
needsStatusItem?()
click to toggle source
# File lib/drink-menu/menu.rb, line 170 def needsStatusItem? @needsStatusItem end
observeValueForKeyPath(keyPath, ofObject: object, change: change, context: context)
click to toggle source
# File lib/drink-menu/menu.rb, line 110 def observeValueForKeyPath(keyPath, ofObject: object, change: change, context: context) return unless keyPath == "arrangedObjects" if itemArray.length < object.arrangedObjects.length member = object.arrangedObjects.lastObject addMenuItemForMember(member) end end
selectItem(label)
click to toggle source
# File lib/drink-menu/menu.rb, line 148 def selectItem(label) item = self[label] item.command.execute(item) end
selectItemByMember(member)
click to toggle source
# File lib/drink-menu/menu.rb, line 153 def selectItemByMember(member) item = @menuItems.values.find do |i| i.representedObject == member end item.command.execute(item) end
subscribe(itemLabel, &block)
click to toggle source
# File lib/drink-menu/menu.rb, line 123 def subscribe(itemLabel, &block) self[itemLabel].subscribe(&block) end
subscribeToMembers(&block)
click to toggle source
Only works when built with menuWithLabel:itemsFromCollection:titleProperty
# File lib/drink-menu/menu.rb, line 119 def subscribeToMembers(&block) memberCommand.signal.subscribeNext(block) end