From be8e1af2f67dd41581284b465507c67336fb8a1f Mon Sep 17 00:00:00 2001 From: "Mata.Li" Date: Sun, 30 Sep 2018 17:22:03 +0800 Subject: [PATCH 1/3] REPORT-11473 --- .../actions/FormMobileAttrAction.java | 1 + .../FRAbsoluteBodyLayoutDefinePane.java | 128 +---------------- .../layout/FRFitLayoutDefinePane.java | 27 ++-- .../ui/designer/layout/WLayoutSwitchUtl.java | 134 ++++++++++++++++++ 4 files changed, 157 insertions(+), 133 deletions(-) create mode 100644 designer-form/src/main/java/com/fr/design/widget/ui/designer/layout/WLayoutSwitchUtl.java diff --git a/designer-form/src/main/java/com/fr/design/mainframe/actions/FormMobileAttrAction.java b/designer-form/src/main/java/com/fr/design/mainframe/actions/FormMobileAttrAction.java index df6139da9..2707e8f9b 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/actions/FormMobileAttrAction.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/actions/FormMobileAttrAction.java @@ -72,6 +72,7 @@ public class FormMobileAttrAction extends JTemplateAction { // 设置移动端属性并刷新界面 formTpl.setFormMobileAttr(formMobileAttr); // 会调整 body 的自适应布局,放到最后 ((FormArea)jf.getFormDesign().getParent()).onMobileAttrModified(); + jf.getFormDesign().getSelectionModel().setSelectedCreator(jf.getFormDesign().getRootComponent()); WidgetPropertyPane.getInstance().refreshDockingView(); jf.fireTargetModified(); } diff --git a/designer-form/src/main/java/com/fr/design/widget/ui/designer/layout/FRAbsoluteBodyLayoutDefinePane.java b/designer-form/src/main/java/com/fr/design/widget/ui/designer/layout/FRAbsoluteBodyLayoutDefinePane.java index bdd011f03..5b58e9f7c 100644 --- a/designer-form/src/main/java/com/fr/design/widget/ui/designer/layout/FRAbsoluteBodyLayoutDefinePane.java +++ b/designer-form/src/main/java/com/fr/design/widget/ui/designer/layout/FRAbsoluteBodyLayoutDefinePane.java @@ -63,13 +63,13 @@ public class FRAbsoluteBodyLayoutDefinePane extends FRAbsoluteLayoutDefinePane { watermarkEditor = new AccessibleBodyWatermarkEditor(); JPanel jPanel = TableLayoutHelper.createGapTableLayoutPane( new Component[][]{ - new Component[]{new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Widget_Style")), borderStyleEditor}, - new Component[]{new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_WaterMark")), watermarkEditor} + new Component[]{new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Widget_Style")), borderStyleEditor}, + new Component[]{new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_WaterMark")), watermarkEditor} }, TableLayoutHelper.FILL_LASTCOLUMN, IntervalConstants.INTERVAL_W3, IntervalConstants.INTERVAL_L1); JPanel borderPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); jPanel.setBorder(BorderFactory.createEmptyBorder(10, 0, 10, 0)); borderPane.add(jPanel, BorderLayout.CENTER); - UIExpandablePane advancedPane = new UIExpandablePane(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Advanced"), 280, 20, borderPane ); + UIExpandablePane advancedPane = new UIExpandablePane(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Advanced"), 280, 20, borderPane); centerPane.add(advancedPane, BorderLayout.NORTH); this.add(centerPane, BorderLayout.NORTH); } @@ -122,9 +122,9 @@ public class FRAbsoluteBodyLayoutDefinePane extends FRAbsoluteLayoutDefinePane { } if (layoutType == WBodyLayoutType.ABSOLUTE) { - ((XWFitLayout)creator.getBackupParent()).toData().resetStyle(); + ((XWFitLayout) creator.getBackupParent()).toData().resetStyle(); if (state == WBodyLayoutType.FIT.getTypeValue()) { - switch2FitBodyLayout(); + WLayoutSwitchUtl.switch2FitBodyLayout(creator); } } layout.setBorderStyle((LayoutBorderStyle) borderStyleEditor.getValue()); @@ -149,123 +149,5 @@ public class FRAbsoluteBodyLayoutDefinePane extends FRAbsoluteLayoutDefinePane { return null; } - private boolean switch2FitBodyLayout() { - try { - XWFitLayout xfl = (XWFitLayout) creator.getBackupParent(); - //备份一下组件间隔 - int compInterval = xfl.toData().getCompInterval(); - Component[] components = creator.getComponents(); - - Arrays.sort(components, new ComparatorComponentLocation()); - - xfl.getLayoutAdapter().removeBean(creator, creator.getWidth(), creator.getHeight()); - xfl.remove(creator); - - for (Component comp : components) { - XCreator xCreator = (XCreator) comp; - if (xCreator.shouldScaleCreator()) { - XLayoutContainer parentPanel = xCreator.initCreatorWrapper(xCreator.getHeight()); - xfl.add(parentPanel, xCreator.toData().getWidgetName()); - parentPanel.updateChildBound(xfl.getActualMinHeight()); - continue; - } - xfl.add(xCreator); - } - //这边计算的时候会先把组件间隔去掉 - moveComponents2FitLayout(xfl); - - - for (int i = 0; i < components.length; i++) { - Component comp = xfl.getComponent(i); - XCreator creator = (XCreator) comp; - creator.setBackupBound(components[i].getBounds()); - } - - //把组件间隔加上 - if (xfl.toData().getCompInterval() != compInterval) { - xfl.moveContainerMargin(); - xfl.moveCompInterval(xfl.getAcualInterval()); - xfl.toData().setCompInterval(compInterval); - xfl.addCompInterval(xfl.getAcualInterval()); - } - xfl.toData().setLayoutType(WBodyLayoutType.FIT); - FormDesigner formDesigner = WidgetPropertyPane.getInstance().getEditingFormDesigner(); - formDesigner.getSelectionModel().setSelectedCreator(xfl); - return true; - } catch (Exception e) { - FineLoggerFactory.getLogger().error(e.getMessage(), e); - return false; - } - } - - // 把绝对布局中的元素按规则移动到自适应布局中 - // 规则:各元素按顺序放置,其中每行最多4个元素,超出则换行,各元素均分body的高度和宽度 - private void moveComponents2FitLayout(XWFitLayout xwFitLayout) { - Component[] components = xwFitLayout.getComponents(); - if (components.length == 0) { - xwFitLayout.updateBoundsWidget(); - return; - } - int layoutWidth = xwFitLayout.getWidth() - xwFitLayout.toData().getMargin().getLeft() - xwFitLayout.toData().getMargin().getRight(); - int layoutHeight = xwFitLayout.getHeight() - xwFitLayout.toData().getMargin().getTop() - xwFitLayout.toData().getMargin().getBottom(); - int leftMargin = xwFitLayout.toData().getMargin().getLeft(); - int topMargin = xwFitLayout.toData().getMargin().getTop(); - xwFitLayout.toData().setCompInterval(0); - int row = (components.length / EACH_ROW_COUNT) + (components.length % EACH_ROW_COUNT == 0 ? 0 : 1); - //最后一行的列数不定 - int column = components.length % EACH_ROW_COUNT == 0 ? EACH_ROW_COUNT : components.length % EACH_ROW_COUNT; - int componentWidth = layoutWidth / EACH_ROW_COUNT; - int componentHeight = layoutHeight / row; - for (int i = 0; i < row - 1; i++) { - for (int j = 0; j < EACH_ROW_COUNT; j++) { - components[EACH_ROW_COUNT * i + j].setBounds( - leftMargin + componentWidth * j, - topMargin + componentHeight * i, - j == EACH_ROW_COUNT - 1 ? layoutWidth - componentWidth * (EACH_ROW_COUNT - 1) : componentWidth, - componentHeight - ); - } - } - //最后一行列数是特殊的,要单独处理 - int lastRowWidth = layoutWidth / column; - int lastRowHeight = layoutHeight - componentHeight * (row - 1); - for (int i = 0; i < column; i++) { - components[EACH_ROW_COUNT * (row - 1) + i].setBounds( - leftMargin + lastRowWidth * i, - topMargin + componentHeight * (row - 1), - i == column - 1 ? layoutWidth - lastRowWidth * (column - 1) : lastRowWidth, - lastRowHeight - ); - } - for (int i = 0; i < components.length; i++) { - if (components[i] instanceof XWCardMainBorderLayout) { - ((XWCardMainBorderLayout) components[i]).recalculateChildWidth(components[i].getWidth(), false); - ((XWCardMainBorderLayout) components[i]).recalculateChildHeight(components[i].getHeight(), false); - } - xwFitLayout.dealDirections((XCreator) components[i], false); - } - xwFitLayout.updateBoundsWidget(); - } - - //以组件的位置来确定先后顺序,y小的在前,x小的在前 - private class ComparatorComponentLocation implements Comparator { - @Override - public int compare(Object o1, Object o2) { - if (((Component) o1).getY() < ((Component) o2).getY()) { - return -1; - } else if (((Component) o1).getY() > ((Component) o2).getY()) { - return 1; - } else { - if (((Component) o1).getX() < ((Component) o2).getX()) { - return -1; - } else if (((Component) o1).getX() > ((Component) o2).getX()) { - return 1; - } else { - return 0; - } - } - } - } - } diff --git a/designer-form/src/main/java/com/fr/design/widget/ui/designer/layout/FRFitLayoutDefinePane.java b/designer-form/src/main/java/com/fr/design/widget/ui/designer/layout/FRFitLayoutDefinePane.java index 8be0e931c..fa720a05c 100644 --- a/designer-form/src/main/java/com/fr/design/widget/ui/designer/layout/FRFitLayoutDefinePane.java +++ b/designer-form/src/main/java/com/fr/design/widget/ui/designer/layout/FRFitLayoutDefinePane.java @@ -26,6 +26,7 @@ import com.fr.design.mainframe.widget.accessibles.AccessibleBodyWatermarkEditor; import com.fr.design.mainframe.widget.accessibles.AccessibleWLayoutBorderStyleEditor; import com.fr.design.widget.ui.designer.AbstractDataModify; import com.fr.design.widget.ui.designer.component.PaddingBoundPane; +import com.fr.form.main.Form; import com.fr.form.ui.LayoutBorderStyle; import com.fr.form.ui.Widget; import com.fr.form.ui.container.WAbsoluteBodyLayout; @@ -81,8 +82,8 @@ public class FRFitLayoutDefinePane extends AbstractDataModify { paddingBound = new PaddingBoundPane(); JPanel jp2 = TableLayoutHelper.createGapTableLayoutPane( new Component[][]{ - new Component[]{new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Widget_Style")), stylePane}, - new Component[]{new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_WaterMark")), watermarkEditor} + new Component[]{new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Widget_Style")), stylePane}, + new Component[]{new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_WaterMark")), watermarkEditor} }, TableLayoutHelper.FILL_LASTCOLUMN, IntervalConstants.INTERVAL_W3, IntervalConstants.INTERVAL_L1); jp2.setBorder(BorderFactory.createEmptyBorder(10, 0, 0, 0)); jPanel.add(paddingBound, BorderLayout.CENTER); @@ -136,8 +137,14 @@ public class FRFitLayoutDefinePane extends AbstractDataModify { XLayoutContainer rootLayout = selectedBodyLayout(formDesigner); if (rootLayout != formDesigner.getRootComponent() && formDesigner.getSelectionModel().getSelection().getSelectedCreator() == formDesigner.getRootComponent()) { - formDesigner.getSelectionModel().setSelectedCreators( - FormSelectionUtils.rebuildSelection(xWFitLayout, new Widget[]{selectedBodyLayout(formDesigner).toData()})); + //原单例面板populate根据当前样式populate属性面板,现加入移动端逻辑:可能需要根据面板属性改变样式 + Form form = formDesigner.getTarget(); + if (form.getFormMobileAttr().isMobileOnly() && form.getFormMobileAttr().isAdaptivePropertyAutoMatch()) { + WLayoutSwitchUtl.switch2FitBodyLayout(rootLayout); + } else { + formDesigner.getSelectionModel().setSelectedCreators( + FormSelectionUtils.rebuildSelection(xWFitLayout, new Widget[]{selectedBodyLayout(formDesigner).toData()})); + } } paddingBound.populate(ob); layoutComboBox.setSelectedIndex(ob.getBodyLayoutType().getTypeValue()); @@ -149,8 +156,8 @@ public class FRFitLayoutDefinePane extends AbstractDataModify { private XLayoutContainer selectedBodyLayout(FormDesigner formDesigner) { XLayoutContainer rootLayout = formDesigner.getRootComponent(); - if (rootLayout.getComponentCount() == 1 && rootLayout.getXCreator(0).acceptType(XWAbsoluteBodyLayout.class)){ - rootLayout = (XWAbsoluteBodyLayout)rootLayout.getXCreator(0); + if (rootLayout.getComponentCount() == 1 && rootLayout.getXCreator(0).acceptType(XWAbsoluteBodyLayout.class)) { + rootLayout = (XWAbsoluteBodyLayout) rootLayout.getXCreator(0); } return rootLayout; } @@ -162,8 +169,8 @@ public class FRFitLayoutDefinePane extends AbstractDataModify { if (ComparatorUtils.equals(getGlobalName(), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Layout_Padding_Duplicate"))) { paddingBound.update(layout); } - LayoutBorderStyle borderStyle = (LayoutBorderStyle) stylePane.getValue(); - if(borderStyle != null){ + LayoutBorderStyle borderStyle = (LayoutBorderStyle) stylePane.getValue(); + if (borderStyle != null) { layout.setBorderStyle(borderStyle); } updateWatermark(); @@ -205,7 +212,7 @@ public class FRFitLayoutDefinePane extends AbstractDataModify { } - int intervelValue = (int)componentIntervel.getValue(); + int intervelValue = (int) componentIntervel.getValue(); if (xWFitLayout.canAddInterval(intervelValue)) { // 设置完间隔后,要同步处理界面组件,容器刷新后显示出对应效果 setLayoutGap(intervelValue); @@ -227,7 +234,7 @@ public class FRFitLayoutDefinePane extends AbstractDataModify { } private void setLayoutGap(int value) { - int interval = wFitLayout.getCompInterval(); + int interval = wFitLayout.getCompInterval(); if (value != interval) { xWFitLayout.moveContainerMargin(); xWFitLayout.moveCompInterval(xWFitLayout.getAcualInterval()); diff --git a/designer-form/src/main/java/com/fr/design/widget/ui/designer/layout/WLayoutSwitchUtl.java b/designer-form/src/main/java/com/fr/design/widget/ui/designer/layout/WLayoutSwitchUtl.java new file mode 100644 index 000000000..3725ef2b9 --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/widget/ui/designer/layout/WLayoutSwitchUtl.java @@ -0,0 +1,134 @@ +package com.fr.design.widget.ui.designer.layout; + +import com.fr.design.designer.creator.XCreator; +import com.fr.design.designer.creator.XLayoutContainer; +import com.fr.design.designer.creator.XWFitLayout; +import com.fr.design.designer.creator.cardlayout.XWCardMainBorderLayout; +import com.fr.design.mainframe.FormDesigner; +import com.fr.design.mainframe.WidgetPropertyPane; +import com.fr.form.ui.container.WBodyLayoutType; +import com.fr.general.FRLogger; + +import java.awt.*; +import java.util.Arrays; +import java.util.Comparator; + +public class WLayoutSwitchUtl { + private static final int EACH_ROW_COUNT = 4; + + public static boolean switch2FitBodyLayout(XCreator creator) { + try { + XWFitLayout xfl = (XWFitLayout) creator.getBackupParent(); + //备份一下组件间隔 + int compInterval = xfl.toData().getCompInterval(); + Component[] components = creator.getComponents(); + + Arrays.sort(components, new ComparatorComponentLocation()); + + xfl.getLayoutAdapter().removeBean(creator, creator.getWidth(), creator.getHeight()); + xfl.remove(creator); + + for (Component comp : components) { + XCreator xCreator = (XCreator) comp; + if (xCreator.shouldScaleCreator()) { + XLayoutContainer parentPanel = xCreator.initCreatorWrapper(xCreator.getHeight()); + xfl.add(parentPanel, xCreator.toData().getWidgetName()); + parentPanel.updateChildBound(xfl.getActualMinHeight()); + continue; + } + xfl.add(xCreator); + } + //这边计算的时候会先把组件间隔去掉 + moveComponents2FitLayout(xfl); + + + for (int i = 0; i < components.length; i++) { + Component comp = xfl.getComponent(i); + creator = (XCreator) comp; + creator.setBackupBound(components[i].getBounds()); + } + + //把组件间隔加上 + if (xfl.toData().getCompInterval() != compInterval) { + xfl.moveContainerMargin(); + xfl.moveCompInterval(xfl.getAcualInterval()); + xfl.toData().setCompInterval(compInterval); + xfl.addCompInterval(xfl.getAcualInterval()); + } + xfl.toData().setLayoutType(WBodyLayoutType.FIT); + FormDesigner formDesigner = WidgetPropertyPane.getInstance().getEditingFormDesigner(); + formDesigner.getSelectionModel().setSelectedCreator(xfl); + return true; + } catch (Exception e) { + FRLogger.getLogger().error(e.getMessage()); + return false; + } + } + + private static void moveComponents2FitLayout(XWFitLayout xwFitLayout) { + Component[] components = xwFitLayout.getComponents(); + if (components.length == 0) { + xwFitLayout.updateBoundsWidget(); + return; + } + int layoutWidth = xwFitLayout.getWidth() - xwFitLayout.toData().getMargin().getLeft() - xwFitLayout.toData().getMargin().getRight(); + int layoutHeight = xwFitLayout.getHeight() - xwFitLayout.toData().getMargin().getTop() - xwFitLayout.toData().getMargin().getBottom(); + int leftMargin = xwFitLayout.toData().getMargin().getLeft(); + int topMargin = xwFitLayout.toData().getMargin().getTop(); + xwFitLayout.toData().setCompInterval(0); + int row = (components.length / EACH_ROW_COUNT) + (components.length % EACH_ROW_COUNT == 0 ? 0 : 1); + //最后一行的列数不定 + int column = components.length % EACH_ROW_COUNT == 0 ? EACH_ROW_COUNT : components.length % EACH_ROW_COUNT; + int componentWidth = layoutWidth / EACH_ROW_COUNT; + int componentHeight = layoutHeight / row; + for (int i = 0; i < row - 1; i++) { + for (int j = 0; j < EACH_ROW_COUNT; j++) { + components[EACH_ROW_COUNT * i + j].setBounds( + leftMargin + componentWidth * j, + topMargin + componentHeight * i, + j == EACH_ROW_COUNT - 1 ? layoutWidth - componentWidth * (EACH_ROW_COUNT - 1) : componentWidth, + componentHeight + ); + } + } + //最后一行列数是特殊的,要单独处理 + int lastRowWidth = layoutWidth / column; + int lastRowHeight = layoutHeight - componentHeight * (row - 1); + for (int i = 0; i < column; i++) { + components[EACH_ROW_COUNT * (row - 1) + i].setBounds( + leftMargin + lastRowWidth * i, + topMargin + componentHeight * (row - 1), + i == column - 1 ? layoutWidth - lastRowWidth * (column - 1) : lastRowWidth, + lastRowHeight + ); + } + for (int i = 0; i < components.length; i++) { + if (components[i] instanceof XWCardMainBorderLayout) { + ((XWCardMainBorderLayout) components[i]).recalculateChildWidth(components[i].getWidth(), false); + ((XWCardMainBorderLayout) components[i]).recalculateChildHeight(components[i].getHeight(), false); + } + xwFitLayout.dealDirections((XCreator) components[i], false); + } + xwFitLayout.updateBoundsWidget(); + } + + //以组件的位置来确定先后顺序,y小的在前,x小的在前 + private static class ComparatorComponentLocation implements Comparator { + @Override + public int compare(Object o1, Object o2) { + if (((Component) o1).getY() < ((Component) o2).getY()) { + return -1; + } else if (((Component) o1).getY() > ((Component) o2).getY()) { + return 1; + } else { + if (((Component) o1).getX() < ((Component) o2).getX()) { + return -1; + } else if (((Component) o1).getX() > ((Component) o2).getX()) { + return 1; + } else { + return 0; + } + } + } + } +} From 81bd4bc2bc3c2b688b624501d637e15c67e52656 Mon Sep 17 00:00:00 2001 From: "Mata.Li" Date: Sun, 30 Sep 2018 17:37:09 +0800 Subject: [PATCH 2/3] REPORT-11473 --- .../design/designer/creator/XWFitLayout.java | 125 +++++++++++++++- .../FRAbsoluteBodyLayoutDefinePane.java | 2 +- .../layout/FRFitLayoutDefinePane.java | 2 +- .../ui/designer/layout/WLayoutSwitchUtl.java | 134 ------------------ 4 files changed, 124 insertions(+), 139 deletions(-) delete mode 100644 designer-form/src/main/java/com/fr/design/widget/ui/designer/layout/WLayoutSwitchUtl.java diff --git a/designer-form/src/main/java/com/fr/design/designer/creator/XWFitLayout.java b/designer-form/src/main/java/com/fr/design/designer/creator/XWFitLayout.java index 73c1949fb..1f8160225 100644 --- a/designer-form/src/main/java/com/fr/design/designer/creator/XWFitLayout.java +++ b/designer-form/src/main/java/com/fr/design/designer/creator/XWFitLayout.java @@ -5,24 +5,26 @@ import java.awt.Dimension; import java.awt.Rectangle; import java.awt.Toolkit; import java.awt.event.ContainerEvent; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; +import java.util.*; import com.fr.design.designer.beans.LayoutAdapter; import com.fr.design.designer.beans.adapters.layout.FRFitLayoutAdapter; import com.fr.design.designer.beans.location.Direction; +import com.fr.design.designer.creator.cardlayout.XWCardMainBorderLayout; import com.fr.design.designer.creator.cardlayout.XWTabFitLayout; import com.fr.design.designer.properties.mobile.BodyMobilePropertyUI; import com.fr.design.form.layout.FRFitLayout; import com.fr.design.fun.WidgetPropertyUIProvider; import com.fr.design.mainframe.FormArea; +import com.fr.design.mainframe.FormDesigner; +import com.fr.design.mainframe.WidgetPropertyPane; import com.fr.design.utils.gui.LayoutUtils; import com.fr.form.ui.PaddingMargin; import com.fr.form.ui.Widget; import com.fr.form.ui.container.WBodyLayoutType; import com.fr.form.ui.container.WFitLayout; import com.fr.form.ui.container.WLayout; +import com.fr.general.FRLogger; import com.fr.general.FRScreen; import com.fr.form.ui.container.WAbsoluteLayout.BoundsWidget; @@ -38,6 +40,7 @@ import javax.swing.JOptionPane; public class XWFitLayout extends XLayoutContainer { private static final long serialVersionUID = 8112908607102660176L; + private static final int EACH_ROW_COUNT = 4; //由于屏幕分辨率不同,界面上的容器大小可能不是默认的100%,此时拖入组件时,保存的大小按照100%时的计算 protected double containerPercent = 1.0; @@ -1209,4 +1212,120 @@ public class XWFitLayout extends XLayoutContainer { public boolean isMovable() { return false; } + + public static boolean switch2FitBodyLayout(XCreator creator) { + try { + XWFitLayout xfl = (XWFitLayout) creator.getBackupParent(); + //备份一下组件间隔 + int compInterval = xfl.toData().getCompInterval(); + Component[] components = creator.getComponents(); + + Arrays.sort(components, new ComparatorComponentLocation()); + + xfl.getLayoutAdapter().removeBean(creator, creator.getWidth(), creator.getHeight()); + xfl.remove(creator); + + for (Component comp : components) { + XCreator xCreator = (XCreator) comp; + if (xCreator.shouldScaleCreator()) { + XLayoutContainer parentPanel = xCreator.initCreatorWrapper(xCreator.getHeight()); + xfl.add(parentPanel, xCreator.toData().getWidgetName()); + parentPanel.updateChildBound(xfl.getActualMinHeight()); + continue; + } + xfl.add(xCreator); + } + //这边计算的时候会先把组件间隔去掉 + moveComponents2FitLayout(xfl); + + + for (int i = 0; i < components.length; i++) { + Component comp = xfl.getComponent(i); + creator = (XCreator) comp; + creator.setBackupBound(components[i].getBounds()); + } + + //把组件间隔加上 + if (xfl.toData().getCompInterval() != compInterval) { + xfl.moveContainerMargin(); + xfl.moveCompInterval(xfl.getAcualInterval()); + xfl.toData().setCompInterval(compInterval); + xfl.addCompInterval(xfl.getAcualInterval()); + } + xfl.toData().setLayoutType(WBodyLayoutType.FIT); + FormDesigner formDesigner = WidgetPropertyPane.getInstance().getEditingFormDesigner(); + formDesigner.getSelectionModel().setSelectedCreator(xfl); + return true; + } catch (Exception e) { + FRLogger.getLogger().error(e.getMessage()); + return false; + } + } + + private static void moveComponents2FitLayout(XWFitLayout xwFitLayout) { + Component[] components = xwFitLayout.getComponents(); + if (components.length == 0) { + xwFitLayout.updateBoundsWidget(); + return; + } + int layoutWidth = xwFitLayout.getWidth() - xwFitLayout.toData().getMargin().getLeft() - xwFitLayout.toData().getMargin().getRight(); + int layoutHeight = xwFitLayout.getHeight() - xwFitLayout.toData().getMargin().getTop() - xwFitLayout.toData().getMargin().getBottom(); + int leftMargin = xwFitLayout.toData().getMargin().getLeft(); + int topMargin = xwFitLayout.toData().getMargin().getTop(); + xwFitLayout.toData().setCompInterval(0); + int row = (components.length / EACH_ROW_COUNT) + (components.length % EACH_ROW_COUNT == 0 ? 0 : 1); + //最后一行的列数不定 + int column = components.length % EACH_ROW_COUNT == 0 ? EACH_ROW_COUNT : components.length % EACH_ROW_COUNT; + int componentWidth = layoutWidth / EACH_ROW_COUNT; + int componentHeight = layoutHeight / row; + for (int i = 0; i < row - 1; i++) { + for (int j = 0; j < EACH_ROW_COUNT; j++) { + components[EACH_ROW_COUNT * i + j].setBounds( + leftMargin + componentWidth * j, + topMargin + componentHeight * i, + j == EACH_ROW_COUNT - 1 ? layoutWidth - componentWidth * (EACH_ROW_COUNT - 1) : componentWidth, + componentHeight + ); + } + } + //最后一行列数是特殊的,要单独处理 + int lastRowWidth = layoutWidth / column; + int lastRowHeight = layoutHeight - componentHeight * (row - 1); + for (int i = 0; i < column; i++) { + components[EACH_ROW_COUNT * (row - 1) + i].setBounds( + leftMargin + lastRowWidth * i, + topMargin + componentHeight * (row - 1), + i == column - 1 ? layoutWidth - lastRowWidth * (column - 1) : lastRowWidth, + lastRowHeight + ); + } + for (int i = 0; i < components.length; i++) { + if (components[i] instanceof XWCardMainBorderLayout) { + ((XWCardMainBorderLayout) components[i]).recalculateChildWidth(components[i].getWidth(), false); + ((XWCardMainBorderLayout) components[i]).recalculateChildHeight(components[i].getHeight(), false); + } + xwFitLayout.dealDirections((XCreator) components[i], false); + } + xwFitLayout.updateBoundsWidget(); + } + + //以组件的位置来确定先后顺序,y小的在前,x小的在前 + private static class ComparatorComponentLocation implements Comparator { + @Override + public int compare(Object o1, Object o2) { + if (((Component) o1).getY() < ((Component) o2).getY()) { + return -1; + } else if (((Component) o1).getY() > ((Component) o2).getY()) { + return 1; + } else { + if (((Component) o1).getX() < ((Component) o2).getX()) { + return -1; + } else if (((Component) o1).getX() > ((Component) o2).getX()) { + return 1; + } else { + return 0; + } + } + } + } } \ No newline at end of file diff --git a/designer-form/src/main/java/com/fr/design/widget/ui/designer/layout/FRAbsoluteBodyLayoutDefinePane.java b/designer-form/src/main/java/com/fr/design/widget/ui/designer/layout/FRAbsoluteBodyLayoutDefinePane.java index 5b58e9f7c..aa828c869 100644 --- a/designer-form/src/main/java/com/fr/design/widget/ui/designer/layout/FRAbsoluteBodyLayoutDefinePane.java +++ b/designer-form/src/main/java/com/fr/design/widget/ui/designer/layout/FRAbsoluteBodyLayoutDefinePane.java @@ -124,7 +124,7 @@ public class FRAbsoluteBodyLayoutDefinePane extends FRAbsoluteLayoutDefinePane { if (layoutType == WBodyLayoutType.ABSOLUTE) { ((XWFitLayout) creator.getBackupParent()).toData().resetStyle(); if (state == WBodyLayoutType.FIT.getTypeValue()) { - WLayoutSwitchUtl.switch2FitBodyLayout(creator); + XWFitLayout.switch2FitBodyLayout(creator); } } layout.setBorderStyle((LayoutBorderStyle) borderStyleEditor.getValue()); diff --git a/designer-form/src/main/java/com/fr/design/widget/ui/designer/layout/FRFitLayoutDefinePane.java b/designer-form/src/main/java/com/fr/design/widget/ui/designer/layout/FRFitLayoutDefinePane.java index fa720a05c..dedd5304b 100644 --- a/designer-form/src/main/java/com/fr/design/widget/ui/designer/layout/FRFitLayoutDefinePane.java +++ b/designer-form/src/main/java/com/fr/design/widget/ui/designer/layout/FRFitLayoutDefinePane.java @@ -140,7 +140,7 @@ public class FRFitLayoutDefinePane extends AbstractDataModify { //原单例面板populate根据当前样式populate属性面板,现加入移动端逻辑:可能需要根据面板属性改变样式 Form form = formDesigner.getTarget(); if (form.getFormMobileAttr().isMobileOnly() && form.getFormMobileAttr().isAdaptivePropertyAutoMatch()) { - WLayoutSwitchUtl.switch2FitBodyLayout(rootLayout); + XWFitLayout.switch2FitBodyLayout(rootLayout); } else { formDesigner.getSelectionModel().setSelectedCreators( FormSelectionUtils.rebuildSelection(xWFitLayout, new Widget[]{selectedBodyLayout(formDesigner).toData()})); diff --git a/designer-form/src/main/java/com/fr/design/widget/ui/designer/layout/WLayoutSwitchUtl.java b/designer-form/src/main/java/com/fr/design/widget/ui/designer/layout/WLayoutSwitchUtl.java deleted file mode 100644 index 3725ef2b9..000000000 --- a/designer-form/src/main/java/com/fr/design/widget/ui/designer/layout/WLayoutSwitchUtl.java +++ /dev/null @@ -1,134 +0,0 @@ -package com.fr.design.widget.ui.designer.layout; - -import com.fr.design.designer.creator.XCreator; -import com.fr.design.designer.creator.XLayoutContainer; -import com.fr.design.designer.creator.XWFitLayout; -import com.fr.design.designer.creator.cardlayout.XWCardMainBorderLayout; -import com.fr.design.mainframe.FormDesigner; -import com.fr.design.mainframe.WidgetPropertyPane; -import com.fr.form.ui.container.WBodyLayoutType; -import com.fr.general.FRLogger; - -import java.awt.*; -import java.util.Arrays; -import java.util.Comparator; - -public class WLayoutSwitchUtl { - private static final int EACH_ROW_COUNT = 4; - - public static boolean switch2FitBodyLayout(XCreator creator) { - try { - XWFitLayout xfl = (XWFitLayout) creator.getBackupParent(); - //备份一下组件间隔 - int compInterval = xfl.toData().getCompInterval(); - Component[] components = creator.getComponents(); - - Arrays.sort(components, new ComparatorComponentLocation()); - - xfl.getLayoutAdapter().removeBean(creator, creator.getWidth(), creator.getHeight()); - xfl.remove(creator); - - for (Component comp : components) { - XCreator xCreator = (XCreator) comp; - if (xCreator.shouldScaleCreator()) { - XLayoutContainer parentPanel = xCreator.initCreatorWrapper(xCreator.getHeight()); - xfl.add(parentPanel, xCreator.toData().getWidgetName()); - parentPanel.updateChildBound(xfl.getActualMinHeight()); - continue; - } - xfl.add(xCreator); - } - //这边计算的时候会先把组件间隔去掉 - moveComponents2FitLayout(xfl); - - - for (int i = 0; i < components.length; i++) { - Component comp = xfl.getComponent(i); - creator = (XCreator) comp; - creator.setBackupBound(components[i].getBounds()); - } - - //把组件间隔加上 - if (xfl.toData().getCompInterval() != compInterval) { - xfl.moveContainerMargin(); - xfl.moveCompInterval(xfl.getAcualInterval()); - xfl.toData().setCompInterval(compInterval); - xfl.addCompInterval(xfl.getAcualInterval()); - } - xfl.toData().setLayoutType(WBodyLayoutType.FIT); - FormDesigner formDesigner = WidgetPropertyPane.getInstance().getEditingFormDesigner(); - formDesigner.getSelectionModel().setSelectedCreator(xfl); - return true; - } catch (Exception e) { - FRLogger.getLogger().error(e.getMessage()); - return false; - } - } - - private static void moveComponents2FitLayout(XWFitLayout xwFitLayout) { - Component[] components = xwFitLayout.getComponents(); - if (components.length == 0) { - xwFitLayout.updateBoundsWidget(); - return; - } - int layoutWidth = xwFitLayout.getWidth() - xwFitLayout.toData().getMargin().getLeft() - xwFitLayout.toData().getMargin().getRight(); - int layoutHeight = xwFitLayout.getHeight() - xwFitLayout.toData().getMargin().getTop() - xwFitLayout.toData().getMargin().getBottom(); - int leftMargin = xwFitLayout.toData().getMargin().getLeft(); - int topMargin = xwFitLayout.toData().getMargin().getTop(); - xwFitLayout.toData().setCompInterval(0); - int row = (components.length / EACH_ROW_COUNT) + (components.length % EACH_ROW_COUNT == 0 ? 0 : 1); - //最后一行的列数不定 - int column = components.length % EACH_ROW_COUNT == 0 ? EACH_ROW_COUNT : components.length % EACH_ROW_COUNT; - int componentWidth = layoutWidth / EACH_ROW_COUNT; - int componentHeight = layoutHeight / row; - for (int i = 0; i < row - 1; i++) { - for (int j = 0; j < EACH_ROW_COUNT; j++) { - components[EACH_ROW_COUNT * i + j].setBounds( - leftMargin + componentWidth * j, - topMargin + componentHeight * i, - j == EACH_ROW_COUNT - 1 ? layoutWidth - componentWidth * (EACH_ROW_COUNT - 1) : componentWidth, - componentHeight - ); - } - } - //最后一行列数是特殊的,要单独处理 - int lastRowWidth = layoutWidth / column; - int lastRowHeight = layoutHeight - componentHeight * (row - 1); - for (int i = 0; i < column; i++) { - components[EACH_ROW_COUNT * (row - 1) + i].setBounds( - leftMargin + lastRowWidth * i, - topMargin + componentHeight * (row - 1), - i == column - 1 ? layoutWidth - lastRowWidth * (column - 1) : lastRowWidth, - lastRowHeight - ); - } - for (int i = 0; i < components.length; i++) { - if (components[i] instanceof XWCardMainBorderLayout) { - ((XWCardMainBorderLayout) components[i]).recalculateChildWidth(components[i].getWidth(), false); - ((XWCardMainBorderLayout) components[i]).recalculateChildHeight(components[i].getHeight(), false); - } - xwFitLayout.dealDirections((XCreator) components[i], false); - } - xwFitLayout.updateBoundsWidget(); - } - - //以组件的位置来确定先后顺序,y小的在前,x小的在前 - private static class ComparatorComponentLocation implements Comparator { - @Override - public int compare(Object o1, Object o2) { - if (((Component) o1).getY() < ((Component) o2).getY()) { - return -1; - } else if (((Component) o1).getY() > ((Component) o2).getY()) { - return 1; - } else { - if (((Component) o1).getX() < ((Component) o2).getX()) { - return -1; - } else if (((Component) o1).getX() > ((Component) o2).getX()) { - return 1; - } else { - return 0; - } - } - } - } -} From 7e2cc5da13746416b585f01a17c58ea406e852b5 Mon Sep 17 00:00:00 2001 From: "Mata.Li" Date: Sun, 30 Sep 2018 17:51:52 +0800 Subject: [PATCH 3/3] REPORT-11473 --- .../com/fr/design/designer/creator/XWFitLayout.java | 12 ++++++++---- .../layout/FRAbsoluteBodyLayoutDefinePane.java | 2 +- .../ui/designer/layout/FRFitLayoutDefinePane.java | 2 +- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/designer-form/src/main/java/com/fr/design/designer/creator/XWFitLayout.java b/designer-form/src/main/java/com/fr/design/designer/creator/XWFitLayout.java index 1f8160225..c9b55b298 100644 --- a/designer-form/src/main/java/com/fr/design/designer/creator/XWFitLayout.java +++ b/designer-form/src/main/java/com/fr/design/designer/creator/XWFitLayout.java @@ -5,7 +5,10 @@ import java.awt.Dimension; import java.awt.Rectangle; import java.awt.Toolkit; import java.awt.event.ContainerEvent; -import java.util.*; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.List; import com.fr.design.designer.beans.LayoutAdapter; import com.fr.design.designer.beans.adapters.layout.FRFitLayoutAdapter; @@ -29,6 +32,7 @@ import com.fr.general.FRScreen; import com.fr.form.ui.container.WAbsoluteLayout.BoundsWidget; import com.fr.stable.ArrayUtils; +import edu.emory.mathcs.backport.java.util.Arrays; import javax.swing.JOptionPane; @@ -1213,7 +1217,7 @@ public class XWFitLayout extends XLayoutContainer { return false; } - public static boolean switch2FitBodyLayout(XCreator creator) { + public boolean switch2FitBodyLayout(XCreator creator) { try { XWFitLayout xfl = (XWFitLayout) creator.getBackupParent(); //备份一下组件间隔 @@ -1262,7 +1266,7 @@ public class XWFitLayout extends XLayoutContainer { } } - private static void moveComponents2FitLayout(XWFitLayout xwFitLayout) { + private void moveComponents2FitLayout(XWFitLayout xwFitLayout) { Component[] components = xwFitLayout.getComponents(); if (components.length == 0) { xwFitLayout.updateBoundsWidget(); @@ -1310,7 +1314,7 @@ public class XWFitLayout extends XLayoutContainer { } //以组件的位置来确定先后顺序,y小的在前,x小的在前 - private static class ComparatorComponentLocation implements Comparator { + private class ComparatorComponentLocation implements Comparator { @Override public int compare(Object o1, Object o2) { if (((Component) o1).getY() < ((Component) o2).getY()) { diff --git a/designer-form/src/main/java/com/fr/design/widget/ui/designer/layout/FRAbsoluteBodyLayoutDefinePane.java b/designer-form/src/main/java/com/fr/design/widget/ui/designer/layout/FRAbsoluteBodyLayoutDefinePane.java index aa828c869..04c33f35b 100644 --- a/designer-form/src/main/java/com/fr/design/widget/ui/designer/layout/FRAbsoluteBodyLayoutDefinePane.java +++ b/designer-form/src/main/java/com/fr/design/widget/ui/designer/layout/FRAbsoluteBodyLayoutDefinePane.java @@ -124,7 +124,7 @@ public class FRAbsoluteBodyLayoutDefinePane extends FRAbsoluteLayoutDefinePane { if (layoutType == WBodyLayoutType.ABSOLUTE) { ((XWFitLayout) creator.getBackupParent()).toData().resetStyle(); if (state == WBodyLayoutType.FIT.getTypeValue()) { - XWFitLayout.switch2FitBodyLayout(creator); + ((XWFitLayout)creator.getBackupParent()).switch2FitBodyLayout(creator); } } layout.setBorderStyle((LayoutBorderStyle) borderStyleEditor.getValue()); diff --git a/designer-form/src/main/java/com/fr/design/widget/ui/designer/layout/FRFitLayoutDefinePane.java b/designer-form/src/main/java/com/fr/design/widget/ui/designer/layout/FRFitLayoutDefinePane.java index dedd5304b..35c8ddee9 100644 --- a/designer-form/src/main/java/com/fr/design/widget/ui/designer/layout/FRFitLayoutDefinePane.java +++ b/designer-form/src/main/java/com/fr/design/widget/ui/designer/layout/FRFitLayoutDefinePane.java @@ -140,7 +140,7 @@ public class FRFitLayoutDefinePane extends AbstractDataModify { //原单例面板populate根据当前样式populate属性面板,现加入移动端逻辑:可能需要根据面板属性改变样式 Form form = formDesigner.getTarget(); if (form.getFormMobileAttr().isMobileOnly() && form.getFormMobileAttr().isAdaptivePropertyAutoMatch()) { - XWFitLayout.switch2FitBodyLayout(rootLayout); + ((XWFitLayout)formDesigner.getRootComponent()).switch2FitBodyLayout(rootLayout); } else { formDesigner.getSelectionModel().setSelectedCreators( FormSelectionUtils.rebuildSelection(xWFitLayout, new Widget[]{selectedBodyLayout(formDesigner).toData()}));