class NSMenuItem

Attributes

rac_command[RW]
rac_originalTarget[RW]
rac_stateSignal[RW]

Public Instance Methods

rac_command=(command) click to toggle source
# File lib/drink-menu/ext/ns_menu_item.rb, line 6
def rac_command=(command)

  @rac_command = command

  self.enabled = (command && command.canExecute) || true

  return unless command

  # TODO: Set state via binding rather than validateMenuItem
  # Look at https://github.com/ReactiveCocoa/ReactiveCocoa/blob/2.0-development/ReactiveCocoaFramework/ReactiveCocoa/NSObject%2BRACAppKitBindings.m#L23
  #
  self.bind(NSEnabledBinding, toObject: self.rac_command, withKeyPath: "canExecute", options: nil)

  self.rac_hijackActionAndTargetIfNeeded

  @rac_command
end
rac_commandPerformAction(sender) click to toggle source
# File lib/drink-menu/ext/ns_menu_item.rb, line 44
def rac_commandPerformAction(sender)
  rac_command.execute(sender)
end
rac_hijackActionAndTargetIfNeeded() click to toggle source
# File lib/drink-menu/ext/ns_menu_item.rb, line 31
def rac_hijackActionAndTargetIfNeeded
  hijackSelector = :"rac_commandPerformAction:"

  return if target == self and action == hijackSelector

  NSLog("WARNING: NSControl.rac_command hijacks the control's existing target and action. You can access the original target via the rac_originalTarget property.") if target

  self.rac_originalTarget = target

  self.target = self
  self.action = hijackSelector
end
rac_stateSignal=(signal) click to toggle source
# File lib/drink-menu/ext/ns_menu_item.rb, line 24
def rac_stateSignal=(signal)
  @rac_stateSignal = signal
  @rac_stateSignal.subscribeNext ->(value){
    self.state = value
  }
end
validateMenuItem(item) click to toggle source
# File lib/drink-menu/ext/ns_menu_item.rb, line 48
def validateMenuItem(item)
  return rac_originalTarget.validateMenuItem(item) if rac_originalTarget and rac_originalTarget.respondsToSelector(:"validateMenuItem:")

  rac_command.canExecute
end