Class: EverydayMenu::MenuItem

Inherits:
Object
  • Object
show all
Includes:
MyAccessors
Defined in:
lib/everyday-menu/menu_item.rb

Class Method Summary collapse

Instance Method Summary collapse

Methods included from MyAccessors

#[], #[]=, common_names, def_getter, def_setter, define_methods, fill_options, #get_val, getter_names, #has, #is, key_to_name, my_attr_accessor, my_attr_accessor_bool, my_attr_reader, my_attr_reader_bool, my_attr_writer, name_to_key, #set_val, setter_names, setup_obj

Constructor Details

#initialize(menuItem = nil) ⇒ MenuItem

Returns a new instance of MenuItem.



36
37
38
# File 'lib/everyday-menu/menu_item.rb', line 36

def initialize(menuItem=nil)
  @menuItem = menuItem || NSMenuItem.alloc.init
end

Class Method Details

.create(label, title, options = {}) ⇒ Object



19
20
21
# File 'lib/everyday-menu/menu_item.rb', line 19

def self.create(label, title, options = {})
  new.tap { |item| setup_obj(item, label, title, options) }
end

.def_close_presetObject



128
129
130
131
132
# File 'lib/everyday-menu/menu_item.rb', line 128

def self.def_close_preset
  definePreset(:close) { |item|
    fill_preset(item, key_equivalent: 'w') { |_, _| NSApp.keyWindow.performClose(item) }
  }
end

.def_hide_others_presetObject



110
111
112
113
114
# File 'lib/everyday-menu/menu_item.rb', line 110

def self.def_hide_others_preset
  definePreset(:hide_others) { |item|
    fill_preset(item, key_equivalent: 'H', key_equivalent_modifier_mask: NSCommandKeyMask|NSAlternateKeyMask) { |_, _| NSApp.hideOtherApplications(item) }
  }
end

.def_hide_presetObject



104
105
106
107
108
# File 'lib/everyday-menu/menu_item.rb', line 104

def self.def_hide_preset
  definePreset(:hide) { |item|
    fill_preset(item, key_equivalent: 'h') { |_, _| NSApp.hide(item) }
  }
end

.def_presetsObject



90
91
92
93
94
95
96
97
# File 'lib/everyday-menu/menu_item.rb', line 90

def self.def_presets
  def_hide_preset
  def_hide_others_preset
  def_show_all_preset
  def_quit_preset
  def_close_preset
  def_services_preset
end

.def_quit_presetObject



122
123
124
125
126
# File 'lib/everyday-menu/menu_item.rb', line 122

def self.def_quit_preset
  definePreset(:quit) { |item|
    fill_preset(item, key_equivalent: 'q') { |_, _| NSApp.terminate(item) }
  }
end

.def_services_presetObject



134
135
136
137
138
139
# File 'lib/everyday-menu/menu_item.rb', line 134

def self.def_services_preset
  definePreset(:services) { |item|
    item[:submenu] = Menu.create(:services_menu, item[:title], services_menu: true)
    item.registerOnBuild { NSApp.servicesMenu = item[:submenu] }
  }
end

.def_show_all_presetObject



116
117
118
119
120
# File 'lib/everyday-menu/menu_item.rb', line 116

def self.def_show_all_preset
  definePreset(:show_all) { |item|
    item.subscribe { |_, _| NSApp.unhideAllApplications(item) }
  }
end

.definePreset(label, &block) ⇒ Object



85
86
87
88
# File 'lib/everyday-menu/menu_item.rb', line 85

def self.definePreset(label, &block)
  @@presets        ||= {}
  @@presets[label] = block
end

.fill_preset(item, options = {}, &block) ⇒ Object



99
100
101
102
# File 'lib/everyday-menu/menu_item.rb', line 99

def self.fill_preset(item, options = {}, &block)
  fill_options(item, options)
  item.subscribe &block
end

.separatorObject



23
24
25
26
27
28
29
30
# File 'lib/everyday-menu/menu_item.rb', line 23

def self.separator
  @@separatorId ||= 0
  @@separatorId += 1
  label         = :"separator#{@@separatorId}"
  new(NSMenuItem.separatorItem).tap do |item|
    item.label = label
  end
end

.separatorItemObject



32
33
34
# File 'lib/everyday-menu/menu_item.rb', line 32

def self.separatorItem
  self.separator
end

Instance Method Details

#commandsObject



179
180
181
# File 'lib/everyday-menu/menu_item.rb', line 179

def commands
  @commands ||= EverydayMenu::CommandList.new(self, self.label)
end

#containedObjectObject



40
41
42
# File 'lib/everyday-menu/menu_item.rb', line 40

def containedObject
  @menuItem
end

#executeObject



175
176
177
# File 'lib/everyday-menu/menu_item.rb', line 175

def execute
  @menuItem.runBlock(self)
end

#keyEquivalentModifierMaskObject



67
68
69
# File 'lib/everyday-menu/menu_item.rb', line 67

def keyEquivalentModifierMask
  @menuItem.keyEquivalentModifierMask
end

#labelObject



51
52
53
# File 'lib/everyday-menu/menu_item.rb', line 51

def label
  @label ||= nil
end

#onBuildObject



162
163
164
# File 'lib/everyday-menu/menu_item.rb', line 162

def onBuild
  @onBuild ||= []
end

#registerOnBuild(&block) ⇒ Object



166
167
168
169
# File 'lib/everyday-menu/menu_item.rb', line 166

def registerOnBuild(&block)
  @onBuild ||= []
  @onBuild << block
end

#runOnBuildObject



158
159
160
# File 'lib/everyday-menu/menu_item.rb', line 158

def runOnBuild
  onBuild.each { |block| block.call }
end

#setDynamicTitle(getter) ⇒ Object Also known as: dynamicTitle=, dynamic_title=



145
146
147
# File 'lib/everyday-menu/menu_item.rb', line 145

def setDynamicTitle(getter)
  @dynamicTitle = EverydayMenu::DynamicTitle.new(getter, self, self.item, self[:title])
end

#setKeyEquivalentModifierMask(value) ⇒ Object Also known as: keyEquivalentModifierMask=, key_equivalent_modifier_mask=



71
72
73
# File 'lib/everyday-menu/menu_item.rb', line 71

def setKeyEquivalentModifierMask(value)
  @menuItem.keyEquivalentModifierMask = value
end

#setPreset(action) ⇒ Object



78
79
80
81
82
83
# File 'lib/everyday-menu/menu_item.rb', line 78

def setPreset(action)
  @@presets ||= {}
  if @@presets.has_key?(action)
    @@presets[action].call(self)
  end
end

#setSubmenu(menu) ⇒ Object



44
45
46
# File 'lib/everyday-menu/menu_item.rb', line 44

def setSubmenu(menu)
  @menuItem.submenu = menu.menu
end

#setTag(tag) ⇒ Object Also known as: tag=



61
62
63
# File 'lib/everyday-menu/menu_item.rb', line 61

def setTag(tag)
  @menuItem.tag = tag
end

#subscribe(command_id = nil, &block) ⇒ Object



171
172
173
# File 'lib/everyday-menu/menu_item.rb', line 171

def subscribe(command_id = nil, &block)
  @menuItem.subscribe(self, self.label, command_id, &block)
end

#tagObject



57
58
59
# File 'lib/everyday-menu/menu_item.rb', line 57

def tag
  @menuItem.tag
end

#updateDynamicTitleObject



152
153
154
# File 'lib/everyday-menu/menu_item.rb', line 152

def updateDynamicTitle
  @dynamicTitle.update if @dynamicTitle
end