Улучшается скорость от корректировки строк в DockableToolBar


Я использую FlexLib для его функции панель инструментов. Когда вы сожмите окно, он попытается обернуть строк, Если ширина ступени меньше, чем ширина междурядий. К сожалению, это не обратный процесс, когда вы развернуть окно. Чтобы обойти это, я написал следующий метод, чтобы добавить к классу (абонент несет ответственность за перебрав все существующие панели инструментов, строки и вызывать этот метод на них).

Это делает работу, но это не совсем так быстро, как хотелось бы. Я надеюсь, что предложения по повышению производительности и стиля кода, если это возможно.

/**
 *  @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);
    }
}

Вы можете увидеть остальную часть этого класса здесь (этот список не включает мой код, я планирую представить это в виде патча, как только он в достаточно хорошей форме).



398
4
задан 3 марта 2011 в 06:03 Источник Поделиться
Комментарии
1 ответ

У меня есть одно небольшое предложение относительно стиля. Это гораздо лучше, чтобы инвертировать условия, чтобы проще запускать код во-первых, когда речь идет уступая контроль. Это также поможет вам избежать чрезмерного вдавливания.

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;

5
ответ дан 3 марта 2011 в 06:03 Источник Поделиться