use of org.freeplane.features.map.SummaryNode in project freeplane by freeplane.
the class MMapController method addNewSummaryNodeStartEditing.
public void addNewSummaryNodeStartEditing(final NodeModel parentNode, final int start, final int end, final int summaryLevel, final boolean isLeft) {
ModeController modeController = getMModeController();
stopEditing();
final NodeModel newSummaryNode = addNewNode(parentNode, end + 1, isLeft);
final SummaryNode summary = modeController.getExtension(SummaryNode.class);
summary.undoableActivateHook(newSummaryNode, SUMMARY);
AlwaysUnfoldedNode unfolded = modeController.getExtension(AlwaysUnfoldedNode.class);
unfolded.undoableActivateHook(newSummaryNode, unfolded);
final FirstGroupNode firstGroupNodeHook = modeController.getExtension(FirstGroupNode.class);
final NodeModel firstNodeInGroup = parentNode.getChildAt(start);
if (SummaryNode.isSummaryNode(firstNodeInGroup))
firstGroupNodeHook.undoableActivateHook(firstNodeInGroup, FIRST_GROUP);
else {
final NodeModel previousNode = firstNodeInGroup.previousNode(start, isLeft);
if (previousNode == null || SummaryNode.isSummaryNode(previousNode) || !SummaryNode.isFirstGroupNode(previousNode)) {
NodeModel newFirstGroup = addNewNode(parentNode, start, isLeft);
firstGroupNodeHook.undoableActivateHook(newFirstGroup, FIRST_GROUP);
}
firstGroupNodeHook.undoableDeactivateHook(firstNodeInGroup);
}
int level = summaryLevel;
for (int i = start + 1; i <= end; i++) {
NodeModel node = parentNode.getChildAt(i);
if (isLeft != node.isLeft())
continue;
if (SummaryNode.isSummaryNode(node))
level++;
else
level = 0;
if (level == summaryLevel && SummaryNode.isFirstGroupNode(node)) {
if (level > 0)
firstGroupNodeHook.undoableDeactivateHook(node);
else
deleteSingleNodeWithClones(node);
}
}
final NodeModel firstSummaryChildNode = addNewNode(newSummaryNode, 0, isLeft);
startEditingAfterSelect(firstSummaryChildNode);
select(firstSummaryChildNode);
}
Aggregations