> Well, first off, I apologize for the insult.  I really should have chosen a 
> less aggressive subject line.  It is certainly not my intent to insult the 
> Pivot team, which has produced a very impressive system with limited 
> resources.  Nor do I wish to glorify WPF, which I agree is a bloated beast.  
> But it happens to be a beast with which I am somewhat familiar, and not long 
> ago Chris invited me to discuss things from there or elsewhere that I thought 
> might benefit Pivot, so here I am.

Fair enough. Discussion is always welcome.

> > <BoxPane orientation="vertical" styles="{fill:true}">
> >   <BoxPane styles="{horizontalAlignment:'center'}">
> >     <Border preferredWidth="150" preferredHeight="150"
> >       styles="{color:'gray', thickness:4, cornerRadii:10}">
> >       <ImageView bxml:id="imgPhoto" styles="{fill:true}" />
> >     </Border>
> >   </BoxPane>
> >   <Label styles="{wrapText:true}" text="...Some long paragraph..." />
> > </BoxPane>
> ...
> > Am I missing something?  Is there an easier way?
> 
> I might put the BoxPane in the Border rather than the other way around.
> 
> Well, that wouldn't be less wordy, but I also don't think it works.  The 
> Border would fill the horizontal space.  And even if it didn't, I can't 
> center it, since Border lacks a horizontalAlignment property.

True. To center the border, you would need to put it in a BoxPane.

> You might also consider using TablePane as your outer container instead of 
> BoxPane.
> 
> It's true that I can get practically anything I want with TablePane, but it 
> can be pretty cumbersome.  The equivalent of a vertical BoxPane means adding 
> a columns specification, and wrapping each element in TablePane.Row.  In my 
> particular example, unless I'm missing some trick, it's more like
> 
> <TablePane>
>   <columns>
>     <TablePane.Column width="1*" />
>     <TablePane.Column width="-1" />
>     <TablePane.Column width="1*" />
>   </columns>
>   <TablePane.Row>
>     <TablePane.Filler/>
>     <Border styles="{color:'gray', thickness:4, cornerRadii:10}">
>       <ImageView bxml:id="imgPhoto" styles="{fill:true}"
>         preferredWidth="150" preferredHeight="150" />
>     </Border>
>     <TablePane.Filler/>
>   </TablePane.Row>
>   <TablePane.Row>
>     <Label TablePane.columnSpan="3" styles="{wrapText:true}" 
>       text="...Some long paragraph..." />
>   </TablePane.Row>
>   <TablePane.Row>
>     <TablePane.Filler/>
>     <PushButton buttonData="Press Me" />
>     <TablePane.Filler/>
>   </TablePane.Row>
> </TablePane>
> 
> But that's not quite right, because it ties the width of the imageview to the 
> width of the button -- if the image is wider than the button, the button is 
> stretched to the width of the image, while if the button is wider, the border 
> is stretched to the width of the button, leaving me no longer with a square 
> border.  

It is fairly common to put BoxPanes in table cells to manage alignment. Another 
option we have talked about is allowing a caller to specify the alignment of a 
table cell (similar to HTML), perhaps via an attached property such as 
"TablePane.horizontalAlignment"/"TablePane.verticalAlignment". We decided 
against it since the same results could be achieved via composition, but of 
course it is still an option.

> So I really have to split it up into multiple tables:

...

Couldn't you just put the button in a BoxPane rather than in a separate 
3-column table?

> * The XAML editor has Intellisense.  

That's a tooling issue though, not an inherent design limitation.

> * There's a visual designer, so in most cases I don't have to run my app to 
> see whether I got it right, or at least close.  

This is also a tooling issue. But I agree that these features are invaluable.

> * The connection between a XAML file and its backing class is handled 
> automagically internally.  

That's largely because XAML is compiled into a class, whereas BXML is loaded 
dynamically. However, it's not unreasonable to consider "compiling" BXML at 
some point in the future.

> * Events are a bit simpler.  That's mostly Java's fault, not Pivot's, but it 
> still is a learning issue.  In WPF, if I want to be notified when my control 
> is resized, I add a single method (or even a closure) to the control; I don't 
> have to write a ComponentListener with 11 (!) methods, 10 of which go unused.

Agreed on this point - though you can generally use an Adapter to avoid having 
to implement every method.

> But if someone were to ask me my recommendation for a framework in which to 
> build a GUI app that they only ever wanted to run on a Windows desktop, I'd 
> have to point them at WPF, sorry.  On the other hand, for cross-platform 
> apps, I *do* recommend Pivot, but it's with a lot of caveats.

That's cool. I'd probably recommend WPF for Windows-only apps myself, if only 
because the support is likely to be *way* better.  :-)

> So when there are things from WPF that I think would make Pivot more usable, 
> I hope I can bring them up.  Earlier I've mentioned such things as a 
> ScalingPane (something I could really use right now and have no idea how to 
> implement myself) and simpler markup for document spans of text (which you 
> fixed in 2.0.1, thank you).  I often hesitate to do so, lest you feel I'm 
> casting aspersions on Pivot.  I'm probably coming off as way to much of a WPF 
> fanboy as it is, which is unfortunate, since I and my colleagues get mad at 
> Microsoft all the time...

I wouldn't hesitate to continue making suggestions. Overall, the end result is 
positive.

G

Reply via email to