Thanks, Kam. 

Thanks, Matt.

That was very helpful.

Sophie

> From: Kam Dahlin <hax...@me.com>
> To: "MacRuby development discussions."
>       <macruby-devel@lists.macosforge.org>
> Subject: Re: [MacRuby-devel] Scripting OmniGraffle
> Message-ID: <8a0549a1-912c-42d2-8a33-4a4a1950d...@me.com>
> Content-Type: text/plain; CHARSET=US-ASCII
> 
> Hi Sophie,
> 
> Here is a little example, that I hope makes things more clear.
> 
> graffle = 
> SBApplication.applicationWithBundleIdentifier("com.omnigroup.OmniGrafflePro")
> 
> win = graffle.windows.first
> canvas = win.canvas
> 
> circle = 
> OmniGraffleProfessionalShape.alloc.initWithProperties({:name=>"Circle", 
> :origin=>[100.00, 100.00], :size=>[300, 300]})
> canvas.shapes.addObject(circle)
> 
> The example above uses the class name that should match what is in the header 
> file that you generated. 
> 
> You can also use a slightly different method for getting the correct class:
> 
> circle = 
> graffle.classForScriptingClass("shape").alloc.initWithProperties({:name=>"Circle",
>  :origin=>[100.00, 100.0], :size=>[300.0, 300.0]})
> 
> the -classForScriptingClass method takes the name of the class you would use 
> in Applescript and then returns the class that the ScriptingBridge machinery 
> expects. Just a slightly different approach and useful if you know the name 
> of the class you would use in Applescript, but not the actual name used by 
> ScriptingBridge.
> 
> If you look in the header that you generated for OmniGraffle, you will see a 
> bunch of @property declarations in each of the class definitions. The names 
> of these properties you use as the keys in the initWithProperties method. 
> Alternately you could also do:
> 
> circle = OmniGraffleProfessionalShape.alloc.init
> canvas.shapes.addObject(circle)
> circle.setName("Circle")
> circle.setOrigin([100.0, 100.0])
> circle.setSize([300.0, 300.0])
> 
> If you are going to set properties on an object, it must be added to a 
> container first. 
> 
> Most of this is explained pretty well in the ScriptingBridge documentation, 
> which is probably worth a look: 
> http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ScriptingBridgeConcepts/AboutScriptingBridge/AboutScriptingBridge.html#//apple_ref/doc/uid/TP40006104-CH3-SW9
> 
> hth
> kam
> 
> P.S. the origin and size properties are actually defined as part of the 
> OmniGraffleProfessionalGraphic class which OmniGraffleProfessionalShape 
> inherits from.
> 
> On Nov 15, 2011, at 11:43 AM, Sophie wrote:
> 
>> Sorry for the sloppy subject line in my earlier question.
>> 
>> Thanks, Kam, Matt for your very helpful replies. 
>> 
>> Kam, any idea how I would initialize the alloc'd shape to be e.g. a Circle 
>> of some size at some position?
>> 
>> I generated the files with sdef & gen_bridge_metadata, found lots of useful 
>> things there. Is there something in these files that would lead me to:
>> 
>> shape = OmniGraffleShape.alloc.init 
>> canvas.shapes.addObject shape
>> 
>> ?  I don't see either alloc or init, or addObject in the 2 files.
>> 
>> Also, is there some reason why there is no corresponding "make ..." method 
>> in either file? Applescript gladly seems to call "make" (so does Ruby 
>> Appscript) on doc, canvas, or layer ... but I'm no Applescript guru :-(
>> 
>> Thanks !! 
>> 
>> 
> 

_______________________________________________
MacRuby-devel mailing list
MacRuby-devel@lists.macosforge.org
http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel

Reply via email to