Revision: 446 http://trac.macosforge.org/projects/ruby/changeset/446 Author: rich@infoether.com Date: 2008-08-14 21:43:28 -0700 (Thu, 14 Aug 2008) Log Message: ----------- map the on_<menu> stuff for app, enable better menu nav, add on_action to menu item Modified Paths: -------------- MacRuby/trunk/lib/hotcocoa/mappings/application.rb MacRuby/trunk/lib/hotcocoa/mappings/menu.rb MacRuby/trunk/lib/hotcocoa/mappings/menu_item.rb Modified: MacRuby/trunk/lib/hotcocoa/mappings/application.rb =================================================================== --- MacRuby/trunk/lib/hotcocoa/mappings/application.rb 2008-08-15 04:42:06 UTC (rev 445) +++ MacRuby/trunk/lib/hotcocoa/mappings/application.rb 2008-08-15 04:43:28 UTC (rev 446) @@ -5,15 +5,12 @@ end def handle_block(application, &block) + begin + require 'lib/menu' + application.menu = application_menu + rescue LoadError => e + end block.call(application) - unless application.menu - begin - require 'lib/menu' - application.menu = application_menu(application) - rescue LoadError => e - puts "No menu specified" - end - end application.run end @@ -31,10 +28,47 @@ setMainMenu(menu) end - def menu - mainMenu + def menu(path=nil) + if path + find_menu(mainMenu, path) + else + mainMenu + end end + def on_hide(menu) + hide(menu) + end + + def on_about(menu) + orderFrontStandardAboutPanel(menu) + end + + def on_hide_others(menu) + hideOtherApplications(menu) + end + + def on_show_all(menu) + unhideAllApplications(menu) + end + + def on_quit(menu) + terminate(menu) + end + + private + + def find_menu(menu, path) + key = path.keys.first + value = path.values.first + menu = menu[key] + if value.kind_of?(Array) + find_menu(menu, value.first) + else + menu[value] + end + end + end end \ No newline at end of file Modified: MacRuby/trunk/lib/hotcocoa/mappings/menu.rb =================================================================== --- MacRuby/trunk/lib/hotcocoa/mappings/menu.rb 2008-08-15 04:42:06 UTC (rev 445) +++ MacRuby/trunk/lib/hotcocoa/mappings/menu.rb 2008-08-15 04:43:28 UTC (rev 446) @@ -27,6 +27,7 @@ def item(symbol, options={}) options[:title] ||= titleize(symbol) + options[:action] ||= "on_#{symbol}:" item = builder.menu_item(options) item_map[symbol] = item addItem item @@ -37,8 +38,9 @@ addItem NSMenuItem.separatorItem end - def [](symbol) - item_map[symbol] + def [](*symbols) + symbol = symbols.shift + symbols.empty? ? item_map[symbol] : item_map[symbol][*symbols] end private Modified: MacRuby/trunk/lib/hotcocoa/mappings/menu_item.rb =================================================================== --- MacRuby/trunk/lib/hotcocoa/mappings/menu_item.rb 2008-08-15 04:42:06 UTC (rev 445) +++ MacRuby/trunk/lib/hotcocoa/mappings/menu_item.rb 2008-08-15 04:43:28 UTC (rev 446) @@ -14,7 +14,22 @@ end custom_methods do + + def on_action=(behavior) + object = Object.new + object.instance_variable_set("@behavior", behavior) + def object.perform_action(sender) + @behavior.call(sender) + end + setTarget(object) + setAction("perform_action:") + end + def on_action(&behavior) + self.on_action = behavior + self + end + def key keyEquivalent end