Это все, что происходит со мной. Связанный список на самом деле является отдельной деталью ... так что, возможно, его можно реорганизовать ....
public function split(onGroup:CellGroup, directionToMoveSplitCells:String):CellGroup
{
if (!hasIntersection(onGroup))
return this;
valr splitCells:Array;
var newGroup:CellGroup ;
var numberOfCellsToSplit:int;
var splitStartIndex:int;
var resultingGroupStartIndex:int;
if (directionToMoveSplitCells == "RIGHT")
{
numberOfCellsToSplit = this.endIndex - onGroup.startIndex + 1;
splitStartIndex = this.length - numberOfCellsToSplit;
splitCells = trimCells(splitStartIndex, numberOfCellsToSplit);
resultingGroupStartIndex = onGroup.endIndex + 1;
if (splitCells.length > 0)
{
newGroup = row.createGroup(splitCells, resultingGroupStartIndex);
nextGroup=insertGroup(newGroup,this,nextGroup);
}
}
else
{
numberOfCellsToSplit = onGroup.endIndex - startIndex + 1;
splitStartIndex = 0;
splitCells = trimCells(splitStartIndex, numberOfCellsToSplit);
resultingGroupStartIndex = onGroup.startIndex - splitCells.length;
if (splitCells.length > 0)
{
newGroup = row.createGroup(splitCells, resultingGroupStartIndex);
previousGroup=insertGroup(newGroup,previousGroup,this);
var newX:int = (onGroup.endIndex + 1) * cellSize.width;
x = newX;
}
}
removeArrayOfCellsFromGroup(splitCells);
row.joinGroups();
row.updateGroupIndices();
repositionCellsInGroup();
return newGroup;
}
private function insertGroup(toInsert:CellGroup,prior:CellGroup,next:CellGroup):CellGroup
{
toInsert.nextGroup = next;
toInsert.previousGroup = prior;
if (toInsert.nextGroup )
toInsert.nextGroup.previousGroup = toInsert;
if (toInsert.previousGroup )
toInsert.previousGroup.nextGroup = toInsert;
return toInsert;
}
Мое недоставление назначения splitCells состоит в том, чтобы указать, что это - безусловная безусловная строка в блоке.
Я смотрел на то, что делал Anon, но я не вижу способа улучшить код таким образом.