Пример #1
0
 /*
  * (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;
   }
 }
Пример #2
0
 /*
  * (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;
   }
 }
Пример #3
0
  /*
   * (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);
  }