[Seaside] Updating non Smallfaces component.

Timothy James Ziebart timothy at churchmilitant.org
Thu Aug 27 20:12:40 UTC 2009


Hi Juan,  thanks for responding. 

The google map is an object that implements a renderOn method.  It is 
the GoogleMaps package by James Foster.  
http://seaside.gemstone.com/ss/GoogleMaps. 

I have created WAComponent and non WAComponent versions.  I do not have 
a SmallFace equivalent widget.   Maybe that is my question - is it 
possible to build a SmallFaces widget that will take advantage of the 
features available? 

Tim

Burella Juan M. wrote:
> Hi Tim,
>  Let me see if I've understood what are you doing. You need to:
>
> -Create (or modify?) a LBCGoogleMap when a ListBox changes
> -Render or update the LBCGoogleMap when a Button is clicked.
>
> You said LBCGoogleMap is not a WAComponent, what it is? If it's a
> SFObject, then you can add to your SearcherInterface sending as
> argument of #addSubpane: message, as already knows how to answer
> #name (remember, it must answer #name properly, that is, not the #name
> method in Object).
>
> Then you can have:
>
> >>initialize
> ....
>   self addSubpane: self map
> ...
>
>
> >>map
>  ^LBCGoogleMap new
>     name: 'mapDisplay';  " configure the mapDisplay's name"
>     setCenter: model coordinates zoom: model zoom;
>     addControl: GControl largeMapControl;
>     setUIToDefault;
>     yourself.
>
> If when the list changes, you have to re-create the mapDisplay, in the
> #regionSelectionChanged "callback" (the message sent when the list is
> #changed) you should replace it as follows:
>
>  oldMap := self paneNamed: 'mapDisplay'.
>  self replacePane: oldMap with: self map
>
> And to refresh properly the mapDisplay it should be rendered inside a
> tag with id equals to its styleId, like this:
>
> LBCGoogleMap >>renderContentOn: aRenderer
>
>            aRenderer div
>                     id: self styleId;
>                 with: [ "render your component" ]
>
> and must answer #refreshOn: (please see #when:send:to:refresh: section
> in http://wiki.squeak.org/squeak/6093). You can implement it this way:
>
> refreshOn: aRenderer
>       "Support for the events"
>
>       self renderContentOn: aRenderer
>
>
> You will need to preserve the same #styleId, to do this simply send
> the message styleId: 'anyId' to the mapDisplay. Another way to solve
> this is adding a SFPanel which contains the mapDisplay and refresh it
> when the button is clicked.
>  
> Regards
> Juan M.
>
> On Thu, Aug 27, 2009 at 1:02 PM, Timothy James Ziebart 
> <timothy at churchmilitant.org <mailto:timothy at churchmilitant.org>> wrote:
>
>     Hi All,
>
>     I have an object SearchInterface, a subclass of
>     WASmallFacesComposite.  On SearchInterface there are rendered a
>     number of SFListBoxes and SFButtons.  Included are three listboxes
>     that are cascaded and the control was created like this:
>
>     createRegionListBox
>       |pane panes list|
>         list := self session findCodeByParent: 'region'.
>         panes := OrderedCollection
>           with: ( self paneNamed: 'nhoodList')
>           with: ( self paneNamed: 'cityList').
>             pane := SFListBox new.
>       pane
>           name: 'regionList';
>           items: list;
>           lines: 5;
>           printSelector: #asString;
>           owner: self;
>           when: #changed:
>               send: #regionSelectionChanged:
>               to: self
>               refresh: panes.
>       ^pane
>
>     The listboxes work correctly.  What I need to do is have a
>     GoogleMap rendered on SearchInterfaces as well.  The map will not
>     be a WAComponent as I need to render it as new whenever the
>     listbox contents change.  But not before an Update button is
>     pressed.  Such as:
>
>     createUpdateButton
>
>       | pane panes |
>         panes := OrderedCollection with: (*self paneNamed: 'mapDisplay')*.
>       pane := SFButton new.
>       pane
>           label: 'Update Map';
>           name: 'updateButton';
>           when: #clicked
>               send: #updateButtonPressed
>               to: self
>               refresh: panes.
>       ^pane
>
>     The question is how do I create *mapDisplay*?  mapDisplay is
>     rendered like this everytime the update button is pressed.
>
>     map
>
>       ^LBCGoogleMap new
>           setCenter: model coordinates zoom: model zoom;
>           addControl: GControl largeMapControl;
>           setUIToDefault;
>           yourself.
>
>     Can I place it on a SmallFace component that will render as I
>     desire or do I replace it with non SmallFace components?  Thank
>     you for any assistance.
>
>     Tim
>     _______________________________________________
>     seaside mailing list
>     seaside at lists.squeakfoundation.org
>     <mailto:seaside at lists.squeakfoundation.org>
>     http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
>
>
> ------------------------------------------------------------------------
>
> _______________________________________________
> seaside mailing list
> seaside at lists.squeakfoundation.org
> http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
>   



More information about the seaside mailing list