// 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; }
// return container instance of meta container @Override public Container getPrimaryContainer() { return (Container) radContainer.getBeanInstance(); }