Customizing folder and leaf icons in the Flex Tree control using the folderOpenIcon, folderClosedIcon, and defaultLeafIcon styles

by Peter deHaan on November 14, 2007

in Tree

The following example shows how you can change the default folder and leaf node icons in a Flex Tree control.

Full code after the jump.

View MXML

<?xml version="1.0" encoding="utf-8"?>
<!-- http://blog.flexexamples.com/2007/11/14/customizing-folder-and-leaf-icons-in-the-flex-tree-control-using-the-folderopenicon-folderclosedicon-and-defaultleaficon-styles/ -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
        layout="vertical"
        verticalAlign="middle"
        backgroundColor="white">

    <mx:Script>
        <![CDATA[
            [Bindable]
            [Embed("assets/folder.png")]
            private var myFolderClosedIcon:Class;

            [Bindable]
            [Embed("assets/folder_page.png")]
            private var myFolderOpenIcon:Class;

            [Bindable]
            [Embed("assets/arrow_right.png")]
            private var myDefaultLeafIcon:Class;
        ]]>
    </mx:Script>

    <mx:XML id="dp">
        <mlb>
            <league label="American League">
                <division label="East">
                    <team label="Boston" />
                    <team label="New York" />
                    <team label="Toronto" />
                    <team label="Baltimore" />
                    <team label="Tampa Bay" />
                </division>
                <division label="Central">
                    <team label="Cleveland" />
                    <team label="Detroit" />
                    <team label="Minnesota" />
                    <team label="Chicago" />
                    <team label="Kansas City" />
                </division>
                <division label="West">
                    <team label="Los Angeles" />
                    <team label="Seattle" />
                    <team label="Oakland" />
                    <team label="Texas" />
                </division>
            </league>
        </mlb>
    </mx:XML>

    <mx:Tree id="TreeProject"
            dataProvider="{dp.league}"
            labelField="@label"
            showRoot="true"
            defaultLeafIcon="{myDefaultLeafIcon}"
            folderOpenIcon="{myFolderOpenIcon}"
            folderClosedIcon="{myFolderClosedIcon}"
            width="320"
            height="240" />

</mx:Application>

View source is enabled in the following example.

You can also set the defaultLeafIcon, folderClosedIcon, folderOpenIcon styles in a style sheet, as seen in the following snippet:

<mx:Style>
    Tree {
        defaultLeafIcon: Embed("assets/arrow_right.png");
        folderOpenIcon: Embed("assets/folder_page.png");
        folderClosedIcon: Embed("assets/folder.png");
    }
</mx:Style>

{ 15 comments… read them below or add one }

1 Gary November 21, 2007 at 1:13 pm

Can you programatically set the folder close/open icons so they take the icon from the xml nodes icon attribute instead?

Reply

2 peterd November 21, 2007 at 1:17 pm

Gary,

Does something like, “Setting a custom icon field in a Flex Tree control”, work for you?

Peter

Reply

3 Chris November 27, 2007 at 8:55 am

Is it possible to use different folder icons within a tree?

It seems I have to use the same icon for all folders. Can I override this behavior programmtically?

- Chris

Reply

4 Marcus February 13, 2008 at 1:53 am

Yes, this would be a nice feature. I am also searching for a solution.

Is it possible to use different folderOpenIcon’s / folderClosedIcon’s in a tree?

Marcus

Reply

5 Chris March 24, 2008 at 9:53 am

Hi there, I’ve also been looking into this, and found a solution on a Google group, using the iconFunction property:

private function setIcons(item:Object):Class {
	var iconClass:Class;
	var classType:String = XML(item).attribute("icon");
	if(classType!="")
		return this[classType];
	else
		return null;
}

Reply

6 Chris March 24, 2008 at 9:54 am

ok so that didn’t post the XML!

<mx:Tree labelField="@label"
	iconField="@icon"
	iconFunction="setIcons" />

Reply

7 Ved June 22, 2008 at 5:39 pm

Thank you so much! Your blog is a rich source during my development!

Reply

8 Elizabeth Lyne June 26, 2008 at 10:12 am

I created my own setIcons fuction that will enable you to set the icons on branch nodes to be anything you want. In my tree, folders are branching nodes and so are tables (which open to show the columns contained in them). Using the setItemIcon call, you can set both open and closed icons for these nodes.

private function setIcons(item:Object):void {

		/* the setItemIcon function at the end has 3 elements:
		      item = a reference to the item in the tree
		      iconClosedorLeaf = the icon for a closed branch object or leaf object
		      iconOpen = the icon for an open branch object
		*/
        var iconClosedorLeaf:Class;
        var iconOpen:Class;
        var classType:String = XML(item).attribute("classType");

           iconOpen = null;
           switch (classType){
                case "map":
                       iconClosedorLeaf = mapIcon;
                       break;
                case "job":
                        iconClosedorLeaf = jobIcon;
                        break;
                case "table":
                        iconClosedorLeaf = tableIcon;
                        iconOpen = tableOpenIcon;
                        break;
                case "column":
                        iconClosedorLeaf = columnIcon;
                        break;
                case "deployedJob":
                        iconClosedorLeaf = deployedJobIcon;
                        break;
                case "deployedFlow":
                        iconClosedorLeaf = deployedFlowIcon;
                        break;
                case "folder":
                        iconClosedorLeaf = folderClosedIcon;
                        iconOpen = folderOpenIcon;
                        break;
                default:
                        iconClosedorLeaf = unknownIcon;
                        break;
                }
            CustomTree.setItemIcon(item, iconClosedorLeaf, iconOpen);
         }

Reply

9 Ethan K August 14, 2008 at 10:38 am

Trying to implement the different methods of choosing a custom icon in a tree control, and regardless of whether I browse using the design view/properties, type the “@Embed(source=’…’)” into the tag, or set up a class in actionscript, I get this error at compile time:

Unable to resolve ‘file:///C|/ColdFusion8/wwwroot/images/nav_icon.gif’ for transcoding
Unable to transcode file:///C|/ColdFusion8/wwwroot/images/nav_icon.gif.

what am I missing?

Reply

10 Mosima April 29, 2009 at 8:34 am

How can I change the image of a Root folder If the leaf/Children is not fine.

Reply

11 restrict leafs May 13, 2009 at 4:47 am

how to restrict the leafs of a tree to 5 if there are 20 leafs

Reply

12 restrict leafs May 13, 2009 at 4:48 am

hoe to restrict the leafs of a tree to 5 if there are 20 leafs and remaining by scrolling

Reply

13 Rakesh October 24, 2009 at 5:09 am
 
hello friend i wan to tree lok for my website . and i want to display full folder and files from my domain like 
public_html
..
.
..
.
..
.index.php
etc...
ok so if you know then please send me on my email id "rakesh.guest@gmail.com"  
 
 
thanks..

Reply

14 Rakesh October 24, 2009 at 5:10 am


hello friend i wan to tree lok for my website . and i want to display full folder and files from my domain like
public_html
..
.
..
.
..
.index.php
etc…
ok so if you know then please send me on my email id “rakesh.guest@gmail.com”

thanks..

Reply

15 Jakub November 13, 2009 at 3:16 am

Hallo,

I use setIcons function by Elizabeth Lyen,
but I have problem when I use Flex 4.0 SDK.
When I use Flex 3 SDK, there is no problem.
But I have to use Flex 4.0 SDK.

Can you help me how to solve this problem?

Thanks,
Jakub

Reply

Leave a Comment

Sorry, this blog is terrible at eating HTML comments.
If you're pasting any HTML/XML/MXML code, you need to convert your < characters to &lt; and your > characters to &gt; .

You can use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="">

Anti-Spam Protection by WP-SpamFree

Previous post:

Next post: