WACompound: creating Seaside Widgets

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|

WACompound: creating Seaside Widgets

Nick
Hi,

I want to build a widget for latitude, longitude entry ([N|S], lat
degrees, lat minutes; [E|W] long degrees, long minutes). Looking at
examples in Seaside it appears I have at least two ways of proceeding:
1) Derive from WAComponent eg WADateSelector
2) Derive from WACompound eg WADateInput

In my application I'll be using the latitude and longitude entry in
multiple places and like the idea of being able to use it directly as
a brush on the canvas as:

RenderContentOn: html
  html latLongInput on: #position of: self

However WADateInput appears to be significantly more complex than
WADateSelector and I don't entirely understand what is going on. For
example why in WADateInput>>addCallback is a hiddenInput added? I also
guess I'd have to modify WARenderCanvas to add something like:

WARenderCanvas>>latitudeLongitudeInput
   ^ self brush: NALatitudeLongitudeInput new

Any thoughts on the relative merits of the two approaches and why are
there two Date input widgets?

Thanks in advance

Nick
_______________________________________________
seaside mailing list
[hidden email]
http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
Reply | Threaded
Open this post in threaded view
|

Re: WACompound: creating Seaside Widgets

Ryan Simmons-2
Components

Descending from WAComponent produces a seaside component this can be
called from or embeded into another seaside component. If you embed a
component into another one you have to add it to the children array.
Advantages each component has its own state that is maintained, uses
#renderContentOn: which is very easy to understand.
Disadvantage must use the children collection to embed it

Tags

Descending from WACompound produces a seaside tag that can be embeded
into a seaside component this would be typically called like html
latLongInput on: #postition of: self.
Advantages can easly be added multiple times to a component. Has a
nice interface.
Disadvantages has no state, a new instance is created each time the
page is refreshed.

The added complexity on WADateInput comes from it trying to maintain
the standard tag interface allowing you to use #on:of, #callback:,
#value etc.
Tags use the same canvas to render themselves on as a component but
this is done in the #with: method not in #renderContentOn: you also
use canvas instead of html so for you you could have a #with: method
something like.
with: aBlock
     canvas text: 'latitiude: '.
     canvas textInput on: #latitude of: self value.
     canvas text: 'longitude: '.
     canvas textInput on: #longitude of: self value.
     canvas hiddenInput callback: [callbackBlock value: self value]

The hidden callback is used to answer the origional callback defined
on your component either through #on:of: or #callback:
To get a working tag you would probalbly want to redefine #value  to
something like
value
    ^value ifNil: [value := MyLongitudeLatitudeClass new]

This is not very bulletproof (you have to privide a callback when
rendering (#on:of: is just a shortcut for #value: #callback)) but
should work

On Sat, Nov 8, 2008 at 7:53 AM, Nick Ager <[hidden email]> wrote:

> Hi,
>
> I want to build a widget for latitude, longitude entry ([N|S], lat
> degrees, lat minutes; [E|W] long degrees, long minutes). Looking at
> examples in Seaside it appears I have at least two ways of proceeding:
> 1) Derive from WAComponent eg WADateSelector
> 2) Derive from WACompound eg WADateInput
>
> In my application I'll be using the latitude and longitude entry in
> multiple places and like the idea of being able to use it directly as
> a brush on the canvas as:
>
> RenderContentOn: html
>  html latLongInput on: #position of: self
>
> However WADateInput appears to be significantly more complex than
> WADateSelector and I don't entirely understand what is going on. For
> example why in WADateInput>>addCallback is a hiddenInput added? I also
> guess I'd have to modify WARenderCanvas to add something like:
>
> WARenderCanvas>>latitudeLongitudeInput
>   ^ self brush: NALatitudeLongitudeInput new
>
> Any thoughts on the relative merits of the two approaches and why are
> there two Date input widgets?
>
> Thanks in advance
>
> Nick
> _______________________________________________
> seaside mailing list
> [hidden email]
> http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
>
_______________________________________________
seaside mailing list
[hidden email]
http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
Reply | Threaded
Open this post in threaded view
|

Re: WACompound: creating Seaside Widgets

Nick
Thanks for informative reply. I think I've cracked it and have a validating lat/long tag.
Is this documented somewhere that I've missed?

Ryan Simmons-4 wrote
Components

Descending from WAComponent produces a seaside component this can be
called from or embeded into another seaside component. If you embed a
component into another one you have to add it to the children array.
Advantages each component has its own state that is maintained, uses
#renderContentOn: which is very easy to understand.
Disadvantage must use the children collection to embed it

Tags

Descending from WACompound produces a seaside tag that can be embeded
into a seaside component this would be typically called like html
latLongInput on: #postition of: self.
Advantages can easly be added multiple times to a component. Has a
nice interface.
Disadvantages has no state, a new instance is created each time the
page is refreshed.

The added complexity on WADateInput comes from it trying to maintain
the standard tag interface allowing you to use #on:of, #callback:,
#value etc.
Tags use the same canvas to render themselves on as a component but
this is done in the #with: method not in #renderContentOn: you also
use canvas instead of html so for you you could have a #with: method
something like.
with: aBlock
     canvas text: 'latitiude: '.
     canvas textInput on: #latitude of: self value.
     canvas text: 'longitude: '.
     canvas textInput on: #longitude of: self value.
     canvas hiddenInput callback: [callbackBlock value: self value]

The hidden callback is used to answer the origional callback defined
on your component either through #on:of: or #callback:
To get a working tag you would probalbly want to redefine #value  to
something like
value
    ^value ifNil: [value := MyLongitudeLatitudeClass new]

This is not very bulletproof (you have to privide a callback when
rendering (#on:of: is just a shortcut for #value: #callback)) but
should work

On Sat, Nov 8, 2008 at 7:53 AM, Nick Ager <nick.ager@gmail.com> wrote:
> Hi,
>
> I want to build a widget for latitude, longitude entry ([N|S], lat
> degrees, lat minutes; [E|W] long degrees, long minutes). Looking at
> examples in Seaside it appears I have at least two ways of proceeding:
> 1) Derive from WAComponent eg WADateSelector
> 2) Derive from WACompound eg WADateInput
>
> In my application I'll be using the latitude and longitude entry in
> multiple places and like the idea of being able to use it directly as
> a brush on the canvas as:
>
> RenderContentOn: html
>  html latLongInput on: #position of: self
>
> However WADateInput appears to be significantly more complex than
> WADateSelector and I don't entirely understand what is going on. For
> example why in WADateInput>>addCallback is a hiddenInput added? I also
> guess I'd have to modify WARenderCanvas to add something like:
>
> WARenderCanvas>>latitudeLongitudeInput
>   ^ self brush: NALatitudeLongitudeInput new
>
> Any thoughts on the relative merits of the two approaches and why are
> there two Date input widgets?
>
> Thanks in advance
>
> Nick
> _______________________________________________
> seaside mailing list
> seaside@lists.squeakfoundation.org
> http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
>
_______________________________________________
seaside mailing list
seaside@lists.squeakfoundation.org
http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside