class DrinkMenu::Menu

Attributes

builder[R]
itemAddedSubject[RW]
label[R]
memberCommand[RW]
memberTitleProperty[RW]
menu[R]
menuItems[R]
statusItem[RW]
statusItemIcon[RW]
statusItemTitle[RW]

Public Class Methods

menuWithLabel(label, title: title, menuItem: needsMenuItem, &block) click to toggle source
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
menuItemFromMenu!() click to toggle source
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