/* * (non-Javadoc) * @see net.drewke.tdme.gui.GUINode#setTop(int) */ protected void setTop(int top) { super.setTop(top); top += computedConstraints.alignmentTop; for (int i = 0; i < subNodes.size(); i++) { GUINode guiSubNode = subNodes.get(i); guiSubNode.setTop(top); if (alignment != Alignment.VERTICAL || guiSubNode.flow == Flow.FLOATING) { continue; } top += guiSubNode.computedConstraints.height; } }
/* * (non-Javadoc) * @see net.drewke.tdme.gui.GUINode#setLeft(int) */ protected void setLeft(int left) { super.setLeft(left); left += computedConstraints.alignmentLeft; for (int i = 0; i < subNodes.size(); i++) { GUINode guiSubNode = subNodes.get(i); guiSubNode.setLeft(left); if (alignment != Alignment.HORIZONTAL || guiSubNode.flow == Flow.FLOATING) { continue; } left += guiSubNode.computedConstraints.width; } }
/* * (non-Javadoc) * @see net.drewke.tdme.gui.nodes.GUIParentNode#layoutSubNodes() */ protected void layoutSubNodes() { // layout sub nodes first pass super.layoutSubNodes(); // layout sub nodes, taking stars into account switch (alignment) { case VERTICAL: { // determine vertical stars int starCount = 0; int height = computedConstraints.height - border.top - border.bottom - padding.top - padding.bottom; int nodesHeight = 0; int finalNodesHeight = 0; for (int i = 0; i < subNodes.size(); i++) { GUINode guiSubNode = subNodes.get(i); // floating sub nodes do not contribute to height if (guiSubNode.flow == Flow.FLOATING) { continue; } // all other do if (guiSubNode.requestedConstraints.heightType == RequestedConstraintsType.STAR) { starCount++; } else { nodesHeight += guiSubNode.computedConstraints.height; finalNodesHeight += guiSubNode.computedConstraints.height; } } // set vertical stars for (int i = 0; i < subNodes.size(); i++) { GUINode guiSubNode = subNodes.get(i); if (guiSubNode.requestedConstraints.heightType == RequestedConstraintsType.STAR) { guiSubNode.computedConstraints.height = (height - nodesHeight) / starCount; if (guiSubNode.computedConstraints.height < 0) { guiSubNode.computedConstraints.height = 0; } finalNodesHeight += guiSubNode.computedConstraints.height; // layout sub node, sub nodes, second pass if (guiSubNode instanceof GUIParentNode) { ((GUIParentNode) guiSubNode).layoutSubNodes(); } } } // do vertical alignments, take border, padding into account switch (alignments.vertical) { case TOP: for (int i = 0; i < subNodes.size(); i++) { GUINode guiSubNode = subNodes.get(i); guiSubNode.computedConstraints.alignmentTop = border.top + padding.top; } break; case CENTER: for (int i = 0; i < subNodes.size(); i++) { GUINode guiSubNode = subNodes.get(i); guiSubNode.computedConstraints.alignmentTop = border.top + padding.top + ((height - finalNodesHeight) / 2); } break; case BOTTOM: for (int i = 0; i < subNodes.size(); i++) { GUINode guiSubNode = subNodes.get(i); guiSubNode.computedConstraints.alignmentTop = (height - finalNodesHeight); } break; } // compute children alignments computeHorizontalChildrenAlignment(); // break; } case HORIZONTAL: { // determine horizontal stars int starCount = 0; int width = computedConstraints.width - border.left - border.right - padding.left - padding.right; int nodesWidth = 0; int finalNodesWidth = 0; for (int i = 0; i < subNodes.size(); i++) { GUINode guiSubNode = subNodes.get(i); // floating sub nodes do not contribute to width if (guiSubNode.flow == Flow.FLOATING) { continue; } // all other do if (guiSubNode.requestedConstraints.widthType == RequestedConstraintsType.STAR) { starCount++; } else { nodesWidth += guiSubNode.computedConstraints.width; finalNodesWidth += guiSubNode.computedConstraints.width; } } // set horizontal stars for (int i = 0; i < subNodes.size(); i++) { GUINode guiSubNode = subNodes.get(i); if (guiSubNode.requestedConstraints.widthType == RequestedConstraintsType.STAR) { guiSubNode.computedConstraints.width = (width - nodesWidth) / starCount; if (guiSubNode.computedConstraints.width < 0) { guiSubNode.computedConstraints.width = 0; } finalNodesWidth += guiSubNode.computedConstraints.width; // layout sub node sub nodes, second pass if (guiSubNode instanceof GUIParentNode) { ((GUIParentNode) guiSubNode).layoutSubNodes(); } } } // do horizontal alignments, take border, padding into account switch (alignments.horizontal) { case LEFT: for (int i = 0; i < subNodes.size(); i++) { GUINode guiSubNode = subNodes.get(i); guiSubNode.computedConstraints.alignmentLeft = border.left + padding.left; } break; case CENTER: for (int i = 0; i < subNodes.size(); i++) { GUINode guiSubNode = subNodes.get(i); guiSubNode.computedConstraints.alignmentLeft = border.left + padding.left + ((width - finalNodesWidth) / 2); } break; case RIGHT: for (int i = 0; i < subNodes.size(); i++) { GUINode guiSubNode = subNodes.get(i); guiSubNode.computedConstraints.alignmentLeft = (width - finalNodesWidth); } break; } // compute children alignments computeVerticalChildrenAlignment(); // break; } case NONE: { computeHorizontalChildrenAlignment(); computeVerticalChildrenAlignment(); break; } } // compute content alignment second pass, as we have computed "star" height, widths for (int i = 0; i < subNodes.size(); i++) { GUINode guiSubNode = subNodes.get(i); guiSubNode.computeContentAlignment(); } // do parent + children top, left adjustments setTop(computedConstraints.top); setLeft(computedConstraints.left); }