Browse Source

KERNEL-8776 绝对布局下拖动组件,会生成新的XCreator

persist/11.0
Henry.Wang 3 years ago
parent
commit
329f03c5ec
  1. 96
      designer-form/src/main/java/com/fr/design/designer/beans/location/AccessDirection.java

96
designer-form/src/main/java/com/fr/design/designer/beans/location/AccessDirection.java

@ -16,6 +16,7 @@ import com.fr.design.utils.ComponentUtils;
import com.fr.env.utils.DesignerInteractionHistory; import com.fr.env.utils.DesignerInteractionHistory;
import com.fr.form.ui.container.WAbsoluteLayout; import com.fr.form.ui.container.WAbsoluteLayout;
import com.fr.form.ui.container.WAbsoluteLayout.BoundsWidget; import com.fr.form.ui.container.WAbsoluteLayout.BoundsWidget;
import com.fr.form.ui.container.WBorderLayout;
import java.awt.*; import java.awt.*;
@ -29,7 +30,7 @@ public abstract class AccessDirection implements Direction {
private int ymin; private int ymin;
private int xmin; private int xmin;
abstract int getCursor(); abstract int getCursor();
protected abstract Rectangle getDraggedBounds(int dx, int dy, Rectangle currentBounds, FormDesigner designer, protected abstract Rectangle getDraggedBounds(int dx, int dy, Rectangle currentBounds, FormDesigner designer,
Rectangle oldBounds); Rectangle oldBounds);
@ -56,14 +57,14 @@ public abstract class AccessDirection implements Direction {
x = designer.getRootComponent().getWidth(); x = designer.getRootComponent().getWidth();
} }
//参数面板可以无下限拉长 //参数面板可以无下限拉长
if (y < 0) { if (y < 0) {
y = 0; y = 0;
} else if (y > designer.getRootComponent().getHeight() + designer.getParaHeight() && designer.getSelectionModel().hasSelectionComponent() } else if (y > designer.getRootComponent().getHeight() + designer.getParaHeight() && designer.getSelectionModel().hasSelectionComponent()
&& !designer.getSelectionModel().getSelection().getSelectedCreator().acceptType(XWParameterLayout.class)) { && !designer.getSelectionModel().getSelection().getSelectedCreator().acceptType(XWParameterLayout.class)) {
y = designer.getRootComponent().getHeight() + designer.getParaHeight(); y = designer.getRootComponent().getHeight() + designer.getParaHeight();
} }
return new Point(x, y); return new Point(x, y);
} }
protected void sorptionPoint(Point point, Rectangle currentBounds, FormDesigner designer) { protected void sorptionPoint(Point point, Rectangle currentBounds, FormDesigner designer) {
boolean findInX = currentBounds.getWidth() <= MoveUtils.SORPTION_UNIT; boolean findInX = currentBounds.getWidth() <= MoveUtils.SORPTION_UNIT;
@ -100,10 +101,10 @@ public abstract class AccessDirection implements Direction {
findInY = true; findInY = true;
} }
} }
if (findInX && findInY) { if (findInX && findInY) {
break; break;
} }
} }
setDesignerStateModelProperties(designer, findInX, findInY, currentBounds, point); setDesignerStateModelProperties(designer, findInX, findInY, currentBounds, point);
@ -129,11 +130,10 @@ public abstract class AccessDirection implements Direction {
} }
private WAbsoluteLayout getLayout(final FormDesigner designer){ private WAbsoluteLayout getLayout(final FormDesigner designer) {
XLayoutContainer formLayoutContainer = (XLayoutContainer) XCreatorUtils.createXCreator(
designer.getTarget().getContainer());
WAbsoluteLayout layout; WAbsoluteLayout layout;
if (formLayoutContainer.acceptType(XWBorderLayout.class)) {//看起来这边的作用应该是为了区别cpt(得到XWParameterLayout)还是frm(得到XWBorderLayout)的参数界面 //看起来这边的作用应该是为了区别cpt(得到XWParameterLayout)还是frm(得到XWBorderLayout)的参数界面
if (designer.getTarget().getContainer().acceptType(WBorderLayout.class)) {
Container container = designer.getSelectionModel().getSelection().getSelectedCreator().getParent(); Container container = designer.getSelectionModel().getSelection().getSelectedCreator().getParent();
if (container instanceof XWAbsoluteLayout) { if (container instanceof XWAbsoluteLayout) {
layout = ((XWAbsoluteLayout) container).toData(); layout = ((XWAbsoluteLayout) container).toData();
@ -161,49 +161,49 @@ public abstract class AccessDirection implements Direction {
return; return;
} }
//设定控件最小高度21,因每次拖曳至少移动1,防止控件高度等于21时,拖曳导致rec.y的变化使得控件不停的向上或向下移动。 //设定控件最小高度21,因每次拖曳至少移动1,防止控件高度等于21时,拖曳导致rec.y的变化使得控件不停的向上或向下移动。
if(rec.height == MINHEIGHT){ if (rec.height == MINHEIGHT) {
ymin = rec.y; ymin = rec.y;
} }
if(rec.height == MINHEIGHT - 1){ if (rec.height == MINHEIGHT - 1) {
ymin = ymin == rec.y ? rec.y : rec.y - 1; ymin = ymin == rec.y ? rec.y : rec.y - 1;
} }
if(rec.height < MINHEIGHT){ if (rec.height < MINHEIGHT) {
rec.height = MINHEIGHT; rec.height = MINHEIGHT;
rec.y = ymin; rec.y = ymin;
} }
// 增加下宽度也设最小为21 // 增加下宽度也设最小为21
if (rec.width == MINWIDTH) { if (rec.width == MINWIDTH) {
xmin = rec.x; xmin = rec.x;
} }
if(rec.width == MINWIDTH - 1){ if (rec.width == MINWIDTH - 1) {
xmin = xmin == rec.x ? rec.x : rec.x - 1; xmin = xmin == rec.x ? rec.x : rec.x - 1;
} }
if (rec.width < MINWIDTH) { if (rec.width < MINWIDTH) {
rec.width = MINWIDTH; rec.width = MINWIDTH;
rec.x = xmin; rec.x = xmin;
} }
} }
/** /**
* 更新鼠标指针形状 * 更新鼠标指针形状
* @param formEditor 设计界面组件 * @param formEditor 设计界面组件
*/ */
public void updateCursor(FormDesigner formEditor) { public void updateCursor(FormDesigner formEditor) {
// 调用位置枚举的多态方法getCursor获取鼠标形状 // 调用位置枚举的多态方法getCursor获取鼠标形状
int type = getCursor(); int type = getCursor();
if (type != formEditor.getCursor().getType()) { if (type != formEditor.getCursor().getType()) {
// 设置当前形状 // 设置当前形状
formEditor.setCursor(Cursor.getPredefinedCursor(type)); formEditor.setCursor(Cursor.getPredefinedCursor(type));
// 显示/改变Tooltip // 显示/改变Tooltip
showTooltip(formEditor); showTooltip(formEditor);
} }
} }
private void showTooltip(FormDesigner formEditor) { private void showTooltip(FormDesigner formEditor) {
// 显示拖拽改变组件尺寸相关的提示信息 // 显示拖拽改变组件尺寸相关的提示信息
int cursorType = formEditor.getCursor().getType(); int cursorType = formEditor.getCursor().getType();
if (Cursor.SW_RESIZE_CURSOR <= cursorType && cursorType <= Cursor.E_RESIZE_CURSOR) { if (Cursor.SW_RESIZE_CURSOR <= cursorType && cursorType <= Cursor.E_RESIZE_CURSOR) {
@ -217,15 +217,15 @@ public abstract class AccessDirection implements Direction {
} }
} }
public String getTooltip() { public String getTooltip() {
return null; return null;
}
/**
* 生成组件备用的bound
* @param formEditor 设计界面组件
*/
public void backupBounds(FormDesigner formEditor) {
formEditor.getSelectionModel().getSelection().backupBounds();
} }
/**
* 生成组件备用的bound
* @param formEditor 设计界面组件
*/
public void backupBounds(FormDesigner formEditor) {
formEditor.getSelectionModel().getSelection().backupBounds();
}
} }
Loading…
Cancel
Save