public static void drawCell( Graphics g, Rectangle bounds, JTree tree, TreePath path, int row ) {
        boolean isRowSelected = tree.isRowSelected( row );
        DefaultMutableTreeNode node = (DefaultMutableTreeNode) path.getLastPathComponent();
        if ( node instanceof LeafNode ) {
            Color colorTmp = colorLeaf;
            Color colorBorderTmp = colorLeafBorder;
            if ( isRowSelected ) {
                colorTmp = colorLeafSel;
                colorBorderTmp = colorLeafSelBorder;
            }
            else if ( ( (LeafNode) node ).getDownload() != null && ( (LeafNode) node ).getDownload().isPaused() ) {
                colorTmp = colorLeafPause;
                colorBorderTmp = colorLeafPauseBorder;
            }
            else if ( ( (LeafNode) node ).getDownload() != null && ( (LeafNode) node ).getDownload().isFaulty() ) {
                colorTmp = colorLeafFaulty;
                colorBorderTmp = colorLeafFaultyBorder;
            }
            Graphics2D g2 = (Graphics2D) g.create();
            g2.setColor( colorTmp );
            // Download bar
            g2.fillRect( tree.getVisibleRect().x + 4, bounds.y + 2, Math.round( ( ( tree.getVisibleRect().width - 10 )
                    * ( (LeafNode) node ).getDownPerc() * 100 ) / 100 ), bounds.height - 5 );
            g2.setColor( colorBorderTmp );
            g2.drawRect( tree.getVisibleRect().x + 4, bounds.y + 2, tree.getVisibleRect().width - 10, bounds.height - 5 );
            g2.dispose();
        }
    }