|
|
|
@ -2,9 +2,11 @@ package com.fr.design.designer.beans.adapters.layout;
|
|
|
|
|
|
|
|
|
|
import com.fr.design.designer.creator.XCreator; |
|
|
|
|
import com.fr.design.designer.creator.XLayoutContainer; |
|
|
|
|
import com.fr.design.designer.creator.XWParameterLayout; |
|
|
|
|
import com.fr.design.designer.creator.cardlayout.XWCardMainBorderLayout; |
|
|
|
|
import com.fr.design.utils.ComponentUtils; |
|
|
|
|
import com.fr.form.ui.PaddingMargin; |
|
|
|
|
import com.fr.form.ui.container.WBorderLayout; |
|
|
|
|
import com.fr.form.ui.container.cardlayout.WCardMainBorderLayout; |
|
|
|
|
import com.fr.general.ComparatorUtils; |
|
|
|
|
|
|
|
|
@ -34,7 +36,7 @@ public class FRBodyLayoutAdapter extends AbstractLayoutAdapter{
|
|
|
|
|
protected static final int BORDER_PROPORTION = 10; //边界三等分或交叉区域大小取组件1/10和默认大小
|
|
|
|
|
|
|
|
|
|
protected int trisectAreaDirect = 0; |
|
|
|
|
protected int crossPointAreaDirect = 0; |
|
|
|
|
private int crossPointAreaDirect = 0; |
|
|
|
|
// 增加删除拉伸控件用的临时list
|
|
|
|
|
protected java.util.List<Component> rightComps; |
|
|
|
|
protected java.util.List<Component> leftComps; |
|
|
|
@ -49,6 +51,7 @@ public class FRBodyLayoutAdapter extends AbstractLayoutAdapter{
|
|
|
|
|
protected int minHeight = 0; |
|
|
|
|
protected int actualVal = 0; // 存在间隔时,add move drag 判断对齐等都要考虑
|
|
|
|
|
protected PaddingMargin margin; // 布局容器边距
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 在添加组件状态时,当鼠标移动到某个容器上方时,如果该容器有布局管理器,则会调用该布局 |
|
|
|
|
* 管理适配器的accept来决定当前位置是否可以放置,并提供特殊的标识,比如红色区域标识。比 |
|
|
|
@ -76,6 +79,7 @@ public class FRBodyLayoutAdapter extends AbstractLayoutAdapter{
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 交叉点区域时,能否对应位置放入组件 |
|
|
|
|
* |
|
|
|
|
* @param comp 待放置组件 |
|
|
|
|
* @param x x |
|
|
|
|
* @param y y |
|
|
|
@ -129,6 +133,7 @@ public class FRBodyLayoutAdapter extends AbstractLayoutAdapter{
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 三等分区域时,能否对应位置放入组件 |
|
|
|
|
* |
|
|
|
|
* @param comp 待放置组件 |
|
|
|
|
* @param x x |
|
|
|
|
* @param y y |
|
|
|
@ -367,6 +372,7 @@ public class FRBodyLayoutAdapter extends AbstractLayoutAdapter{
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 判断是否鼠标在组件的三等分区域,如果组件在布局管理器中间,上下左右都可能会三等分 |
|
|
|
|
* |
|
|
|
|
* @param parentComp 鼠标所在区域的组件 |
|
|
|
|
* @param x 坐标x |
|
|
|
|
* @param y 坐标y |
|
|
|
@ -407,6 +413,7 @@ public class FRBodyLayoutAdapter extends AbstractLayoutAdapter{
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 是否为组件交叉点区域 或者是相邻三组建中间点 |
|
|
|
|
* |
|
|
|
|
* @param currentComp 当前组件 |
|
|
|
|
* @param x 坐标x |
|
|
|
|
* @param y 坐标y |
|
|
|
@ -513,6 +520,7 @@ public class FRBodyLayoutAdapter extends AbstractLayoutAdapter{
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 平分,正常情况拖入组件时,按照上1/4区域、下1/4区域为上下平分,中左侧1/2区域、中右侧1/2区域为左右平分 |
|
|
|
|
* |
|
|
|
|
* @param currentComp 当前位置组件 |
|
|
|
|
* @param child 待放置组件 |
|
|
|
|
* @param x x |
|
|
|
@ -624,8 +632,21 @@ public class FRBodyLayoutAdapter extends AbstractLayoutAdapter{
|
|
|
|
|
XLayoutContainer cardLayout = ((XWCardMainBorderLayout) currentCreator).getCardPart(); |
|
|
|
|
XLayoutContainer container = (XLayoutContainer) cardLayout.getComponent(0); |
|
|
|
|
Rectangle rect = ComponentUtils.getRelativeBounds(container); |
|
|
|
|
/* |
|
|
|
|
* 为了获取到鼠标drop位置的控件, |
|
|
|
|
* 我们之前已经将y值变为相对坐标值; |
|
|
|
|
* 由于在x轴上没有偏移,所以x值一直等于相对坐标值,最多差一个边界值1。 |
|
|
|
|
* 在进行新添加的控件位置计算时, |
|
|
|
|
* 又通过ComponentUtils.getRelativeBounds()方法获取到了绝对坐标, |
|
|
|
|
* 再次计算相对坐标,所以将y值重新变成绝对坐标。 |
|
|
|
|
* */ |
|
|
|
|
if (currentCreator.getBackupParent().getLocation().y == WBorderLayout.DEFAULT_SIZE) { |
|
|
|
|
y = y + WCardMainBorderLayout.TAB_HEIGHT + WBorderLayout.DEFAULT_SIZE; |
|
|
|
|
} else { |
|
|
|
|
y = y + WCardMainBorderLayout.TAB_HEIGHT; |
|
|
|
|
} |
|
|
|
|
int tempX = x - rect.x; |
|
|
|
|
int tempY = y - rect.y + WCardMainBorderLayout.TAB_HEIGHT; |
|
|
|
|
int tempY = y - rect.y; |
|
|
|
|
int containerX = container.getX(); |
|
|
|
|
int containerY = container.getY(); |
|
|
|
|
int containerWidth = container.getWidth(); |
|
|
|
@ -658,6 +679,7 @@ public class FRBodyLayoutAdapter extends AbstractLayoutAdapter{
|
|
|
|
|
* 组件交叉区域进行插入时,调整受到变动的其他组件,之前是交叉区域插入也按照三等分逻辑,后面测试中发现有bug,改为和bi一样的鼠标所在侧平分 |
|
|
|
|
* 默认左上角、右下角区域是垂直方向插入组件 |
|
|
|
|
* 右上角和左下角是水平方向插入组件,这样避免田字块时重复 |
|
|
|
|
* |
|
|
|
|
* @param currentComp 当前位置组件 |
|
|
|
|
* @param child 待放置组件 |
|
|
|
|
* @param x x |
|
|
|
@ -900,6 +922,7 @@ public class FRBodyLayoutAdapter extends AbstractLayoutAdapter{
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 三等分区域时,调整相关联的组件 |
|
|
|
|
* |
|
|
|
|
* @param currentComp 鼠标所在组件 |
|
|
|
|
* @param child 待插入组件 |
|
|
|
|
*/ |
|
|
|
@ -1122,6 +1145,7 @@ public class FRBodyLayoutAdapter extends AbstractLayoutAdapter{
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 不调整,只计算位置 |
|
|
|
|
* |
|
|
|
|
* @return child的位置 |
|
|
|
|
*/ |
|
|
|
|
public int[] getChildPosition(Component currentComp, XCreator child, int x, int y) { |
|
|
|
|