This seems to be a Ruby syntax point, unrelated to MacRuby. Laurent
On Jan 9, 2011, at 2:32 PM, Matt Aimonetti wrote: > 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 <lsansone...@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 > > > _______________________________________________ > 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