pivot-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Maarten Boekhold <boekh...@yahoo.com>
Subject Re: Using pivot *from* JVM-based scripting languages
Date Fri, 04 Jan 2013 09:24:10 GMT
Hi Sandro,

Thank you for the warm welcome to Pivot. I've ran through the examples 
you mentioned, and have been able to create a Hello World example in 
Groovy with Pivot. I am confused about some things however:

First, I don't like the fact that it seems to be necessary to write your 
logic in a class that extends/implements Application. My programs are 
more than just a GUI and using this kind of naming/method suggest that 
everything is centered around the application. I suspect that this is 
partly because you're trying to hide the logic of initializing the 
graphics subsystem/awt as well as trying to hide the event loop. There's 
other ways that that could be done however.

I'm also still confused about pivot Windows. These seem to be a strange 
mix between a 'virtual desktop' and an actual window, eg if I extend a 
Hello World example with "window.setPreferredSize(200,500)" I'm getting 
strange results. The *window* isn't resized, but the way the Label is 
displayed inside the window is affected by this. Manually resizing the 
window by dragging the bottom right corner on the other hand seems to be 
have just as you would expect.

Finally, and I don't know if this is a bug or not, but if I create 2 
windows and call window.close() on one of them, pivot closes both 
windows instead and my application exits.

Let me give you an example of what I'd ideally would expect from using a 
windowing toolkit from Groovy. First of all, it wouldn't use XML to 
define the GUI layout. I know that in the Java world such an approach 
makes sense because Java code would get very verbose and it's not very 
good in showing the hierarchical relationships of the various GUI 
components. However in Groovy there's another way of addressing that, 
and that's by creating a Domain Specific Language by writing a so-called 
"Builder". Assuming we'd have a "PivotBuilder" in groovy, the equivalent 

for the java_window.bxml/JavaWindow.java example could look like:

import groovy.pivot.PivotBuilder

def pivot = new PivotBuilder()

def prompt = pivot.prompt(text: 'Hello from Java')
def window = pivot.window(size: [200,500], maximized: true, title: 'Java 
Window') {
     boxPane(orientation: 'vertical', styles: [horizontalAlignment: 
'center', verticalAlignment: 'center']) {
         label(text: 'This is a Java Window')
         button(text: 'Say Hello') {
             buttonPressListener << { button ->
                 // this is actually invalid code because 'window' is not
                 // defined here yet, (we're still working on it) but this
                 // is good enough to give an idea of how this would work


That's a first approximation of what a PivotBuilder in groovy could look 
like, heavily inspired by how the exist SwingBuilder (and to a lesser 
extend the SwtBuilder) work.

On the implementation side of such a PivotBuilder, I don't have any 
specific ideas yet. I know I don't particularly like using 
DesktopApplicationContext, it doesn't seem to fit the model very well to 
me (but again I need to look deeper into this). So any suggestions would 
be appreciated.

Just to let you know upfront as well, I'm interested in this (provided I 
can get over the first technical hurdle of how to just simply open a 
darn window), but I can't spend much time on this. Work doesn't allow 
it, and at home I can probably only get a few hours per weekend on this, 
maybe an hour here or there during the week.


On 01/03/2013 08:52 PM, Sandro Martini wrote:
> Hi Maarten, welcome to Pivot,
> under our example subproject (for example here:
> http://svn.apache.org/repos/asf/pivot/trunk/examples/src/org/apache/pivot/examples/scripting/
> ), there is a package org.apache.pivot.examples.scripting where we
> have some minimal scripting samples from Javascript (that embedded in
> the JVM, Groovy, and Scala).
> Note that it's an eclipse project with Scala support but not Groovy
> (don't remember why, I have to look ...), so to make it work you have
> to add the Groovy nature to it, then run the groovy_window.bxml for
> example with our Pivot eclipse plugin.
> In the meantime, you can do the same with javascript_window.bxml,
> java_window.bxml, and scala_window.bxml . Note that the Java and Scala
> version have a related class to simplify things. Probably a Groovy
> class could be done in the same way, really don't remember why it's
> missing here ...
> In this case, scripting was focused on using scripting languages
> inside Pivot bxml files.
> As you know, in Pivot the preferred way to build user interfaces is
> with bxml files, but of course all could be done even with code
> (scripting code or normal). And probably this could be a good way even
> in your case, to decouple the UI from the code.
> But I have never tried to make it work from a Groovy script, could be
> interesting.
> To further improve our interoperability with other JVM languages, we
> have some secondary projects at Apache-Extras, like this:
> http://code.google.com/a/apache-extras.org/p/pivot-multilang/
> but due to the lack of time, it's near-empty ...
> If you have some to share, please tell us.
> For questions, etc we are here ... thanks for now.
> Bye,
> Sandro

View raw message