Laurent you are right, however I noticed a little gotcha: If you use the following code: panel.beginSheetModalForWindow window, completionHandler: Proc.new do |result| return if (result == NSCancelButton) path = panel.filename dest_path = applicationSupportFolder guid = NSProcessInfo.processInfo.globallyUniqueString dest_path = "#{dest_path}/#{guid}" error = Pointer.new(:id) NSFileManager.defaultManager.copyItemAtPath(path, toPath:dest_path, error:error) NSApp.presentError(error) if error[0] movie.setValue(dest_path, forKey:"imagePath") end You get an argument error: tried to create Proc object without a block (ArgumentError) However using the curly brackets would work: panel.beginSheetModalForWindow window, completionHandler: Proc.new{|result| return if (result == NSCancelButton) path = panel.filename dest_path = applicationSupportFolder guid = NSProcessInfo.processInfo.globallyUniqueString dest_path = "#{dest_path}/#{guid}" error = Pointer.new(:id) NSFileManager.defaultManager.copyItemAtPath(path, toPath:dest_path, error:error) NSApp.presentError(error) if error[0] movie.setValue(dest_path, forKey:"imagePath") } Finally, the only way to get the do/end proc approach to work is to use the parenthesis around the arguments: panel.beginSheetModalForWindow(window, completionHandler: Proc.new do |result| return if (result == NSCancelButton) path = panel.filename dest_path = applicationSupportFolder guid = NSProcessInfo.processInfo.globallyUniqueString dest_path = "#{dest_path}/#{guid}" error = Pointer.new(:id) NSFileManager.defaultManager.copyItemAtPath(path, toPath:dest_path, error:error) NSApp.presentError(error) if error[0] movie.setValue(dest_path, forKey:"imagePath") end) - Matt On Sun, Jan 9, 2011 at 2:22 PM, Laurent Sansonetti <lsansonetti@apple.com>wrote:
Hi Rolando,
The syntax is simple, you simply pass a Proc project.
Here is an example:
framework 'Foundation' a = [1, 2, 3, 4, 5] a.enumerateObjectsUsingBlock(Proc.new { |obj, index, stop| p obj stop.assign(true) if index == 2 })
It looks like the snippet you pasted should just work. Did you find a problem?
Laurent
On Jan 9, 2011, at 8:09 AM, Rolando Abarca wrote:
Hi all,
I've taken a look at the referred issue (#712), but I'm not sure of the final implemented syntax. I'm trying to use a NSOpenPanel, so far this is what I'm doing:
{{{ def loadSprite(sender) @panel.beginSheetModalForWindow(@window, completionHandler:lambda { |code| NSLog("code: #{code}") }) end }}}
what's the Right Way(tm) to use a NSOpenPanel? thanks! -- Rolando Abarca M. Games For Food S.p.A. http://www.gamesforfood.com Phone: +1 (408) 345-5433 _______________________________________________ MacRuby-devel mailing list MacRuby-devel@lists.macosforge.org http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel
_______________________________________________ MacRuby-devel mailing list MacRuby-devel@lists.macosforge.org http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel