Take the 2-minute tour ×
Code Review Stack Exchange is a question and answer site for peer programmer code reviews. It's 100% free, no registration required.

I've been using FlexLib for its dockable toolbar feature. When you shrink the window, it will try to wrap rows if the stage width is less than the row width. Unfortunately, it won't reverse the process when you expand the window. To get around that, I wrote the following method to add to the class (the caller is responsible for looping through all current toolbar rows and calling this method on them).

It does the job, but it's not quite as fast as I'd like. I'm hoping for suggestions to improve both performance and code style, if possible.

/**
 *  @private
 *  Moves ToolBars to the previous row if there is sufficient space in that row to display
 *  another ToolBar properly.
 */
private function unwrapRow(row:HBox, rowIndex:int, toolbar:VBox):void
{
    if (rowIndex == 0) {
        return;
    }
    var prevRow:HBox = HBox(toolbar.getChildAt(rowIndex-1));
    var prevRowW:int = 0;
    var totalW:int = 0;

    //First, get the width of the previous row
    for (var j:int = 0; j < prevRow.numChildren; j++)
    {   
        var ch:DockableToolBar = DockableToolBar(prevRow.getChildAt(j));
        prevRowW += ch.measuredWidth;
    }
    //Second, cycle through the children of the "row of interest", moving them
    //up to the previous row if there's room.
    for (var k:int = 0; k < row.numChildren; k++)
    {   
        var child:DockableToolBar = DockableToolBar(row.getChildAt(k));
        if ((prevRowW + child.measuredWidth) >= toolbar.width) {
            break;
        }
        //Move child.
        child.parent.removeChild(child);
        prevRow.addChild(child);
        prevRowW += child.measuredWidth;
        --k;
    }
    if (row.numChildren == 0) {
        toolbar.removeChild(row);
    }
}

You can see the rest of this class here (that listing doesn't include my code; I plan to submit this as a patch once it's in good enough shape).

share|improve this question

1 Answer 1

up vote 5 down vote accepted

I have one little suggestion with regard to style. It is much better to invert your conditions to have the simpler code run first when it involves yielding control. It also helps you avoid excessive indentation.

var child:DockableToolBar = DockableToolBar(row.getChildAt(k));

//Skip the rest of the row if we can't move the first child up.
if (prevRowW + child.measuredWidth >= toolbar.width) {
    break;
}

//Move child.
child.parent.removeChild(child);
prevRow.addChild(child);
prevRowW += child.measuredWidth;
--k;
share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.