class MenuMotion::MenuItem

Attributes

item_action[RW]
item_target[RW]
root_menu[RW]
tag[RW]
validate[RW]

Public Class Methods

new(params = {}) click to toggle source
Calls superclass method
# File lib/menu-motion/menu_item.rb, line 25
def initialize(params = {})
  super()
  update(params)
  self
end

Public Instance Methods

checked() click to toggle source
# File lib/menu-motion/menu_item.rb, line 11
def checked
  self.state == NSOnState
end
Also aliased as: checked?
checked=(value) click to toggle source
# File lib/menu-motion/menu_item.rb, line 16
def checked=(value)
  self.state = (value ? NSOnState : NSOffState)
end
checked?()
Alias for: checked
image=(value) click to toggle source
# File lib/menu-motion/menu_item.rb, line 20
def image=(value)
  value = NSImage.imageNamed(value) unless value.is_a?(NSImage)
  self.setImage(value)
end
perform_action() click to toggle source
# File lib/menu-motion/menu_item.rb, line 31
def perform_action
  if self.valid? && self.valid_target_and_action?
    if self.item_action.to_s.end_with?(":")
      self.item_target.performSelector(self.item_action, withObject: self)
    else
      self.item_target.performSelector(self.item_action)
    end
  end
end
update(params) click to toggle source
# File lib/menu-motion/menu_item.rb, line 41
def update(params)
  assign_attributes(params)

  self.item_action = params[:action] if params.has_key?(:action)
  self.item_target = params[:target] if params.has_key?(:target)

  # Set NSApp as the default target if no other target is given
  if self.item_action && self.item_target.nil?
    self.item_target = NSApp
  end

  # Setup submenu and keyboard shortcut
  set_submenu_from_params(params)
  set_keyboard_shortcut(params[:shortcut]) if params.has_key?(:shortcut)

  self
end
valid?() click to toggle source
# File lib/menu-motion/menu_item.rb, line 59
def valid?
  if self.submenu || self.valid_target_and_action?
    if self.validate.nil?
      true
    else
      self.validate.call(self)
    end
  else
    false
  end
end
valid_target_and_action?() click to toggle source
# File lib/menu-motion/menu_item.rb, line 71
def valid_target_and_action?
  self.item_target && self.item_action && self.item_target.respond_to?(self.item_action.gsub(":", ""))
end

Private Instance Methods

assign_attributes(params) click to toggle source
# File lib/menu-motion/menu_item.rb, line 123
def assign_attributes(params)
  [:image, :view, :checked, :object, :root_menu, :title, :validate].each do |key|
    self.send("#{key}=", params[key]) if params.has_key?(key)
  end
end
set_keyboard_shortcut(shortcut) click to toggle source
# File lib/menu-motion/menu_item.rb, line 77
def set_keyboard_shortcut(shortcut)
  if shortcut
    keys = shortcut.gsub("-", "+").split("+")
    key = keys.pop
    modifier_mask = 0
    modifier_keys = keys

    modifier_keys.each do |modifier_key|
      case modifier_key
      when "alt", "alternate", "opt", "option"
        modifier_mask |= NSAlternateKeyMask
      when "cmd", "command"
        modifier_mask |= NSCommandKeyMask
      when "ctl", "ctrl", "control"
        modifier_mask |= NSControlKeyMask
      when "shift"
        modifier_mask |= NSShiftKeyMask
      end
    end

    self.setKeyEquivalent(key)
    self.setKeyEquivalentModifierMask(modifier_mask)
  else
    self.setKeyEquivalent(nil)
    self.setKeyEquivalentModifierMask(nil)
  end
end
set_submenu_from_params(params) click to toggle source
# File lib/menu-motion/menu_item.rb, line 105
def set_submenu_from_params(params)
  if params[:sections]
    submenu = MenuMotion::Menu.new({
      title: self.title,
      sections: params[:sections]
    }, self.root_menu)
    self.setSubmenu(submenu)
  elsif params[:rows]
    submenu = MenuMotion::Menu.new({
      title: self.title,
      rows: params[:rows]
    }, self.root_menu)
    self.setSubmenu(submenu)
  end
end