LayoutManager prevLM = null; // previously active LM
LayoutContext childLC;
- boolean doReset = isRestart;
if (isRestart) {
if (emptyStack) {
assert restartAtLM != null && restartAtLM.getParent() == this;
curLM = restartAtLM;
} else {
curLM = (LayoutManager) lmStack.pop();
- // make sure the initial LM is not reset
- doReset = false;
}
setCurrentChildLM(curLM);
} else {
}
while (curLM != null) {
- if (doReset) {
- curLM.reset();
- }
-
childLC = makeChildLayoutContext(context);
// get elements from curLM
if (!isRestart || emptyStack) {
+ if (isRestart) {
+ curLM.reset();
+ }
returnedList = getNextChildElements(curLM, context, childLC, alignment,
null, null, null);
} else {
lmStack, restartPosition, restartAtLM);
// once encountered, irrelevant for following child LMs
emptyStack = true;
- // force reset as of the next child
- doReset = true;
}
if (contentList.isEmpty() && childLC.isKeepWithPreviousPending()) {
//Propagate keep-with-previous up from the first child
LayoutContext childLC;
List<ListElement> childElements;
LayoutManager currentChildLM;
- // always reset in case of a restart (exception: see below)
- boolean doReset = isRestart;
if (isRestart) {
if (emptyStack) {
assert restartAtLM != null && restartAtLM.getParent() == this;
currentChildLM = restartAtLM;
} else {
currentChildLM = (LayoutManager) lmStack.pop();
- // make sure the initial child LM is not reset
- doReset = false;
}
setCurrentChildLM(currentChildLM);
} else {
}
while (currentChildLM != null) {
- if (doReset) {
- currentChildLM.reset(); // TODO won't work with forced breaks
- }
childLC = makeChildLayoutContext(context);
if (!isRestart || emptyStack) {
+ if (isRestart) {
+ currentChildLM.reset(); // TODO won't work with forced breaks
+ }
+
childElements = getNextChildElements(currentChildLM, context, childLC, alignment,
null, null, null);
} else {
lmStack, restartPosition, restartAtLM);
// once encountered, irrelevant for following child LMs
emptyStack = true;
- // force reset as of the next child
- doReset = true;
}
if (contentList.isEmpty()) {
List<ListElement> elements = new LinkedList<ListElement>();
boolean isRestart = (restartPosition != null);
+ // always reset in case of restart (exception: see below)
+ boolean doReset = isRestart;
LayoutManager currentChildLM;
+ Stack<LayoutManager> lmStack = new Stack<LayoutManager>();
if (isRestart) {
currentChildLM = restartPosition.getLM();
if (currentChildLM == null) {
- throw new IllegalStateException(
- "Cannot find layout manager from where to re-start "
- + "layout after IPD change");
+ throw new IllegalStateException("Cannot find layout manager to restart from");
}
if (restartLM != null && restartLM.getParent() == this) {
currentChildLM = restartLM;
- setCurrentChildLM(currentChildLM);
- currentChildLM.reset();
- if (addChildElements(elements, currentChildLM, context, alignment) != null) {
- return elements;
- }
} else {
- Stack<LayoutManager> lmStack = new Stack<LayoutManager>();
while (currentChildLM.getParent() != this) {
lmStack.push(currentChildLM);
currentChildLM = currentChildLM.getParent();
}
- setCurrentChildLM(currentChildLM);
+ doReset = false;
+ }
+ setCurrentChildLM(currentChildLM);
+ } else {
+ currentChildLM = getChildLM();
+ }
+
+ while (currentChildLM != null) {
+ if (!isRestart || doReset) {
+ if (doReset) {
+ currentChildLM.reset(); // TODO won't work with forced breaks
+ }
+ if (addChildElements(elements, currentChildLM, context, alignment,
+ null, null, null) != null) {
+ return elements;
+ }
+ } else {
if (addChildElements(elements, currentChildLM, context, alignment, lmStack,
restartPosition, restartLM) != null) {
return elements;
}
+ // restarted; force reset as of next child
+ doReset = true;
}
- }
-
- while ((currentChildLM = getChildLM()) != null) {
- if (isRestart) {
- currentChildLM.reset(); // TODO won't work with forced breaks
- }
- if (addChildElements(elements, currentChildLM, context, alignment) != null) {
- return elements;
- }
+ currentChildLM = getChildLM();
}
SpaceResolver.resolveElementList(elements);
return elements;
}
- private List<ListElement> addChildElements(List<ListElement> elements,
- LayoutManager childLM, LayoutContext context, int alignment) {
- return addChildElements(elements, childLM, context, alignment, null, null, null);
- }
-
private List<ListElement> addChildElements(List<ListElement> elements,
LayoutManager childLM, LayoutContext context, int alignment,
Stack<LayoutManager> lmStack, Position position, LayoutManager restartAtLM) {