Thanks, Alex. That gives me a lot to mull over. Since the only use case of interest that doesn't work is the one where you'd like to specify a minimum size for the tiled view, it's an awful lot of extra work, but I'll think it over. If I can crack my other long-standing challenge (the ScaleOrCenterView of another thread), then I could probably get by with no scroll bars at all.
Thanks again for the solution outline. On Sat, Jun 7, 2008 at 11:17 PM, Alex Harui <[EMAIL PROTECTED]> wrote: > 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]> 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 >> >> >> On Fri, Jun 6, 2008 at 12:04 AM, Josh McDonald <[EMAIL PROTECTED]> 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]> >>> 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]> 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]> >>>> > 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]> >>>> >> 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]> >>>> >> > 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] >>>> >> > >>>> > >>>> > >>>> > >>>> > -- >>>> > "Therefore, send not to know For whom the bell tolls. It tolls for >>>> > thee." >>>> > >>>> > :: Josh 'G-Funk' McDonald >>>> > :: 0437 221 380 :: [EMAIL PROTECTED] >>>> > >>> >>> >>> >>> -- >>> "Therefore, send not to know For whom the bell tolls. It tolls for thee." >>> >>> :: Josh 'G-Funk' McDonald >>> :: 0437 221 380 :: [EMAIL PROTECTED] >> >> > >

