|
|
|
@ -42,19 +42,19 @@ public class XWAbsoluteLayout extends XLayoutContainer {
|
|
|
|
|
//由于屏幕分辨率不同,界面上的容器大小可能不是默认的100%,此时拖入组件时,保存的大小按照100%时的计算
|
|
|
|
|
protected double containerPercent = 1.0; |
|
|
|
|
|
|
|
|
|
private HashMap<Connector,XConnector> xConnectorMap; |
|
|
|
|
private HashMap<Connector, XConnector> xConnectorMap; |
|
|
|
|
|
|
|
|
|
public XWAbsoluteLayout() { |
|
|
|
|
this(new WAbsoluteLayout(),new Dimension()); |
|
|
|
|
this(new WAbsoluteLayout(), new Dimension()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public XWAbsoluteLayout(WAbsoluteLayout widget) { |
|
|
|
|
this(widget,new Dimension()); |
|
|
|
|
this(widget, new Dimension()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public XWAbsoluteLayout(WAbsoluteLayout widget, Dimension initSize) { |
|
|
|
|
super(widget, initSize); |
|
|
|
|
this.xConnectorMap = new HashMap<Connector,XConnector>(); |
|
|
|
|
this.xConnectorMap = new HashMap<Connector, XConnector>(); |
|
|
|
|
Connector connector; |
|
|
|
|
for (int i = 0; i < widget.connectorCount(); i++) { |
|
|
|
|
connector = widget.getConnectorIndex(i); |
|
|
|
@ -75,17 +75,18 @@ public class XWAbsoluteLayout extends XLayoutContainer {
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
//根据屏幕大小来确定显示的百分比, 1440*900默认100%, 1366*768缩放90%
|
|
|
|
|
private void initPercent(WAbsoluteLayout widget){ |
|
|
|
|
private void initPercent(WAbsoluteLayout widget) { |
|
|
|
|
Toolkit toolkit = Toolkit.getDefaultToolkit(); |
|
|
|
|
Dimension scrnsize = toolkit.getScreenSize(); |
|
|
|
|
double screenValue = FRScreen.getByDimension(scrnsize).getValue(); |
|
|
|
|
if(screenValue != FormArea.DEFAULT_SLIDER){ |
|
|
|
|
if (screenValue != FormArea.DEFAULT_SLIDER) { |
|
|
|
|
this.setContainerPercent(screenValue / FormArea.DEFAULT_SLIDER); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 返回容器大小的百分比 |
|
|
|
|
* |
|
|
|
|
* @return the containerPercent |
|
|
|
|
*/ |
|
|
|
|
public double getContainerPercent() { |
|
|
|
@ -94,16 +95,18 @@ public class XWAbsoluteLayout extends XLayoutContainer {
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 设置容器大小的百分比 |
|
|
|
|
* |
|
|
|
|
* @param containerPercent the containerPercent to set |
|
|
|
|
*/ |
|
|
|
|
public void setContainerPercent(double containerPercent) { |
|
|
|
|
this.containerPercent = containerPercent; |
|
|
|
|
minWidth = (int) (XWAbsoluteLayout.MIN_WIDTH*containerPercent); |
|
|
|
|
minHeight = (int) (XWAbsoluteLayout.MIN_HEIGHT*containerPercent); |
|
|
|
|
minWidth = (int) (XWAbsoluteLayout.MIN_WIDTH * containerPercent); |
|
|
|
|
minHeight = (int) (XWAbsoluteLayout.MIN_HEIGHT * containerPercent); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 返回界面处根据百分比调整后的最小宽度 |
|
|
|
|
* |
|
|
|
|
* @return 最小宽度 |
|
|
|
|
*/ |
|
|
|
|
public int getActualMinWidth() { |
|
|
|
@ -112,6 +115,7 @@ public class XWAbsoluteLayout extends XLayoutContainer {
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 返回界面处根据百分比调整后的最小高度 |
|
|
|
|
* |
|
|
|
|
* @return 最小高度 |
|
|
|
|
*/ |
|
|
|
|
public int getActualMinHeight() { |
|
|
|
@ -120,13 +124,14 @@ public class XWAbsoluteLayout extends XLayoutContainer {
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 返回界面处根据百分比调整后的间隔大小(且为偶数) |
|
|
|
|
* |
|
|
|
|
* @return 间隔 |
|
|
|
|
*/ |
|
|
|
|
public int getAcualInterval() { |
|
|
|
|
// adapter那边交叉三等分、删除都要判断是否对齐,所以间隔转为偶数
|
|
|
|
|
int interval = (int) (toData().getCompInterval()*containerPercent); |
|
|
|
|
int val = interval/2; |
|
|
|
|
return val*2; |
|
|
|
|
int interval = (int) (toData().getCompInterval() * containerPercent); |
|
|
|
|
int val = interval / 2; |
|
|
|
|
return val * 2; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
@ -136,10 +141,10 @@ public class XWAbsoluteLayout extends XLayoutContainer {
|
|
|
|
|
if (containerPercent == 1.0) { |
|
|
|
|
return rec; |
|
|
|
|
} |
|
|
|
|
rec.x = (int) (rec.x/containerPercent); |
|
|
|
|
rec.y = (int) (rec.y/containerPercent); |
|
|
|
|
rec.width = (int) (rec.width/containerPercent); |
|
|
|
|
rec.height = (int) (rec.height/containerPercent); |
|
|
|
|
rec.x = (int) (rec.x / containerPercent); |
|
|
|
|
rec.y = (int) (rec.y / containerPercent); |
|
|
|
|
rec.width = (int) (rec.width / containerPercent); |
|
|
|
|
rec.height = (int) (rec.height / containerPercent); |
|
|
|
|
return rec; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -149,21 +154,21 @@ public class XWAbsoluteLayout extends XLayoutContainer {
|
|
|
|
|
public void updateBoundsWidget(XCreator xCreator) { |
|
|
|
|
WAbsoluteLayout layout = this.toData(); |
|
|
|
|
if (xCreator.hasTitleStyle()) { |
|
|
|
|
xCreator = (XLayoutContainer)xCreator.getParent(); |
|
|
|
|
xCreator = (XLayoutContainer) xCreator.getParent(); |
|
|
|
|
} |
|
|
|
|
if (xCreator.acceptType(XWAbsoluteLayout.class)){ |
|
|
|
|
if (xCreator.acceptType(XWAbsoluteLayout.class)) { |
|
|
|
|
((XWAbsoluteLayout) xCreator).updateBoundsWidget(); |
|
|
|
|
} |
|
|
|
|
BoundsWidget boundsWidget = layout.getBoundsWidget(xCreator.toData()); |
|
|
|
|
Rectangle rectangle = dealWidgetBound(xCreator.getBounds()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private Rectangle calculateBound(Rectangle rec, double pw, double ph){ |
|
|
|
|
Rectangle calRec = new Rectangle(0,0,0,0); |
|
|
|
|
calRec.x = (int)(rec.x / pw); |
|
|
|
|
calRec.y = (int)(rec.y / ph); |
|
|
|
|
calRec.width = (int)(rec.width / pw); |
|
|
|
|
calRec.height = (int)(rec.height / ph); |
|
|
|
|
private Rectangle calculateBound(Rectangle rec, double pw, double ph) { |
|
|
|
|
Rectangle calRec = new Rectangle(0, 0, 0, 0); |
|
|
|
|
calRec.x = (int) (rec.x / pw); |
|
|
|
|
calRec.y = (int) (rec.y / ph); |
|
|
|
|
calRec.width = (int) (rec.width / pw); |
|
|
|
|
calRec.height = (int) (rec.height / ph); |
|
|
|
|
return calRec; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -177,7 +182,7 @@ public class XWAbsoluteLayout extends XLayoutContainer {
|
|
|
|
|
if (backupBound != null && layout.getCompState() == WAbsoluteLayout.STATE_FIT) { |
|
|
|
|
double percentW = ((double) backupBound.width / (double) currentBound.width); |
|
|
|
|
double percentH = ((double) backupBound.height / (double) currentBound.height); |
|
|
|
|
for (int index = 0, n = this.getComponentCount(); index < n; index++){ |
|
|
|
|
for (int index = 0, n = this.getComponentCount(); index < n; index++) { |
|
|
|
|
XCreator creator = (XCreator) this.getComponent(index); |
|
|
|
|
BoundsWidget wgt = layout.getBoundsWidget(creator.toData()); |
|
|
|
|
// 用当前的显示大小计算后调正具体位置
|
|
|
|
@ -186,7 +191,7 @@ public class XWAbsoluteLayout extends XLayoutContainer {
|
|
|
|
|
wgt.setBounds(rec); |
|
|
|
|
creator.setBounds(rec); |
|
|
|
|
//绝对布局嵌套,要更新内部的绝对布局
|
|
|
|
|
if (creator.acceptType(XWAbsoluteLayout.class)){ |
|
|
|
|
if (creator.acceptType(XWAbsoluteLayout.class)) { |
|
|
|
|
creator.setBackupBound(wgtBound); |
|
|
|
|
((XWAbsoluteLayout) creator).updateBoundsWidget(); |
|
|
|
|
} |
|
|
|
@ -198,6 +203,7 @@ public class XWAbsoluteLayout extends XLayoutContainer {
|
|
|
|
|
* 更新子组件的Bound |
|
|
|
|
* 这边主要用于绝对布局子组件在适应区域选项时 |
|
|
|
|
* 涉及到的不同分辨率下缩放 |
|
|
|
|
* |
|
|
|
|
* @param minHeight 最小高度 |
|
|
|
|
*/ |
|
|
|
|
@Override |
|
|
|
@ -207,10 +213,10 @@ public class XWAbsoluteLayout extends XLayoutContainer {
|
|
|
|
|
for (int i = 0; i < this.getComponentCount(); i++) { |
|
|
|
|
XCreator creator = getXCreator(i); |
|
|
|
|
Rectangle rec = new Rectangle(creator.getBounds()); |
|
|
|
|
rec.x = (int)(rec.x / prevContainerPercent * containerPercent); |
|
|
|
|
rec.y = (int)(rec.y / prevContainerPercent * containerPercent); |
|
|
|
|
rec.height = (int)(rec.height / prevContainerPercent * containerPercent); |
|
|
|
|
rec.width = (int)(rec.width / prevContainerPercent * containerPercent); |
|
|
|
|
rec.x = (int) (rec.x / prevContainerPercent * containerPercent); |
|
|
|
|
rec.y = (int) (rec.y / prevContainerPercent * containerPercent); |
|
|
|
|
rec.height = (int) (rec.height / prevContainerPercent * containerPercent); |
|
|
|
|
rec.width = (int) (rec.width / prevContainerPercent * containerPercent); |
|
|
|
|
BoundsWidget wgt = toData().getBoundsWidget(creator.toData()); |
|
|
|
|
wgt.setBounds(rec); |
|
|
|
|
creator.setBounds(rec); |
|
|
|
@ -222,6 +228,7 @@ public class XWAbsoluteLayout extends XLayoutContainer {
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 增加对齐线 |
|
|
|
|
* |
|
|
|
|
* @param connector 对齐线 |
|
|
|
|
*/ |
|
|
|
|
public void addConnector(Connector connector) { |
|
|
|
@ -235,6 +242,7 @@ public class XWAbsoluteLayout extends XLayoutContainer {
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 去除对齐线 |
|
|
|
|
* |
|
|
|
|
* @param connector 对齐线 |
|
|
|
|
*/ |
|
|
|
|
public void removeConnector(Connector connector) { |
|
|
|
@ -244,6 +252,7 @@ public class XWAbsoluteLayout extends XLayoutContainer {
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 返回对应的widget容器 |
|
|
|
|
* |
|
|
|
|
* @return 返回WAbsoluteLayout |
|
|
|
|
*/ |
|
|
|
|
@Override |
|
|
|
@ -258,6 +267,7 @@ public class XWAbsoluteLayout extends XLayoutContainer {
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 返回默认的容器name |
|
|
|
|
* |
|
|
|
|
* @return 返回绝对布局容器名 |
|
|
|
|
*/ |
|
|
|
|
@Override |
|
|
|
@ -299,10 +309,10 @@ public class XWAbsoluteLayout extends XLayoutContainer {
|
|
|
|
|
WAbsoluteLayout abs = toData(); |
|
|
|
|
this.removeAll(); |
|
|
|
|
for (int i = 0, count = abs.getWidgetCount(); i < count; i++) { |
|
|
|
|
BoundsWidget bw = (BoundsWidget)abs.getWidget(i); |
|
|
|
|
BoundsWidget bw = (BoundsWidget) abs.getWidget(i); |
|
|
|
|
if (bw != null) { |
|
|
|
|
Rectangle bounds = bw.getBounds(); |
|
|
|
|
XWidgetCreator comp = (XWidgetCreator)XCreatorUtils.createXCreator(bw.getWidget()); |
|
|
|
|
XWidgetCreator comp = (XWidgetCreator) XCreatorUtils.createXCreator(bw.getWidget()); |
|
|
|
|
if (!comp.acceptType(XWParameterLayout.class)) { |
|
|
|
|
comp.setDirections(Direction.ALL); |
|
|
|
|
} |
|
|
|
@ -315,6 +325,7 @@ public class XWAbsoluteLayout extends XLayoutContainer {
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 当前组件zorder位置替换新的控件 |
|
|
|
|
* |
|
|
|
|
* @param widget 控件 |
|
|
|
|
* @param oldcreator 旧组件 |
|
|
|
|
* @return 组件 |
|
|
|
@ -333,6 +344,7 @@ public class XWAbsoluteLayout extends XLayoutContainer {
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 组件增加 |
|
|
|
|
* |
|
|
|
|
* @param e 容器事件 |
|
|
|
|
*/ |
|
|
|
|
@Override |
|
|
|
@ -350,6 +362,7 @@ public class XWAbsoluteLayout extends XLayoutContainer {
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 在设计界面中有组件移除的时候,需要通知WLayout容器重新paint |
|
|
|
|
* |
|
|
|
|
* @param e 容器事件 |
|
|
|
|
*/ |
|
|
|
|
@Override |
|
|
|
@ -377,21 +390,21 @@ public class XWAbsoluteLayout extends XLayoutContainer {
|
|
|
|
|
@Override |
|
|
|
|
public XLayoutContainer getTopLayout() { |
|
|
|
|
XLayoutContainer xTopLayout = XCreatorUtils.getParentXLayoutContainer(this).getTopLayout(); |
|
|
|
|
if (xTopLayout != null && !xTopLayout.isEditable()){ |
|
|
|
|
if (xTopLayout != null && !xTopLayout.isEditable()) { |
|
|
|
|
return xTopLayout; |
|
|
|
|
} |
|
|
|
|
else{ |
|
|
|
|
} else { |
|
|
|
|
return this; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 得到属性名 |
|
|
|
|
* |
|
|
|
|
* @return 属性名 |
|
|
|
|
* @throws java.beans.IntrospectionException |
|
|
|
|
*/ |
|
|
|
|
public CRPropertyDescriptor[] supportedDescriptor() throws IntrospectionException { |
|
|
|
|
return new CRPropertyDescriptor[] { |
|
|
|
|
return new CRPropertyDescriptor[]{ |
|
|
|
|
new CRPropertyDescriptor("widgetName", this.data.getClass()).setI18NName( |
|
|
|
|
Inter.getLocText("FR-Designer_Form-Widget_Name")) |
|
|
|
|
}; |
|
|
|
@ -439,7 +452,7 @@ public class XWAbsoluteLayout extends XLayoutContainer {
|
|
|
|
|
* @param editingMouseListener 鼠标点击,位置处理器 |
|
|
|
|
* @param e 鼠标点击事件 |
|
|
|
|
*/ |
|
|
|
|
public void respondClick(EditingMouseListener editingMouseListener,MouseEvent e){ |
|
|
|
|
public void respondClick(EditingMouseListener editingMouseListener, MouseEvent e) { |
|
|
|
|
FormDesigner designer = editingMouseListener.getDesigner(); |
|
|
|
|
SelectionModel selectionModel = editingMouseListener.getSelectionModel(); |
|
|
|
|
boolean isEditing = isEditable() || designer.getCursor().getType() == Cursor.HAND_CURSOR || e.getClickCount() == 2; |
|
|
|
@ -459,6 +472,7 @@ public class XWAbsoluteLayout extends XLayoutContainer {
|
|
|
|
|
/** |
|
|
|
|
* body大小手动调整的时候 |
|
|
|
|
* 按照比例调整组件的宽度 |
|
|
|
|
* |
|
|
|
|
* @param percent 比例 |
|
|
|
|
*/ |
|
|
|
|
@Override |
|
|
|
@ -475,6 +489,7 @@ public class XWAbsoluteLayout extends XLayoutContainer {
|
|
|
|
|
/** |
|
|
|
|
* body大小手动调整的时候 |
|
|
|
|
* 按照比例调整组件的高度 |
|
|
|
|
* |
|
|
|
|
* @param percent 比例 |
|
|
|
|
*/ |
|
|
|
|
@Override |
|
|
|
|