MenuMotion is a RubyMotion wrapper inspired by Formotion for creating OS X status bar menus with a syntax that should feel familiar if you've used Formotion.
Add this line to your application's Gemfile:
gem "menu-motion"
And then execute:
$ bundle
Or install it yourself as:
$ gem install menu-motion
Here's an awesome graphic of a menu:
|‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾|
| [icon] First Item > |‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾|
|---------------------| First Subitem > |‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾|
| About MenuMotion |-----------------| First Action |
| Quit | Some Action | Second Action |
|_____________________|_________________|_______________|
And the Ruby to generate this menu:
menu = MenuMotion::Menu.new({
sections: [{
rows: [{
icon: "icon.png",
title: "First Item",
sections: [{
rows: [{
title: "First Subitem",
rows: [{
title: "First Action",
target: self,
action: "first_action"
}, {
title: "Second Action",
target: self,
action: "second_action"
}]
}]
}, {
rows: [{
title: "Some Action",
target: self,
action: "some_action"
}]
}]
}]
}, {
rows: [{
title: "About MenuMotion",
target: self,
action: "about"
}, {
title: "Quit",
target: self,
action: "quit"
}]
}]
})
Sections are used to add dividers between sets of "rows" (menu items).
menu = MenuMotion::Menu.new({
sections: [{
rows: []
}, {
rows: []
}
})
To link a menu item to a submenu, simply define sections or rows within the row item that should display the submenu.
menu = MenuMotion::Menu.new({
rows: [{
title: "Menu item",
rows: [{
title: "Submenu item 1"
}, {
title: "Submenu item 2"
}]
}]
})
Adding an action to a menu item is easy. Just define the target and action.
menu = MenuMotion::Menu.new({
rows: [{
title: "Basic Action",
target: self,
action: "basic_action"
}, {
title: "Pass the menu item to the action",
target: self,
action: "action_with_sender:"
}]
})
def basic_action
puts "Hello World"
end
def action_with_sender(sender)
puts "Hello from #{sender}"
end
Assign keys to menu items that will need to be updated.
menu = MenuMotion::Menu.new({
rows: [{
title: "Menu item",
key: :main_item
rows: [{
title: "Submenu item 1",
key: :submenu_item1,
target: self,
action: "do_something:"
}, {
title: "Submenu item 2",
key: :submenu_item2,
target: self,
action: "do_something:"
}]
}]
})
# Let's update the first item's title:
menu.update(:main_item, {
title: "Hello World"
})
# And give the first submenu item a submenu.
# The target and action will not be used if a submenu is defined.
menu.update(:submenu_item1, {
rows: [{
title: "Click me",
target: self,
action: "clicked"
}]
})
- Fork it
- Create your feature branch (
git checkout -b my-new-feature
) - Commit your changes (
git commit -am "Add some feature"
) - Push to the branch (
git push origin my-new-feature
) - Create new Pull Request