Class: EverydayMenu::Menu

Inherits:
Object
  • Object
show all
Includes:
MyAccessors
Defined in:
lib/everyday-menu/menu.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(label, &block) ⇒ Menu

Returns a new instance of Menu.



19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/everyday-menu/menu.rb', line 19

def initialize(label, &block)
  @label               = label
  @builder             = block
  @menu                = NSMenu.alloc.init
  @menu.delegate       = self
  @menuItems           = MenuItemList.new(@menu)
  @mainMenu            = false
  @statusMenu          = false
  @servicesMenu        = false
  @windowsMenu         = false
  @helpMenu            = false
  @statusItemTitle     = nil
  @statusItemIcon      = nil
  @statusItemViewClass = nil
  @statusItemLength    = nil
end

Class Method Details

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



15
16
17
# File 'lib/everyday-menu/menu.rb', line 15

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

.def_accessorsObject



5
6
7
8
9
10
11
# File 'lib/everyday-menu/menu.rb', line 5

def self.def_accessors
  my_attr_writer :label
  my_attr_accessor_bool :servicesMenu, :windowsMenu, :helpMenu, :mainMenu
  my_attr_reader_bool :statusMenu
  my_attr_reader :statusItemTitle, :statusItemIcon, :statusItemViewClass, :statusItemLength, :statusItem
  attr_reader :menu, :builder
end

.def_aliasesObject



145
146
147
148
149
150
151
152
153
154
# File 'lib/everyday-menu/menu.rb', line 145

def self.def_aliases
  alias :statusItemTitle= :setStatusItemTitle
  alias :status_item_title= :setStatusItemTitle

  alias :statusItemIcon= :setStatusItemIcon
  alias :status_item_icon= :setStatusItemIcon

  alias :statusItemViewClass= :setStatusItemViewClass
  alias :status_item_view_class= :setStatusItemViewClass
end

.def_build_blocksObject



80
81
82
83
84
85
# File 'lib/everyday-menu/menu.rb', line 80

def self.def_build_blocks
  registerBuildBlock(:services_menu) { |menu| NSApp.servicesMenu = menu.menu }
  registerBuildBlock(:windows_menu) { |menu| NSApp.windowsMenu = menu.menu }
  registerBuildBlock(:help_menu) { |menu| NSApp.helpMenu = menu.menu }
  registerBuildBlock(:status_menu) { |menu| menu.createStatusItem! }
end

.registerBuildBlock(field, &block) ⇒ Object



75
76
77
78
# File 'lib/everyday-menu/menu.rb', line 75

def self.registerBuildBlock(field, &block)
  @@buildBlocks        ||= {}
  @@buildBlocks[field] = block
end

Instance Method Details

#<<(item) ⇒ Object



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

def <<(item)
  @menuItems << item
end

#containedObjectObject



65
66
67
# File 'lib/everyday-menu/menu.rb', line 65

def containedObject
  @menu
end

#createStatusItem!Object



117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
# File 'lib/everyday-menu/menu.rb', line 117

def createStatusItem!
  statusBar                 = NSStatusBar.systemStatusBar
  @statusItem               = statusBar.statusItemWithLength(@statusItemLength || NSSquareStatusItemLength)
  @statusItem.highlightMode = true

  @statusItem.menu = self.menu

  unless @statusItemViewClass.nil?
    statusItemView            = @statusItemViewClass.viewWithStatusItem(@statusItem)
    @statusItem.menu.delegate = @statusItemView
    @statusItem.view          = statusItemView
  end

  @statusItem.title = @statusItemTitle
  @statusItem.image = @statusItemIcon

  @statusItem
end

#itemsObject



136
137
138
# File 'lib/everyday-menu/menu.rb', line 136

def items
  @menuItems
end

#labelObject



89
90
91
# File 'lib/everyday-menu/menu.rb', line 89

def label
  @label ||= nil
end


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

def menuItem
  @mainMenuItem.item
end


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

def menuItemFromMenu!
  @mainMenuItem ||= MenuItem.create(self[:label], self[:title], submenu: self)
  self
end


36
37
38
39
40
41
42
# File 'lib/everyday-menu/menu.rb', line 36

def menuNeedsUpdate(menu)
  flags = (NSEvent.modifierFlags & NSDeviceIndependentModifierFlagsMask)
  shouldHideSecretMenu = !(flags == NSAlternateKeyMask)
  @menuItems.each { |menuItem|
    menuItem.item.setHidden(shouldHideSecretMenu) if menuItem.opt?
  }
end

#runOnBuildObject



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

def runOnBuild
  @@buildBlocks ||= {}
  @@buildBlocks.each { |block| block[1].call(self) if self.is(block[0]) }
  @menuItems.each { |item| item.runOnBuild }
end

#selectItem(label) ⇒ Object



140
141
142
143
# File 'lib/everyday-menu/menu.rb', line 140

def selectItem(label)
  item = self.items[label]
  item.execute
end

#setStatusItemIcon(icon) ⇒ Object



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

def setStatusItemIcon(icon)
  @mainMenu       = false unless icon.nil?
  @statusItemIcon = icon
  @statusMenu     = true unless icon.nil?
end

#setStatusItemLength(length) ⇒ Object



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

def setStatusItemLength(length)
  @mainMenu         = false unless length.nil?
  @statusItemLength = length
  @statusMenu       = true unless length.nil?
end

#setStatusItemTitle(title) ⇒ Object



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

def setStatusItemTitle(title)
  @mainMenu        = false unless title.nil?
  @statusItemTitle = title
  @statusMenu      = true unless title.nil?
end

#setStatusItemViewClass(viewClass) ⇒ Object



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

def setStatusItemViewClass(viewClass)
  @mainMenu            = false unless viewClass.nil?
  @statusItemViewClass = viewClass
  @statusMenu          = true unless viewClass.nil?
end

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



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

def subscribe(label, command_id = nil, &block)
  self.items[label].subscribe(command_id, &block)
end