Canvas's measure() probably expects all children to be visible or
excluded via includeInLayout.  Since I don't think that's what you want,
you'll need to write your own measure method().

 

The measure() method should assume that all children are property
addChild'd (and thus your charts shouldn't be unparented) and use the
measured sizes of its children to calculate its measuredWidth/Height.
It would probably just call getExplcitOrMeasuredWidth/Height on the
children if selectedChild==null and estimate what the tile layout will
look like, or if there is a selectedChild, just measure that one child.

 

Based on those measurements and any other constraints on your component,
its parent will determine its size and your component's
updateDisplayList gets called with that size.  In your override of
updateDL, you would see if selectedChild==null and do the final sizing
and positioning of the children and probably make all children visible,
or if selectedChild is set, make all other children invisible and size
and position that one child to fill the unscaledWidth/Height passed into
updateDL.

 

I would not remove and re-add children when selectedChild changes.  It
would likely cause more measuring and layout again.

 

-Alex

 

________________________________

From: [email protected] [mailto:[EMAIL PROTECTED] On
Behalf Of Richard Rodseth
Sent: Saturday, June 07, 2008 1:30 PM
To: [email protected]
Subject: Re: [flexcoders] Measurement and scrolling

 

Thanks for indulging me, everyone. I wish I could share all the code
now - I certainly hope to later. I'm sorry to say I find that ESRIA
example quite inscrutable as sample code, though the UI is certainly
nice.

So, to review where I am, I have a component that tiles its children
and resizes rather well (perhaps by accident). It derives from Canvas
(should possibly be UIComponent), and the updateDisplayList method
sets the x,y,width,height of the children (should possibly be calling
setActualSize, thought it currently doesn't assume that the children
are UIComponents, even though they are). The measure() method is
inherited from Canvas.

When an individual pod is maximized, the contents of the display list
is not changed. Rather updateDisplayList sets the visible property as
well. That's something I'm trying to rectify now, so that measure()
will be correct, but I'm running into some problems (eg. charting
classes expecting a parent). Any suggestions regarding this aspect?
I'm trying something like the following.

public function set selectedChild(child:DisplayObject) : void {
trace("selectedChild");
_selectedChild = child;
if (child == null) {
this.removeAllChildren();
for each (var child:DisplayObject in _savedTiles) {
this.addChild(child);
}
_savedTiles = null;
} else {
_savedTiles = this.getChildren();
this.removeAllChildren();
this.addChild(_selectedChild);
} 
invalidateSize();
}

I thought of using visible/includinLayout, but then I'd have to
introduce the child-is-UIComponent assumption (which I realize may
ultimately be necessary).

On Sat, Jun 7, 2008 at 9:35 AM, Daniel Gold <[EMAIL PROTECTED]
<mailto:danielggold%40gmail.com> > wrote:
> You may want to look at the code in PodLayoutManager.as from the Flex
> Dashboard example as it seems to be very similar to what you're doing
>
> http://examples.adobe.com/flex3/devnet/dashboard/main.html
<http://examples.adobe.com/flex3/devnet/dashboard/main.html> 
>
>
> On Fri, Jun 6, 2008 at 12:04 AM, Josh McDonald <[EMAIL PROTECTED]
<mailto:dznuts%40gmail.com> > wrote:
>>
>> Measure can always be bigger than the actual width/height, that's
what
>> it's for.
>>
>> On Fri, Jun 6, 2008 at 11:32 AM, Richard Rodseth <[EMAIL PROTECTED]
<mailto:rrodseth%40gmail.com> >
>> wrote:
>>>
>>> No, I mean like zooming a window. I think the problem lies in how I
>>> tell the TiledCanvas that one of its children is the zoomed one
>>> (setting "visible" of all the others to false in updateDisplayList).
>>> Stay tuned.
>>>
>>> However, setting that aside, it also seems as though I might be
>>> commiting a hack if I allow the measured size of the TiledCanvas to
>>> remain larger than its bounds, even though it allows the scrolling
to
>>> work (at least in the all-tiles-shown case).
>>>
>>> On Thu, Jun 5, 2008 at 5:46 PM, Josh McDonald <[EMAIL PROTECTED]
<mailto:dznuts%40gmail.com> > wrote:
>>> > I'm not sure exactly what you're doing, or what you're trying to
>>> > achieve
>>> > yet. By "expanding a tile" do you mean you're setting the minimum
to be
>>> > bigger, or you're manually overriding the decisions the base
Container
>>> > implementation makes in updateDisplayList()?
>>> >
>>> > On Fri, Jun 6, 2008 at 10:41 AM, Richard Rodseth
<[EMAIL PROTECTED] <mailto:rrodseth%40gmail.com> >
>>> > wrote:
>>> >>
>>> >> The docs say:
>>> >>
>>> >> If the horizontalScrollPolicy is ScrollPolicy.AUTO, the
horizontal
>>> >> scroll bar appears when all of the following are true:
>>> >>
>>> >> * One of the container's children extends beyond the left edge or
>>> >> right edge of the container.
>>> >> * The clipContent property is true.
>>> >> * The width and height of the container are large enough to
>>> >> reasonably accommodate a scroll bar.
>>> >>
>>> >> And sure enough, if I set a static minimum on tiledView, I get
the
>>> >> desired effect.
>>> >>
>>> >> If I expand a tile and change the minimum to something else, any
idea
>>> >> which invalidate method(s) I should call?
>>> >>
>>> >> On Thu, Jun 5, 2008 at 4:57 PM, Josh McDonald <[EMAIL PROTECTED]
<mailto:dznuts%40gmail.com> >
>>> >> wrote:
>>> >> > If you want to be able to measure your subcomponents, always
use
>>> >> > setActualSize. I learned that the hard way recently :)
>>> >> >
>>> >> > I've recently been doing a whole bunch of measure and
>>> >> > updatedisplaylist
>>> >> > voodoo for a custom container, so I'll be slightly helpful!
>>> >> >
>>> >> > -Josh
>>> >> >
>>> >> > On Fri, Jun 6, 2008 at 9:36 AM, Richard Rodseth
<[EMAIL PROTECTED] <mailto:rrodseth%40gmail.com> >
>>> >> > wrote:
>>> >> >>
>>> >> >> Clearly I haven't mastered layout and measurement.
>>> >> >>
>>> >> >> I've implemented a custom component which tiles its children
in
>>> >> >> equal-sized tiles, but also has a state (not a flex state)
where
>>> >> >> one
>>> >> >> tile fills the component.
>>> >> >>
>>> >> >> I subclassed Canvas and set the sizes and positions of
children in
>>> >> >> updateDisplayList. I didn't override measure(), but it works
very
>>> >> >> nicely, resizing children smoothly as it is resized.
>>> >> >>
>>> >> >> Now, however, I would like to set a minimum width and height
for
>>> >> >> the
>>> >> >> tiled view, after which scroll bars appear. The minimum will
be
>>> >> >> different if the component is in the one-tile-expanded case.
>>> >> >>
>>> >> >> Can I do this without further mods to my component?
>>> >> >> Should my updateDisplayList be calling setActualSize rather
than
>>> >> >> setting x,y,width, height?
>>> >> >> Should I have a measure() implementation?
>>> >> >> How would it differ from the inherited one?
>>> >> >> In a scenario like the following, would I set the minWidth and
>>> >> >> minHeight on the parent or child?
>>> >> >> Or, to ask another way, do the the scrollpolicy and minimum
>>> >> >> properties
>>> >> >> always belong on the same component?
>>> >> >>
>>> >> >> <mx:Canvas id="scrollableArea" width="100%" height="100%"
>>> >> >> verticalScrollPolicy="auto"
>>> >> >> horizontalScrollPolicy="auto">
>>> >> >>
>>> >> >> <view:TiledCanvas id="tiledView"
>>> >> >> width="100%" height="100%"
>>> >> >> >
>>> >> >> </view:TiledCanvas>
>>> >> >> </mx:Canvas>
>>> >> >>
>>> >> >> Thanks.
>>> >> >
>>> >> >
>>> >> >
>>> >> > --
>>> >> > "Therefore, send not to know For whom the bell tolls. It tolls
for
>>> >> > thee."
>>> >> >
>>> >> > :: Josh 'G-Funk' McDonald
>>> >> > :: 0437 221 380 :: [EMAIL PROTECTED]
<mailto:josh%40gfunk007.com> 
>>> >> >
>>> >
>>> >
>>> >
>>> > --
>>> > "Therefore, send not to know For whom the bell tolls. It tolls for
>>> > thee."
>>> >
>>> > :: Josh 'G-Funk' McDonald
>>> > :: 0437 221 380 :: [EMAIL PROTECTED] <mailto:josh%40gfunk007.com> 
>>> >
>>
>>
>>
>> --
>> "Therefore, send not to know For whom the bell tolls. It tolls for
thee."
>>
>> :: Josh 'G-Funk' McDonald
>> :: 0437 221 380 :: [EMAIL PROTECTED] <mailto:josh%40gfunk007.com> 
>
> 

 

Reply via email to