Ejemplo n.º 1
0
 // return container delegate of container instance of meta container
 @Override
 public Container getPrimaryContainerDelegate() {
   Container defCont = (Container) radContainer.getBeanInstance();
   if (primaryContainerDelegate == null || primaryContainer != defCont) {
     primaryContainer = defCont;
     primaryContainerDelegate = radContainer.getContainerDelegate(defCont);
   }
   return primaryContainerDelegate;
 }
  /**
   * Выравнивание выбранных компонентов в выбранном направлении.
   *
   * @param dimension направление выравнивания
   * @param alignment требуемое выравнивание
   * @throws java.lang.Exception
   */
  public void align(int dimension, int alignment) throws Exception {
    if (selected != null && selected.size() > 1) { // выбрано по крайней мере 2 компонента
      assert selected.size() == selectedConstraints.size();
      assert container != null;
      Dimension parentSize = container.getBeanInstance().getSize();
      if (dimension == 0) { // выравнирание в горизонтальном направлении
        if (alignment == LayoutConstants.LEADING) { // выравнивание влево
          // ищем самый левый компонент
          MarginConstraints first = findLeftCompConstraints(parentSize.width);
          int leftNew = calcLeft(first, parentSize.width); // новая левая координата
          // выравниваем остальные компоненты по найденому
          for (int i = 0; i < selectedConstraints.size(); i++) {
            MarginLayoutConstraints mlc = selectedConstraints.get(i);
            MarginConstraints mc = mlc.getConstraintsObject();
            RADVisualComponent<?> vc = selected.get(i);
            if (mc != first) {
              int leftOld = calcLeft(mc, parentSize.width); // старая левая координата
              int rightOld = calcRight(mc, parentSize.width); // старая правая координата
              if (mc.getLeft() != null) {
                Margin newLeft = mc.getLeft().copy();
                newLeft.setPlainValue(leftNew, parentSize.width); // выравниваем левую координату
                mlc.getMLeft().setValue(newLeft);
                if (mc.getRight()
                    != null) { // ширина не используется. нужно устанавливать правую координату
                  Margin newRight = mc.getRight().copy();
                  newRight.setPlainValue(
                      rightOld + (leftOld - leftNew),
                      parentSize.width); // изменяем правую координату
                  mlc.getMRight().setValue(newRight);
                }
              } else {
                Margin newRight = mc.getRight().copy();
                newRight.setPlainValue(
                    rightOld + (leftOld - leftNew), parentSize.width); // изменяем правую координату
                mlc.getMRight().setValue(newRight);
              }
            }
            // отметить компонент как invalid
            vc.getBeanInstance().invalidate();
          }
        }
        if (alignment == LayoutConstants.TRAILING) { // выравнивание вправо
          // ищем самый правый компонент
          MarginConstraints first = findRightCompConstraints(parentSize.width);
          int rightNew = calcRight(first, parentSize.width); // новая правая координата
          // выравниваем остальные компоненты по найденому
          for (int i = 0; i < selectedConstraints.size(); i++) {
            MarginLayoutConstraints mlc = selectedConstraints.get(i);
            MarginConstraints mc = mlc.getConstraintsObject();
            RADVisualComponent<?> vc = selected.get(i);
            if (mc != first) {
              int leftOld = calcLeft(mc, parentSize.width); // старая левая координата
              int rightOld = calcRight(mc, parentSize.width); // старая правая координата
              // выравнивание
              if (mc.getLeft() != null) {
                Margin newLeft = mc.getLeft().copy();
                newLeft.setPlainValue(
                    leftOld + (rightOld - rightNew), parentSize.width); // изменяем левую координату
                mlc.getMLeft().setValue(newLeft);
                if (mc.getRight() != null) // ширина не используется
                {
                  Margin newRight = mc.getRight().copy();
                  newRight.setPlainValue(
                      rightNew, parentSize.width); // выравниваем правая координату
                  //   }
                  mlc.getMRight().setValue(newRight);
                }
              } else {
                Margin newRight = mc.getRight().copy();
                newRight.setPlainValue(rightNew, parentSize.width); // выравниваем правая координату
                mlc.getMRight().setValue(newRight);
              }
            }
            // отметить компонент как invalid
            vc.getBeanInstance().invalidate();
          }
        }
        if (alignment == LayoutConstants.CENTER) { // выравнивание по центру
          // ищем самый левый компонент
          MarginConstraints firstL = findLeftCompConstraints(parentSize.width);
          int leftNew = calcLeft(firstL, parentSize.width); // новая левая координата
          // ищем самый правый компонент
          MarginConstraints firstR = findRightCompConstraints(parentSize.width);
          int rightNew = calcRight(firstR, parentSize.width); // новая правая координата;
          int centerNew = (parentSize.width - rightNew + leftNew) / 2; // новый центр
          // выравниваем остальные компоненты по найденому
          for (int i = 0; i < selectedConstraints.size(); i++) {
            MarginLayoutConstraints mlc = selectedConstraints.get(i);
            MarginConstraints mc = mlc.getConstraintsObject();
            RADVisualComponent<?> vc = selected.get(i);

            int leftOld = calcLeft(mc, parentSize.width); // старая левая координата
            int rightOld = calcRight(mc, parentSize.width); // старая правая координата
            int centerOld = (parentSize.width - rightOld + leftOld) / 2;
            // выравнивание
            int sm = centerNew - centerOld;
            if (mc.getLeft() != null) {
              Margin newLeft = mc.getLeft().copy();
              newLeft.setPlainValue(leftOld + sm, parentSize.width); // изменяем левую координату
              mlc.getMLeft().setValue(newLeft);
              if (mc.getRight() != null) // ширина не используется
              {
                Margin newRight = mc.getRight().copy();
                newRight.setPlainValue(
                    rightOld - sm, parentSize.width); // выравниваем правая координату
                mlc.getMRight().setValue(newRight);
              }
            } else {
              Margin newRight = mc.getRight().copy();
              newRight.setPlainValue(
                  rightOld - sm, parentSize.width); // выравниваем правая координату
              mlc.getMRight().setValue(newRight);
            }
            // отметить компонент как invalid
            vc.getBeanInstance().invalidate();
          }
        }
      }
      if (dimension == 1) { // выравнивание в вертикальном направлении
        if (alignment == LayoutConstants.LEADING) { // выравнивание вверх
          // ищем самый верхний компонент
          MarginConstraints first = findTopCompConstraints(parentSize.height);
          int topNew = calcTop(first, parentSize.height); // новая верхняя координата
          // выравниваем остальные компоненты по найденому
          for (int i = 0; i < selectedConstraints.size(); i++) {
            MarginLayoutConstraints mlc = selectedConstraints.get(i);
            MarginConstraints mc = mlc.getConstraintsObject();
            RADVisualComponent<?> vc = selected.get(i);
            if (mc != first) {
              int topOld = calcTop(mc, parentSize.height); // старая левая координата
              int bottomOld = calcBottom(mc, parentSize.height); // старая правая координата
              if (mc.getTop() != null) {
                Margin newTop = mc.getTop().copy();
                newTop.setPlainValue(topNew, parentSize.height); // выравниваем левую координату
                mlc.getMTop().setValue(newTop);
                if (mc.getBottom()
                    != null) { // ширина не используется. нужно устанавливать правую координату
                  Margin newBottom = mc.getBottom().copy();
                  newBottom.setPlainValue(
                      bottomOld + (topOld - topNew),
                      parentSize.height); // изменяем правую координату
                  mlc.getMBottom().setValue(newBottom);
                }
              } else {
                Margin newBottom = mc.getBottom().copy();
                newBottom.setPlainValue(
                    bottomOld + (topOld - topNew), parentSize.height); // изменяем правую координату
                mlc.getMBottom().setValue(newBottom);
              }
            }
            // отметить компонент как invalid
            vc.getBeanInstance().invalidate();
          }
        }
        if (alignment == LayoutConstants.TRAILING) { // выравнивание вниз
          // ищем самый нижный компонент
          MarginConstraints first = findBottomCompConstraints(parentSize.height);
          int bottomNew = calcBottom(first, parentSize.height); // новая нижняя координата
          // выравниваем остальные компоненты по найденому
          for (int i = 0; i < selectedConstraints.size(); i++) {
            MarginLayoutConstraints mlc = selectedConstraints.get(i);
            MarginConstraints mc = mlc.getConstraintsObject();
            RADVisualComponent<?> vc = selected.get(i);
            if (mc != null) {
              int topOld = calcTop(mc, parentSize.height); // старая верхняя координата
              int bottomOld = calcBottom(mc, parentSize.height); // старая нижняя координата
              // выравнивание
              if (mc.getTop() != null) {
                Margin newTop = mc.getTop().copy();
                newTop.setPlainValue(
                    topOld + (bottomOld - bottomNew),
                    parentSize.height); // изменяем левую координату
                mlc.getMTop().setValue(newTop);
                if (mc.getBottom() != null) { // ширина не используется
                  Margin newBottom = mc.getBottom().copy();
                  newBottom.setPlainValue(
                      bottomNew, parentSize.height); // выравниваем правая координату
                  mlc.getMBottom().setValue(newBottom);
                }
              } else {
                Margin newBottom = mc.getBottom().copy();
                newBottom.setPlainValue(
                    bottomNew, parentSize.height); // выравниваем правая координату
                mlc.getMBottom().setValue(newBottom);
              }
            }
            // отметить компонент как invalid
            vc.getBeanInstance().invalidate();
          }
        }
        if (alignment == LayoutConstants.CENTER) { // выравнивание по центру
          // ищем самый верхний компонент
          MarginConstraints firstT = findTopCompConstraints(parentSize.height);
          int topNew = calcTop(firstT, parentSize.height); // новая верхняя координата
          // ищем самый нижний компонент
          MarginConstraints firstR = findBottomCompConstraints(parentSize.height);
          int bottomNew = calcBottom(firstR, parentSize.height); // новая верхняя координата
          int centerNew = (parentSize.height - bottomNew + topNew) / 2; // новый центр
          // выравниваем остальные компоненты по найденому
          for (int i = 0; i < selectedConstraints.size(); i++) {
            MarginLayoutConstraints mlc = selectedConstraints.get(i);
            MarginConstraints mc = mlc.getConstraintsObject();
            RADVisualComponent<?> vc = selected.get(i);
            int topOld = calcTop(mc, parentSize.height); // старая верхняя координата
            int bottomOld = calcBottom(mc, parentSize.height); // старая нижняя координата
            int centerOld = (parentSize.height - bottomOld + topOld) / 2;
            // выравнивание
            int sm = centerNew - centerOld;
            if (mc.getTop() != null) {
              Margin newTop = mc.getTop().copy();
              newTop.setPlainValue(topOld + sm, parentSize.height); // изменяем верхняя координату
              mlc.getMTop().setValue(newTop);
              if (mc.getBottom() != null) // ширина не используется
              {
                Margin newBottom = mc.getBottom().copy();
                newBottom.setPlainValue(
                    bottomOld - sm, parentSize.height); // выравниваем нижняя координату
                mlc.getMBottom().setValue(newBottom);
              }
            } else {
              Margin newBottom = mc.getBottom().copy();
              newBottom.setPlainValue(
                  bottomOld - sm, parentSize.height); // выравниваем нижняя координату
              mlc.getMBottom().setValue(newBottom);
            }
            // отметить компонент как invalid
            vc.getBeanInstance().invalidate();
          }
        }
      }
    }
  }
 protected Dimension parentSize(RADVisualComponent<?> aVisualComponent) {
   RADVisualContainer<?> radParent = aVisualComponent.getParentComponent();
   Container parentComp = radParent.getBeanInstance();
   Dimension parentSize = parentComp.getSize();
   return parentSize;
 }
Ejemplo n.º 4
0
 // return container instance of meta container
 @Override
 public Container getPrimaryContainer() {
   return (Container) radContainer.getBeanInstance();
 }