By the way, you can easily write your own implementation of the Application interface if ScriptApplication does not suit your needs. In fact, most Pivot applications are coded this way. G
On Nov 22, 2010, at 8:05 AM, Greg Brown wrote: > Sorry, didn't read the entire message. Passing the script source as a string > has obvious limitations, as you have discovered. Processing from standard in > might be a good enhancement. At one point we actually did support local files > but that code was removed. There was some issue with it, though I don't > remember exactly what it was at the moment. > >> On Nov 22, 2010, at 7:59 AM, Jacques Granduel wrote: >> >>> Thanks for your remark and I had indeed seen I could use "Pivot scripting", >>> but I want to dynamically shape my view from the outside, according to some >>> input. >>> >>> What could be the best way to send this object (as a String or >>> ByteArrayInputStream ?) to BXMLSerializer as the actual API seems to be >>> >>> java.lang.Object readObject(java.net.URL) >>> java.lang.Object readObject(java.io.InputStream) >>> java.lang.Object readObject(java.lang.Class,java.lang.String,boolean) >>> java.lang.Object readObject(java.lang.Class,java.lang.String) >>> java.lang.Object readObject(java.net.URL,org.apache.pivot.util.Resources). >>> >>> I modified the ScriptApplication.java for allowing path/to/file.bxml to be >>> accepted beside classpath resource using File(...).toURI().toURL(). >>> >>> As for the String, I wanted the equivalent, say (example in JS/Rhino) >>> JS>var win = <Window title="Hello BXML!" maximized="true" >>> xmlns:bxml="http://pivot.apache.org/bxml" >>> xmlns="org.apache.pivot.wtk"> >>> <Label text="Hello BXML!" >>> styles="{font:'Arial bold 24', color:'#ff0000', >>> horizontalAlignment:'center', verticalAlignment:'center'}"/> >>> </Window> >>> JS>ScriptApplication.main(["--src=" + win]); >>> The latest crashed because DesktopApplicationContext.java splits args this >>> way: >>> if (arg.startsWith("--")) { >>> String[] property = arg.split("="); >>> and my bxml snippet is full of "=" due to the attribute values! >>> So, as a quick workaround, I kept the first element of the property table, >>> and joined back the rest. >>> >>> ScriptApplication.java: >>> String src = properties.get(SRC_KEY); >>> InputStream ins = new ByteArrayInputStream(src.getBytes()); >>> BXMLSerializer bxmlSerializer = new BXMLSerializer(); >>> window = (Window)bxmlSerializer.readObject(ins); >>> window.open(display); >>> >>> This way it seems to work nicely. >>> >>> So... may I suggest adding loading bxml from File and String also? >>> >>> Thanks once again for your help, >>> jqg >>> >>> >>> 2010/11/22 Greg Brown <[email protected]> >>> > So my reasons for doing that kind of stuff, well, er, curiosity? learning >>> > and playing Pivot from a tiny environment, manipulating the bxml xml with >>> > E4X and dynamically injecting js code in the GUI ?... I have to learn how >>> > to directly pass a bxml String or E4X/XML object to ScriptApplication and >>> > to manipulate objects from the rhino shell, as it's doable in Swing. >>> >>> OK. Just in case you were not aware, BXML allows you to embed script code >>> directly within your markup, and will invoke the appropriate script engine >>> as needed. So don't necessarily need to launch Pivot from within Rhino to >>> use Rhino. >>> >>> G >>> >>> >> >
