From 0915d4d927af752e692330686f37dd0bee15efe5 Mon Sep 17 00:00:00 2001 From: Starryi Date: Mon, 12 Jul 2021 14:38:14 +0800 Subject: [PATCH 01/11] =?UTF-8?q?REPORT-55107=20=E3=80=90=E7=BB=84?= =?UTF-8?q?=E4=BB=B6=E8=83=8C=E6=99=AF=E5=88=86=E7=A6=BB=E3=80=91=E7=BB=84?= =?UTF-8?q?=E4=BB=B6=E5=A4=8D=E7=94=A8-=E8=83=8C=E6=99=AF=E6=A0=B7?= =?UTF-8?q?=E5=BC=8F=20=E8=BE=B9=E6=A1=86=E9=80=89=E6=8B=A9=E8=87=AA?= =?UTF-8?q?=E5=AE=9A=E4=B9=89=E5=9B=BE=E7=89=87=E6=97=B6=EF=BC=8C=E4=B8=8B?= =?UTF-8?q?=E6=96=B9=E5=BA=94=E5=87=BA=E7=8E=B0=E4=B8=8D=E9=80=8F=E6=98=8E?= =?UTF-8?q?=E5=BA=A6=E8=AE=BE=E7=BD=AE=EF=BC=8C=E7=9B=AE=E5=89=8D=E6=B2=A1?= =?UTF-8?q?=E6=9C=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 【问题原因】 rowSize设置错误,导致透明度设置项高度为0 【改动思路】 【review建议】 --- .../java/com/fr/design/gui/xpane/BorderLineAndImagePane.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/designer-form/src/main/java/com/fr/design/gui/xpane/BorderLineAndImagePane.java b/designer-form/src/main/java/com/fr/design/gui/xpane/BorderLineAndImagePane.java index 27c045459..c2eefd3fa 100644 --- a/designer-form/src/main/java/com/fr/design/gui/xpane/BorderLineAndImagePane.java +++ b/designer-form/src/main/java/com/fr/design/gui/xpane/BorderLineAndImagePane.java @@ -146,7 +146,7 @@ public class BorderLineAndImagePane extends JPanel implements UIObserver { private JPanel createBorderImageComposePane() { double p = TableLayout.PREFERRED; double f = TableLayout.FILL; - double[] rowSize = {p, p, p}; + double[] rowSize = {p, p, p, p, p}; double[] columnSize = {SETTING_LABEL_WIDTH, f}; JPanel borderedImagePreviewPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); From ea6cec84582bee5115728f4b593d69c0a9c1403d Mon Sep 17 00:00:00 2001 From: Starryi Date: Mon, 12 Jul 2021 14:38:43 +0800 Subject: [PATCH 02/11] =?UTF-8?q?REPORT-55108=20=E3=80=90=E7=BB=84?= =?UTF-8?q?=E4=BB=B6=E8=83=8C=E6=99=AF=E5=88=86=E7=A6=BB=E3=80=91=E7=BB=84?= =?UTF-8?q?=E4=BB=B6=E5=A4=8D=E7=94=A8-=E8=BE=B9=E6=A1=86=E9=80=89?= =?UTF-8?q?=E6=8B=A9=E8=87=AA=E5=AE=9A=E4=B9=89=E5=9B=BE=E7=89=87=EF=BC=8C?= =?UTF-8?q?=E4=BD=86=E8=BF=98=E6=B2=A1=E5=85=B7=E4=BD=93=E9=80=89=E6=8B=A9?= =?UTF-8?q?=E6=9F=90=E5=BC=A0=E5=9B=BE=E7=89=87=E6=97=B6=EF=BC=8C=E6=AD=A4?= =?UTF-8?q?=E6=97=B6=E7=9A=84=E7=82=B9=E4=B9=9D=E5=9B=BE=E5=A1=AB=E5=85=85?= =?UTF-8?q?=E8=AE=BE=E7=BD=AE=E6=8C=89=E9=92=AE=E5=BA=94=E8=AF=A5=E5=85=88?= =?UTF-8?q?=E7=81=B0=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 【问题原因】 原交互稿上没有灰化的逻辑,补充下 【改动思路】 【review建议】 --- .../java/com/fr/design/gui/xpane/BorderLineAndImagePane.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/designer-form/src/main/java/com/fr/design/gui/xpane/BorderLineAndImagePane.java b/designer-form/src/main/java/com/fr/design/gui/xpane/BorderLineAndImagePane.java index c2eefd3fa..d70463419 100644 --- a/designer-form/src/main/java/com/fr/design/gui/xpane/BorderLineAndImagePane.java +++ b/designer-form/src/main/java/com/fr/design/gui/xpane/BorderLineAndImagePane.java @@ -219,6 +219,7 @@ public class BorderLineAndImagePane extends JPanel implements UIObserver { } if (!borderLineCombo.isSelectedBorderImage()) { imagePreviewPane.setImageWithSuffix(null); + tweakNinePointButton.setEnabled(false); } fireStateChanged(); @@ -244,6 +245,9 @@ public class BorderLineAndImagePane extends JPanel implements UIObserver { ninePointLeft = ninePointRight = (image != null ? image.getWidth(null) / 3 : -1); ninePointTop = ninePointBottom = (image != null ? image.getHeight(null) / 3 : -1); borderImageOpacityPane.populateBean(1.0); + if (image != null) { + tweakNinePointButton.setEnabled(true); + } fireStateChanged(); } @@ -285,6 +289,7 @@ public class BorderLineAndImagePane extends JPanel implements UIObserver { if (image != null) { this.borderLineCombo.selectBorderImage(); this.imagePreviewPane.setImageWithSuffix(((ImageBackground) borderImage).getImageWithSuffix()); + this.tweakNinePointButton.setEnabled(true); this.borderImageOpacityPane.populateBean(style.getBorderImageOpacity()); if (ninePoint != null && ninePoint.length == 4 && ninePoint[0] > 0 && ninePoint[1] > 0 && ninePoint[2] > 0 && ninePoint[3] > 0) { ninePointLeft = ninePoint[0]; From 5b349728960c7ce1287f0b3c9ccb88473e4d7edf Mon Sep 17 00:00:00 2001 From: Starryi Date: Mon, 12 Jul 2021 14:39:10 +0800 Subject: [PATCH 03/11] =?UTF-8?q?REPORT-55112=20=E3=80=90=E7=BB=84?= =?UTF-8?q?=E4=BB=B6=E8=83=8C=E6=99=AF=E5=88=86=E7=A6=BB=E3=80=91=E7=BB=84?= =?UTF-8?q?=E4=BB=B6=E5=A4=8D=E7=94=A8-=E7=82=B9=E4=B9=9D=E5=9B=BE?= =?UTF-8?q?=E5=A1=AB=E5=85=85=E8=AE=BE=E7=BD=AE=E5=BC=B9=E7=AA=97=EF=BC=8C?= =?UTF-8?q?=E5=88=86=E5=89=B2=E7=BA=BF=E6=8B=96=E6=8B=BD=E5=88=B0=E9=9D=A0?= =?UTF-8?q?=E8=BF=91=E8=BE=B9=E7=BC=98=E6=97=B6=EF=BC=8C=E5=83=8F=E7=B4=A0?= =?UTF-8?q?=E5=80=BC=E5=B0=B1=E8=A2=AB=E9=81=AE=E6=8C=A1=E7=9C=8B=E4=B8=8D?= =?UTF-8?q?=E5=88=B0=E4=BA=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 【问题原因】 右侧分割线位置信息的计算位置不对,需要重新整理下 【改动思路】 【review建议】 --- .../gui/xpane/BorderLineAndImagePane.java | 23 +++++++++++-------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/designer-form/src/main/java/com/fr/design/gui/xpane/BorderLineAndImagePane.java b/designer-form/src/main/java/com/fr/design/gui/xpane/BorderLineAndImagePane.java index d70463419..675140d77 100644 --- a/designer-form/src/main/java/com/fr/design/gui/xpane/BorderLineAndImagePane.java +++ b/designer-form/src/main/java/com/fr/design/gui/xpane/BorderLineAndImagePane.java @@ -494,28 +494,33 @@ public class BorderLineAndImagePane extends JPanel implements UIObserver { int scaleRight = (int) (ninePointRight * scale); int scaleBottom = (int) (ninePointBottom * scale); + double topYInPane = scaleImgY + scaleTop; + double bottomYInPane = scaleImgY + scaleImgHeight - scaleBottom; + double leftXInPane = scaleImgX + scaleLeft; + double rightXInPane = scaleImgX + scaleImgWidth - scaleRight; + g2d.setColor(PATCH_COLOR); // draw horizontal patch - GraphDrawHelper.fillRect(g2d, 0, scaleImgY + scaleTop, getWidth(), scaleImgHeight - scaleTop - scaleBottom); + GraphDrawHelper.fillRect(g2d, 0, topYInPane, getWidth(), scaleImgHeight - scaleTop - scaleBottom); // draw vertical patch GraphDrawHelper.fillRect(g2d, scaleImgX + scaleLeft, 0,scaleImgWidth - scaleLeft - scaleRight, getHeight()); g2d.setColor(DIVIDER_COLOR); // draw top divider - GraphDrawHelper.drawLine(g2d, 0, scaleImgY + scaleTop, getWidth(), scaleImgY + scaleTop); + GraphDrawHelper.drawLine(g2d, 0, topYInPane, getWidth(), topYInPane); // draw bottom divider - GraphDrawHelper.drawLine(g2d, 0, scaleImgY + scaleImgHeight - scaleBottom, getWidth(), scaleImgY + scaleImgHeight - scaleBottom); + GraphDrawHelper.drawLine(g2d, 0, bottomYInPane, getWidth(), bottomYInPane); // draw left divider - GraphDrawHelper.drawLine(g2d, scaleImgX + scaleLeft, 0, scaleImgX + scaleLeft, getHeight()); + GraphDrawHelper.drawLine(g2d, leftXInPane, 0, leftXInPane, getHeight()); // draw right divider - GraphDrawHelper.drawLine(g2d, scaleImgX + scaleImgWidth - scaleRight, 0, scaleImgX + scaleImgWidth - scaleRight, getHeight()); + GraphDrawHelper.drawLine(g2d, rightXInPane, 0, rightXInPane, getHeight()); g2d.setColor(TEXT_COLOR); // draw nine point info - GraphDrawHelper.drawString(g2d, Integer.toString(ninePointTop), scaleImgX + (scaleImgWidth + scaleLeft - scaleRight) / 2.0, (scaleImgY + scaleTop) / 2.0); - GraphDrawHelper.drawString(g2d, Integer.toString(ninePointBottom), scaleImgX + scaleLeft + (scaleImgWidth - scaleLeft - scaleRight) / 2.0, scaleImgY + scaleImgHeight - (scaleBottom - PADDING) / 2.0); - GraphDrawHelper.drawString(g2d, Integer.toString(ninePointLeft), (scaleImgX + scaleLeft) / 2.0, scaleImgY + (scaleImgHeight + scaleTop - scaleBottom) / 2.0); - GraphDrawHelper.drawString(g2d, Integer.toString(ninePointRight), scaleImgX + scaleImgWidth - (scaleRight - PADDING) / 2.0, scaleImgY + (scaleImgHeight + scaleTop - scaleBottom) / 2.0); + GraphDrawHelper.drawString(g2d, Integer.toString(ninePointTop), (leftXInPane + rightXInPane) / 2.0F, topYInPane / 2.0); + GraphDrawHelper.drawString(g2d, Integer.toString(ninePointBottom), (leftXInPane + rightXInPane) / 2.0F, (bottomYInPane + getHeight()) / 2.0); + GraphDrawHelper.drawString(g2d, Integer.toString(ninePointLeft), leftXInPane / 2.0, (topYInPane + bottomYInPane) / 2.0); + GraphDrawHelper.drawString(g2d, Integer.toString(ninePointRight), (rightXInPane + getWidth()) / 2.0, (topYInPane + bottomYInPane) / 2.0); } @Override From e03d83488889633045d6a8891cafd472de755441 Mon Sep 17 00:00:00 2001 From: Starryi Date: Mon, 12 Jul 2021 14:39:27 +0800 Subject: [PATCH 04/11] =?UTF-8?q?REPORT-55114=20=E3=80=90=E7=BB=84?= =?UTF-8?q?=E4=BB=B6=E8=83=8C=E6=99=AF=E5=88=86=E7=A6=BB=E3=80=91=E7=BB=84?= =?UTF-8?q?=E4=BB=B6=E5=A4=8D=E7=94=A8-=E7=82=B9=E4=B9=9D=E5=9B=BE?= =?UTF-8?q?=E5=88=86=E5=89=B2=E7=BA=BF=E6=8B=96=E5=8A=A8=E5=88=B0=E8=BE=B9?= =?UTF-8?q?=E7=BC=98=E6=97=B6=EF=BC=8C=E5=B0=B1=E6=97=A0=E6=B3=95=E5=86=8D?= =?UTF-8?q?=E6=AC=A1=E9=80=89=E4=B8=AD=E5=88=86=E5=89=B2=E7=BA=BF=E4=BA=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 【问题原因】 整数计算导致的比例比较错误,图片在宽度上显示不全导致的 【改动思路】 【review建议】 --- .../java/com/fr/design/gui/xpane/BorderLineAndImagePane.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/designer-form/src/main/java/com/fr/design/gui/xpane/BorderLineAndImagePane.java b/designer-form/src/main/java/com/fr/design/gui/xpane/BorderLineAndImagePane.java index 675140d77..830853b33 100644 --- a/designer-form/src/main/java/com/fr/design/gui/xpane/BorderLineAndImagePane.java +++ b/designer-form/src/main/java/com/fr/design/gui/xpane/BorderLineAndImagePane.java @@ -473,7 +473,7 @@ public class BorderLineAndImagePane extends JPanel implements UIObserver { int autoFixAreaX = PADDING; int autoFixAreaY = PADDING; - if (imgWidth / imgHeight > autoFixAreaWidth / autoFixAreaHeight) { + if ((imgWidth * 1.0F / imgHeight) > (autoFixAreaWidth * 1.0F / autoFixAreaHeight)) { scaleImgWidth = autoFixAreaWidth; scaleImgHeight = (int) (1.0F * scaleImgWidth * imgHeight / imgWidth); scaleImgX = autoFixAreaX; From e02bfda3e6a15e993f825d1f76d076d8cc977cbb Mon Sep 17 00:00:00 2001 From: Starryi Date: Mon, 12 Jul 2021 14:40:52 +0800 Subject: [PATCH 05/11] =?UTF-8?q?REPORT-53175=E3=80=9010.0.18=E3=80=91?= =?UTF-8?q?=E7=BB=84=E4=BB=B6=E8=83=8C=E6=99=AF=E5=88=86=E7=A6=BB=E4=B8=BA?= =?UTF-8?q?=E6=A0=87=E9=A2=98/=E8=83=8C=E6=99=AF/=E8=BE=B9=E6=A1=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 百分比控件值计算错误 --- .../main/java/com/fr/design/gui/frpane/UIPercentDragPane.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/designer-base/src/main/java/com/fr/design/gui/frpane/UIPercentDragPane.java b/designer-base/src/main/java/com/fr/design/gui/frpane/UIPercentDragPane.java index 1dd96de00..a375420b0 100644 --- a/designer-base/src/main/java/com/fr/design/gui/frpane/UIPercentDragPane.java +++ b/designer-base/src/main/java/com/fr/design/gui/frpane/UIPercentDragPane.java @@ -25,6 +25,6 @@ public class UIPercentDragPane extends JPanel { } public double updateBean() { - return dragPane.updateBean() * 100; + return dragPane.updateBean() / 100.0; } } From dc456b1b5f930f126f39ae98b4736e94b28bd4f8 Mon Sep 17 00:00:00 2001 From: Starryi Date: Mon, 12 Jul 2021 14:41:19 +0800 Subject: [PATCH 06/11] =?UTF-8?q?REPORT-55089=20=E7=BB=84=E4=BB=B6?= =?UTF-8?q?=E8=83=8C=E6=99=AF=E5=88=86=E7=A6=BB=E3=80=91=E7=BB=84=E4=BB=B6?= =?UTF-8?q?=E5=A4=8D=E7=94=A8-=E6=A0=87=E9=A2=98=E5=9B=BE=E6=A1=88?= =?UTF-8?q?=E7=9A=84=E5=9B=BE=E7=89=87=E9=A2=84=E8=A7=88=E5=9B=BE=EF=BC=8C?= =?UTF-8?q?=E5=92=8C=E4=BA=A4=E4=BA=92=E6=96=87=E6=A1=A3=E9=87=8C=E5=AE=9A?= =?UTF-8?q?=E7=9A=84=E6=82=AC=E6=B5=AE=E6=97=B6=E5=87=BA=E7=8E=B0=E5=88=A0?= =?UTF-8?q?=E9=99=A4=E6=8C=89=E9=92=AE=E5=92=8C=E4=B8=8D=E9=80=8F=E6=98=8E?= =?UTF-8?q?=E9=81=AE=E7=BD=A9=E9=A2=84=E6=9C=9F=E6=95=88=E6=9E=9C=E4=B8=8D?= =?UTF-8?q?=E5=90=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 【问题原因】 交互补充遮罩层 【改动思路】 【review建议】 --- .../com/fr/design/gui/xpane/TitleInsetImagePane.java | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/designer-form/src/main/java/com/fr/design/gui/xpane/TitleInsetImagePane.java b/designer-form/src/main/java/com/fr/design/gui/xpane/TitleInsetImagePane.java index b7161cbfb..6b5391fb1 100644 --- a/designer-form/src/main/java/com/fr/design/gui/xpane/TitleInsetImagePane.java +++ b/designer-form/src/main/java/com/fr/design/gui/xpane/TitleInsetImagePane.java @@ -47,6 +47,7 @@ public class TitleInsetImagePane extends JPanel implements UIObserver { private final int SETTING_LABEL_WIDTH = LayoutStylePane.SETTING_LABEL_WIDTH; private final int DELETE_BUTTON_SIZE = 24; private final int IMAGE_PREVIEW_SIZE = 145; + private final Color IMAGE_PREVIEW_OVERLAY_COLOR = new Color(255, 255, 255, 51); private final Style DEFAULT_IMAGE_LAYOUT_STYLE = Style.DEFAULT_STYLE.deriveImageLayout(Constants.IMAGE_DEFAULT); private final int DEFAULT_INSET_LOCATION_INDEX = 0; private final int DEFAULT_INSET_PADDING = 10; @@ -88,17 +89,24 @@ public class TitleInsetImagePane extends JPanel implements UIObserver { deletableImagePreviewPane.setLayout(null); deletableImagePreviewPane.setBorder(new UIRoundedBorder(UIConstants.LINE_COLOR, 1, 5)); deletableImagePreviewPane.setPreferredSize(new Dimension(IMAGE_PREVIEW_SIZE, IMAGE_PREVIEW_SIZE)); + JPanel overlayPane = new JPanel(); + overlayPane.setPreferredSize(new Dimension(IMAGE_PREVIEW_SIZE - 2, IMAGE_PREVIEW_SIZE - 2)); + overlayPane.setBackground(IMAGE_PREVIEW_OVERLAY_COLOR); imagePreviewPane.setBounds(0, 0, IMAGE_PREVIEW_SIZE, IMAGE_PREVIEW_SIZE); + overlayPane.setBounds(1, 1, IMAGE_PREVIEW_SIZE - 2, IMAGE_PREVIEW_SIZE - 2); imageDeleteButton.setBounds(IMAGE_PREVIEW_SIZE - DELETE_BUTTON_SIZE, 0, DELETE_BUTTON_SIZE, DELETE_BUTTON_SIZE); deletableImagePreviewPane.add(imageDeleteButton, 0); - deletableImagePreviewPane.add(imagePreviewPane, 1); + deletableImagePreviewPane.add(overlayPane, 1); + deletableImagePreviewPane.add(imagePreviewPane, 2); + overlayPane.setVisible(false); imageDeleteButton.setVisible(false); imageDeleteButton.setEnabled(false); deletableImagePreviewPane.addMouseListener(new MouseAdapter() { @Override public void mouseEntered(MouseEvent e) { super.mouseEntered(e); + overlayPane.setVisible(true); imageDeleteButton.setVisible(true); imageDeleteButton.setEnabled(true); } @@ -109,6 +117,7 @@ public class TitleInsetImagePane extends JPanel implements UIObserver { int x = e.getX(); int y = e.getY(); if (x <= 0 || getWidth() <= x || y <= 0 || y >= getHeight()) { + overlayPane.setVisible(false); imageDeleteButton.setVisible(false); imageDeleteButton.setEnabled(false); } From 5d64f792797a4ac49f708a6ae8ad957e60e33811 Mon Sep 17 00:00:00 2001 From: Starryi Date: Mon, 12 Jul 2021 14:42:18 +0800 Subject: [PATCH 07/11] =?UTF-8?q?REPORT-53175=E3=80=9010.0.18=E3=80=91?= =?UTF-8?q?=E7=BB=84=E4=BB=B6=E8=83=8C=E6=99=AF=E5=88=86=E7=A6=BB=E4=B8=BA?= =?UTF-8?q?=E6=A0=87=E9=A2=98/=E8=83=8C=E6=99=AF/=E8=BE=B9=E6=A1=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 因为percentW/H是旧尺寸与新尺寸之间的比例,所以实现组件选择宽度和高度中较小的缩放比例的规则,需要使用Math.max --- .../java/com/fr/design/designer/creator/XWAbsoluteLayout.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/designer-form/src/main/java/com/fr/design/designer/creator/XWAbsoluteLayout.java b/designer-form/src/main/java/com/fr/design/designer/creator/XWAbsoluteLayout.java index 72bb2cb03..c6d0067c3 100644 --- a/designer-form/src/main/java/com/fr/design/designer/creator/XWAbsoluteLayout.java +++ b/designer-form/src/main/java/com/fr/design/designer/creator/XWAbsoluteLayout.java @@ -204,7 +204,8 @@ public class XWAbsoluteLayout extends XLayoutContainer { for (int index = 0, n = this.getComponentCount(); index < n; index++) { XCreator creator = (XCreator) this.getComponent(index); if (creator.toData().isAspectRatioLocked()) { - double percent = Math.min(percentW, percentH); + // 因为percentW/H是旧尺寸与新尺寸之间的比例,所以实现组件选择宽度和高度中较小的缩放比例的规则,需要使用Math.max + double percent = Math.max(percentW, percentH); percentW = percentH = percent; } BoundsWidget wgt = (BoundsWidget) layout.getBoundsWidget(creator.toData()); From d710e8c7f8adeee03da6618299f05d2193602bcf Mon Sep 17 00:00:00 2001 From: Starryi Date: Mon, 12 Jul 2021 18:01:14 +0800 Subject: [PATCH 08/11] =?UTF-8?q?REPORT-53175=20=E3=80=9010.0.18=E3=80=91?= =?UTF-8?q?=E7=BB=84=E4=BB=B6=E8=83=8C=E6=99=AF=E5=88=86=E7=A6=BB=E4=B8=BA?= =?UTF-8?q?=E6=A0=87=E9=A2=98/=E8=83=8C=E6=99=AF/=E8=BE=B9=E6=A1=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 【问题原因】 组件尺寸比例锁定提示及共享组件默认锁定尺寸比例锁定交互更新 【改动思路】 【review建议】 --- .../fr/design/designer/creator/XCreator.java | 1 + .../design/designer/ui/PopupControlPanel.java | 222 +++++++++++------- .../designer/ui/SelectedPopupDialog.java | 5 + .../mainframe/FormCreatorDropTarget.java | 5 + .../designer/component/WidgetBoundPane.java | 4 +- 5 files changed, 144 insertions(+), 93 deletions(-) diff --git a/designer-form/src/main/java/com/fr/design/designer/creator/XCreator.java b/designer-form/src/main/java/com/fr/design/designer/creator/XCreator.java index 80bf1b51d..0983dded9 100644 --- a/designer-form/src/main/java/com/fr/design/designer/creator/XCreator.java +++ b/designer-form/src/main/java/com/fr/design/designer/creator/XCreator.java @@ -777,6 +777,7 @@ public abstract class XCreator extends JPanel implements XComponent, XCreatorToo int extraX = (int) ((bounds.x + bounds.width + SelectedPopupDialog.OFFSET_X) * designer.getScale()); int extraY = (int) (bounds.y * designer.getScale()); popup.setLocation(designer.getLocationOnScreen().x + designer.getPaintX() + extraX, designer.getLocationOnScreen().y + designer.getPaintY() + extraY); + popup.updatePane(designer); popup.setVisible(selected && accept); popup.setRelativeBounds(bounds); } diff --git a/designer-form/src/main/java/com/fr/design/designer/ui/PopupControlPanel.java b/designer-form/src/main/java/com/fr/design/designer/ui/PopupControlPanel.java index b8133d3da..ee0db4571 100644 --- a/designer-form/src/main/java/com/fr/design/designer/ui/PopupControlPanel.java +++ b/designer-form/src/main/java/com/fr/design/designer/ui/PopupControlPanel.java @@ -1,35 +1,27 @@ package com.fr.design.designer.ui; +import com.fr.design.designer.beans.AdapterBus; +import com.fr.design.designer.beans.adapters.layout.FRAbsoluteLayoutAdapter; +import com.fr.design.designer.beans.events.DesignerEvent; import com.fr.design.designer.creator.XCreator; import com.fr.design.gui.ilable.UILabel; import com.fr.design.i18n.Toolkit; +import com.fr.design.layout.VerticalFlowLayout; import com.fr.design.mainframe.CoverReportPane; import com.fr.design.mainframe.EditingMouseListener; import com.fr.design.mainframe.FormDesigner; import com.fr.general.IOUtils; import com.fr.stable.ArrayUtils; -import java.awt.Color; -import java.awt.Component; -import java.awt.Container; -import java.awt.Dimension; -import java.awt.Graphics; -import java.awt.Graphics2D; -import java.awt.Insets; -import java.awt.LayoutManager; -import java.awt.Rectangle; -import java.awt.RenderingHints; + +import javax.swing.*; +import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; -import javax.swing.AbstractButton; -import javax.swing.Icon; -import javax.swing.JButton; -import javax.swing.JPanel; -import javax.swing.JToggleButton; -import javax.swing.event.ChangeEvent; -import javax.swing.event.ChangeListener; +import java.util.ArrayList; +import java.util.List; /** * @author hades @@ -40,25 +32,39 @@ public class PopupControlPanel extends JPanel { private static final int ARC_VALUE = 4; private static final Color FILLED_COLOR = new Color(60, 63, 65); - private static final int V_GAP = 10; - private static final int H_GAP = 2; + private static final int BUTTON_SIZE = 16; + private static final int BUTTON_MARGIN = 4; + private static final int PANE_WIDTH = BUTTON_SIZE + BUTTON_MARGIN * 2; // 24 - private Dimension defaultDimension = new Dimension(20, 60); + private final Dimension defaultDimension = new Dimension(PANE_WIDTH, 0); private Rectangle rectangle; + + private final List buttons = new ArrayList<>(); private final JButton editButton; private final JButton settingButton; private final JToggleButton toggleButton; private final XCreator creator; - private final UILabel firstLabel; - private final UILabel secondLabel; public PopupControlPanel(XCreator creator, FormDesigner designer) { - if (creator.isShared()) { - defaultDimension = new Dimension(20, 85); - } - setLayout(getCustomLayout()); + setLayout(new VerticalFlowLayout(VerticalFlowLayout.TOP, 0, 0)); + setBorder(BorderFactory.createEmptyBorder()); this.creator = creator; - editButton = createNormalButton(IOUtils.readIcon("/com/fr/design/images/control/show_edit.png"), Toolkit.i18nText("Fine-Design_Form_Edit_Widget")); + + editButton = createEditButton(designer); + toggleButton = createAspectRatioLockedButton(designer); + settingButton = createSettingButton(); + + addButton(editButton, 0); + addButton(toggleButton, 1); + addButton(settingButton, 2); + + setButtonVisible(editButton, true); + setButtonVisible(toggleButton, false); + setButtonVisible(settingButton, false); + } + + private JButton createEditButton(FormDesigner designer) { + JButton editButton = createNormalButton(IOUtils.readIcon("/com/fr/design/images/control/show_edit.png"), Toolkit.i18nText("Fine-Design_Form_Edit_Widget")); editButton.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { @@ -71,102 +77,99 @@ public class PopupControlPanel extends JPanel { } } }); - settingButton = createNormalButton(IOUtils.readIcon("/com/fr/design/images/control/show_setting.png"), Toolkit.i18nText("Fine-Design_Share_Help_Settings")); + return editButton; + } - settingButton.addActionListener(new ActionListener() { + private JToggleButton createAspectRatioLockedButton(FormDesigner designer) { + JToggleButton button = new JToggleButton(IOUtils.readIcon("/com/fr/design/images/control/edit_unlock.png")); + initButtonStyle(button); + button.setSelectedIcon(IOUtils.readIcon("com/fr/design/images/control/edit_lock.png")); + button.setToolTipText(Toolkit.i18nText("Fine-Design_Form_UnLock_Widget_Ratio")); + button.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { - CoverReportPane.showShareConfig(creator.toData()); - } - }); - toggleButton = new JToggleButton(IOUtils.readIcon("/com/fr/design/images/control/edit_lock.png")); - initButtonStyle(toggleButton); - toggleButton.setSelectedIcon(IOUtils.readIcon("com/fr/design/images/control/edit_unlock.png")); - toggleButton.setToolTipText(Toolkit.i18nText("Fine-Design_Form_Lock_Widget_Ratio")); - toggleButton.addChangeListener(new ChangeListener() { - @Override - public void stateChanged(ChangeEvent e) { JToggleButton toggleBtn = (JToggleButton) e.getSource(); - String toolTipText = toggleBtn.isSelected() ? Toolkit.i18nText("Fine-Design_Form_UnLock_Widget_Ratio") : Toolkit.i18nText("Fine-Design_Form_Lock_Widget_Ratio"); + String toolTipText = toggleBtn.isSelected() ? Toolkit.i18nText("Fine-Design_Form_Lock_Widget_Ratio") : Toolkit.i18nText("Fine-Design_Form_UnLock_Widget_Ratio"); toggleBtn.setToolTipText(toolTipText); + creator.toData().setAspectRatioLocked(toggleBtn.isSelected()); + designer.getEditListenerTable().fireCreatorModified(creator, DesignerEvent.CREATOR_RESIZED); } }); - - firstLabel = createLabel(); - secondLabel = createLabel(); - - add(editButton); - add(toggleButton); - add(settingButton); - add(firstLabel); - add(secondLabel); + return button; } - protected LayoutManager getCustomLayout() { - return new LayoutManager() { + private JButton createSettingButton() { + JButton settingButton = createNormalButton(IOUtils.readIcon("/com/fr/design/images/control/show_setting.png"), Toolkit.i18nText("Fine-Design_Share_Help_Settings")); + settingButton.addActionListener(new ActionListener() { @Override - public void removeLayoutComponent(Component comp) { + public void actionPerformed(ActionEvent e) { + CoverReportPane.showShareConfig(creator.toData()); } + }); + return settingButton; + } - @Override - public Dimension preferredLayoutSize(Container parent) { - return defaultDimension; - } + private void addButton(JComponent component, int index) { + buttons.add(index, component); + if (index > 0) { + this.add(new SeparatorLabel(), index * 2 - 1); + } + this.add(component, index * 2); + } - @Override - public Dimension minimumLayoutSize(Container parent) { - return null; - } + private void setButtonVisible(JComponent component, boolean visible) { + int index = buttons.indexOf(component); - @Override - public void layoutContainer(Container parent) { - int width = parent.getPreferredSize().width; - int buttonWidth = editButton.getPreferredSize().width; - int buttonHeight = editButton.getPreferredSize().height; - int x = (width - buttonWidth) / 2; - editButton.setBounds(x, V_GAP, buttonWidth, buttonHeight); - firstLabel.setBounds(x, V_GAP + editButton.getHeight() + V_GAP / 2, buttonWidth, buttonHeight); - toggleButton.setBounds(x, V_GAP * 2 + editButton.getHeight(), buttonWidth, buttonHeight); - if (creator.isShared()) { - secondLabel.setBounds(x, V_GAP * 2 + editButton.getHeight() + toggleButton.getHeight() + V_GAP / 2, buttonWidth, buttonHeight); - settingButton.setBounds(x, V_GAP * 3 + editButton.getHeight() + toggleButton.getHeight(), buttonWidth, buttonHeight); - } + boolean hasVisibleButtonBeforeCurrent = false; + for (int i = 0; i < index; i++) { + if (buttons.get(i).isVisible()) { + hasVisibleButtonBeforeCurrent = true; + break; } + } - @Override - public void addLayoutComponent(String name, Component comp) { + if (hasVisibleButtonBeforeCurrent) { + buttons.get(index).setVisible(visible); + getComponent(2 * index - 1).setVisible(visible); + return; + } + + // 在当前按钮之前没有可见的按钮了 + if (index > 0) { + getComponent(2 * index - 1).setVisible(false); + } + buttons.get(index).setVisible(true); + + if (!visible) { + // 如果当前按钮设置为不可见,且在当前按钮之前的其他按钮也不可见,则下一个可见按钮前无分割线 + for (int i = index + 1; i < buttons.size(); i++) { + if (buttons.get(i).isVisible()) { + if (i > 0) { + getComponent(2 * i - 1).setVisible(false); + } + break; + } } - }; + } } private JButton createNormalButton(Icon icon, String toolTipText) { JButton button = new JButton(icon); + button.setPreferredSize(new Dimension(BUTTON_SIZE + 2 * BUTTON_MARGIN, BUTTON_SIZE + 2 * BUTTON_MARGIN)); + button.setBorder(BorderFactory.createEmptyBorder(BUTTON_MARGIN, BUTTON_MARGIN, BUTTON_MARGIN, BUTTON_MARGIN)); initButtonStyle(button); button.setToolTipText(toolTipText); return button; } private void initButtonStyle(AbstractButton button) { + button.setPreferredSize(new Dimension(BUTTON_SIZE + 2 * BUTTON_MARGIN, BUTTON_SIZE + 2 * BUTTON_MARGIN)); + button.setBorder(BorderFactory.createEmptyBorder(BUTTON_MARGIN, BUTTON_MARGIN, BUTTON_MARGIN, BUTTON_MARGIN)); button.setBorderPainted(false); - button.setBorder(null); - button.setMargin(new Insets(0, 0, 0, 0)); button.setContentAreaFilled(false); } - private UILabel createLabel() { - return new UILabel() { - @Override - public void paint(Graphics g) { - super.paint(g); - Graphics2D g2d = (Graphics2D) g; - g2d.setColor(Color.WHITE); - g2d.drawLine(H_GAP, 0, toggleButton.getWidth() - H_GAP, 0); - - } - }; - } - @Override protected void paintComponent(Graphics g) { super.paintComponent(g); @@ -188,4 +191,41 @@ public class PopupControlPanel extends JPanel { this.rectangle = rectangle; } + public void updatePane(FormDesigner designer) { + setButtonVisible(settingButton, creator.isShared()); + setButtonVisible(toggleButton, AdapterBus.searchLayoutAdapter(designer, creator) instanceof FRAbsoluteLayoutAdapter); + toggleButton.setSelected(creator.toData().isAspectRatioLocked()); + + updateDimension(); + } + + private void updateDimension() { + int height = 0; + for (int i = 0; i < buttons.size(); i++) { + JComponent component = buttons.get(i); + if (component.isVisible()) { + if (i > 0) { + height += 1; + } + height += component.getHeight(); + } + } + height += 2; + + defaultDimension.height = height; + } + + private static class SeparatorLabel extends UILabel { + public SeparatorLabel() { + setPreferredSize(new Dimension(PANE_WIDTH, 1)); + } + + @Override + public void paint(Graphics g) { + super.paint(g); + Graphics2D g2d = (Graphics2D) g; + g2d.setColor(Color.WHITE); + g2d.drawLine(BUTTON_MARGIN, 0, getWidth() - BUTTON_MARGIN, 0); + } + } } diff --git a/designer-form/src/main/java/com/fr/design/designer/ui/SelectedPopupDialog.java b/designer-form/src/main/java/com/fr/design/designer/ui/SelectedPopupDialog.java index e7de92679..6702fe7f4 100644 --- a/designer-form/src/main/java/com/fr/design/designer/ui/SelectedPopupDialog.java +++ b/designer-form/src/main/java/com/fr/design/designer/ui/SelectedPopupDialog.java @@ -29,6 +29,11 @@ public class SelectedPopupDialog extends JDialog { this.setSize(controlPanel.getDefaultDimension()); } + public void updatePane(FormDesigner designer) { + controlPanel.updatePane(designer); + this.setSize(controlPanel.getDefaultDimension()); + } + public void setRelativeBounds(Rectangle rectangle) { this.controlPanel.setRelativeBounds(rectangle); } diff --git a/designer-form/src/main/java/com/fr/design/mainframe/FormCreatorDropTarget.java b/designer-form/src/main/java/com/fr/design/mainframe/FormCreatorDropTarget.java index 30b941818..2fdbb5a29 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/FormCreatorDropTarget.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/FormCreatorDropTarget.java @@ -110,6 +110,11 @@ public class FormCreatorDropTarget extends DropTarget { //图表埋点 dealChartBuryingPoint(widget); if (addingXCreator.isShared()) { + if (container.acceptType(XWAbsoluteLayout.class)) { + // 绝对布局中新添加的共享组件默认锁定尺寸比例 + addingXCreator.toData().setAspectRatioLocked(true); + } + String shareId = addingXCreator.getShareId(); SharableEditorProvider sharableEditor = ShareLoader.getLoader().getSharedElCaseEditorById(shareId); SharableWidgetProvider bindInfo = ShareLoader.getLoader().getElCaseBindInfoById(shareId); diff --git a/designer-form/src/main/java/com/fr/design/widget/ui/designer/component/WidgetBoundPane.java b/designer-form/src/main/java/com/fr/design/widget/ui/designer/component/WidgetBoundPane.java index bfcaeb60e..d046a6a9e 100644 --- a/designer-form/src/main/java/com/fr/design/widget/ui/designer/component/WidgetBoundPane.java +++ b/designer-form/src/main/java/com/fr/design/widget/ui/designer/component/WidgetBoundPane.java @@ -251,7 +251,7 @@ public class WidgetBoundPane extends BasicPane { @Override public void stateChanged(ChangeEvent e) { if (isLockEnabled() && isLocked() && width4Backup > 0 && height4Backup > 0) { - mHeightSpinner.setValue(mWidthSpinner.getValue() * width4Backup / height4Backup, false); + mHeightSpinner.setValue(mWidthSpinner.getValue() * height4Backup / width4Backup, false); } } }); @@ -259,7 +259,7 @@ public class WidgetBoundPane extends BasicPane { @Override public void stateChanged(ChangeEvent e) { if (isLockEnabled() && isLocked() && width4Backup > 0 && height4Backup > 0) { - mWidthSpinner.setValue(mHeightSpinner.getValue() * height4Backup / width4Backup, false); + mWidthSpinner.setValue(mHeightSpinner.getValue() * width4Backup / height4Backup, false); } } }); From 716904551f01d49cd8358031ad902626f79429a2 Mon Sep 17 00:00:00 2001 From: Starryi Date: Mon, 12 Jul 2021 18:36:45 +0800 Subject: [PATCH 09/11] =?UTF-8?q?REPORT-55121=20=E3=80=90=E7=BB=84?= =?UTF-8?q?=E4=BB=B6=E8=83=8C=E6=99=AF=E5=88=86=E7=A6=BB=E3=80=91=E7=BB=84?= =?UTF-8?q?=E4=BB=B6=E5=A4=8D=E7=94=A8-=E7=82=B9=E4=B9=9D=E5=9B=BE?= =?UTF-8?q?=E5=A1=AB=E5=85=85=E8=AE=BE=E7=BD=AE=E5=BC=B9=E7=AA=97=E7=9A=84?= =?UTF-8?q?=E5=85=B3=E9=97=AD=E6=8C=89=E9=92=AE=E5=92=8C=E5=8F=96=E6=B6=88?= =?UTF-8?q?=E6=8C=89=E9=92=AE=EF=BC=8C=E5=85=B6=E5=AE=9E=E8=BF=98=E6=98=AF?= =?UTF-8?q?=E7=A1=AE=E8=AE=A4&=E4=BF=9D=E5=AD=98=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E7=9A=84=E6=95=88=E6=9E=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 【问题原因】 1. BorderLineAndImagePane与TweakNinePointDialog共享了关于点九图位置的属性,拖拽改变点九分分割线的位置 就会直接改变BorderLineAndImagePane对应点九图字段的值 2. showWindow展示的对话框,其中的取消和关闭按钮总是会触发面板BorderLineAndImagePane的updatePane,从而将点九图的位置设置给了组件 需要将BorderLineAndImagePane与TweakNinePointDialog的数据做隔离,仅在点击确定按钮时 才将TweakNinePointDialog中已调整过的点九图分割线位置传递给BorderLineAndImagePane. 【改动思路】 【review建议】 --- .../gui/xpane/BorderLineAndImagePane.java | 44 +++++++++++++------ 1 file changed, 30 insertions(+), 14 deletions(-) diff --git a/designer-form/src/main/java/com/fr/design/gui/xpane/BorderLineAndImagePane.java b/designer-form/src/main/java/com/fr/design/gui/xpane/BorderLineAndImagePane.java index 830853b33..fcd9ed010 100644 --- a/designer-form/src/main/java/com/fr/design/gui/xpane/BorderLineAndImagePane.java +++ b/designer-form/src/main/java/com/fr/design/gui/xpane/BorderLineAndImagePane.java @@ -53,6 +53,7 @@ import java.io.File; import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; +import java.util.Arrays; /** * @author Starryi @@ -79,10 +80,7 @@ public class BorderLineAndImagePane extends JPanel implements UIObserver { private NinePointImageTweakDialogPane tweakPane; private ImageFileChooser imageFileChooser; - private int ninePointLeft = -1; - private int ninePointTop = -1; - private int ninePointRight = -1; - private int ninePointBottom = -1; + private int[] ninePoint = new int[] {-1, -1, -1, -1}; public BorderLineAndImagePane() { this.initComponents(); @@ -242,8 +240,9 @@ public class BorderLineAndImagePane extends JPanel implements UIObserver { @Override public void stateChanged(ChangeEvent e) { Image image = imagePreviewPane.getImage(); - ninePointLeft = ninePointRight = (image != null ? image.getWidth(null) / 3 : -1); - ninePointTop = ninePointBottom = (image != null ? image.getHeight(null) / 3 : -1); + ninePoint = new int[4]; + ninePoint[0] = ninePoint[2] = (image != null ? image.getWidth(null) / 3 : -1); + ninePoint[1] = ninePoint[3] = (image != null ? image.getHeight(null) / 3 : -1); borderImageOpacityPane.populateBean(1.0); if (image != null) { tweakNinePointButton.setEnabled(true); @@ -260,10 +259,12 @@ public class BorderLineAndImagePane extends JPanel implements UIObserver { initNinePointTweakPaneIfNotExist(); if (imagePreviewPane.getImage() != null) { + tweakPane.previewPane.setNinePoint(ninePoint); BasicDialog dialog = tweakPane.showWindow(SwingUtilities.getWindowAncestor(BorderLineAndImagePane.this)); dialog.addDialogActionListener(new DialogActionAdapter() { @Override public void doOk() { + ninePoint = Arrays.copyOf(tweakPane.previewPane.getNinePoint(), 4); fireStateChanged(); } }); @@ -292,13 +293,11 @@ public class BorderLineAndImagePane extends JPanel implements UIObserver { this.tweakNinePointButton.setEnabled(true); this.borderImageOpacityPane.populateBean(style.getBorderImageOpacity()); if (ninePoint != null && ninePoint.length == 4 && ninePoint[0] > 0 && ninePoint[1] > 0 && ninePoint[2] > 0 && ninePoint[3] > 0) { - ninePointLeft = ninePoint[0]; - ninePointTop = ninePoint[1]; - ninePointRight = ninePoint[2]; - ninePointBottom = ninePoint[3]; + this.ninePoint = Arrays.copyOf(ninePoint, 4); } else { - ninePointLeft = ninePointRight = image.getWidth(null) / 3; - ninePointTop = ninePointBottom = image.getHeight(null) / 3; + this.ninePoint = new int[4]; + this.ninePoint[0] = this.ninePoint[2] = image.getWidth(null) / 3; + this.ninePoint[1] = this.ninePoint[3] = image.getHeight(null) / 3; } getComponent(1).setVisible(false); @@ -331,7 +330,7 @@ public class BorderLineAndImagePane extends JPanel implements UIObserver { Image image = this.imagePreviewPane.getImage(); if (image != null) { ImageBackground newImageBackground = new ImageFileBackground(this.imagePreviewPane.getImageWithSuffix(), Constants.IMAGE_EXTEND); - newImageBackground.setNinePoint(new int[] { ninePointLeft, ninePointTop, ninePointRight, ninePointBottom }); + newImageBackground.setNinePoint(Arrays.copyOf(ninePoint, 4)); style.setBorderImage(newImageBackground); style.setBorderImageOpacity((float)borderImageOpacityPane.updateBean()); } @@ -408,7 +407,7 @@ public class BorderLineAndImagePane extends JPanel implements UIObserver { } private class NinePointImageTweakDialogPane extends BasicPane { - private final NinePointLinePreviewPane previewPane = new NinePointLinePreviewPane(); + public final NinePointLinePreviewPane previewPane = new NinePointLinePreviewPane(); public NinePointImageTweakDialogPane() { this.initComponents(); @@ -444,6 +443,11 @@ public class BorderLineAndImagePane extends JPanel implements UIObserver { public final Color TEXT_COLOR = Color.WHITE; public final int PADDING = 15; + private int ninePointLeft = -1; + private int ninePointTop = -1; + private int ninePointRight = -1; + private int ninePointBottom = -1; + private int imgWidth; private int imgHeight; private int scaleImgWidth; @@ -629,5 +633,17 @@ public class BorderLineAndImagePane extends JPanel implements UIObserver { public void mouseExited(MouseEvent e) { } + + + public void setNinePoint(int[] ninePoint) { + ninePointLeft = ninePoint[0]; + ninePointTop = ninePoint[1]; + ninePointRight = ninePoint[2]; + ninePointBottom = ninePoint[3]; + } + + public int[] getNinePoint() { + return new int[] { ninePointLeft, ninePointTop, ninePointRight, ninePointBottom }; + } } } From 22b34d9bd8431889b9f50d534c17abb7951b57b0 Mon Sep 17 00:00:00 2001 From: Starryi Date: Tue, 13 Jul 2021 13:39:37 +0800 Subject: [PATCH 10/11] =?UTF-8?q?REPORT-55150=20=E3=80=90=E7=BB=84?= =?UTF-8?q?=E4=BB=B6=E8=83=8C=E6=99=AF=E5=88=86=E7=A6=BB=E3=80=91=E7=BB=84?= =?UTF-8?q?=E4=BB=B6=E5=A4=8D=E7=94=A8-=E6=A0=87=E9=A2=98=E8=AE=BE?= =?UTF-8?q?=E7=BD=AE=E4=B8=8B=E5=88=92=E7=BA=BF=EF=BC=8C=E9=80=89=E6=8B=A9?= =?UTF-8?q?=E4=B8=8B=E5=88=92=E7=BA=BF=E6=A0=B7=E5=BC=8F=EF=BC=8C=E7=9B=AE?= =?UTF-8?q?=E5=89=8Dweb=E9=A2=84=E8=A7=88=EF=BC=8C=E4=B8=8D=E7=AE=A1?= =?UTF-8?q?=E9=80=89=E7=9A=84=E4=BB=80=E4=B9=88=E4=B8=8B=E5=88=92=E7=BA=BF?= =?UTF-8?q?=E6=A0=B7=E5=BC=8F=E9=83=BD=E6=98=BE=E7=A4=BA=E7=9A=84=E6=98=AF?= =?UTF-8?q?=E5=8D=95=E6=A8=AA=E7=BA=BF=E6=95=88=E6=9E=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 【问题原因】 这是一个普遍存在的历史问题。临时性的解决方法是在组件样式设置面板中 隐藏下划线线型选择框,待后续全平台显示优化 【改动思路】 【review建议】 --- .../fr/design/gui/xpane/LayoutStylePane.java | 31 ++++++++++--------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/designer-form/src/main/java/com/fr/design/gui/xpane/LayoutStylePane.java b/designer-form/src/main/java/com/fr/design/gui/xpane/LayoutStylePane.java index ee1de8f7e..81ce5fa7e 100644 --- a/designer-form/src/main/java/com/fr/design/gui/xpane/LayoutStylePane.java +++ b/designer-form/src/main/java/com/fr/design/gui/xpane/LayoutStylePane.java @@ -81,7 +81,7 @@ public class LayoutStylePane extends BasicBeanPane { private UIToggleButton titleFontBoldButton; private UIToggleButton titleFontItalicButton; private UIToggleButton titleFontUnderlineButton; - private LineComboBox titleFontUnderlineCombo; +// private LineComboBox titleFontUnderlineCombo; // 目前前端仅支持短横线类型的下划线,因此设计器端暂时就不展示线型选择框了,待后续优化 // 标题图文混排 protected TitleInsetImagePane titleInsetImagePane; //对齐方式 @@ -211,8 +211,8 @@ public class LayoutStylePane extends BasicBeanPane { titleFontUnderlineButton.setGlobalName(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_FRFont_Underline")); titleFontUnderlineButton.setToolTipText(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_FRFont_Underline")); - titleFontUnderlineCombo = new LineComboBox(UIConstants.BORDER_LINE_STYLE_ARRAY); - titleFontUnderlineCombo.setGlobalName(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_FRFont_Line_Style")); +// titleFontUnderlineCombo = new LineComboBox(UIConstants.BORDER_LINE_STYLE_ARRAY); +// titleFontUnderlineCombo.setGlobalName(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_FRFont_Line_Style")); titleInsetImagePane = new TitleInsetImagePane(); @@ -294,15 +294,15 @@ public class LayoutStylePane extends BasicBeanPane { JPanel containerPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); containerPane.add(buttonPane, BorderLayout.NORTH); - containerPane.add(titleFontUnderlineCombo, BorderLayout.CENTER); +// containerPane.add(titleFontUnderlineCombo, BorderLayout.CENTER); - titleFontUnderlineCombo.setVisible(false); - titleFontUnderlineButton.addChangeListener(new ChangeListener() { - @Override - public void stateChanged(ChangeEvent e) { - titleFontUnderlineCombo.setVisible(titleFontUnderlineButton.isSelected()); - } - }); +// titleFontUnderlineCombo.setVisible(false); +// titleFontUnderlineButton.addChangeListener(new ChangeListener() { +// @Override +// public void stateChanged(ChangeEvent e) { +// titleFontUnderlineCombo.setVisible(titleFontUnderlineButton.isSelected()); +// } +// }); return containerPane; } @@ -349,7 +349,8 @@ public class LayoutStylePane extends BasicBeanPane { frFont = frFont.applyName(titleFontFamilyComboBox.getSelectedItem().toString()); frFont = frFont.applyForeground(titleFontColorSelectPane.getColor()); frFont = updateTitleFontItalicBold(frFont); - int line = titleFontUnderlineButton.isSelected() ? this.titleFontUnderlineCombo.getSelectedLineStyle() : Constants.LINE_NONE; +// int line = titleFontUnderlineButton.isSelected() ? this.titleFontUnderlineCombo.getSelectedLineStyle() : Constants.LINE_NONE; + int line = titleFontUnderlineButton.isSelected() ? Constants.LINE_THIN : Constants.LINE_NONE; frFont = frFont.applyUnderline(line); title.setFrFont(frFont); title.setPosition((Integer) titleAlignPane.getSelectedItem()); @@ -425,11 +426,11 @@ public class LayoutStylePane extends BasicBeanPane { int line = frFont.getUnderline(); if (line == Constants.LINE_NONE) { titleFontUnderlineButton.setSelected(false); - titleFontUnderlineCombo.setVisible(false); +// titleFontUnderlineCombo.setVisible(false); } else { titleFontUnderlineButton.setSelected(true); - titleFontUnderlineCombo.setVisible(true); - this.titleFontUnderlineCombo.setSelectedLineStyle(line); +// titleFontUnderlineCombo.setVisible(true); +// this.titleFontUnderlineCombo.setSelectedLineStyle(line); } titleAlignPane.setSelectedItem(widgetTitle.getPosition()); From 26f2825ccb916aa583153994b5da3df636f7b5cb Mon Sep 17 00:00:00 2001 From: Starryi Date: Tue, 13 Jul 2021 13:42:52 +0800 Subject: [PATCH 11/11] =?UTF-8?q?REPORT-55149=E3=80=90=E7=BB=84=E4=BB=B6?= =?UTF-8?q?=E8=83=8C=E6=99=AF=E5=88=86=E7=A6=BB=E3=80=91=E7=BB=84=E4=BB=B6?= =?UTF-8?q?=E5=A4=8D=E7=94=A8-=E5=9B=BE=E8=A1=A8=E5=9D=97=E6=B2=A1?= =?UTF-8?q?=E7=9C=8B=E5=88=B0=E5=86=85=E8=BE=B9=E8=B7=9D=E8=AE=BE=E7=BD=AE?= =?UTF-8?q?=E9=A1=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 【问题原因】 实现表单图表控件支持内边距 【改动思路】 【review建议】 --- .../designer/beans/events/DesignerEditor.java | 17 ++++++ .../design/designer/creator/XChartEditor.java | 9 ++- .../FormWidgetDefinePaneFactoryBase.java | 4 +- .../layout/ChartEditorDefinePane.java | 57 +++++++++++++++++++ 4 files changed, 83 insertions(+), 4 deletions(-) create mode 100644 designer-form/src/main/java/com/fr/design/widget/ui/designer/layout/ChartEditorDefinePane.java diff --git a/designer-form/src/main/java/com/fr/design/designer/beans/events/DesignerEditor.java b/designer-form/src/main/java/com/fr/design/designer/beans/events/DesignerEditor.java index 1bb2cea52..a1c9f1ff9 100644 --- a/designer-form/src/main/java/com/fr/design/designer/beans/events/DesignerEditor.java +++ b/designer-form/src/main/java/com/fr/design/designer/beans/events/DesignerEditor.java @@ -1,5 +1,6 @@ package com.fr.design.designer.beans.events; +import com.fr.form.ui.PaddingMargin; import com.fr.stable.core.PropertyChangeAdapter; import com.fr.stable.core.PropertyChangeListener; import com.fr.design.utils.gui.LayoutUtils; @@ -76,6 +77,22 @@ public class DesignerEditor implements PropertyChangeListe } } + public void paintEditor(Graphics g, Dimension size, PaddingMargin margin) { + if (this.comp != null) { + int marginLeft = margin != null ? margin.getLeft() : 0; + int marginTop = margin != null ? margin.getTop() : 0; + int marginRight = margin != null ? margin.getRight() : 0; + int marginBottom = margin != null ? margin.getBottom() : 0; + int horizonMargin = marginLeft + marginRight; + int verticalMargin = marginTop + marginBottom; + + comp.setSize(new Dimension(size.width - 2 - horizonMargin, size.height - 2 - verticalMargin)); + LayoutUtils.layoutContainer(comp); + Graphics clipg = g.create(1 + marginLeft, 1 + marginTop, size.width, size.height); + this.comp.paint(clipg); + } + } + public T getEditorTarget() { return comp; } diff --git a/designer-form/src/main/java/com/fr/design/designer/creator/XChartEditor.java b/designer-form/src/main/java/com/fr/design/designer/creator/XChartEditor.java index bbd2f52d9..2e9b3e23a 100644 --- a/designer-form/src/main/java/com/fr/design/designer/creator/XChartEditor.java +++ b/designer-form/src/main/java/com/fr/design/designer/creator/XChartEditor.java @@ -20,6 +20,7 @@ import com.fr.design.mainframe.FormDesigner; import com.fr.design.mainframe.widget.editors.WLayoutBorderStyleEditor; import com.fr.design.module.DesignModuleFactory; import com.fr.form.ui.BaseChartEditor; +import com.fr.form.ui.PaddingMargin; import com.fr.form.ui.Widget; import com.fr.stable.Constants; import com.fr.stable.core.PropertyChangeAdapter; @@ -228,9 +229,13 @@ public class XChartEditor extends XBorderStyleWidgetCreator { * 渲染Painter */ public void paint(Graphics g) { - designerEditor.paintEditor(g, this.getSize()); + Dimension size = getSize(); + PaddingMargin margin = toData().getMargin(); + designerEditor.paintEditor(g, size, margin); if (coverPanel != null) { - coverPanel.setSize(this.getSize()); + int horizonMargin = margin != null ? margin.getLeft() + margin.getRight() : 0; + int verticalMargin = margin != null ? margin.getTop() + margin.getBottom() : 0; + coverPanel.setSize(size.width - horizonMargin, size.height - verticalMargin); } super.paint(g); if (isEditing) { diff --git a/designer-form/src/main/java/com/fr/design/widget/FormWidgetDefinePaneFactoryBase.java b/designer-form/src/main/java/com/fr/design/widget/FormWidgetDefinePaneFactoryBase.java index 1947e9ec4..e6217dbf0 100644 --- a/designer-form/src/main/java/com/fr/design/widget/FormWidgetDefinePaneFactoryBase.java +++ b/designer-form/src/main/java/com/fr/design/widget/FormWidgetDefinePaneFactoryBase.java @@ -24,7 +24,7 @@ import com.fr.design.widget.ui.designer.TreeComboBoxEditorDefinePane; import com.fr.design.widget.ui.designer.TreeEditorDefinePane; import com.fr.design.widget.ui.designer.UserEditorDefinePane; import com.fr.design.widget.ui.designer.WidgetDefinePane; -import com.fr.design.widget.ui.designer.layout.BorderStyleWidgetDefinePane; +import com.fr.design.widget.ui.designer.layout.ChartEditorDefinePane; import com.fr.design.widget.ui.designer.layout.ElementEditorDefinePane; import com.fr.design.widget.ui.designer.layout.FRAbsoluteBodyLayoutDefinePane; import com.fr.design.widget.ui.designer.layout.FRAbsoluteLayoutDefinePane; @@ -107,7 +107,7 @@ public class FormWidgetDefinePaneFactoryBase { defineMap.put(FormSubmitButton.class, new Appearance(FreeButtonDefinePane.class, WidgetConstants.BUTTON + "")); defineMap.put(WFitLayout.class, new Appearance(FRFitLayoutDefinePane.class, "wFitLayout")); if (StableFactory.getMarkedClass(BridgeMark.CHART_EDITOR, AbstractBorderStyleWidget.class) != null) { - defineMap.put(StableFactory.getMarkedClass(BridgeMark.CHART_EDITOR, AbstractBorderStyleWidget.class), new Appearance(BorderStyleWidgetDefinePane.class, "chartEditor")); + defineMap.put(StableFactory.getMarkedClass(BridgeMark.CHART_EDITOR, AbstractBorderStyleWidget.class), new Appearance(ChartEditorDefinePane.class, "chartEditor")); } defineMap.put(WAbsoluteLayout.class, new Appearance(FRAbsoluteLayoutDefinePane.class, "wAbsoluteLayout")); diff --git a/designer-form/src/main/java/com/fr/design/widget/ui/designer/layout/ChartEditorDefinePane.java b/designer-form/src/main/java/com/fr/design/widget/ui/designer/layout/ChartEditorDefinePane.java new file mode 100644 index 000000000..fdb3efc9d --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/widget/ui/designer/layout/ChartEditorDefinePane.java @@ -0,0 +1,57 @@ +package com.fr.design.widget.ui.designer.layout; + +import com.fr.design.designer.IntervalConstants; +import com.fr.design.designer.creator.CRPropertyDescriptor; +import com.fr.design.designer.creator.PropertyGroupPane; +import com.fr.design.designer.creator.XCreator; +import com.fr.design.designer.creator.XElementCase; +import com.fr.design.gui.ilable.UILabel; +import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.design.layout.TableLayoutHelper; +import com.fr.design.mainframe.widget.accessibles.AccessibleElementCaseToolBarEditor; +import com.fr.design.widget.ui.designer.component.PaddingBoundPane; +import com.fr.form.ui.ChartEditor; +import com.fr.form.ui.ElementCaseEditor; +import com.fr.form.web.FormToolBarManager; +import com.fr.general.ComparatorUtils; + +import javax.swing.*; +import java.awt.*; + +/** + * Created by ibm on 2017/8/7. + */ +public class ChartEditorDefinePane extends WTitleLayoutDefinePane { + private PaddingBoundPane paddingBoundPane; + + public ChartEditorDefinePane(XCreator xCreator) { + super(xCreator); + + } + + protected JPanel createCenterPane() { + JPanel centerPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); + paddingBoundPane = new PaddingBoundPane(); + Component[][] components = new Component[][]{ + new Component[]{paddingBoundPane, null}, + }; + JPanel panel = TableLayoutHelper.createGapTableLayoutPane(components, TableLayoutHelper.FILL_LASTCOLUMN, IntervalConstants.INTERVAL_W0, IntervalConstants.INTERVAL_L1); + panel.setBorder(BorderFactory.createEmptyBorder(5, 0, 10, 0)); + centerPane.add(panel, BorderLayout.NORTH); + return centerPane; + } + + protected ChartEditor updateSubBean() { + ChartEditor chartEditor = (ChartEditor) creator.toData(); + if (ComparatorUtils.equals(getGlobalName(), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Layout_Padding_Duplicate"))) { + paddingBoundPane.update(chartEditor); + } + + return chartEditor; + } + + protected void populateSubBean(ChartEditor ob) { + paddingBoundPane.populate(ob); + } + +}