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
# File 'lib/everyday-menu/menu.rb', line 19

def initialize(label, &block)
  @label               = label
  @builder             = block
  @menu                = NSMenu.alloc.init
  @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



136
137
138
139
140
141
142
143
144
145
# File 'lib/everyday-menu/menu.rb', line 136

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



71
72
73
74
75
76
# File 'lib/everyday-menu/menu.rb', line 71

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



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

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

Instance Method Details

#<<(item) ⇒ Object



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

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

#containedObjectObject



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

def containedObject
  @menu
end

#createStatusItem!Object



108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
# File 'lib/everyday-menu/menu.rb', line 108

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



127
128
129
# File 'lib/everyday-menu/menu.rb', line 127

def items
  @menuItems
end

#labelObject



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

def label
  @label ||= nil
end


42
43
44
# File 'lib/everyday-menu/menu.rb', line 42

def menuItem
  @mainMenuItem.item
end


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

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

#runOnBuildObject



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

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

#selectItem(label) ⇒ Object



131
132
133
134
# File 'lib/everyday-menu/menu.rb', line 131

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

#setStatusItemIcon(icon) ⇒ Object



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

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

#setStatusItemLength(length) ⇒ Object



102
103
104
105
106
# File 'lib/everyday-menu/menu.rb', line 102

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

#setStatusItemTitle(title) ⇒ Object



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

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

#setStatusItemViewClass(viewClass) ⇒ Object



96
97
98
99
100
# File 'lib/everyday-menu/menu.rb', line 96

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

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



48
49
50
# File 'lib/everyday-menu/menu.rb', line 48

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