<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="wordpress/2.0" -->
<rss version="2.0" 
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	>

<channel>
	<title>teotigraphix.blog.show()</title>
	<link>http://www.blog.teotigraphix.com</link>
	<description>Components are the building blocks of our Universe, that is why I make them!</description>
	<pubDate>Mon, 16 Jun 2008 17:26:15 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.0</generator>
	<language>en</language>
			<item>
		<title>Teoti Graphix, LLC is back in town</title>
		<link>http://www.blog.teotigraphix.com/2008/06/16/teoti-graphix-llc-is-back-in-town/</link>
		<comments>http://www.blog.teotigraphix.com/2008/06/16/teoti-graphix-llc-is-back-in-town/#comments</comments>
		<pubDate>Mon, 16 Jun 2008 09:58:24 +0000</pubDate>
		<dc:creator>teoti.graphix</dc:creator>
		
	<category>general</category>
		<guid isPermaLink="false">http://www.blog.teotigraphix.com/2008/06/16/teoti-graphix-llc-is-back-in-town/</guid>
		<description><![CDATA[Hello all,
Been a while but, I have been working in the labs for quite some time (8 months to be exact), I guess just waiting for this current US presidency to END! Always like molasses in the end.
Anyway, I have written some short tutorials and other adventure notes from my past travels and will start [...]]]></description>
			<content:encoded><![CDATA[<p>Hello all,</p>
<p>Been a while but, I have been working in the labs for quite some time (8 months to be exact), I guess just waiting for this current US presidency to END! Always like molasses in the end.</p>
<p>Anyway, I have written some short tutorials and other adventure notes from my past travels and will start posting them up here soon. </p>
<p>Teoti Graphix, LLC also has a new component framework that extends Container and UIComponent that we will be releasing early fall. We will have a variety of <strong>tool kits</strong> to choose from. </p>
<p>Part of this new release will be a full transform floating canvas with move, resize, rotation, snap and grid, with drag and drop. We have had many of our customers ask about these things when they purchased the ResizeManagerFX component.</p>
<p>Another thing to note: We will be selling our source code (optional)! So for all of you who have asked me about this, coming up is your chance to see beautiful code when purchasing our components. If you think wading through the mx framework is enlightening, wait till you get your hands on our code!</p>
<p>We have also created a documentation system that can handle our new frameworks. Cross linking and tutorials.</p>
<p>So stay tuned, this time I won&#8217;t get lost in development and let my blog collect dust!</p>
<p>Mike
</p>
]]></content:encoded>
			<wfw:commentRSS>http://www.blog.teotigraphix.com/2008/06/16/teoti-graphix-llc-is-back-in-town/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>minWidth and minHeight in the mx.core.Container</title>
		<link>http://www.blog.teotigraphix.com/2008/05/05/minwidth-and-minheight-in-the-mxcorecontainer/</link>
		<comments>http://www.blog.teotigraphix.com/2008/05/05/minwidth-and-minheight-in-the-mxcorecontainer/#comments</comments>
		<pubDate>Mon, 05 May 2008 17:25:31 +0000</pubDate>
		<dc:creator>teoti.graphix</dc:creator>
		
	<category>general</category>
		<guid isPermaLink="false">http://www.blog.teotigraphix.com/2008/06/16/minwidth-and-minheight-in-the-mxcorecontainer/</guid>
		<description><![CDATA[Hi,
Through the years (man, it&#8217;s been years now since Flex was released), I have seen a lot of confusion about container scroll bars.
The confusion summed up;
Developers have a child container within a parent. The child container&#8217;s measuredHeight exceeds the parent&#8217;s viewable height. The parent container then EXPANDS itself to make room for the child&#8217;s measuredHeight.
With [...]]]></description>
			<content:encoded><![CDATA[<p>Hi,</p>
<p>Through the years (man, it&#8217;s been years now since Flex was released), I have seen a lot of confusion about container scroll bars.</p>
<p>The confusion summed up;</p>
<p>Developers have a child container within a parent. The child container&#8217;s measuredHeight exceeds the parent&#8217;s viewable height. The parent container then EXPANDS itself to make room for the child&#8217;s measuredHeight.</p>
<p>With this condition a developer thinks, well how come the parent is expanding and not showing it&#8217;s scrollbars?</p>
<p>The answer; </p>
<p>In order to increase performance of the flex framework and LayoutManager, the engineers decided that having scroll bars pop up everywhere wasn&#8217;t that appealing. So they decided to honor the minimums of a container.</p>
<p>This means by setting the child container&#8217;s minHeight to something below 100, essentially 0, you will now force the parent to keep it&#8217;s current height and show scrollbars for the child container that has it&#8217;s measuredHeight greater than it&#8217;s parent&#8217;s height.</p>
<p>Once you think about this for a second, you realize it is kind of intuitive. You now have control over scrollbar appearance.</p>
<p>Mike</p>
]]></content:encoded>
			<wfw:commentRSS>http://www.blog.teotigraphix.com/2008/05/05/minwidth-and-minheight-in-the-mxcorecontainer/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Flex :: DockAreaFX :: dock and float container release</title>
		<link>http://www.blog.teotigraphix.com/2007/11/06/flex-dockareafx-dock-and-float-container-release/</link>
		<comments>http://www.blog.teotigraphix.com/2007/11/06/flex-dockareafx-dock-and-float-container-release/#comments</comments>
		<pubDate>Tue, 06 Nov 2007 17:57:31 +0000</pubDate>
		<dc:creator>teoti.graphix</dc:creator>
		
	<category>flex2</category>
	<category>components</category>
	<category>releases</category>
		<guid isPermaLink="false">http://www.flex2components.com/f2cblog/2007/11/06/flex-dockareafx-dock-and-float-container-release/</guid>
		<description><![CDATA[Hi,
Back from the lab and we have a great component release, the DockAreaFX.
Product Page
Update, New Product
The DockAreaFX set is a new product that is well worth a look.
The DockAreaFX is a very powerful, extendable and simple to use drag and drop container set. The set consists of the DockAreaFX  that serves as the drop [...]]]></description>
			<content:encoded><![CDATA[<p>Hi,</p>
<p>Back from the lab and we have a great component release, the DockAreaFX.</p>
<p><a href="http://www.teotigraphix.com/components/containers/dockareafx">Product Page</a></p>
<h4>Update, <strong>New Product</strong></h4>
<p>The <code>DockAreaFX</code> set is a new product that is well worth a look.</p>
<p>The<code> DockAreaFX </code>is a very powerful, extendable and simple to use drag and drop container set. The set consists of the <code>DockAreaFX</code>  that serves as the drop container and the <code>DockPaneFX</code> that acts as the drag initiator container. Along with these two components, the <code>TitleBarFX</code> and <code>DockTaskListFX</code> are also included to serve as a jump start for more complicated drag and drop set ups.</p>
<p>We have added the ResizeDockAreaFX component that uses a Fire Works style open and close resize bar. This bar can close and open the dockarea with a click of it&#8217;s toggle button or drag and resize the dock area! The bar placement can be set from top, left, right and bottom. This means the dock area can open and close from all 4 layout positions. The bar is also fully stylable with open and close transition styles. </p>
<p><img src="http://www.teotigraphix.com/assets/singles/icons/DockAreaSet.png"/></p>
<h3>Information sources</h3>
<ul>
<li><a href="http://www.teotigraphix.com/bookshelf/dockareafx" target="_blank">Online Help Book </a></li>
<li><a href="http://www.teotigraphix.com/asdoc/dockareafx/index.html" target="_blank">ASDoc Documentation </a></li>
<li><a href="http://www.teotigraphix.com/support/techforum" target="_blank">Technical Forum</a></li>
<li><a href="http://www.teotigraphix.com/forum/18" target="_blank">Ask Before You Buy</a></li>
<li><a href="http://www.teotigraphix.com/components/containers/dockareafx/explorer" target="_blank">SWF Examples </a></li>
</li>
</ul>
<h2>Main Features</h2>
<hr/><br />
<h3><a name="taskpanefx" id="taskpanefx"></a>DockAreaFX</h3>
<p><img src="http://www.teotigraphix.com/assets/singles/dockareafx/dockarea01.png"/></p>
<p>This image is taken from the <strong>ThemedDockTaskList.mxml</strong>  included in the product&#8217;s example project and is also covered in the Help Books section of the web site. </p>
<h4>Important Notes:</h4>
<ul>
<li>The example uses a custom theme to create an OS look and feel. You could adjust this to any style and skin combination thinkable.</li>
<li>The <code>DockTaskListFX</code> component is used as the content holder within the <code>DockPaneFX</code> drag initiator. (The <code>DockTaskListFX</code> is a subclass of the <code>TaskListFX</code> component).</li>
<li>The task list component is specially designed to size it&#8217;s parent when opening and closing (with or without a tween).</li>
<li>The task list component also uses a custom title bar that allows for a drag handle, alternate minimize button position, title and a menu popup button located on the right hand side of the title bar.</li>
<li>The <code>DockPaneFX</code> drag initiators can be placed in any container at startup or a <code>DockAreaFX</code> component.</li>
<li>The <code>DockPaneFX</code> drag initiators can be dropped on the <code>Application</code> or into a <code>DockAreaFX</code> container. These two actions constitute a dock or float operation. The <code>DockPaneFX's</code> <code>isDocked</code> property is updated just before the operation completes and the component&#8217;s default action has run. </li>
<li>The <code>DockAreaFX</code> drop target containers can have layouts of <strong>absolute</strong>, <strong>vertical</strong>, <strong>horizontal</strong> and <strong>flow</strong>. Each of these layouts have specially placed drop indicators relative to it&#8217;s children. The dock areas can also drag a bounding box around the full container (skinnable and stylable). </li>
<li>The <code>DockPaneFX</code> is completely resizable when in it&#8217;s float state(<code>isDocked == false</code>) and when the <code>DockTaskListFX</code> is used, resizes vertically. Also note that when a <code>DockPaneFX</code> is closed (isOpen == false), it&#8217;s resize is limited to left and right.</li>
<li>The <strong>Colors</strong> pane is being dropped into a vertical <code>DockAreaFX</code> component. </li>
</ul>
<p><img src="http://www.teotigraphix.com/assets/singles/dockareafx/dockarea02.png"/></p>
<p>The image above now shows the <code>DockPaneFX</code> dropped into the <code>DockAreaFX</code> component at index 1. You can see that when a pane&#8217;s <code>isDocked</code> property is set to <code>false</code>, the default action is to hide the border and title bar. The dock pane also takes care of taking it out of the popUp state and then adding itself into the drop target  component. </p>
]]></content:encoded>
			<wfw:commentRSS>http://www.blog.teotigraphix.com/2007/11/06/flex-dockareafx-dock-and-float-container-release/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Flex :: Framework forks and subclasses</title>
		<link>http://www.blog.teotigraphix.com/2007/09/26/flex-framework-forks-and-subclasses/</link>
		<comments>http://www.blog.teotigraphix.com/2007/09/26/flex-framework-forks-and-subclasses/#comments</comments>
		<pubDate>Wed, 26 Sep 2007 12:03:57 +0000</pubDate>
		<dc:creator>teoti.graphix</dc:creator>
		
	<category>general</category>
	<category>flex2</category>
	<category>as3</category>
		<guid isPermaLink="false">http://www.flex2components.com/f2cblog/2007/09/26/flex-framework-forks-and-subclasses/</guid>
		<description><![CDATA[Order and logic rule our consciousness, thus seeing a template in a framework comes natural for me, I love order. 
What is a  fork relating in a framework? When creating abstract superclasses that rely on subclasses to fill in details we need forks. A micro routine in a macro routine. Take the flex framework, [...]]]></description>
			<content:encoded><![CDATA[<p>Order and logic rule our consciousness, thus seeing a template in a framework comes natural for me, I love order. </p>
<p>What is a  fork relating in a framework? When creating abstract superclasses that rely on subclasses to fill in details we need forks. A micro routine in a macro routine. Take the flex framework, the commit properties fork is a very important and extensible piece of logic. This code path enables you to set any property, composite property or micro routine that a measurement or update to the display list relies upon.</p>
<p>Take for example a routine that needs subclasses to create bars and set visibilities of those bars. This routine needs to happen before <code>measure()</code> and <code>updateDisplayList()</code> is called becasue the <code>viewMetrics</code> and/or size may change when a new bar (in the component's chrome) comes into existence.</p>
<p>From the sentence above we have abstracted two routines that fork from the original commit properties fork.</p>
<ul>
<li>creation of bars</li>
<li>setting of bar visibilities</li>
</ul>
<p>Lets look at some code structure;</p>
<div class="syntax_hilite">
<div id="actionscript-2">
<div class="actionscript">
override protected <span style="color: #000000; font-weight: bold;">function</span> commitProperties<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span>:<span style="color: #0066CC;">void</span><br />
<span style="color:#006600; font-weight:bold;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #0066CC;">super</span>.<span style="color: #006600;">commitProperties</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;<br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #808080; font-style: italic;">// if any barvisibilities changed</span><br />
&nbsp;&nbsp; &nbsp;<span style="color: #b1b100;">if</span> <span style="color:#006600; font-weight:bold;">&#40;</span>barVisibilitiesChanged<span style="color:#006600; font-weight:bold;">&#41;</span><br />
&nbsp; &nbsp; <span style="color:#006600; font-weight:bold;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; commitBarVisibilites<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; barVisibilitiesChanged = <span style="color: #000000; font-weight: bold;">false</span>;<br />
&nbsp; &nbsp; <span style="color:#006600; font-weight:bold;">&#125;</span><br />
<span style="color:#006600; font-weight:bold;">&#125;</span></p>
<p><span style="color: #808080; font-style: italic;">// fork 1</span><br />
protected <span style="color: #000000; font-weight: bold;">function</span> commitBarVisibilites<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span>:<span style="color: #0066CC;">void</span><br />
<span style="color:#006600; font-weight:bold;">&#123;</span><br />
&nbsp; &nbsp; visibleBars = <span style="color: #000000; font-weight: bold;">new</span> Dictionary<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #000000; font-weight: bold;">true</span><span style="color:#006600; font-weight:bold;">&#41;</span>;<br />
&nbsp; &nbsp; validateBarVisibilites<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;<br />
&nbsp; &nbsp; updateBarVisibilities<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;<br />
<span style="color:#006600; font-weight:bold;">&#125;</span></p>
<p><span style="color: #808080; font-style: italic;">// fork 1A</span><br />
protected <span style="color: #000000; font-weight: bold;">function</span> validateBarVisibilites<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span>:<span style="color: #0066CC;">void</span><br />
<span style="color:#006600; font-weight:bold;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #b1b100;">if</span> <span style="color:#006600; font-weight:bold;">&#40;</span>_showTitleBar &amp;&amp; !titleBarInstance<span style="color:#006600; font-weight:bold;">&#41;</span><br />
&nbsp; &nbsp; <span style="color:#006600; font-weight:bold;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; createTitleBar<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;<br />
&nbsp; &nbsp; <span style="color:#006600; font-weight:bold;">&#125;</span></p>
<p>&nbsp; &nbsp; visibleBars<span style="color:#006600; font-weight:bold;">&#91;</span>TITLE_BAR_NAME<span style="color:#006600; font-weight:bold;">&#93;</span> = _showTitleBar;<br />
<span style="color:#006600; font-weight:bold;">&#125;</span></p>
<p><span style="color: #808080; font-style: italic;">// fork 1B</span><br />
protected <span style="color: #000000; font-weight: bold;">function</span> updateBarVisibilities<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span>:<span style="color: #0066CC;">void</span><br />
<span style="color:#006600; font-weight:bold;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #b1b100;">if</span> <span style="color:#006600; font-weight:bold;">&#40;</span>titleBarInstance<span style="color:#006600; font-weight:bold;">&#41;</span><br />
&nbsp; &nbsp; <span style="color:#006600; font-weight:bold;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; titleBarInstance.<span style="color: #006600;">visible</span> = visibleBars<span style="color:#006600; font-weight:bold;">&#91;</span>TITLE_BAR_NAME<span style="color:#006600; font-weight:bold;">&#93;</span>;<br />
&nbsp; &nbsp; <span style="color:#006600; font-weight:bold;">&#125;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; invalidateSize<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;<br />
&nbsp; &nbsp; invalidateViewMetrics<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;<br />
<span style="color:#006600; font-weight:bold;">&#125;</span><br />
&nbsp;</div>
</div>
</div>
<p>commitProperties()</p>
<ul>
<li>commitBarVisibilites();
<ul>
<li>visibleBars = new Dictionary(true);</li>
<li>validateBarVisibilites();
<ul>
<li>createTitleBar();
<ul>
<li>create the instance </li>
</ul>
</li>
<li>visibleBars[TITLE_BAR_NAME] = _showTitleBar;</li>
</ul>
</li>
<li>updateBarVisibilities();
<ul>
<li>titleBarInstance.visible = visibleBars[TITLE_BAR_NAME];</li>
<li>invalidateSize();</li>
<li>invalidateViewMetrics();</li>
</ul>
</li>
</ul>
</li>
</ul>
<p>With this algorithm we may now subclass this component and add new bars. The subclass needs to override</p>
<ul>
<li>validateBarVisibilites()</li>
<li>updateBarVisibilities()</li>
</ul>
<p>the super class takes care of the base logic, subclasses just add to this fork and use it's two new forking ends.</p>
<p>There is a rule in abstraction you must learn. If you plan on creating a useful fork, you need to plan and create a base method <strong>commitBarVisibilites</strong> from our original super class fork that now calls new sub forks, <strong>validateBarVisibilites</strong> and <strong>updateBarVisibilities</strong>.</p>
<p>For any type of useful subclass overrides to efficiently override this fork and provide maximum flexibility, the base method is required so that any logic in the first fork (<strong>validateBarVisibilites</strong>) is encapsulated from the second fork (<strong>updateBarVisibilities</strong>).</p>
<p>With this scenario you have three override possibilities;</p>
<ol>
<li>override   <code>commitBarVisibilites</code>()  </li>
<ul>
<li>control before and after sub fork run. </li>
</ul>
<li>override <code>validateBarVisibilites</code>()  </li>
<ul>
<li>control inside run </li>
</ul>
<li>override <code>updateBarVisibilities</code>()
<ul>
<li>control inside run</li>
</ul>
</li>
</ol>
<p>Also, if abstracted correctly, you can call these methods individual. The purpose of a fork within the flex framework is to provide decoupled micro routines that are not dependent on it's caller. This is a very important rule. By making the two micor routines dependent on commitBarVisibilities you have now spun a web that a subclass cannot get out of.</p>
<p>When you subclass this fork, you for all intents and purposes copy what is in the two micro routines and leave the concrete implementation to the super class that has defined this code path.</p>
<p>The code examples are listed just to show what this 'might' look like. I do have this implemented in my framework but, there are other subtle things going on since this is a non trivial property commit.</p>
<p>The dictionary values are used in method like <code>showAllBars()</code>,<code> hideAllBars()</code>, <code>restoreBars()</code>, etc. It allows use to either explicitly hide/show or remove bars during transitions to save performance while restoring them when the transition is complete. This way we do not touch our component showBar properties.</p>
<p>UPDATED ::</p>
<p>From Toms comment, the Flash Player is a single thread. Yeah it is and most of us know this. I speak English and fork means multiple directions from the point your at. If I was talking about threads in the Flash Player I would be wrong. But, I'm not.</p>
<p>I am trying to say, in an abstract sense of the word [fork], the flex framework has code forks due to how the Template Method pattern is implemented. This article explains how to utilize this routine path and how to create new roads from an existing path.</p>
<p>PS, If some one else wants to comment on my English, I can do a search and replace.</p>
<p>Mike </p>
]]></content:encoded>
			<wfw:commentRSS>http://www.blog.teotigraphix.com/2007/09/26/flex-framework-forks-and-subclasses/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Flex :: RotatingListFX :: Adobe Dev Center</title>
		<link>http://www.blog.teotigraphix.com/2007/09/19/flex-rotatinglistfx-adobe-dev-center/</link>
		<comments>http://www.blog.teotigraphix.com/2007/09/19/flex-rotatinglistfx-adobe-dev-center/#comments</comments>
		<pubDate>Wed, 19 Sep 2007 19:39:28 +0000</pubDate>
		<dc:creator>teoti.graphix</dc:creator>
		
	<category>general</category>
		<guid isPermaLink="false">http://www.flex2components.com/f2cblog/2007/09/19/flex-rotatinglistfx-adobe-dev-center/</guid>
		<description><![CDATA[Hi,
I have seen a couple posts on flexcoders about the Adobe Dev Center's rotating UI at the bottom of the page.
Check out 
RotatingListFX Product
to see how well an encapsulated custom component can create that functionality plus a whole bunch more.

This component is a container that you create children in just like a box or canvas. [...]]]></description>
			<content:encoded><![CDATA[<p>Hi,</p>
<p>I have seen a couple posts on flexcoders about the Adobe Dev Center's rotating UI at the bottom of the page.</p>
<p>Check out </p>
<p><a href="http://www.teotigraphix.com/components/containers/rotatinglistfx">RotatingListFX Product</a></p>
<p>to see how well an encapsulated custom component can create that functionality plus a whole bunch more.</p>
<p><img src="http://www.teotigraphix.com/assets/singles/rotatinglistfx/RotatingListFX01.png" alt="The RotatingListFX component" /></p>
<p>This component is a container that you create children in just like a box or canvas. It gives you the ability to place titled containers within the main component that transition open and closed, minimized to maximized. You also can specify custom tile layouts for the all open state of the container.</p>
<p>This is by far a great value for the price 89.99$ when you receive a supported and encapsulated component with now worry about implementation. After you purchase, you then can use it an unlimited amount of times saving you even more money in development.</p>
<p>The component market is heating up and Teoti Graphix offers development time and money saving components.</p>
<p>Mike
</p>
]]></content:encoded>
			<wfw:commentRSS>http://www.blog.teotigraphix.com/2007/09/19/flex-rotatinglistfx-adobe-dev-center/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Flex :: Refactoring :: Cycles</title>
		<link>http://www.blog.teotigraphix.com/2007/06/21/flex-refactoring-cycles/</link>
		<comments>http://www.blog.teotigraphix.com/2007/06/21/flex-refactoring-cycles/#comments</comments>
		<pubDate>Thu, 21 Jun 2007 23:07:43 +0000</pubDate>
		<dc:creator>teoti.graphix</dc:creator>
		
	<category>general</category>
		<guid isPermaLink="false">http://www.flex2components.com/f2cblog/2007/06/21/flex-refactoring-cycles/</guid>
		<description><![CDATA[Hi,
Have you ever felt like you were a dog chasing it's tail when programming? One of the main things I have learned from creating Flex applications is create and destroy.
Creation ::
You create a plan on paper and map out what happens to who and where. Then you go to implement it and you start getting [...]]]></description>
			<content:encoded><![CDATA[<p>Hi,</p>
<p>Have you ever felt like you were a dog chasing it's tail when programming? One of the main things I have learned from creating Flex applications is create and destroy.</p>
<p>Creation ::</p>
<p>You create a plan on paper and map out what happens to who and where. Then you go to implement it and you start getting creative. You find easier ways to do things and end up having some extra classes, events that dispatch a little different then intended and methods that abstract and encapsulate even better.</p>
<p>How do we now test what we did not imply?</p>
<p>Destroying ::</p>
<p>This is my favorite part of the iterative process. When you create applications, the best way to make them better is by destroying the very art you sought after. </p>
<p>What do I mean, well I am sure some of you know that by breaking apart an application and purposely killing it, you find it's weaknesses and fix them.</p>
<p>To the beginner, you strive for perfection, which through experience you will never get with software. What I strive for is near perfection. Through years of painstaking meticulous actions, I have learned to let go and kick the table hard to see if the cards fall down. If, they don't your good to go.</p>
<p>Sometimes this process can be more methodical than I make it out to be. But, to those wondering if snapping an application in half for the fun of it is healthy, I recommend doing it.</p>
<p>Yes, there is UnitTests and other things. Sometimes we don't have these tools and good ole remolding of the clay is a perfect solution for any doubts you may have about a 'finished' product.</p>
<p>Peace, Mike
</p>
]]></content:encoded>
			<wfw:commentRSS>http://www.blog.teotigraphix.com/2007/06/21/flex-refactoring-cycles/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Flex :: invalidateThis() big bird</title>
		<link>http://www.blog.teotigraphix.com/2007/06/19/flex-invalidatethis-big-bird/</link>
		<comments>http://www.blog.teotigraphix.com/2007/06/19/flex-invalidatethis-big-bird/#comments</comments>
		<pubDate>Tue, 19 Jun 2007 21:46:33 +0000</pubDate>
		<dc:creator>teoti.graphix</dc:creator>
		
	<category>general</category>
		<guid isPermaLink="false">http://www.flex2components.com/f2cblog/2007/06/19/flex-invalidatethis-big-bird/</guid>
		<description><![CDATA[Hi,
I have had a couple questions and off line chats with some fellow component developers, some questions were raised about invalidation. Specifically,
invalidateProperties()
invalidateSize()
invalidateDisplayList()
I was about to answer the question in a comment but, thought I could put a little more effort into a post.  
Ok, for those that like to read...
In my last article a [...]]]></description>
			<content:encoded><![CDATA[<p>Hi,</p>
<p>I have had a couple questions and off line chats with some fellow component developers, some questions were raised about invalidation. Specifically,</p>
<p>invalidateProperties()<br />
invalidateSize()<br />
invalidateDisplayList()</p>
<p>I was about to answer the question in a comment but, thought I could put a little more effort into a post. <img src='http://www.blog.teotigraphix.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Ok, for those that like to read...</p>
<p>In my last article a decade or so ago I talked about commitProperties(). I also referred to it as a component's state queue or something like that. Well it turns out that confused some people because they thought I was talking about the UIComponent.currentState property.</p>
<p>Realign, </p>
<p>commitProperties() is the back bone of the components model. There, how about that. <img src='http://www.blog.teotigraphix.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>measure() is the back bone of a components dimensions and position.</p>
<p>updateDisplayList() is the back bone of a component's look and feel.</p>
<p>This is where the invalidation methods come into play. The brain in a human is a wonderful thing, it lets us talk, classify, listen etc(our human  properties). The brain also measures itself constantly while walking, jumping and laughing(our human measurements) The brain also gives us our identity through what we choose to wear, how we do our hair(human look and feel).</p>
<p>Stack all these weird analogies together and you have one crazy component called the human system. Yes, that's right, we are a organic component, very abstractly.</p>
<p>Now back to invalidation. If you closed your eyes, took a snap shot of what you heard, what you see, how you feel, how big you fell and where you were, this would be your state. Imagine living in that snap shot state for infinity... haha Don't think so, now take that same thought and apply it to a flex component.</p>
<p>Would you want your component to live in a state of unchanging indifference? Of course not!!!</p>
<p>Enter...</p>
<p>invalidateProperties()<br />
invalidateSize()<br />
invalidateDisplayList()</p>
<p>So we have the brain that takes messages from everything, every human interface possible(eyes, ears, mouth, nose, etc) and changes your internal state instantly to feel something else. Well, man, your brain just called an invalidation method it has stored within itself!</p>
<p>When you call an invalidation method, it allows time for all the other senses to link up and sync up. Can you smell 10 things at once, or does you smell happen linearly within 1 millisecond? </p>
<p>The same applies to Flex, life doesn't just happen all at once and things definatly don't change all at once. But, one thing is for sure, things change in groups.</p>
<p>So each invalidation method of Flex changes a part of it's back bone to adjust to the new stimuli.</p>
<p>The invalidateThis() method is like breathing in and the commitSomething() is the breathing out. It also coincides with frame passes of the player to allow the player to use processor cycles efficiently(allows the player to take a breath).</p>
<p>If you want to change your component's internal model state, call invalidateProperties(), flag it and catch the actual implementation of that model change in the component's breathing out method of commitProperties().</p>
<p>If you want to change your component's internal dimension state, call invalidateSize(), flag it and catch the actual implementation of that size change in the component's breathing out method of measure().</p>
<p>If you want to change your component's internal look and feel, call invalidateDisplayList(), flag it and catch the actual implementation of that look and feel in the component's breathing out method of updateDisplayList().</p>
<p>These 6 methods ARE VITAL to any successful components that are to be considered 'professional'.</p>
<p>Once you get the hang of this, you can start creating your own sub ecosystems within your own framework using more aggregate invalidation and validation.</p>
<p>Thats all folks, back to a secret AIR project I am finishing up for component developers that hate how default styles work in Flex.</p>
<p>Peace, Mike</p>
]]></content:encoded>
			<wfw:commentRSS>http://www.blog.teotigraphix.com/2007/06/19/flex-invalidatethis-big-bird/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Flex :: commitProperties(), a components state queue</title>
		<link>http://www.blog.teotigraphix.com/2007/05/08/flex-commitproperties-a-components-state-queue/</link>
		<comments>http://www.blog.teotigraphix.com/2007/05/08/flex-commitproperties-a-components-state-queue/#comments</comments>
		<pubDate>Tue, 08 May 2007 13:19:46 +0000</pubDate>
		<dc:creator>teoti.graphix</dc:creator>
		
	<category>general</category>
		<guid isPermaLink="false">http://www.flex2components.com/f2cblog/2007/05/08/flex-commitproperties-a-components-state-queue/</guid>
		<description><![CDATA[Hi,
I am starting a series on the flex framework from a component developers point of view ( after much experience). Expect useful articles from a professional and experienced component developer.  
Some of you may know what I am talking about others might learn something. 
I see some things in a different light now that [...]]]></description>
			<content:encoded><![CDATA[<p>Hi,</p>
<p>I am starting a series on the flex framework from a component developers point of view ( after much experience). Expect useful articles from a professional and experienced component developer. <img src='http://www.blog.teotigraphix.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Some of you may know what I am talking about others might learn something. </p>
<p>I see some things in a different light now that I have been developing components for a year and a half.</p>
<p>Flex offers a unique way of validating your component when performance is a necessity. </p>
<ul>
<li><strong>component property state</strong></li>
<li><strong>component measurement</strong></li>
<li><strong>component layout</strong>
  </li>
</ul>
<p>AKA;</p>
<ul>
<li><code>commitProperties()</code> [This issue] </li>
<li><code>measure()</code></li>
<li><code>updateDisplayList()<br />
    </code>
  </li>
</ul>
<h3>Properties</h3>
<p>Properties in your component hold it's current state. When we talk about state in this respect we are referring to changes made from it's default base state. The default state is what the component's class defines as it's starting point.</p>
<div class="syntax_hilite">
<div id="actionscript-9">
<div class="actionscript">
<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> _moveEnabled:<span style="color: #0066CC;">Boolean</span> = <span style="color: #000000; font-weight: bold;">false</span>;<br />
&nbsp;</div>
</div>
</div>
<p>In the code above, we set the private variable <code>_moveEnabled</code> to <code>false</code>. We have now set the default move enabled state of the component.</p>
<h4>Updating Properties</h4>
<p>There is now a way to set the base state but, as you can see the access is <strong>private</strong>, only for this classes eyes. We now need to create a point at which a developer can change the component's move enabled state.</p>
<p>Enter public properties;</p>
<div class="syntax_hilite">
<div id="actionscript-10">
<div class="actionscript">
<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> _moveEnabled:<span style="color: #0066CC;">Boolean</span> = <span style="color: #000000; font-weight: bold;">false</span>;<br />
protected <span style="color: #000000; font-weight: bold;">var</span> moveEnabledChanged:<span style="color: #0066CC;">Boolean</span> = <span style="color: #000000; font-weight: bold;">false</span>;</p>
<p><span style="color: #009900; font-style: italic;">/**<br />
&nbsp;* Enables the movement of the component.<br />
&nbsp;*/</span>&nbsp;<br />
<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> <span style="color: #0066CC;">get</span> moveEnabled<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span>:<span style="color: #0066CC;">Boolean</span><br />
<span style="color:#006600; font-weight:bold;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #b1b100;">return</span> _moveEnabled;<br />
<span style="color:#006600; font-weight:bold;">&#125;</span></p>
<p><span style="color: #009900; font-style: italic;">/**<br />
&nbsp;* @private<br />
&nbsp;*/</span>&nbsp;<br />
<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> <span style="color: #0066CC;">set</span> moveEnabled<span style="color:#006600; font-weight:bold;">&#40;</span>value:<span style="color: #0066CC;">Boolean</span><span style="color:#006600; font-weight:bold;">&#41;</span>:<span style="color: #0066CC;">void</span><br />
<span style="color:#006600; font-weight:bold;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #b1b100;">if</span> <span style="color:#006600; font-weight:bold;">&#40;</span>value != _moveEnabled<span style="color:#006600; font-weight:bold;">&#41;</span> <br />
&nbsp; &nbsp; <span style="color:#006600; font-weight:bold;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; _moveEnabled = value;<br />
&nbsp; &nbsp; &nbsp; &nbsp; moveEnabledChanged = <span style="color: #000000; font-weight: bold;">true</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; invalidateProperties<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; dispatchEvent<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> Event<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #ff0000;">"moveEnabledChanged"</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;<br />
&nbsp; &nbsp; <span style="color:#006600; font-weight:bold;">&#125;</span><br />
<span style="color:#006600; font-weight:bold;">&#125;</span><br />
&nbsp;</div>
</div>
</div>
<p>This code is the hallmark of the public property API. Most of your properties will and/or should look like this. Notice some thing we have done;</p>
<ul>
<li>Created a place to hold the default state and updated state.</li>
<li>Created a boolean flag to let all classes below that this state is changing.</li>
<li>Created a simple access point publicly for the private internal state.</li>
<li>Created a public place to change the state.
<ul>
<li>For performance, check that we are not already setting a current state with the same value. (this might differ depending on implementation) </li>
<li>Set our state changing flag so subclasses are aware our state is changing.</li>
<li>Invalidate the component's properties, get a call to <code>commitProperties()</code> on the next validation pass.</li>
<li>For bindable properties, dispatch an event to let listeners know we are changing state.</li>
</ul>
</li>
</ul>
<p>Below is an algorithm my framework follows and I have found it to be extremely successful in creating tighter performance and easier subclassing.</p>
<div class="syntax_hilite">
<div id="actionscript-11">
<div class="actionscript">
<span style="color: #009900; font-style: italic;">/**<br />
&nbsp;* Commits new component states.<br />
&nbsp;*/</span><br />
override protected <span style="color: #000000; font-weight: bold;">function</span> commitProperties<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span>:<span style="color: #0066CC;">void</span><br />
<span style="color:#006600; font-weight:bold;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #0066CC;">super</span>.<span style="color: #006600;">commitProperties</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;<br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #b1b100;">if</span> <span style="color:#006600; font-weight:bold;">&#40;</span>moveEnabledChanged<span style="color:#006600; font-weight:bold;">&#41;</span><br />
&nbsp; &nbsp; <span style="color:#006600; font-weight:bold;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; commitMoveEnabled<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; moveEnabledChanged = <span style="color: #000000; font-weight: bold;">false</span>;<br />
&nbsp; &nbsp; <span style="color:#006600; font-weight:bold;">&#125;</span><br />
<span style="color:#006600; font-weight:bold;">&#125;</span><br />
&nbsp;</div>
</div>
</div>
<p>In the above code sample, although we are making a method call here, the performance savings down the road outweigh this one call.</p>
<p>Simply, the above algorithm does this;</p>
<ul>
<li>In component state validation.</li>
<li>Call any super state changes. (this order could be reversed depending on the component's needs)</li>
<li>If our move enabled state is changing</li>
<li>Commit that change right now.</li>
<li>The move enabled state has now changed, switch our move enabled state flag to <code>false</code>.</li>
</ul>
<p><strong>Note :: </strong>With components you create, you will know that in the <code>commitProperties()</code> method that you call <code>commitMoveEnabled()</code>, this is the only place you will call that method. All subclasses rely on the timing of this call. Which in most cases works perfect. </p>
<div class="syntax_hilite">
<div id="actionscript-12">
<div class="actionscript">
<span style="color: #009900; font-style: italic;">/**<br />
&nbsp;* Commits all internal and dependent property states<br />
&nbsp;* of ourselves and our children, plus any dependent<br />
&nbsp;* listeners that rely on this state.<br />
&nbsp;*/</span><br />
protected <span style="color: #000000; font-weight: bold;">function</span> commitMoveEnabled<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span>:<span style="color: #0066CC;">void</span><br />
<span style="color:#006600; font-weight:bold;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #808080; font-style: italic;">// proccess the new state&nbsp; &nbsp;</span><br />
<span style="color:#006600; font-weight:bold;">&#125;</span><br />
&nbsp;</div>
</div>
</div>
<p>When you subclass this component, your whole move enabled protected commit API is shared. You then have the ability to aggregate private and protected delegation in a logical order starting from the first class that defined the state property.</p>
<p>Some subclasses might just completely override the   <code>commitMoveEnabled</code>() method and not even call super. Some classes that define this commit method might actually supply 2 sub commit methods inside this commit method for subclasses to override on a more granular level.</p>
<div class="syntax_hilite">
<div id="actionscript-13">
<div class="actionscript">
<span style="color: #009900; font-style: italic;">/**<br />
&nbsp;* Commits all internal and dependent property states<br />
&nbsp;* of ourselves and our children, plus any dependent<br />
&nbsp;* listeners that rely on this state.<br />
&nbsp;*/</span><br />
protected <span style="color: #000000; font-weight: bold;">function</span> commitMoveEnabled<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span>:<span style="color: #0066CC;">void</span><br />
<span style="color:#006600; font-weight:bold;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #808080; font-style: italic;">// proccess the new state</span><br />
&nbsp; &nbsp; commitMoveListeners<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;<br />
&nbsp; &nbsp; <span style="color: #808080; font-style: italic;">// update skins in updateDisplayList()</span><br />
&nbsp; &nbsp; moveEnabledUpdateFlag = <span style="color: #000000; font-weight: bold;">true</span>;<br />
&nbsp; &nbsp; invalidateDisplayList<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span><br />
<span style="color:#006600; font-weight:bold;">&#125;</span><br />
&nbsp;</div>
</div>
</div>
<p>Notice in the code above, you now can subclass this class and override this method completely if you do not want the skins to be updated at this time.</p>
<div class="syntax_hilite">
<div id="actionscript-14">
<div class="actionscript">
override protected <span style="color: #000000; font-weight: bold;">function</span> commitMoveEnabled<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span>:<span style="color: #0066CC;">void</span><br />
<span style="color:#006600; font-weight:bold;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #808080; font-style: italic;">// proccess the new state</span><br />
&nbsp; &nbsp; commitMoveListeners<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;<br />
<span style="color:#006600; font-weight:bold;">&#125;</span><br />
&nbsp;</div>
</div>
</div>
<p>In this subclass, you have not sacrificed the algorithm of the superclass.</p>
<p>Well, that is all for today. I have a bunch more to elaborate and continue with, but that is for the rest of the week. <img src='http://www.blog.teotigraphix.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>In my commercial components, I may not release the code but, I want future customers to realize that my API is a new type of SWC. In this new world, you can subclass a component without screwing up it's parent. Plus, all methods that can extend your new product with are there for the taking.</p>
<p>Peace, Mike  </p>
]]></content:encoded>
			<wfw:commentRSS>http://www.blog.teotigraphix.com/2007/05/08/flex-commitproperties-a-components-state-queue/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Flex 2 :: EyeDropper, Gradients and Container Components</title>
		<link>http://www.blog.teotigraphix.com/2007/03/20/flex-2-eyedropper-gradients-and-container-components/</link>
		<comments>http://www.blog.teotigraphix.com/2007/03/20/flex-2-eyedropper-gradients-and-container-components/#comments</comments>
		<pubDate>Tue, 20 Mar 2007 20:11:15 +0000</pubDate>
		<dc:creator>teoti.graphix</dc:creator>
		
	<category>general</category>
		<guid isPermaLink="false">http://www.flex2components.com/f2cblog/2007/03/20/flex-2-eyedropper-gradients-and-container-components/</guid>
		<description><![CDATA[Hello,
From the world of Teoti Graphix comes the Flex look and feel revolution. We are really trying to help developers create original looking applications on the developer front of "Look and Feel". Our latest little gem is the EyeDropperFX component that allows you to use an eye drop sampler in your Flex applications. 
We have [...]]]></description>
			<content:encoded><![CDATA[<p>Hello,</p>
<p>From the world of Teoti Graphix comes the Flex look and feel revolution. We are really trying to help developers create original looking applications on the <em>developer front</em> of "Look and Feel". Our latest little gem is the EyeDropperFX component that allows you to use an eye drop sampler in your Flex applications. </p>
<p>We have also just released the FSCollectionFX1 set that has a gradient border and border button class that allow for multiple corner radii, border gradients and fully adjustable highlights. The set also contains a new ColorList, ColorPicker, GroupContainers, Container Watermarking and Form controls.</p>
<p>The information pages can be found here;</p>
<p><strong>Product Pages ::</strong></p>
<ul>
<li><a href="http://www.teotigraphix.com/components/firststeps/set1" target="_blank">FSCollectionFX1</a></li>
<li><a href="http://www.teotigraphix.com/components/controls/eyedropperfx" target="_blank">EyeDropperFX</a></li>
</ul>
<p><strong>EyeDropperFX</strong></p>
<ul>
<li><a href="http://www.teotigraphix.com/teohelpbooks/controls/eyedropperfx/start" target="_blank">Online Help Book(wiki) </a></li>
<li><a href="http://www.teotigraphix.com/asdoc/eyedropperfx/index.html" target="_blank">ASDoc Documentation </a></li>
<li><a href="http://www.teotigraphix.com/support/techforum" target="_blank">Technical Forum</a></li>
<li><a href="http://www.teotigraphix.com/forum/14" target="_blank">Ask Before You Buy</a></li>
</ul>
<p><strong>FSCollectionFX1</strong></p>
<ul>
<li><a href="http://www.teotigraphix.com/teohelpbooks/teofirststeps/set1/start" target="_blank">Online Help Book(wiki) </a></li>
<li><a href="http://www.teotigraphix.com/asdoc/fscollectionfx1/index.html" target="_blank">ASDoc Documentation </a></li>
<li><a href="http://www.teotigraphix.com/forum/techforum" target="_blank">Technical Forum</a></li>
<li><a href="http://www.teotigraphix.com/forum/8" target="_blank">Ask Before You Buy</a></li>
</ul>
<p>All these components come with solid support; including asdoc documentation, wiki and dedicated forum support. Each component also comes zipped and ready for archive import into Flex Builder 2 to get you off to a running start with working examples out of the box(zip file).</p>
<p>There are also dedicated issue/feature request areas on the site as well for our customers.</p>
<p>Check out a few screen shot;</p>
<p><strong>EyeDropperFX</strong></p>
<p><img src="http://www.teotigraphix.com/assets/singles/eyedropperfx/infoPopUp01.png" width="224" height="152" /></p>
<p>This image shows the EyeDropperFX toggle button implemented in the PopUpInfo mxml component that is included with the product.</p>
<p><strong>FSCollectionFX1</strong></p>
<p><a href="http://www.teotigraphix.com/teohelpbooks/teofirststeps/installation/start" target="_blank">Set1 Installation Guide</a></p>
<p><strong>PackageA (Background Look &amp; Feel)</strong></p>
<p><img src="http://www.teotigraphix.com/assets/set1/product/watermarkImage.png" width="321" height="122" alt="Watermark image" /></p>
<p>Watermarking of any container that uses the <code>borderSkin</code> style. </p>
<p><img src="http://www.teotigraphix.com/assets/set1/product/buttonGradients.png" width="246" height="62" alt="Button gradients" /></p>
<p>Robust gradient and button borders/skins.</p>
<p><strong>PackageB (Color Pallet)</strong></p>
<p><img src="http://www.teotigraphix.com/assets/set1/product/colorListGradients.png" width="237" height="239" alt="ColorListFX image" /></p>
<p>Stylable color swatches, border thickness, border color and square or stretch layout.</p>
<p><img src="http://www.teotigraphix.com/assets/set1/product/colorPicker.png" width="378" height="108" alt="Watermark image" /></p>
<p>An enhanced color picker to accommodate  object/xml color pallets.</p>
<p><strong>PackageC (Form Controls and Containers)</strong></p>
<p><img src="http://www.teotigraphix.com/assets/set1/product/groupContainerBorderStyles.png" width="435" height="173" alt="GroupContainerFX border styles" /></p>
<p><code>GroupContainerFX</code> <code>borderStyle</code> - solid, inset, outset.</p>
<p><img src="/assets/set1/product/groupNavigator.png" width="236" height="204" alt="GroupContainerFX border styles" /></p>
<p><code>GroupNavigatorFX</code> example using a <code>ViewStack</code> that has 3 child views and uses effects in transition. </p>
<p><strong>Form Controls</strong></p>
<p><img src="http://www.teotigraphix.com/assets/set1/product/formItemSimple.png" width="431" height="101" alt="GroupContainerFX border styles" /></p>
<p>Custom Form class inheriting the <code>GroupContainerFX</code> class. </p>
<p><img src="/assets/set1/product/formHeading.png" width="454" height="64" alt="GroupContainerFX border styles" /></p>
<p>Custom form heading control with <code>title</code>, <code>titleIcon</code>, <code>subTitle</code>, border, <code>verticalAlign</code>, <code>titleStyleName</code> and <code>subTitleStyleName</code>. </p>
<p><img src="http://www.teotigraphix.com/assets/set1/product/formSeparator.png" width="459" height="236" alt="GroupContainerFX border styles" /></p>
<p>Form separator with icon, label, vertical and horizontal align and border.</p>
<p>And to top it all off, a customized UnderlineLinkButton.</p>
<p><strong>Value</strong></p>
<p>By purchasing valuable components for pennies on your development costs, you get support, faster development and original looks for your next Flex application.</p>
<p>We have a lot more planned for Flex Components, it's just the beginning.</p>
]]></content:encoded>
			<wfw:commentRSS>http://www.blog.teotigraphix.com/2007/03/20/flex-2-eyedropper-gradients-and-container-components/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Flex 2 :: MDIPaneFX :: not a pain</title>
		<link>http://www.blog.teotigraphix.com/2007/01/18/flex-2-mdipanefx-not-a-pain/</link>
		<comments>http://www.blog.teotigraphix.com/2007/01/18/flex-2-mdipanefx-not-a-pain/#comments</comments>
		<pubDate>Fri, 19 Jan 2007 01:09:04 +0000</pubDate>
		<dc:creator>teoti.graphix</dc:creator>
		
	<category>general</category>
		<guid isPermaLink="false">http://www.flex2components.com/f2cblog/2007/01/18/flex-2-mdipanefx-not-a-pain/</guid>
		<description><![CDATA[Hey,
While I am at it before I get lost again, check these two screen shots out of my mdi pane.
Here we have a fully dragable tab pane. You can set the position of the tab bar to all positions, top, left, right, bottom. Full flow layout implemented.
You can drag a tab out and into a [...]]]></description>
			<content:encoded><![CDATA[<p>Hey,</p>
<p>While I am at it before I get lost again, check these two screen shots out of my mdi pane.</p>
<p>Here we have a fully dragable tab pane. You can set the position of the tab bar to all positions, top, left, right, bottom. Full flow layout implemented.</p>
<p>You can drag a tab out and into a new window, shift tabs, or even create an new divider that holds the new tab pane with the single tab in it. More later.</p>
<p><img src="http://www.flex2components.com/screenshots/MDIPaneFX/proto02.jpg" /></p>
<p>Here the effect has run and all of the tabs have turned into WindowFX's! Animation and everything. It uses a proxy so the animation looks goods. Performance is greate, becasue that tab content is actually windows in disguise. <img src='http://www.blog.teotigraphix.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p><img src="http://www.flex2components.com/screenshots/MDIPaneFX/proto01.jpg" /></p>
<p>As I said, this was a tid bit since I was hooked into the blog.</p>
<p>Peace, Mike
</p>
]]></content:encoded>
			<wfw:commentRSS>http://www.blog.teotigraphix.com/2007/01/18/flex-2-mdipanefx-not-a-pain/feed/</wfw:commentRSS>
		</item>
	</channel>
</rss>
