addChild is a Flash thing, from DisplayObjectContainer. UIComponent overrides it
Container overrides that override. UIComponent is a container and can have children. It just isn't a Flex Container, which provides common container services like clipping, layout in most cases, scrollbars, borders and backgrounds. Most Flex controls derive from UIComponent because they don't need all of the stuff Container does. Michael, Ely, Doug and others generally start at the smallest base and extend from there so you don't carry extra weight. In plenty of posts I recommend folks back off from using a Canvas and use UIComponent instead. ________________________________ From: [email protected] [mailto:[EMAIL PROTECTED] On Behalf Of Josh McDonald Sent: Sunday, June 01, 2008 7:34 PM To: [email protected] Subject: Re: [flexcomponents] Re: Fwd: Center/Shrink To Fit Much appreciated it is too mate :) On Mon, Jun 2, 2008 at 11:29 AM, Michael Labriola <[EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]> > wrote: Perhaps. I just wanted to clarify the why, not set any policies :) --- In [email protected] <mailto:flexcomponents%40yahoogroups.com> , "Josh McDonald" <[EMAIL PROTECTED]> wrote: > > I still think Container makes more sense in this instance though ;- ) > > On Mon, Jun 2, 2008 at 11:21 AM, Josh McDonald <[EMAIL PROTECTED]> wrote: > > > Well if you guys are using it and it works, I suppose that question is > > answered :) I've never tried to build a container out of anything but > > Container (strangely enough), so I wasn't talking from experience. > > > > Now that I put more thought into it, it does make sense really, for when > > you want to build a component that's comprised of a bunch of other > > components, without needing to support arbitrary children added by client > > code at run time. > > > > -J > > > > > > On Mon, Jun 2, 2008 at 11:06 AM, Michael Labriola <[EMAIL PROTECTED]> > > wrote: > > > >> > >> Josh, > >> > >> Unfortunately, I also don't agree with the conclusion reached by > >> that post. Take a look at the code for UIComponent yourself. It > >> ships with Flex 2 or Flex 3. You can also search for addChild in the > >> various components that directly inherit from UIComponent in the > >> framework, you will see it used often. > >> > >> Finally, take a look at any of the custom component I, Doug McCune > >> of Eli Greenfield have published. You will notice that the majority > >> use UIComponent directly. > >> > >> > >> Labriola > >> > >> --- In [email protected] <mailto:flexcomponents%40yahoogroups.com> <flexcomponents% 40yahoogroups.com <http://40yahoogroups.com> >, > >> "Josh McDonald" <dznuts@> > >> wrote: > >> > > >> > Not according to this post a day or so ago: > >> > > >> > http://www.mail- > >> archive.com/[EMAIL PROTECTED] <mailto:archive.com%2Fflexcoders%40yahoogroups.com> <archive.com%2Fflexcoders% 40yahoogroups.com <http://40yahoogroups.com> > > >> /msg93835.html > >> > > >> > Can anybody from Adobe clear this up? > >> > > >> > -J > >> > > >> > On Mon, Jun 2, 2008 at 10:50 AM, Michael Labriola <labriola@> > >> wrote: > >> > > >> > > > >> > > I see a few problems with the code. UIComponent does not have any > >> > > default implementations for sizing, display, etc. As Josh > >> mentions, > >> > > Container does have these implementations, however, this is > >> likely > >> > > overkill for what you need. However, UIComponent.addChild does > >> add > >> > > things to the display list just fine.... > >> > > > >> > > That said, your ScaleToFitContentHolder class extends > >> UIComponent. > >> > > UIComponent does not have an implementation of updateDisplayList. > >> > > updateDisplayList is where a component sizes it's children. > >> > > Therefore anything you add to that content holder is not going > >> to go > >> > > through the normal flex measurement and sizing process. > >> > > > >> > > You also call invalidateSize in your code quite a few times, > >> which > >> > > would make sense, but your measure methods just call the super > >> > > class.... which sets it to 0 width and height unless you set > >> > > explicit values in the UIComponent default implementation. > >> > > > >> > > So, basically, UIComponent is fine, it will work well if you > >> handle > >> > > these issues. If you want an implementation that handles these > >> > > things (and potentially does a lot of other stuff you don't need > >> or > >> > > want) you could extend Container or one of its descendants. > >> > > > >> > > HTH, > >> > > Labriola > >> > > > >> > > --- In [email protected] <mailto:flexcomponents%40yahoogroups.com> <flexcomponents% 40yahoogroups.com <http://40yahoogroups.com> ><flexcomponents% > >> 40yahoogroups.com <http://40yahoogroups.com> >, > >> > >> > > "Josh McDonald" <dznuts@> > >> > > wrote: > >> > > > >> > > > > >> > > > My Bad buddy, sorry! > >> > > > > >> > > > UIComponent.addChild is an inherited Flash thing, not part of > >> > > Flex, and when > >> > > > you use it if it works at all, things don't go into Flex's > >> display > >> > > tree > >> > > > properly, and all sorts of pain ensues. Try extending Canvas > >> > > instead of > >> > > > UIComponent. The magic you need lives in Container. > >> > > > > >> > > > -J > >> > > > > >> > > > > >> > > > On Sun, Jun 1, 2008 at 7:31 AM, Richard Rodseth <rrodseth@> > >> > > wrote: > >> > > > > >> > > > > I'd love to wrap up this task. Does anyone have any other > >> > > suggestions? > >> > > > > > >> > > > > > >> > > > > On Tue, May 27, 2008 at 8:24 PM, Richard Rodseth > >> > > <rrodseth@<rrodseth%40gmail.com>> > >> > > > >> > > > > wrote: > >> > > > > > I'm afraid I'm still struggling with this. The classes > >> below > >> > > work > >> > > > > > (more or less) if I supply a large button as "content", > >> but if > >> > > I try a > >> > > > > > VBox it appears to shrink to nothing. Any ideas? Hopefully > >> the > >> > > > > > formatting survived. > >> > > > > > > >> > > > > > <view:ScaleOrCenterView width="100%" height="100%" > > >> > > > > > <mx:VBox borderStyle="solid" borderColor="red" > >> > > > > > horizontalScrollPolicy="off" verticalScrollPolicy="off"> > >> > > > > > <mx:Button label="Test" width="400" height="400"/> > >> > > > > > </mx:VBox> > >> > > > > > </view:ScaleOrCenterView> > >> > > > > > > >> > > > > > > >> > > > > > [DefaultProperty("content")] > >> > > > > > public class ScaleOrCenterView extends UIComponent > >> > > > > > { > >> > > > > > private var _contentHolder:ScaleToFitContentHolder = new > >> > > > > > ScaleToFitContentHolder();; > >> > > > > > private var _content:UIComponent; > >> > > > > > > >> > > > > > public function ScaleOrCenterView() > >> > > > > > { > >> > > > > > super(); > >> > > > > > } > >> > > > > > > >> > > > > > override protected function createChildren():void { > >> > > > > > super.createChildren(); > >> > > > > > this.addChild(_contentHolder); > >> > > > > > } > >> > > > > > > >> > > > > > [Inspectable] > >> > > > > > public function set content(value:UIComponent):void { > >> > > > > > if (_content != null) { > >> > > > > > _contentHolder.removeChild(_content); > >> > > > > > } > >> > > > > > _content = value; > >> > > > > > if (_content != null) { > >> > > > > > _contentHolder.addChild(_content); > >> > > > > > } > >> > > > > > this.invalidateSize(); > >> > > > > > } > >> > > > > > > >> > > > > > override protected function updateDisplayList > >> > > (unscaledWidth:Number, > >> > > > > > unscaledHeight:Number):void > >> > > > > > { > >> > > > > > super.updateDisplayList(unscaledWidth, unscaledHeight); > >> > > > > > > >> > > > > > var contentWidth:Number = > >> _content.getExplicitOrMeasuredWidth > >> > > (); > >> > > > > > var contentHeight:Number = > >> _content.getExplicitOrMeasuredHeight > >> > > (); > >> > > > > > > >> > > > > > var xScale:Number = (unscaledWidth / contentWidth); > >> > > > > > var yScale:Number = (unscaledHeight / contentHeight); > >> > > > > > > >> > > > > > _contentHolder.setActualSize(unscaledWidth, > >> unscaledHeight); > >> > > > > > > >> > > > > > _contentHolder.allowInvalidateSize = false; > >> > > > > > if (xScale < 1 || yScale < 1) { > >> > > > > > _contentHolder.scaleX = xScale > >> > > > > > _contentHolder.scaleY = yScale > >> > > > > > } else { > >> > > > > > _contentHolder.scaleX = 1.0; > >> > > > > > _contentHolder.scaleY = 1.0; > >> > > > > > } > >> > > > > > _contentHolder.allowInvalidateSize = true; > >> > > > > > > >> > > > > > } > >> > > > > > > >> > > > > > } > >> > > > > > > >> > > > > > public class ScaleToFitContentHolder extends UIComponent > >> > > > > > { > >> > > > > > public var allowInvalidateSize:Boolean = true; > >> > > > > > > >> > > > > > public function ScaleToFitContentHolder() > >> > > > > > { > >> > > > > > } > >> > > > > > > >> > > > > > override protected function measure():void > >> > > > > > { > >> > > > > > super.measure(); > >> > > > > > } > >> > > > > > > >> > > > > > override public function invalidateSize():void > >> > > > > > { > >> > > > > > if (allowInvalidateSize) > >> > > > > > super.invalidateSize(); > >> > > > > > } > >> > > > > > > >> > > > > > } > >> > > > > > On Mon, May 26, 2008 at 9:02 PM, Alex Harui > >> <aharui@<aharui% > >> > > 40adobe.com>> > >> > > > > wrote: > >> > > > > >> One way is to block invalidateSize when scaling the > >> child. See > >> > > > > >> ListBaseContentHolder > >> > > > > >> > >> > > > > >> > >> > > > > >> > >> > > > > >> ________________________________ > >> > > > > >> > >> > > > > > > >> > > > > > >> > > > > > >> > > > > >> > > > > >> > > > > >> > > > -- > >> > > > "Therefore, send not to know For whom the bell tolls. It tolls > >> for > >> > > thee." > >> > > > > >> > > > :: Josh 'G-Funk' McDonald > >> > > > :: 0437 221 380 :: josh@ > >> > > > > >> > > > >> > > > >> > > > >> > > >> > > >> > > >> > -- > >> > "Therefore, send not to know For whom the bell tolls. It tolls for > >> thee." > >> > > >> > :: Josh 'G-Funk' McDonald > >> > :: 0437 221 380 :: josh@ > >> > > >> > >> > >> > > > > > > > > -- > > "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] <mailto:[EMAIL PROTECTED]>
