Working with the Text of a Shape in OmniGraffle
I'm have trouble understanding how to work with text of an object.
I have made a sample and then copied as AppleScript. I would like to break down the properties so that I can work with them. I'd like to set the text and maybe even change the text of an existing shape. Here is what the copied AppleScript looks like: tell application "OmniGraffle Professional" tell canvas of front window make new shape at end of graphics with properties {name: "RoundRect", textSize: {0.800000, 1.000000}, user data: {myFirst: "1", myThird: "3", myforth: "4", mySecond: "2"}, fill: no fill, textPosition: {0.100000, 0.000000}, origin: {109.000000, 177.794006}, vertical padding: 0, size: {231.242004, 26.227800}, text: {text: "test", text: "test", alignment: center}, side padding: 0, draws shadow: false} end tell end tell Below is the the modified AppleScript. As you can see I have commented out the text property because it didn't work. I can only seem to set the text property when I create the shape. I would really like to know how to work with the text of a shape. tell application "OmniGraffle Professional 5" tell canvas of front window make new shape set lastGraphicID to (get id of result) tell graphic id lastGraphicID make new user data item with properties {name:"myFirst", value:"1"} make new user data item with properties {name:"mySecond", value:"2"} make new user data item with properties {name:"myThird", value:"3"} make new user data item with properties {name:"myforth", value:"4"} set name to "RoundRect" set textSize to {0.8, 1.0} set fill to no fill set textPosition to {0.1, 0.0} set origin to {15.0, 204.397003} set vertical padding to 0 set size to {231.242004, 26.2278} --set text to {text: "test", text: "test", alignment: center} set side padding to 0 set draws shadow to false end tell end tell end tell Thanks, |
I would too. This requires some developer help because I can't figure out how to set text without destroying existing text properties (such as color, size, font, etc). I can't even figure out how to get existing color, size and font from text.
in case this helps some (g is a shape): [CODE]set text of g to { text: "My new text", size: 8, font: "arial", alignment: center, color:{65535,65535,65535}}[/CODE] |
You can assign a nested property list to reset the [B][COLOR="Blue"]text[/COLOR][/B] property of an existing shape, and apply different formats to different parts of the string ...
[CODE]tell application "OmniGraffle Professional 5" tell canvas of front window set text of front shape to {{text:"text in two "}, {text:"fonts", font:"HoeflerText-Regular", size:24}} end tell end tell[/CODE] [UPDATE] To read the formatting properties of different attribute runs, you need to avoid coercing the text property to a string variable. Examples of using [I]references[/I] further down this thread. [COLOR="White"]--[/COLOR] |
How do I get it to change just the color of the text without replacing the entire text and its properties? Something like:
[CODE]tell application "OmniGraffle Professional 5" tell canvas of front window set color of properties of front shape to {0, 0, 65535} end tell end tell[/CODE] Or, how do I get the color of the existing text? Where are the properties for text held as I can't find them in the existing DOM. How would I say the following: [CODE]tell application "OmniGraffle Professional 5" tell canvas of front window set p to color of properties of front shape -- or set p to color of second text of properties of front shape end tell end tell[/CODE] |
[QUOTE=cwingrav;76749]How do I get it to change just the color of the text without replacing the entire text and its properties?
Or, how do I get the color of the existing text? Where are the properties for text held as I can't find them in the existing DOM[/QUOTE] Both impossible, I believe. My understanding is that Apple Events don't speak the language of "Rich Text", so there is no obvious way for Omni developers (or any other developers) to enable you to fetch rich text properties through applescript ... There is some recent technical chat between developers grappling with these issues at [URL="http://bit.ly/ce3E3O"]http://bit.ly/ce3E3O[/URL] [COLOR="White"]--[/COLOR] |
Ah, so it stores this information in a rich text format that is not accessible to us scripts. Any chance a future version of OmniGraffle will just use regular text and store the text attributes as entries in the DOM? This would be quite nice for us scripter end users.
BTW, this post, had I read it earlier, would have saved me hours over the several months I have looked for this answer. Thanks for the answer. Wish it were a happier one though... argh. |
[QUOTE=cwingrav;76757]Thanks for the answer. Wish it were a happier one though... argh.[/QUOTE]
I hate to disagree with the previous posters, but I have no trouble creating a box with (say) green text in it. I believe the following code should be equivalent to what you originally posted.... [CODE]tell application "OmniGraffle 5" tell canvas of front window set lastGraphicID to id of (make new shape at end of graphics with properties {name:"RoundRect", fill:no fill, draws shadow:false, size:{231.242004, 26.2278}, vertical padding:0, autosizing:full, origin:{15.0, 204.397003}, textSize:{0.8, 1.0}, textPosition:{0.1, 0.0}, rotation:0, text:{text:"test", font:"Helvetica", size:30, alignment:center, color:{0, 65535, 0}}, draws stroke:true, side padding:0}) tell graphic id lastGraphicID make new user data item with properties {name:"myFirst", value:"1"} make new user data item with properties {name:"mySecond", value:"2"} make new user data item with properties {name:"myThird", value:"3"} make new user data item with properties {name:"myforth", value:"4"} end tell end tell end tell [/CODE] |
[QUOTE=snarke;77096]I hate to disagree with the previous posters, but I have no trouble creating a box with (say) green text in it. I believe the following code should be equivalent to what you originally posted.... [/QUOTE]
**snip** Creating from scratch is not the problem. There is existing code for that. The problem is querying a graphic for its current properties which the above poster says isn't possible, a limitation of Applescript. Thanks for the sample code though as someone else will probably find it useful. |
You can get the styling properties of the text of a graphic with this applescript:
[CODE] tell application "OmniGraffle Professional 5" tell canvas of front window set p to properties of text of shape 1 p end tell end tell[/CODE] you will get something like this {superscript:missing value, underlined:false, color:{0, 0, 0}, font:"Tahoma Bold", size:12.0, text:"some text", class:text, alignment:center, baseline offset:missing value} |
Well, you can get styling properties that apply to the whole thing, yes. However, if you make some different styling to part of the text, your technique doesn't work.
[URL=http://imageshack.us/photo/my-images/440/screenshot20120202at450.png/][IMG]http://img440.imageshack.us/img440/2546/screenshot20120202at450.png[/IMG][/URL] Copy As Applescript gives: [code] tell application "OmniGraffle Professional" tell canvas of front window make new shape at end of graphics with properties {fill: no fill, draws shadow: false, size: {131.000000, 23.000000}, side padding: 0, autosizing: full, origin: {99.000000, 180.500000}, text: {{text: "This is a bit of ", text: "This is a bit of ", size: 11}, {text: "colored", text: "colored", size: 11, color: {1.000000, 0.000000, 0.000000}}, {text: " text.", text: " text.", size: 11}}, draws stroke: false} end tell end tell [/code] Your script fragment gives: [URL=http://imageshack.us/photo/my-images/716/screenshot20120202at452.png/][IMG]http://img716.imageshack.us/img716/4011/screenshot20120202at452.png[/IMG][/URL] I believe that shows the problem RobTrew is referring to above. |
All times are GMT -8. The time now is 11:18 AM. |
Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2024, vBulletin Solutions, Inc.