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

Reply via email to