From 7038beae50a27d61f76405ba7fb481e694a89f29 Mon Sep 17 00:00:00 2001 From: "Henry.Wang" Date: Thu, 16 Dec 2021 17:19:28 +0800 Subject: [PATCH 01/30] =?UTF-8?q?REPORT-63751=2011.0.1-=E5=A4=9A=E7=BB=B4?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E9=9B=86/SAP=E6=95=B0=E6=8D=AE=E9=9B=86?= =?UTF-8?q?=E5=AF=B9=E6=99=AE=E9=80=9A=E7=94=A8=E6=88=B7=E8=AE=BE=E7=BD=AE?= =?UTF-8?q?=E4=B8=8D=E5=BC=80=E6=94=BE=20=E4=BD=BF=E7=94=A8=E6=9D=83?= =?UTF-8?q?=E9=99=90=EF=BC=8C=E4=BD=86=E5=AF=B9=E6=A8=A1=E6=9D=BF=E4=BE=9D?= =?UTF-8?q?=E7=84=B6=E8=83=BD=E4=BF=9D=E5=AD=98=E6=88=90=E5=8A=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AbstractAuthorityCheckerProvider.java | 16 ++++++++++++++++ .../authority/AuthorityCheckerProvider.java | 10 ++++++++++ .../authority/DSColumnAuthorityChecker.java | 2 +- .../authority/ElementAuthorityChecker.java | 6 +++--- .../authority/FormulaAuthorityChecker.java | 2 +- .../authority/JTemplateAuthorityChecker.java | 8 ++++++++ .../NameDatabaseConnectionAuthorityChecker.java | 2 +- .../authority/NameTableDataAuthorityChecker.java | 2 +- 8 files changed, 41 insertions(+), 7 deletions(-) create mode 100644 designer-base/src/main/java/com/fr/design/mainframe/authority/AbstractAuthorityCheckerProvider.java create mode 100644 designer-base/src/main/java/com/fr/design/mainframe/authority/AuthorityCheckerProvider.java diff --git a/designer-base/src/main/java/com/fr/design/mainframe/authority/AbstractAuthorityCheckerProvider.java b/designer-base/src/main/java/com/fr/design/mainframe/authority/AbstractAuthorityCheckerProvider.java new file mode 100644 index 0000000000..30d594df2c --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mainframe/authority/AbstractAuthorityCheckerProvider.java @@ -0,0 +1,16 @@ +package com.fr.design.mainframe.authority; + +import com.fr.stable.fun.mark.API; + +@API(level = AuthorityCheckerProvider.CURRENT_LEVEL) +public abstract class AbstractAuthorityCheckerProvider implements AuthorityCheckerProvider { + @Override + public int currentAPILevel() { + return CURRENT_LEVEL; + } + + @Override + public String mark4Provider() { + return getClass().getName(); + } +} diff --git a/designer-base/src/main/java/com/fr/design/mainframe/authority/AuthorityCheckerProvider.java b/designer-base/src/main/java/com/fr/design/mainframe/authority/AuthorityCheckerProvider.java new file mode 100644 index 0000000000..4aa38717ae --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mainframe/authority/AuthorityCheckerProvider.java @@ -0,0 +1,10 @@ +package com.fr.design.mainframe.authority; + +import com.fr.stable.fun.mark.Mutable; + +public interface AuthorityCheckerProvider extends Mutable { + String XML_TAG = "AuthorityCheckerProvider"; + int CURRENT_LEVEL = 1; + + ElementAuthorityChecker getElementAuthorityChecker(); +} diff --git a/designer-base/src/main/java/com/fr/design/mainframe/authority/DSColumnAuthorityChecker.java b/designer-base/src/main/java/com/fr/design/mainframe/authority/DSColumnAuthorityChecker.java index fdab6ea2a2..0d1df60673 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/authority/DSColumnAuthorityChecker.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/authority/DSColumnAuthorityChecker.java @@ -11,7 +11,7 @@ public class DSColumnAuthorityChecker extends ElementAuthorityChecker @Override @Nullable - Set getNoAuthDatasetNames(DSColumn dsColumn, Set authDatasetNames) { + protected Set getNoAuthDatasetNames(DSColumn dsColumn, Set authDatasetNames) { if (!authDatasetNames.contains(dsColumn.getDSName())) { return new HashSet<>(Arrays.asList(dsColumn.getDSName())); } diff --git a/designer-base/src/main/java/com/fr/design/mainframe/authority/ElementAuthorityChecker.java b/designer-base/src/main/java/com/fr/design/mainframe/authority/ElementAuthorityChecker.java index 67d0f1da36..82740da4ec 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/authority/ElementAuthorityChecker.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/authority/ElementAuthorityChecker.java @@ -17,7 +17,7 @@ public abstract class ElementAuthorityChecker { * @return 如果有返回名称,没有返回null */ @Nullable - Set getNoAuthConnectionNames(T t, Set authConnectionNames) { + protected Set getNoAuthConnectionNames(T t, Set authConnectionNames) { return null; } @@ -29,7 +29,7 @@ public abstract class ElementAuthorityChecker { * @return 如果有返回名称,没有返回null */ @Nullable - Set getNoAuthDatasetNames(T t, Set authDatasetNames) { + protected Set getNoAuthDatasetNames(T t, Set authDatasetNames) { return null; } @@ -37,7 +37,7 @@ public abstract class ElementAuthorityChecker { * @Description 要检查对象的className * @return className */ - String getCheckClassName() { + protected String getCheckClassName() { ParameterizedTypeImpl parameterizedType = (ParameterizedTypeImpl) this.getClass().getGenericSuperclass(); Type type = parameterizedType.getActualTypeArguments()[0]; return type.getTypeName(); diff --git a/designer-base/src/main/java/com/fr/design/mainframe/authority/FormulaAuthorityChecker.java b/designer-base/src/main/java/com/fr/design/mainframe/authority/FormulaAuthorityChecker.java index 15a7f4853f..086a437b12 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/authority/FormulaAuthorityChecker.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/authority/FormulaAuthorityChecker.java @@ -29,7 +29,7 @@ public class FormulaAuthorityChecker extends ElementAuthorityChecker { @Override @Nullable - Set getNoAuthDatasetNames(Formula formula, Set authDatasetNames) { + public Set getNoAuthDatasetNames(Formula formula, Set authDatasetNames) { return getNoAuthNames(formula, DATASET_NAME_FORMULA_PARSER, authDatasetNames); } diff --git a/designer-base/src/main/java/com/fr/design/mainframe/authority/JTemplateAuthorityChecker.java b/designer-base/src/main/java/com/fr/design/mainframe/authority/JTemplateAuthorityChecker.java index d76031f654..0c81c2fffe 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/authority/JTemplateAuthorityChecker.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/authority/JTemplateAuthorityChecker.java @@ -1,6 +1,7 @@ package com.fr.design.mainframe.authority; +import com.fr.design.ExtraDesignClassManager; import com.fr.design.dialog.FineJOptionPane; import com.fr.design.i18n.Toolkit; @@ -68,6 +69,13 @@ public class JTemplateAuthorityChecker { registerChecker(new DSColumnAuthorityChecker()); registerChecker(new FormulaAuthorityChecker()); registerChecker(new NameTableDataAuthorityChecker()); + Set authorityCheckerProviders + = ExtraDesignClassManager.getInstance().getArray(AuthorityCheckerProvider.XML_TAG); + for (AuthorityCheckerProvider authorityCheckerProvider : authorityCheckerProviders) { + ElementAuthorityChecker elementAuthorityChecker + = authorityCheckerProvider.getElementAuthorityChecker(); + registerChecker(elementAuthorityChecker); + } } private void registerChecker(ElementAuthorityChecker checker) { diff --git a/designer-base/src/main/java/com/fr/design/mainframe/authority/NameDatabaseConnectionAuthorityChecker.java b/designer-base/src/main/java/com/fr/design/mainframe/authority/NameDatabaseConnectionAuthorityChecker.java index 96bc0b8c5d..e65fe55cc1 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/authority/NameDatabaseConnectionAuthorityChecker.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/authority/NameDatabaseConnectionAuthorityChecker.java @@ -11,7 +11,7 @@ import java.util.stream.Collectors; public class NameDatabaseConnectionAuthorityChecker extends ElementAuthorityChecker { @Override @Nullable - Set getNoAuthConnectionNames(NameDatabaseConnection nameDatabaseConnection, Set authConnectionNames) { + protected Set getNoAuthConnectionNames(NameDatabaseConnection nameDatabaseConnection, Set authConnectionNames) { String name = nameDatabaseConnection.getName(); if (!authConnectionNames.contains(name)) { return new HashSet<>(Arrays.asList(name)); diff --git a/designer-base/src/main/java/com/fr/design/mainframe/authority/NameTableDataAuthorityChecker.java b/designer-base/src/main/java/com/fr/design/mainframe/authority/NameTableDataAuthorityChecker.java index 13e7300856..93cad06e26 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/authority/NameTableDataAuthorityChecker.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/authority/NameTableDataAuthorityChecker.java @@ -10,7 +10,7 @@ import java.util.Set; public class NameTableDataAuthorityChecker extends ElementAuthorityChecker { @Override @Nullable - Set getNoAuthDatasetNames(NameTableData nameTableData, Set authDatasetNames) { + protected Set getNoAuthDatasetNames(NameTableData nameTableData, Set authDatasetNames) { if (!authDatasetNames.contains(nameTableData.getName())) { return new HashSet<>(Arrays.asList(nameTableData.getName())); } From 539dd8ca4ce4778ceeba2afaebec012e3e475586 Mon Sep 17 00:00:00 2001 From: shine Date: Tue, 21 Dec 2021 14:45:30 +0800 Subject: [PATCH 02/30] =?UTF-8?q?CHART-22090=20=E6=9D=A1=E4=BB=B6=E5=B1=9E?= =?UTF-8?q?=E6=80=A7-=E9=A2=9C=E8=89=B2=E6=8E=A7=E4=BB=B6=E6=AE=8B?= =?UTF-8?q?=E7=95=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../designer/component/VanChartUIListControlPane.java | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/designer-chart/src/main/java/com/fr/van/chart/designer/component/VanChartUIListControlPane.java b/designer-chart/src/main/java/com/fr/van/chart/designer/component/VanChartUIListControlPane.java index 8a18814ebd..07f35672c7 100644 --- a/designer-chart/src/main/java/com/fr/van/chart/designer/component/VanChartUIListControlPane.java +++ b/designer-chart/src/main/java/com/fr/van/chart/designer/component/VanChartUIListControlPane.java @@ -25,6 +25,7 @@ import java.awt.BorderLayout; import java.awt.Component; import java.awt.FlowLayout; import java.awt.Point; +import java.awt.Window; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; @@ -210,6 +211,16 @@ public abstract class VanChartUIListControlPane extends UIListControlPane implem public void doCancel() { setVisible(false); } + + @Override + public void setVisible(boolean b) { + //把一些可能没隐藏的子弹框隐藏 比如 边框-颜色弹框 + for (Window window : getOwnedWindows()) { + window.setVisible(false); + } + + super.setVisible(b); + } } } From 8638c51f4ce98c08d66b9ad59c944c822b54359c Mon Sep 17 00:00:00 2001 From: shine Date: Tue, 21 Dec 2021 14:48:14 +0800 Subject: [PATCH 03/30] update --- .../chart/designer/component/VanChartUIListControlPane.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/designer-chart/src/main/java/com/fr/van/chart/designer/component/VanChartUIListControlPane.java b/designer-chart/src/main/java/com/fr/van/chart/designer/component/VanChartUIListControlPane.java index 07f35672c7..ce8253b981 100644 --- a/designer-chart/src/main/java/com/fr/van/chart/designer/component/VanChartUIListControlPane.java +++ b/designer-chart/src/main/java/com/fr/van/chart/designer/component/VanChartUIListControlPane.java @@ -214,12 +214,12 @@ public abstract class VanChartUIListControlPane extends UIListControlPane implem @Override public void setVisible(boolean b) { + super.setVisible(b); + //把一些可能没隐藏的子弹框隐藏 比如 边框-颜色弹框 for (Window window : getOwnedWindows()) { window.setVisible(false); } - - super.setVisible(b); } } From 180119fa8354b190e46b911c58fea01a5fd540b7 Mon Sep 17 00:00:00 2001 From: Yvan Date: Tue, 21 Dec 2021 18:15:54 +0800 Subject: [PATCH 04/30] =?UTF-8?q?REPORT-64606=20=E6=8F=92=E4=BB=B6?= =?UTF-8?q?=E4=BF=AE=E6=94=B9active=E9=80=BB=E8=BE=91=E9=87=8D=E6=9E=84-?= =?UTF-8?q?=E6=8F=92=E4=BB=B6=E6=A0=A1=E9=AA=8C=E6=9C=AA=E9=80=9A=E8=BF=87?= =?UTF-8?q?=EF=BC=8C=E6=B2=A1=E6=9C=89=E8=A2=AB=E7=A6=81=E7=94=A8=20?= =?UTF-8?q?=E3=80=90=E9=97=AE=E9=A2=98=E5=8E=9F=E5=9B=A0=E3=80=91=E6=9C=AA?= =?UTF-8?q?=E9=80=82=E9=85=8D=E6=8F=92=E4=BB=B6=E7=AE=A1=E7=90=86=E9=87=8C?= =?UTF-8?q?=E7=9A=84=E6=8F=92=E4=BB=B6=E8=BF=90=E8=A1=8C=E7=8A=B6=E6=80=81?= =?UTF-8?q?=20=E3=80=90=E6=94=B9=E5=8A=A8=E6=80=9D=E8=B7=AF=E3=80=911.=20?= =?UTF-8?q?=E4=BC=A0=E9=80=92=E6=AD=A3=E7=A1=AE=E7=9A=84=E6=8F=92=E4=BB=B6?= =?UTF-8?q?=E7=AE=A1=E7=90=86=E9=87=8C=E8=AF=B7=E6=B1=82=E7=9A=84=E6=8F=92?= =?UTF-8?q?=E4=BB=B6=E8=BF=90=E8=A1=8C=E7=8A=B6=E6=80=81=EF=BC=9B2.=20?= =?UTF-8?q?=E5=BD=93isActive=E4=B8=8EisRunning=E4=B8=8D=E5=8C=B9=E9=85=8D?= =?UTF-8?q?=E6=97=B6=EF=BC=8C=E4=BF=9D=E8=AF=81=E5=8F=AF=E4=BB=A5=E6=AD=A3?= =?UTF-8?q?=E7=A1=AE=E7=9A=84=E5=90=AF=E7=94=A8=E6=88=96=E7=A6=81=E7=94=A8?= =?UTF-8?q?=E6=8F=92=E4=BB=B6=20=E3=80=90review=E5=BB=BA=E8=AE=AE=E3=80=91?= =?UTF-8?q?=E6=97=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/fr/design/extra/PluginUtils.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/designer-base/src/main/java/com/fr/design/extra/PluginUtils.java b/designer-base/src/main/java/com/fr/design/extra/PluginUtils.java index 5a5b58f776..521821eadf 100644 --- a/designer-base/src/main/java/com/fr/design/extra/PluginUtils.java +++ b/designer-base/src/main/java/com/fr/design/extra/PluginUtils.java @@ -269,7 +269,8 @@ public class PluginUtils { jo.put("vendor", pluginContext.getVendor()); jo.put("price", pluginContext.getPrice()); jo.put("requiredJarTime", pluginContext.getRequiredJarTime()); - jo.put("active", pluginContext.isActive()); + // 前端需求的active实际上是插件的运行状态,通过isRunning()获取 + jo.put("active", pluginContext.isRunning()); jo.put("hidden", pluginContext.isHidden()); jo.put("free", pluginContext.isFree()); jo.put("licDamaged", pluginContext.isLicDamaged()); From 75a342690caa19f7ccb9dd7dd6d4ace4816605de Mon Sep 17 00:00:00 2001 From: shine Date: Tue, 21 Dec 2021 18:58:26 +0800 Subject: [PATCH 05/30] =?UTF-8?q?CHART-22076=20fix:fvs.cpt=20=E5=8D=95?= =?UTF-8?q?=E5=85=83=E6=A0=BC=E8=AE=BE=E7=BD=AE=E8=B6=85=E9=93=BE=E5=88=A0?= =?UTF-8?q?=E9=99=A4=E8=B6=85=E9=93=BE=20=E6=96=87=E6=9C=AC=E7=99=BD?= =?UTF-8?q?=E8=89=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../design/utils/gui/AdjustWorkBookDefaultStyleUtils.java | 7 ++++++- .../fr/design/mainframe/HyperlinkGroupPaneActionImpl.java | 3 ++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/utils/gui/AdjustWorkBookDefaultStyleUtils.java b/designer-base/src/main/java/com/fr/design/utils/gui/AdjustWorkBookDefaultStyleUtils.java index 760fc3c808..a3121e36ca 100644 --- a/designer-base/src/main/java/com/fr/design/utils/gui/AdjustWorkBookDefaultStyleUtils.java +++ b/designer-base/src/main/java/com/fr/design/utils/gui/AdjustWorkBookDefaultStyleUtils.java @@ -17,6 +17,7 @@ public class AdjustWorkBookDefaultStyleUtils { private static final Color TEMPLATE_BACKGROUND = new Color(16, 11, 43); private static final Color CELL_ELEMENT_BORDER = new Color(110, 110, 110); + private static final Color CELL_ELEMENT_FONT_FOREGROUND = Color.WHITE; private static Color currentStoryBack = null; @@ -31,7 +32,7 @@ public class AdjustWorkBookDefaultStyleUtils { public static void adjustCellElement(CellElement cellElement) { if (DesignModeContext.isDuchampMode()) { Style style = cellElement.getStyle(); - style = style.deriveFRFont(style.getFRFont().applyForeground(Color.WHITE)); + style = style.deriveFRFont(style.getFRFont().applyForeground(CELL_ELEMENT_FONT_FOREGROUND)); style = style.deriveBorder(0, CELL_ELEMENT_BORDER, 0, CELL_ELEMENT_BORDER, 0, CELL_ELEMENT_BORDER, @@ -40,6 +41,10 @@ public class AdjustWorkBookDefaultStyleUtils { } } + public static Color adjustCellElementFontForeground(Color color) { + return DesignModeContext.isDuchampMode() ? CELL_ELEMENT_FONT_FOREGROUND : color; + } + public static void adjustFloatElement(FloatElement floatElement) { if (DesignModeContext.isDuchampMode()) { Style style = floatElement.getStyle(); diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/HyperlinkGroupPaneActionImpl.java b/designer-realize/src/main/java/com/fr/design/mainframe/HyperlinkGroupPaneActionImpl.java index 71a37e42f0..d90b7e8ec3 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/HyperlinkGroupPaneActionImpl.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/HyperlinkGroupPaneActionImpl.java @@ -6,6 +6,7 @@ import com.fr.design.designer.TargetComponent; import com.fr.design.file.HistoryTemplateListCache; import com.fr.design.gui.frpane.HyperlinkGroupPane; import com.fr.design.gui.frpane.HyperlinkGroupPaneActionProvider; +import com.fr.design.utils.gui.AdjustWorkBookDefaultStyleUtils; import com.fr.general.FRFont; import com.fr.grid.selection.CellSelection; import com.fr.grid.selection.FloatSelection; @@ -82,7 +83,7 @@ public class HyperlinkGroupPaneActionImpl implements HyperlinkGroupPaneActionPro frFont = frFont.applyForeground(Color.blue); frFont = frFont.applyUnderline(Constants.LINE_THIN); } else { - frFont = frFont.applyForeground(Color.black); + frFont = frFont.applyForeground(AdjustWorkBookDefaultStyleUtils.adjustCellElementFontForeground(Color.black)); frFont = frFont.applyUnderline(Constants.LINE_NONE); } editCellElement.setStyle(elementStyle.deriveFRFont(frFont)); From 50fb8f23ebe3baac7a07949fdb59bdb3943954f5 Mon Sep 17 00:00:00 2001 From: "Henry.Wang" Date: Tue, 21 Dec 2021 23:32:17 +0800 Subject: [PATCH 06/30] REPORT-64527 && REPORT-64525 && REPORT-64489 && REPORT-64485 && REPORT-64466 && REPORT-64463 && REPORT-64462 && REPORT-64460 --- .../images/buttonicon/select_disabled.svg | 5 ++ .../images/buttonicon/select_normal.svg | 5 ++ .../com/fr/design/images/sort/sequence.png | Bin 0 -> 301 bytes .../fr/design/mainframe/ElementCasePane.java | 19 ++++++- .../design/sort/common/SortColumnRowPane.java | 47 ++++++++++------ .../CustomSequenceEditPane.java | 52 ++++++++++++++---- .../expressionpane/CustomSequencePane.java | 18 +++--- .../fr/design/sort/header/HeaderAreaPane.java | 30 +++++++++- .../sort/header/HeaderSortRulePane.java | 43 ++++++++------- .../fr/design/sort/header/SortHeaderPane.java | 6 +- 10 files changed, 162 insertions(+), 63 deletions(-) create mode 100644 designer-base/src/main/resources/com/fr/design/images/buttonicon/select_disabled.svg create mode 100644 designer-base/src/main/resources/com/fr/design/images/buttonicon/select_normal.svg create mode 100644 designer-base/src/main/resources/com/fr/design/images/sort/sequence.png diff --git a/designer-base/src/main/resources/com/fr/design/images/buttonicon/select_disabled.svg b/designer-base/src/main/resources/com/fr/design/images/buttonicon/select_disabled.svg new file mode 100644 index 0000000000..b21c206a3a --- /dev/null +++ b/designer-base/src/main/resources/com/fr/design/images/buttonicon/select_disabled.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/designer-base/src/main/resources/com/fr/design/images/buttonicon/select_normal.svg b/designer-base/src/main/resources/com/fr/design/images/buttonicon/select_normal.svg new file mode 100644 index 0000000000..60a2855aa5 --- /dev/null +++ b/designer-base/src/main/resources/com/fr/design/images/buttonicon/select_normal.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/designer-base/src/main/resources/com/fr/design/images/sort/sequence.png b/designer-base/src/main/resources/com/fr/design/images/sort/sequence.png new file mode 100644 index 0000000000000000000000000000000000000000..ac321ae1749c385bda6374d526d7016aaac9a52a GIT binary patch literal 301 zcmV+|0n+}7P)Px#=Sf6CR5(wik}+z-P!L3CtRe>pxJhGh6Bh=-{@%VyZjr`Sn%p8+v3so%xNsVS z8#e|YAcZpF2V_3v3nXRR-FfWnEb-4`)SCtM;kZ}7^J(1yxn>_|C&0{>(qsnUk<`Y$ zn&*I7fSEl5+)8|nqCo&Nn@iY{e3JOm1&DWxw*PDpLfA?80t1YW1siUTIefG=k6(t5x1Hj#xcSX*! extends Tar private CellSelection formatReferencedCell = null; private CellSelection cellNeedTOFormat = null; private FormatBrushAction formatBrushAction; + private boolean repeatSelection = false; private ActionListener keyListener = new ActionListener() { @Override public void actionPerformed(ActionEvent e) { @@ -526,11 +527,17 @@ public abstract class ElementCasePane extends Tar return this.selection.getQuickEditor(this); } + public boolean isRepeatSelection() { + return repeatSelection; + } + + public void setRepeatSelection(boolean repeatSelection) { + this.repeatSelection = repeatSelection; + } + @Override public void setSelection(Selection selection) { - if (!ComparatorUtils.equals(this.selection, selection) - || !ComparatorUtils.equals(EastRegionContainerPane.getInstance().getCellAttrPane(), CellElementPropertyPane.getInstance()) - || DesignModeContext.isAuthorityEditing()) { + if (isEffectiveSelection(selection)) { try { //旧选中内容编辑器释放模板对象 QuickEditor editor = this.selection.getQuickEditorWithoutPopulate(this); @@ -545,6 +552,12 @@ public abstract class ElementCasePane extends Tar } } + private boolean isEffectiveSelection(Selection selection) { + return (isRepeatSelection() || !ComparatorUtils.equals(this.selection, selection)) + || !ComparatorUtils.equals(EastRegionContainerPane.getInstance().getCellAttrPane(), CellElementPropertyPane.getInstance()) + || DesignModeContext.isAuthorityEditing(); + } + public void setOldSelecton(Selection selection) { this.selection = selection; diff --git a/designer-realize/src/main/java/com/fr/design/sort/common/SortColumnRowPane.java b/designer-realize/src/main/java/com/fr/design/sort/common/SortColumnRowPane.java index cc276711a3..851b35a8d2 100644 --- a/designer-realize/src/main/java/com/fr/design/sort/common/SortColumnRowPane.java +++ b/designer-realize/src/main/java/com/fr/design/sort/common/SortColumnRowPane.java @@ -12,8 +12,6 @@ import com.fr.design.gui.ilable.UILabel; import com.fr.design.mainframe.ElementCasePane; import com.fr.design.selection.SelectionEvent; import com.fr.design.selection.SelectionListener; -import com.fr.design.ui.util.UIUtil; -import com.fr.general.Background; import com.fr.grid.selection.CellSelection; import com.fr.grid.selection.Selection; import com.fr.log.FineLoggerFactory; @@ -30,8 +28,6 @@ import com.fr.stable.StringUtils; 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.util.ArrayList; @@ -50,6 +46,9 @@ public class SortColumnRowPane extends JPanel implements UIObserver { private CellSelection oldSelection; private SelectionListener gridSelectionChangeListener; UIObserverListener uiObserverListener; + private final static Icon DISABLED_ICON = IconUtils.readIcon("/com/fr/design/images/buttonicon/select_disabled.svg"); + private final static Icon ENABLE_ICON = IconUtils.readIcon("/com/fr/design/images/buttonicon/select_normal.svg"); + private boolean enabled; public SortColumnRowPane(int paneWidth, int paneHeight) { this.paneWidth = paneWidth; @@ -91,12 +90,17 @@ public class SortColumnRowPane extends JPanel implements UIObserver { } void initSelectButton() { - selectButton = new UIButton(IconUtils.readIcon("/com/fr/design/images/buttonicon/select.png")); + selectButton = new UIButton(ENABLE_ICON); selectButton.addMouseListener(new SelectActionListener(this)); this.add(selectButton); } public void populateBean(ColumnRow columnRow) { + populateBean(columnRow, true); + } + + public void populateBean(ColumnRow columnRow, boolean enabled) { + this.enabled = enabled; if (SortColumnRowPane.isAvailableColumnRow(columnRow)) { colJTextField.setText(EssentialUtils.convertIntToABC(columnRow.column + 1)); rowJTextField.setText(String.valueOf(columnRow.row + 1)); @@ -104,6 +108,11 @@ public class SortColumnRowPane extends JPanel implements UIObserver { colJTextField.setText(StringUtils.EMPTY); rowJTextField.setText(StringUtils.EMPTY); } + if (enabled) { + selectButton.setIcon(ENABLE_ICON); + } else { + selectButton.setIcon(DISABLED_ICON); + } refresh(); } @@ -141,25 +150,28 @@ public class SortColumnRowPane extends JPanel implements UIObserver { @Override public void mouseClicked(MouseEvent e) { - ElementCasePane elementCasePane = getCurrentElementCase(); - if (elementCasePane == null || isAlreadyAddListener) { - return; - } - prepareSelectHeader(elementCasePane); - gridSelectionChangeListener = new SelectionListener() { - @Override - public void selectionChanged(SelectionEvent e) { - completeSelectHeader(elementCasePane); + if (enabled) { + ElementCasePane elementCasePane = getCurrentElementCase(); + if (elementCasePane == null || isAlreadyAddListener) { + return; } - }; - elementCasePane.addSelectionChangeListener(gridSelectionChangeListener); - isAlreadyAddListener = true; + prepareSelectHeader(elementCasePane); + gridSelectionChangeListener = new SelectionListener() { + @Override + public void selectionChanged(SelectionEvent e) { + completeSelectHeader(elementCasePane); + } + }; + elementCasePane.addSelectionChangeListener(gridSelectionChangeListener); + isAlreadyAddListener = true; + } } private void prepareSelectHeader(ElementCasePane elementCasePane) { ashDisableHeaderCellsStyle(elementCasePane.getEditingElementCase()); oldSelection = (CellSelection) elementCasePane.getSelection(); elementCasePane.getGrid().setNotShowingTableSelectPane(false); + elementCasePane.setRepeatSelection(true); elementCasePane.setEditable(false); elementCasePane.repaint(10); } @@ -179,6 +191,7 @@ public class SortColumnRowPane extends JPanel implements UIObserver { elementCasePane.removeSelectionChangeListener(gridSelectionChangeListener); isAlreadyAddListener = false; elementCasePane.getGrid().setNotShowingTableSelectPane(true); + elementCasePane.setRepeatSelection(false); elementCasePane.setEditable(true); elementCasePane.repaint(); } diff --git a/designer-realize/src/main/java/com/fr/design/sort/expressionpane/CustomSequenceEditPane.java b/designer-realize/src/main/java/com/fr/design/sort/expressionpane/CustomSequenceEditPane.java index a62acc4131..c65657836b 100644 --- a/designer-realize/src/main/java/com/fr/design/sort/expressionpane/CustomSequenceEditPane.java +++ b/designer-realize/src/main/java/com/fr/design/sort/expressionpane/CustomSequenceEditPane.java @@ -5,12 +5,15 @@ import com.fr.design.gui.icontainer.UIScrollPane; import com.fr.design.gui.ilable.UILabel; import com.fr.design.gui.ilist.UIList; import com.fr.design.i18n.Toolkit; +import com.fr.design.mainframe.alphafine.listener.DocumentAdapter; import com.fr.design.mainframe.dnd.SerializableTransferable; import com.fr.design.mainframe.share.ui.base.PlaceholderTextArea; import com.fr.locale.InterProviderFactory; import com.fr.report.core.sort.sortexpression.CustomSequenceSortExpression; +import com.fr.stable.StringUtils; import javax.swing.*; +import javax.swing.event.DocumentEvent; import java.awt.*; import java.awt.datatransfer.DataFlavor; import java.awt.datatransfer.Transferable; @@ -27,6 +30,7 @@ import java.util.List; public class CustomSequenceEditPane extends BasicPane { java.util.List customSequence; + JSplitPane jSplitPane; JPanel referenceSequencePanel; JPanel editSequencePanel; JTextArea jTextArea; @@ -40,17 +44,32 @@ public class CustomSequenceEditPane extends BasicPane { this.setLayout(new BorderLayout()); initReferenceSequencePanel(); initEditSequencePanel(); + initSplitPane(); + } + + void initSplitPane() { + jSplitPane = new JSplitPane(); + this.add(jSplitPane); + jSplitPane.setOneTouchExpandable(true); + jSplitPane.setContinuousLayout(true); + jSplitPane.setOrientation(JSplitPane.HORIZONTAL_SPLIT); + jSplitPane.setLeftComponent(referenceSequencePanel); + jSplitPane.setRightComponent(editSequencePanel); + jSplitPane.setDividerSize(10); + jSplitPane.setDividerLocation(200); } void initReferenceSequencePanel() { - referenceSequencePanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); + referenceSequencePanel = new JPanel(); + referenceSequencePanel.setLayout(new BoxLayout(referenceSequencePanel, BoxLayout.Y_AXIS)); + JPanel titlePane = new JPanel(new FlowLayout(FlowLayout.LEFT)); UILabel uiLabel = new UILabel(Toolkit.i18nText("Fine-Design_Sort_Reference_Sequence")); - referenceSequencePanel.add(uiLabel); + titlePane.add(uiLabel); + referenceSequencePanel.add(titlePane); UIScrollPane uiScrollPane = new UIScrollPane(getReferenceSequenceList()); uiScrollPane.setPreferredSize(new Dimension(200, 300)); referenceSequencePanel.add(uiScrollPane); - referenceSequencePanel.setPreferredSize(new Dimension(200, 400)); - this.add(referenceSequencePanel, BorderLayout.WEST); + referenceSequencePanel.setSize(new Dimension(200, 400)); } private UIList getReferenceSequenceList() { @@ -69,18 +88,20 @@ public class CustomSequenceEditPane extends BasicPane { } void initEditSequencePanel() { - editSequencePanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); + editSequencePanel = new JPanel(); + editSequencePanel.setLayout(new BoxLayout(editSequencePanel, BoxLayout.Y_AXIS)); + JPanel titlePane = new JPanel(new FlowLayout(FlowLayout.LEFT)); UILabel uiLabel = new UILabel(Toolkit.i18nText("Fine-Design_Sort_Input_Sequence")); - editSequencePanel.add(uiLabel); + titlePane.add(uiLabel); UILabel uiLabel2 = new UILabel(Toolkit.i18nText("Fine-Design_Sort_Please_Interlace_Sequence_Elements")); uiLabel2.setForeground(Color.lightGray); - editSequencePanel.add(uiLabel2); + titlePane.add(uiLabel2); + editSequencePanel.add(titlePane); jTextArea = getTextArea(); UIScrollPane uiScrollPane = new UIScrollPane(jTextArea); uiScrollPane.setPreferredSize(new Dimension(475, 300)); editSequencePanel.add(uiScrollPane); - this.add(editSequencePanel, BorderLayout.CENTER); - + editSequencePanel.setSize(new Dimension(475, 300)); } @@ -88,6 +109,12 @@ public class CustomSequenceEditPane extends BasicPane { PlaceholderTextArea placeholderTextArea = new PlaceholderTextArea(10, 10, getPlaceholderText()); new CustomSequenceEditDropTarget(placeholderTextArea, CustomSequenceSortExpression.getReferenceCustomSequences()); placeholderTextArea.setText(CustomSequenceSortExpression.customSequenceToString(customSequence, "\n")); + placeholderTextArea.getDocument().addDocumentListener(new DocumentAdapter() { + @Override + protected void textChanged(DocumentEvent e) { + placeholderTextArea.repaint(); + } + }); return placeholderTextArea; } @@ -139,12 +166,15 @@ public class CustomSequenceEditPane extends BasicPane { DataFlavor[] dataFlavors = transferable.getTransferDataFlavors(); if (dataFlavors.length == 1) { Integer index = (Integer) transferable.getTransferData(dataFlavors[0]); - String text = ""; + JTextArea jTextArea = (JTextArea) dtde.getDropTargetContext().getComponent(); + String text = jTextArea.getText(); + if (StringUtils.isNotEmpty(text) && !text.endsWith("\n")) { + text += "\n"; + } java.util.List customSequence = customSequences.get(index); for (int i = 0; i < customSequence.size(); i++) { text += customSequence.get(i) + "\n"; } - JTextArea jTextArea = (JTextArea) dtde.getDropTargetContext().getComponent(); jTextArea.setText(text); } } catch (Exception e) { diff --git a/designer-realize/src/main/java/com/fr/design/sort/expressionpane/CustomSequencePane.java b/designer-realize/src/main/java/com/fr/design/sort/expressionpane/CustomSequencePane.java index 50344f1b64..34fca093b2 100644 --- a/designer-realize/src/main/java/com/fr/design/sort/expressionpane/CustomSequencePane.java +++ b/designer-realize/src/main/java/com/fr/design/sort/expressionpane/CustomSequencePane.java @@ -10,8 +10,8 @@ import com.fr.report.core.sort.sortexpression.CustomSequenceSortExpression; 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.util.List; @@ -29,13 +29,15 @@ public class CustomSequencePane extends JPanel { textField = new UITextField(); textField.setEditable(false); textField.setPreferredSize(new Dimension(width - 20, AbstractSortPane.PANE_COMPONENT_HEIGHT)); - Icon icon = IconUtils.readIcon("/com/fr/design/images/control/refresh.png"); + Icon icon = IconUtils.readIcon("/com/fr/design/images/sort/sequence.png"); button = new UIButton(icon); button.setBackground(Color.RED); button.setOpaque(false); button.setCursor(new Cursor(Cursor.HAND_CURSOR)); - button.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent evt) { + button.setPreferredSize(new Dimension(20, AbstractSortPane.PANE_COMPONENT_HEIGHT)); + MouseAdapter mouseAdapter = new MouseAdapter() { + @Override + public void mouseClicked(MouseEvent e) { CustomSequenceEditPane customSequenceEditPane = new CustomSequenceEditPane(customSequence); customSequenceEditPane.showWindowWithCustomSize(DesignerContext.getDesignerFrame(), new DialogActionAdapter() { @Override @@ -45,9 +47,9 @@ public class CustomSequencePane extends JPanel { } }, new Dimension(700, 400)).setVisible(true); } - }); - button.setPreferredSize(new Dimension(20, AbstractSortPane.PANE_COMPONENT_HEIGHT)); - + }; + button.addMouseListener(mouseAdapter); + textField.addMouseListener(mouseAdapter); this.add(textField); this.add(button); } diff --git a/designer-realize/src/main/java/com/fr/design/sort/header/HeaderAreaPane.java b/designer-realize/src/main/java/com/fr/design/sort/header/HeaderAreaPane.java index 31057c724b..3e1adbe48c 100644 --- a/designer-realize/src/main/java/com/fr/design/sort/header/HeaderAreaPane.java +++ b/designer-realize/src/main/java/com/fr/design/sort/header/HeaderAreaPane.java @@ -1,10 +1,14 @@ package com.fr.design.sort.header; +import com.fr.design.designer.TargetComponent; +import com.fr.design.file.HistoryTemplateListCache; import com.fr.design.gui.icombobox.UIComboBox; import com.fr.design.gui.ilable.UILabel; import com.fr.design.i18n.Toolkit; +import com.fr.design.mainframe.ElementCasePane; import com.fr.design.sort.common.AbstractSortPane; import com.fr.design.sort.common.SortColumnRowPane; +import com.fr.log.FineLoggerFactory; import com.fr.stable.ColumnRow; import javax.swing.*; @@ -43,13 +47,31 @@ public class HeaderAreaPane extends JPanel { } public void populateBean(ColumnRow columnRow, boolean showHeaderArea) { - areaJLayeredPane.populateBean(columnRow, showHeaderArea); + boolean enabled = true; + ElementCasePane elementCasePane = getCurrentElementCase(); + if (elementCasePane != null) { + enabled = elementCasePane.isSelectedOneCell(); + } + areaJLayeredPane.populateBean(columnRow, showHeaderArea, enabled); } public ColumnRow updateBean() { return areaJLayeredPane.updateBean(); } + private ElementCasePane getCurrentElementCase() { + try { + TargetComponent targetComponent + = HistoryTemplateListCache.getInstance().getCurrentEditingTemplate().getCurrentElementCasePane(); + if (targetComponent instanceof ElementCasePane) { + return (ElementCasePane) targetComponent; + } + } catch (Exception e) { + FineLoggerFactory.getLogger().error(e, e.getMessage()); + } + return null; + } + class AreaJLayeredPane extends JPanel { SortColumnRowPane columnRowPane; JLayeredPane jLayeredPane; @@ -75,6 +97,7 @@ public class HeaderAreaPane extends JPanel { setSortColumnRowPaneShow(uiComboBox.getSelectedIndex() == 1); } }); + uiComboBox.setEnabled(false); } void setSortColumnRowPaneShow(boolean show) { @@ -97,14 +120,15 @@ public class HeaderAreaPane extends JPanel { this.add(jLayeredPane); } - public void populateBean(ColumnRow columnRow, boolean showHeaderArea) { + public void populateBean(ColumnRow columnRow, boolean showHeaderArea, boolean enabled) { if (showHeaderArea) { uiComboBox.setSelectedIndex(1); } else { uiComboBox.setSelectedIndex(0); } - columnRowPane.populateBean(columnRow); + columnRowPane.populateBean(columnRow, enabled); setSortColumnRowPaneShow(uiComboBox.getSelectedIndex() == 1); + uiComboBox.setEnabled(enabled); } public ColumnRow updateBean() { diff --git a/designer-realize/src/main/java/com/fr/design/sort/header/HeaderSortRulePane.java b/designer-realize/src/main/java/com/fr/design/sort/header/HeaderSortRulePane.java index 9b1de94772..79f939639e 100644 --- a/designer-realize/src/main/java/com/fr/design/sort/header/HeaderSortRulePane.java +++ b/designer-realize/src/main/java/com/fr/design/sort/header/HeaderSortRulePane.java @@ -31,6 +31,8 @@ public class HeaderSortRulePane extends JPanel { private static final String ASC_ICON_TEMPLATE_PATH = "/com/fr/design/images/sort/asc.svg"; private static final String DES_ICON_TEMPLATE_PATH = "/com/fr/design/images/sort/des.svg"; private static final String NOSORT_ICON_TEMPLATE_PATH = "/com/fr/design/images/sort/nosort.svg"; + private static final double ICON_SCALE = SVGIcon.SYSTEM_SCALE * 1.25; + private static final int ICON_LENGTH = (int) Math.ceil(16 * ICON_SCALE); IconButton ascIconButton; IconButton desIconButton; IconButton nosortIconButton; @@ -63,8 +65,8 @@ public class HeaderSortRulePane extends JPanel { new Component[]{desUICheckBox = new UICheckBox(SortRule.DES.getDescription()), desIconButton = new IconButton(DES_ICON_TEMPLATE_PATH)}, new Component[]{nosortUICheckBox = new UICheckBox(SortRule.NO_SORT.getDescription()), nosortIconButton = new IconButton(NOSORT_ICON_TEMPLATE_PATH)}, }; - double[] rowSize = {24, 24, 24}; - double[] columnSize = {80, 30}; + double[] rowSize = {ICON_LENGTH + 10, ICON_LENGTH + 10, ICON_LENGTH + 10}; + double[] columnSize = {80, ICON_LENGTH + 10}; JPanel sortRuleItem = TableLayoutHelper.createCommonTableLayoutPane(components, rowSize, columnSize, 0); this.add(sortRuleItem, BorderLayout.CENTER); initUICheckBoxChange(ascUICheckBox, ascIconButton); @@ -125,12 +127,12 @@ public class HeaderSortRulePane extends JPanel { jLayeredPane = new JLayeredPane(); iconLabel = getIconLabel(iconTemplatePath); borderUiLabel = new UILabel(); - borderUiLabel.setSize(16, 16); + borderUiLabel.setSize(ICON_LENGTH, ICON_LENGTH); borderUiLabel.setOpaque(true); borderUiLabel.setBackground(Color.WHITE); - iconLabel.setSize(16, 16); + iconLabel.setSize(ICON_LENGTH, ICON_LENGTH); colorButton = new ColorListPane.ColorButton(Color.CYAN); - colorButton.setSize(16, 16); + colorButton.setSize(ICON_LENGTH, ICON_LENGTH); colorButton.addChangeListener(new ChangeListener() { @Override public void stateChanged(ChangeEvent e) { @@ -139,7 +141,7 @@ public class HeaderSortRulePane extends JPanel { uiObserverListener.doChange(); } }); - jLayeredPane.setPreferredSize(new Dimension(16, 16)); + jLayeredPane.setPreferredSize(new Dimension(ICON_LENGTH, ICON_LENGTH)); jLayeredPane.add(iconLabel, JLayeredPane.POPUP_LAYER); jLayeredPane.add(borderUiLabel, JLayeredPane.MODAL_LAYER); @@ -152,6 +154,14 @@ public class HeaderSortRulePane extends JPanel { refreshIconLabel(icon); } + void refreshIconLabel(BufferedImage bufferedImage) { + if (bufferedImage != null) { + this.bufferedImage = bufferedImage; + Icon icon = new SVGIcon(bufferedImage); + refreshIconLabel(icon); + } + } + void refreshIconLabel(Icon icon) { if (icon != null) { iconLabel.removeAll(); @@ -175,7 +185,7 @@ public class HeaderSortRulePane extends JPanel { String svgText = originalSvgText.replaceAll("\\{fillColor\\}", shiftColor(color)); InputStream svgInputStream = new ByteArrayInputStream(svgText.getBytes(StandardCharsets.UTF_8)); TranscoderInput input = new TranscoderInput(svgInputStream); - bufferedImage = SVGTranscoder.createImage(SVGIcon.SYSTEM_SCALE, input).getImage(); + bufferedImage = SVGTranscoder.createImage(ICON_SCALE, input).getImage(); SVGIcon svgIcon = new SVGIcon(bufferedImage); return svgIcon; } catch (Exception e) { @@ -203,12 +213,11 @@ public class HeaderSortRulePane extends JPanel { } String shiftValue(int value) { - int resultValue = (int) ((((float) value) / 255) * 99); - if (resultValue < 10) { - return "0" + resultValue; - } else { - return "" + resultValue; + String resultValue = Integer.toHexString(value); + if (resultValue.length() == 1) { + resultValue = "0" + resultValue; } + return resultValue; } private String getSvgText(InputStream inputStream) throws Exception { @@ -237,18 +246,14 @@ public class HeaderSortRulePane extends JPanel { for (SortHeader.SortItem sortItem : sortItems) { SortRule sortRule = sortItem.getSortRule(); BufferedImage bufferedImage = sortItem.getBufferedImage(); - Icon icon = null; - if (bufferedImage != null) { - icon = new SVGIcon(bufferedImage); - } if (sortRule == SortRule.ASC) { - ascIconButton.refreshIconLabel(icon); + ascIconButton.refreshIconLabel(bufferedImage); ascUICheckBox.setSelected(true); } else if (sortRule == SortRule.DES) { - desIconButton.refreshIconLabel(icon); + desIconButton.refreshIconLabel(bufferedImage); desUICheckBox.setSelected(true); } else if (sortRule == SortRule.NO_SORT) { - nosortIconButton.refreshIconLabel(icon); + nosortIconButton.refreshIconLabel(bufferedImage); nosortUICheckBox.setSelected(true); } diff --git a/designer-realize/src/main/java/com/fr/design/sort/header/SortHeaderPane.java b/designer-realize/src/main/java/com/fr/design/sort/header/SortHeaderPane.java index 0235a10fb9..b79065e331 100644 --- a/designer-realize/src/main/java/com/fr/design/sort/header/SortHeaderPane.java +++ b/designer-realize/src/main/java/com/fr/design/sort/header/SortHeaderPane.java @@ -35,15 +35,17 @@ public class SortHeaderPane extends JPanel { public void populateBean(SortHeader sortHeader, String defaultHeaderArea) { this.sortHeader = sortHeader; boolean showHeaderArea = false; - ColumnRow columnRow = null; SortHeader.SortItem[] sortItems = null; String headerArea = defaultHeaderArea; + ColumnRow columnRow = ColumnRow.valueOf(headerArea); if (sortHeader != null) { headerArea = sortHeader.getHeaderArea(); sortItems = sortHeader.getSortItems(); showHeaderArea = SortColumnRowPane.isAvailableColumnRow(ColumnRow.valueOf(headerArea)); + if (showHeaderArea) { + columnRow = ColumnRow.valueOf(headerArea); + } } - columnRow = ColumnRow.valueOf(headerArea); headerAreaPane.populateBean(columnRow, showHeaderArea); headerSettingPane.populateBean(sortItems); } From e49d512d1861fa87ea7fc73d84e42b7d5ad6732e Mon Sep 17 00:00:00 2001 From: shine Date: Wed, 22 Dec 2021 10:18:51 +0800 Subject: [PATCH 07/30] =?UTF-8?q?CHART-21877=20fix:fvs.cpt=20=E6=89=B9?= =?UTF-8?q?=E9=87=8F=E8=AE=BE=E7=BD=AE=E5=8D=95=E5=85=83=E6=A0=BC=E8=83=8C?= =?UTF-8?q?=E6=99=AF=E9=A2=9C=E8=89=B2=E5=90=8E=20=E5=8D=95=E5=85=83?= =?UTF-8?q?=E6=A0=BC=E5=AD=97=E4=BD=93=E6=98=AF=E9=BB=91=E8=89=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/fr/design/gui/style/BorderPane.java | 13 +++++++++---- .../utils/gui/AdjustWorkBookDefaultStyleUtils.java | 9 ++++++++- .../fr/design/actions/utils/ReportActionUtils.java | 5 +++-- .../cell/settingpane/AbstractCellAttrPane.java | 2 ++ .../mainframe/cell/settingpane/CellStylePane.java | 12 +++++++----- 5 files changed, 29 insertions(+), 12 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/gui/style/BorderPane.java b/designer-base/src/main/java/com/fr/design/gui/style/BorderPane.java index 9f948e7a18..a3151b2e71 100644 --- a/designer-base/src/main/java/com/fr/design/gui/style/BorderPane.java +++ b/designer-base/src/main/java/com/fr/design/gui/style/BorderPane.java @@ -17,14 +17,19 @@ import com.fr.design.gui.ilable.UILabel; import com.fr.design.layout.TableLayout; import com.fr.design.layout.TableLayoutHelper; import com.fr.design.style.color.NewColorSelectBox; - +import com.fr.design.utils.gui.AdjustWorkBookDefaultStyleUtils; import com.fr.stable.Constants; import com.fr.stable.CoreConstants; -import javax.swing.*; +import javax.swing.Icon; +import javax.swing.JPanel; +import javax.swing.SwingConstants; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; -import java.awt.*; +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Component; +import java.awt.GridLayout; import java.util.Arrays; import java.util.HashSet; import java.util.Set; @@ -198,7 +203,7 @@ public class BorderPane extends AbstractBasicStylePane implements GlobalNameObse public Style update(Style style) { if (style == null) { - style = Style.DEFAULT_STYLE; + style = AdjustWorkBookDefaultStyleUtils.adjustCellElement(Style.DEFAULT_STYLE); } if (backgroundPane.currentPane.isBackgroundChange()) { diff --git a/designer-base/src/main/java/com/fr/design/utils/gui/AdjustWorkBookDefaultStyleUtils.java b/designer-base/src/main/java/com/fr/design/utils/gui/AdjustWorkBookDefaultStyleUtils.java index a3121e36ca..bfa742f9b1 100644 --- a/designer-base/src/main/java/com/fr/design/utils/gui/AdjustWorkBookDefaultStyleUtils.java +++ b/designer-base/src/main/java/com/fr/design/utils/gui/AdjustWorkBookDefaultStyleUtils.java @@ -32,13 +32,20 @@ public class AdjustWorkBookDefaultStyleUtils { public static void adjustCellElement(CellElement cellElement) { if (DesignModeContext.isDuchampMode()) { Style style = cellElement.getStyle(); + style = adjustCellElement(style); + cellElement.setStyle(style); + } + } + + public static Style adjustCellElement(Style style) { + if (DesignModeContext.isDuchampMode()) { style = style.deriveFRFont(style.getFRFont().applyForeground(CELL_ELEMENT_FONT_FOREGROUND)); style = style.deriveBorder(0, CELL_ELEMENT_BORDER, 0, CELL_ELEMENT_BORDER, 0, CELL_ELEMENT_BORDER, 0, CELL_ELEMENT_BORDER); - cellElement.setStyle(style); } + return style; } public static Color adjustCellElementFontForeground(Color color) { diff --git a/designer-realize/src/main/java/com/fr/design/actions/utils/ReportActionUtils.java b/designer-realize/src/main/java/com/fr/design/actions/utils/ReportActionUtils.java index 2c0b73fe95..a40397b7f3 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/utils/ReportActionUtils.java +++ b/designer-realize/src/main/java/com/fr/design/actions/utils/ReportActionUtils.java @@ -4,6 +4,7 @@ import com.fr.base.Style; import com.fr.design.actions.cell.style.StyleActionInterface; import com.fr.design.mainframe.DesignOperationEvent; import com.fr.design.mainframe.ElementCasePane; +import com.fr.design.utils.gui.AdjustWorkBookDefaultStyleUtils; import com.fr.event.EventDispatcher; import com.fr.grid.selection.CellSelection; import com.fr.grid.selection.FloatSelection; @@ -15,7 +16,7 @@ import com.fr.report.cell.TemplateCellElement; import com.fr.report.elementcase.ElementCase; import com.fr.report.elementcase.TemplateElementCase; -import java.awt.*; +import java.awt.Rectangle; public class ReportActionUtils { private ReportActionUtils() { @@ -113,7 +114,7 @@ public class ReportActionUtils { CellElement editCellElement = report.getCellElement(((CellSelection) sel).getColumn(), ((CellSelection) sel).getRow()); if (editCellElement == null) { - return Style.DEFAULT_STYLE; + return AdjustWorkBookDefaultStyleUtils.adjustCellElement(Style.DEFAULT_STYLE); } //peter:直接返回当前编辑元素的Style diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/cell/settingpane/AbstractCellAttrPane.java b/designer-realize/src/main/java/com/fr/design/mainframe/cell/settingpane/AbstractCellAttrPane.java index 83ef31eaa9..358da10b5d 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/cell/settingpane/AbstractCellAttrPane.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/cell/settingpane/AbstractCellAttrPane.java @@ -2,6 +2,7 @@ package com.fr.design.mainframe.cell.settingpane; import com.fr.design.mainframe.AbstractAttrPane; import com.fr.design.mainframe.ElementCasePane; +import com.fr.design.utils.gui.AdjustWorkBookDefaultStyleUtils; import com.fr.grid.selection.CellSelection; import com.fr.grid.selection.FloatSelection; import com.fr.report.cell.DefaultTemplateCellElement; @@ -53,6 +54,7 @@ public abstract class AbstractCellAttrPane extends AbstractAttrPane { TemplateCellElement cellElement = elementCase.getTemplateCellElement(cs.getColumn(), cs.getRow()); if (cellElement == null) { cellElement = new DefaultTemplateCellElement(cs.getColumn(), cs.getRow()); + AdjustWorkBookDefaultStyleUtils.adjustCellElement(cellElement); } this.cellElement = cellElement; elementCase.addCellElement(this.cellElement); diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/cell/settingpane/CellStylePane.java b/designer-realize/src/main/java/com/fr/design/mainframe/cell/settingpane/CellStylePane.java index 049b0111ae..0130d0fad0 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/cell/settingpane/CellStylePane.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/cell/settingpane/CellStylePane.java @@ -5,16 +5,18 @@ import com.fr.design.actions.utils.ReportActionUtils; import com.fr.design.constants.UIConstants; import com.fr.design.mainframe.cell.settingpane.style.StylePane; import com.fr.design.style.BorderUtils; +import com.fr.design.utils.gui.AdjustWorkBookDefaultStyleUtils; import com.fr.design.utils.gui.GUICoreUtils; - import com.fr.report.cell.DefaultTemplateCellElement; import com.fr.report.cell.TemplateCellElement; import com.fr.report.elementcase.TemplateElementCase; -import javax.swing.*; +import javax.swing.JFrame; +import javax.swing.JPanel; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; -import java.awt.*; +import java.awt.BorderLayout; +import java.awt.Rectangle; /** * @author zhou @@ -101,12 +103,12 @@ public class CellStylePane extends AbstractCellAttrPane { TemplateCellElement cellElement = elementCase.getTemplateCellElement(column, row); if (cellElement == null) { cellElement = new DefaultTemplateCellElement(column, row); + AdjustWorkBookDefaultStyleUtils.adjustCellElement(cellElement); elementCase.addCellElement(cellElement); } Style style = cellElement.getStyle(); if (style == null) { - style = Style.DEFAULT_STYLE; - + style = AdjustWorkBookDefaultStyleUtils.adjustCellElement(Style.DEFAULT_STYLE); } style = stylePane.updateStyle(style); cellElement.setStyle(style); From 94c67746ecfa1f8a0fa888c6889ebb87d26c537e Mon Sep 17 00:00:00 2001 From: lucian Date: Wed, 22 Dec 2021 10:31:53 +0800 Subject: [PATCH 08/30] =?UTF-8?q?REPORT-64412=20=E8=BF=9E=E7=BB=AD?= =?UTF-8?q?=E9=80=89=E4=B8=AD=E4=B8=A4=E6=AC=A1=E5=90=8C=E4=B8=80=E9=80=89?= =?UTF-8?q?=E9=A1=B9=EF=BC=8C=E7=BC=96=E8=BE=91=E6=A1=86=E5=80=BC=E4=B8=8D?= =?UTF-8?q?=E5=AF=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/gui/icombobox/TableSearchTreeComboBox.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/designer-base/src/main/java/com/fr/design/gui/icombobox/TableSearchTreeComboBox.java b/designer-base/src/main/java/com/fr/design/gui/icombobox/TableSearchTreeComboBox.java index dc64ab3c0b..6b41986939 100644 --- a/designer-base/src/main/java/com/fr/design/gui/icombobox/TableSearchTreeComboBox.java +++ b/designer-base/src/main/java/com/fr/design/gui/icombobox/TableSearchTreeComboBox.java @@ -56,6 +56,13 @@ public class TableSearchTreeComboBox extends FRTreeComboBox { return super.pathToString(path); } + @Override + public void setSelectedItemString(String _name) { + super.setSelectedItemString(_name); + // 会因为连续两次选中的值一致,导致未触发编辑框联动 + this.getEditor().setItem(_name); + } + /** * 执行模糊搜索 */ From c4a9881f896408560924ca28bf7b2704c6dc702b Mon Sep 17 00:00:00 2001 From: kerry Date: Wed, 22 Dec 2021 16:12:42 +0800 Subject: [PATCH 09/30] =?UTF-8?q?REPORT-64702=E3=80=90frm=E8=AE=BE?= =?UTF-8?q?=E8=AE=A1=E5=99=A8=E7=95=8C=E9=9D=A2=E4=BF=AE=E6=94=B9=E3=80=91?= =?UTF-8?q?=E6=96=B0&=E6=97=A7=E6=A8=A1=E5=BC=8F=E4=B8=8B=EF=BC=8C?= =?UTF-8?q?=E6=96=B0=E6=8B=96=E5=85=A5=E7=9A=84=E6=8A=A5=E8=A1=A8=E5=9D=97?= =?UTF-8?q?=EF=BC=8C=E7=BB=84=E4=BB=B6=E5=B0=BA=E5=AF=B8=E6=98=AF250*150?= =?UTF-8?q?=EF=BC=8C=E8=BF=9B=E5=85=A5=E6=8A=A5=E8=A1=A8=E5=9D=97=E7=BC=96?= =?UTF-8?q?=E8=BE=91=EF=BC=8C=E6=82=AC=E6=B5=AE=E8=99=9A=E7=BA=BF=E7=9C=8B?= =?UTF-8?q?=E5=88=B0=E7=9A=84=E5=B0=BA=E5=AF=B8=E4=B9=9F=E6=98=AF250*150?= =?UTF-8?q?=EF=BC=8C=E4=BD=86=E9=80=80=E5=87=BA=E7=BC=96=E8=BE=91=EF=BC=8C?= =?UTF-8?q?=E6=8B=96=E6=8B=BD=E8=B0=83=E6=95=B4=E6=8A=A5=E8=A1=A8=E5=9D=97?= =?UTF-8?q?=E5=B0=BA=E5=AF=B8=E6=97=B6=EF=BC=8C=E8=99=9A=E7=BA=BF=E8=8C=83?= =?UTF-8?q?=E5=9B=B4=E6=AF=94=E5=88=9A=E6=89=8D=E7=9C=8B=E5=88=B0=E7=9A=84?= =?UTF-8?q?=E5=A4=A7=E4=BA=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mainframe/form/FormElementCaseDesigner.java | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/form/FormElementCaseDesigner.java b/designer-realize/src/main/java/com/fr/design/mainframe/form/FormElementCaseDesigner.java index 5be6362a4d..9d89a7cd33 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/form/FormElementCaseDesigner.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/form/FormElementCaseDesigner.java @@ -38,6 +38,7 @@ import com.fr.report.cell.CellElement; import com.fr.report.elementcase.TemplateElementCase; import com.fr.report.worksheet.FormElementCase; import com.fr.report.worksheet.WorkSheet; +import com.fr.stable.Constants; import javax.swing.JComponent; import javax.swing.JPanel; @@ -151,6 +152,7 @@ public class FormElementCaseDesigner Grid grid = this.elementCasePane != null ? this.elementCasePane.getGrid() : null; if (grid != null) { + resetGrid(grid); boolean oldTranslucent = grid.isTranslucent(); boolean oldShowExtraGridLine = grid.isShowExtraGridLine(); // 截缩图图时grid需支持半透明,不能用默认白色填充画布,否则会遮挡组件样式背景 @@ -168,6 +170,15 @@ public class FormElementCaseDesigner return image; } + private void resetGrid(Grid grid) { + grid.setResolution(Constants.DEFAULT_WEBWRITE_AND_SCREEN_RESOLUTION); + grid.updateUI(); + grid.setAdsorbHeight(0); + grid.setAdsorbWidth(0); + grid.setVerticalValue(0); + grid.setHorizontalValue(0); + } + /** * 刷新右侧属性面板 */ From ff8805aec1ccd7b1540bf4671e573a43df67f6ea Mon Sep 17 00:00:00 2001 From: "Henry.Wang" Date: Wed, 22 Dec 2021 23:27:43 +0800 Subject: [PATCH 10/30] REPORT-64506 && REPORT-64457 && REPORT-64456 && REPORT-64425 && REPORT-64422 --- .../fr/design/mainframe/AbstractAttrPane.java | 6 ++++- .../cell/AbstractDSCellEditorPane.java | 7 ++++- .../CellDSColumnSortItemPane.java | 2 +- .../design/sort/common/SortColumnRowPane.java | 1 + .../sort/common/SortUIExpandablePane.java | 26 +++++++++++++++---- 5 files changed, 34 insertions(+), 8 deletions(-) diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/AbstractAttrPane.java b/designer-realize/src/main/java/com/fr/design/mainframe/AbstractAttrPane.java index 7194700f20..82d6484e29 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/AbstractAttrPane.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/AbstractAttrPane.java @@ -66,6 +66,10 @@ public abstract class AbstractAttrPane extends AbstractAttrNoScrollPane { }); } + protected int getMaxHeight(){ + return CellElementPropertyPane.getInstance().getHeight() - TITLE_HEIGHT; + } + /** * 属性面板的滚动条和内容区域的布局管理类 */ @@ -93,7 +97,7 @@ public abstract class AbstractAttrPane extends AbstractAttrNoScrollPane { @Override public void layoutContainer(Container parent) { - maxHeight = CellElementPropertyPane.getInstance().getHeight() - TITLE_HEIGHT; + maxHeight = getMaxHeight(); if ((MAXVALUE - scrollBar.getVisibleAmount()) == 0) { beginY = 0; } else { diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/cell/AbstractDSCellEditorPane.java b/designer-realize/src/main/java/com/fr/design/mainframe/cell/AbstractDSCellEditorPane.java index 86b93a210d..7a26e53f2e 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/cell/AbstractDSCellEditorPane.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/cell/AbstractDSCellEditorPane.java @@ -12,6 +12,7 @@ import com.fr.design.mainframe.AbstractAttrPane; */ public abstract class AbstractDSCellEditorPane extends AbstractAttrPane { + private static final int FIXED_HEIGHT = 200; /** * 从面板拿数据保存 @@ -31,7 +32,11 @@ public abstract class AbstractDSCellEditorPane extends AbstractAttrPane { protected abstract AttributeChangeListener getAttributeChangeListener(); - public void addAttributeChangeListener(){ + public void addAttributeChangeListener() { this.addAttributeChangeListener(getAttributeChangeListener()); } + + protected int getMaxHeight() { + return Math.max(super.getMaxHeight() - FIXED_HEIGHT, 0); + } } diff --git a/designer-realize/src/main/java/com/fr/design/sort/celldscolumn/CellDSColumnSortItemPane.java b/designer-realize/src/main/java/com/fr/design/sort/celldscolumn/CellDSColumnSortItemPane.java index 044d284a7f..0c202fe0e2 100644 --- a/designer-realize/src/main/java/com/fr/design/sort/celldscolumn/CellDSColumnSortItemPane.java +++ b/designer-realize/src/main/java/com/fr/design/sort/celldscolumn/CellDSColumnSortItemPane.java @@ -31,7 +31,7 @@ public class CellDSColumnSortItemPane extends AbstractSortItemPane { public SortExpression updateBean() { SortExpression sortExpression = super.updateBean(); - if (sortExpression != null) { + if (sortExpression != null && sortAreaUiComboBox.getSelectedItem() != null) { sortExpression.setSortArea(sortAreaUiComboBox.getSelectedItem().toString()); } return sortExpression; diff --git a/designer-realize/src/main/java/com/fr/design/sort/common/SortColumnRowPane.java b/designer-realize/src/main/java/com/fr/design/sort/common/SortColumnRowPane.java index 851b35a8d2..016ce330f2 100644 --- a/designer-realize/src/main/java/com/fr/design/sort/common/SortColumnRowPane.java +++ b/designer-realize/src/main/java/com/fr/design/sort/common/SortColumnRowPane.java @@ -113,6 +113,7 @@ public class SortColumnRowPane extends JPanel implements UIObserver { } else { selectButton.setIcon(DISABLED_ICON); } + selectButton.setEnabled(false); refresh(); } diff --git a/designer-realize/src/main/java/com/fr/design/sort/common/SortUIExpandablePane.java b/designer-realize/src/main/java/com/fr/design/sort/common/SortUIExpandablePane.java index 3e9dece09d..3a1bbd779f 100644 --- a/designer-realize/src/main/java/com/fr/design/sort/common/SortUIExpandablePane.java +++ b/designer-realize/src/main/java/com/fr/design/sort/common/SortUIExpandablePane.java @@ -2,6 +2,8 @@ package com.fr.design.sort.common; import com.fr.base.BaseUtils; import com.fr.base.svg.IconUtils; +import com.fr.design.event.UIObserver; +import com.fr.design.event.UIObserverListener; import com.fr.design.gui.ibutton.UIButton; import com.fr.design.gui.ilable.UILabel; import com.fr.design.i18n.Toolkit; @@ -29,7 +31,7 @@ public class SortUIExpandablePane extends JPanel { this.sortGroupPane = sortGroupPane; this.contentPane = contentPane; initComponents(); - wrapPane.setBorder(BorderFactory.createLineBorder(Color.gray, 1)); + wrapPane.setBorder(BorderFactory.createLineBorder(new Color(217, 218, 221), 1)); wrapPane.setBackground(Color.WHITE); this.setLayout(new FlowLayout(FlowLayout.LEFT, 0, 5)); } @@ -45,7 +47,7 @@ public class SortUIExpandablePane extends JPanel { setContentPanelShow(!contentPane.isVisible()); } }); - headerPane.setBorder(BorderFactory.createMatteBorder(0, 0, 1, 0, Color.gray)); + headerPane.setBorder(BorderFactory.createMatteBorder(0, 0, 1, 0, new Color(217, 218, 221))); contentPane.setBorder(BorderFactory.createEmptyBorder(0, 5, 0, 5)); wrapPane.add(headerPane, BorderLayout.NORTH); wrapPane.add(contentPane, BorderLayout.CENTER); @@ -59,14 +61,15 @@ public class SortUIExpandablePane extends JPanel { headerPane.setShow(show); } - class HeaderPane extends JPanel { + class HeaderPane extends JPanel implements UIObserver { UILabel iconUiLabel; UILabel closeButton; AbstractSortGroupPane sortGroupPane; + UIObserverListener uiObserverListener; HeaderPane(AbstractSortGroupPane sortGroupPane) { this.sortGroupPane = sortGroupPane; - this.setLayout(new FlowLayout(FlowLayout.LEFT, 3, 3)); + this.setLayout(new FlowLayout(FlowLayout.LEFT, 3, 0)); initComponents(); } @@ -75,14 +78,18 @@ public class SortUIExpandablePane extends JPanel { this.add(iconUiLabel); UILabel uiLabel = new UILabel(Toolkit.i18nText("Fine-Design_Sort_Second_Sort")); this.add(uiLabel); - this.add(AbstractSortPane.createIntervalUILabel(114)); + this.add(AbstractSortPane.createIntervalUILabel(108)); closeButton = new UILabel(IconUtils.readIcon("/com/fr/design/images/control/close.png")); + closeButton.setPreferredSize(new Dimension(16, 20)); this.add(closeButton); closeButton.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { sortGroupPane.removeSortItem(1); + if (uiObserverListener != null) { + uiObserverListener.doChange(); + } } }); this.setPreferredSize(new Dimension(contentPane.sortItemPaneWidth + 7, AbstractSortPane.PANE_COMPONENT_HEIGHT)); @@ -96,6 +103,15 @@ public class SortUIExpandablePane extends JPanel { } } + @Override + public void registerChangeListener(UIObserverListener uiObserverListener) { + this.uiObserverListener = uiObserverListener; + } + + @Override + public boolean shouldResponseChangeListener() { + return true; + } } } \ No newline at end of file From 1f6752d08f1a173b3cfb384a1d29d4dd970f1372 Mon Sep 17 00:00:00 2001 From: Starryi Date: Thu, 23 Dec 2021 11:12:07 +0800 Subject: [PATCH 11/30] =?UTF-8?q?REPORT-64811=20=E4=BF=9D=E6=8C=81?= =?UTF-8?q?=E8=AE=BE=E8=AE=A1=E5=99=A8=E5=95=86=E5=9F=8E=E4=B8=8B=E8=BD=BD?= =?UTF-8?q?reu=E6=96=87=E4=BB=B6=E5=90=8D=E4=B8=AD=E7=9A=84=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 【问题原因】 使用商城组件数据中的fileLoca字段值作为本地reu文件名,该字段与oss服务器中reu文件的 文件名保持一致. 设计器在下载安装组件时,不对reu文件进行重命名操作, 即本地安装组件时,使用原本地reu 文件名,在线安装商城组件时,使用原oss服务器中reu文件名. 【改动思路】 同上 --- .../mainframe/share/ui/block/OnlineWidgetBlock.java | 11 ++++++++++- .../fr/design/mainframe/share/util/DownloadUtils.java | 2 +- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/block/OnlineWidgetBlock.java b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/block/OnlineWidgetBlock.java index cd4163b4b5..38bcd99826 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/block/OnlineWidgetBlock.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/block/OnlineWidgetBlock.java @@ -221,6 +221,14 @@ public class OnlineWidgetBlock extends AbstractOnlineWidgetBlock { } } + private String createLocalReuFilename() { + String filename = widget.getFileLoca(); + if (StringUtils.isEmpty(filename) || !filename.endsWith(".reu")) { + filename = widget.getName() + "." + widget.getUuid() + ".reu"; + } + return filename; + } + private void downLoadWidget() { CarouselStateManger.getInstance().suspend(CarouselStateManger.DOWNLOAD_COMPONENT); if (OnlineWidgetRepoPane.getInstance().isShowPackagePanel()) { @@ -242,7 +250,8 @@ public class OnlineWidgetBlock extends AbstractOnlineWidgetBlock { protected Boolean doInBackground() { String filePath; try { - filePath = DownloadUtils.download(widget.getId(), widget.getName() + "." + widget.getUuid(), process); + String filename = createLocalReuFilename(); + filePath = DownloadUtils.download(widget.getId(), filename, process); } catch (Exception e) { FineLoggerFactory.getLogger().error(e.getMessage(), e); return false; diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/util/DownloadUtils.java b/designer-form/src/main/java/com/fr/design/mainframe/share/util/DownloadUtils.java index 398cac95e6..020c03bff1 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/share/util/DownloadUtils.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/util/DownloadUtils.java @@ -80,7 +80,7 @@ public class DownloadUtils { long totalSize = entity.getContentLength(); InputStream content = entity.getContent(); - filePath = StableUtils.pathJoin(realPath, fileName + ".reu"); + filePath = StableUtils.pathJoin(realPath, fileName); StableUtils.makesureFileExist(new File(filePath)); FileOutputStream writer = new FileOutputStream(filePath); byte[] data = new byte[PluginConstants.BYTES_NUM]; From 847b2938a48db4b57a347ac39dfee6dd31d5c126 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=96=B9=E7=A3=8A?= <294531121@qq.com> Date: Thu, 23 Dec 2021 11:15:11 +0800 Subject: [PATCH 12/30] =?UTF-8?q?REPORT-64451=20=E6=9C=80=E6=96=B0?= =?UTF-8?q?=E5=AE=98=E7=BD=91jar=E5=8C=85=EF=BC=8C11.0=E8=AE=BE=E8=AE=A1?= =?UTF-8?q?=E5=99=A8=E5=88=87=E6=8D=A2=E6=88=90=E8=8B=B1=E6=96=87=EF=BC=8C?= =?UTF-8?q?=E6=96=B0=E5=BB=BA=E5=86=B3=E7=AD=96=E6=8A=A5=E8=A1=A8=E5=BC=82?= =?UTF-8?q?=E5=B8=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../design/mainframe/share/ComponentShareUtil.java | 10 +++++++++- .../fr/design/mainframe/FormWidgetDetailPane.java | 13 +++---------- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/mainframe/share/ComponentShareUtil.java b/designer-base/src/main/java/com/fr/design/mainframe/share/ComponentShareUtil.java index dbf9839935..cec7fbc8fc 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/share/ComponentShareUtil.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/share/ComponentShareUtil.java @@ -2,11 +2,14 @@ package com.fr.design.mainframe.share; import com.fr.design.DesignerEnvManager; import com.fr.design.file.HistoryTemplateListCache; +import com.fr.design.locale.impl.ShowOnlineWidgetMark; import com.fr.design.mainframe.JTemplate; import com.fr.design.mainframe.reuse.ComponentReuseNotificationInfo; import com.fr.form.share.constants.ComponentPath; import com.fr.form.share.group.filter.ReuFilter; import com.fr.design.DesignerCloudURLManager; +import com.fr.general.locale.LocaleCenter; +import com.fr.general.locale.LocaleMark; import com.fr.workspace.WorkContext; /** @@ -23,7 +26,12 @@ public class ComponentShareUtil { * @return */ public static boolean needSwitch2OnlineTab() { - return DesignerCloudURLManager.getInstance().isConnected() && !hasTouched() && isCurrentTplNewCreate(); + return DesignerCloudURLManager.getInstance().isConnected() && !hasTouched() && isCurrentTplNewCreate() && isShowOnlineWidgetRepoPane(); + } + + public static boolean isShowOnlineWidgetRepoPane() { + LocaleMark localeMark = LocaleCenter.getMark(ShowOnlineWidgetMark.class); + return localeMark.getValue(); } /** diff --git a/designer-form/src/main/java/com/fr/design/mainframe/FormWidgetDetailPane.java b/designer-form/src/main/java/com/fr/design/mainframe/FormWidgetDetailPane.java index 93427ab2bb..5453ca61da 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/FormWidgetDetailPane.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/FormWidgetDetailPane.java @@ -6,13 +6,11 @@ import com.fr.design.gui.ibutton.UIHeadGroup; import com.fr.design.gui.ilable.UILabel; import com.fr.design.i18n.Toolkit; import com.fr.design.layout.FRGUIPaneFactory; -import com.fr.design.locale.impl.ShowOnlineWidgetMark; -import com.fr.design.mainframe.share.collect.ComponentCollector; import com.fr.design.mainframe.share.ComponentShareUtil; +import com.fr.design.mainframe.share.collect.ComponentCollector; import com.fr.design.mainframe.share.ui.local.LocalWidgetRepoPane; import com.fr.design.mainframe.share.ui.online.OnlineWidgetRepoPane; -import com.fr.general.locale.LocaleCenter; -import com.fr.general.locale.LocaleMark; + import javax.swing.BorderFactory; import javax.swing.Icon; import javax.swing.JPanel; @@ -190,14 +188,9 @@ public class FormWidgetDetailPane extends FormDockView { private void initPaneList() { paneList = new ArrayList<>(); paneList.add(LocalWidgetRepoPane.getInstance()); - if (isShowOnlineWidgetRepoPane()) { + if (ComponentShareUtil.isShowOnlineWidgetRepoPane()) { OnlineWidgetRepoPane.getInstance().refresh(); paneList.add(OnlineWidgetRepoPane.getInstance()); } } - - private boolean isShowOnlineWidgetRepoPane() { - LocaleMark localeMark = LocaleCenter.getMark(ShowOnlineWidgetMark.class); - return localeMark.getValue(); - } } From 79e42b26a4d35178ea088222bf5c43f0ff7328d3 Mon Sep 17 00:00:00 2001 From: Starryi Date: Thu, 23 Dec 2021 14:03:15 +0800 Subject: [PATCH 13/30] =?UTF-8?q?REPORT-64741=20=E3=80=90=E7=BB=84?= =?UTF-8?q?=E4=BB=B6=E5=8F=AF=E6=9B=B4=E6=96=B0=E6=8F=90=E9=86=92=E3=80=91?= =?UTF-8?q?=E7=BB=84=E4=BB=B6=E5=A4=8D=E7=94=A8-=E8=AE=BE=E8=AE=A1?= =?UTF-8?q?=E5=99=A8=E7=AB=AF=E5=AE=89=E8=A3=85=E8=AE=BE=E8=AE=A1=E5=99=A8?= =?UTF-8?q?=E7=89=88=E6=9C=AC=E9=AB=98=E4=BA=8E=E5=BD=93=E5=89=8D=E8=AE=BE?= =?UTF-8?q?=E8=AE=A1=E5=99=A8=E7=89=88=E6=9C=AC=E7=9A=84=E7=BB=84=E4=BB=B6?= =?UTF-8?q?=E7=9A=84=E6=83=85=E5=86=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 【问题原因】 1. 重新确定了组件是否可以被安装的规则。 安装新组件时,如果之前没有安装过该UID的组件,则允许安装; 否则将会比较新旧组件的兼容性和版本高低,以确定是否安装新组件。 优先满足兼容性需求,兼容性相同时,再考虑组件版本. 兼容 + 高版本 > 兼容 + 低版本 > 不兼容 + 高版本 > 不兼容 + 低版本 2. 安装新的组件reu时,删除组内旧的组件reu文件 【改动思路】 同上 --- .../fr/design/mainframe/share/ui/block/OnlineWidgetBlock.java | 2 +- .../java/com/fr/design/mainframe/share/util/InstallUtils.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/block/OnlineWidgetBlock.java b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/block/OnlineWidgetBlock.java index b8cb0e6788..646a4c8634 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/block/OnlineWidgetBlock.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/block/OnlineWidgetBlock.java @@ -179,7 +179,7 @@ public class OnlineWidgetBlock extends AbstractOnlineWidgetBlock { //安装 File file = new File(filePath); try { - if (file.exists() && getDefaultGroup().installModule(file)) { + if (file.exists() && getDefaultGroup().installUniqueIdModule(file)) { ShareUtils.recordInstallTime(file.getName(), System.currentTimeMillis()); ComponentCollector.getInstance().collectCmpDownLoad(widget.getUuid()); } diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/util/InstallUtils.java b/designer-form/src/main/java/com/fr/design/mainframe/share/util/InstallUtils.java index 610f688a46..b3c711c01a 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/share/util/InstallUtils.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/util/InstallUtils.java @@ -112,7 +112,7 @@ public class InstallUtils { private static boolean installReuFile(Group group, File chosenFile, long installTime) { try { - if (!group.installModule(chosenFile)) { + if (!group.installUniqueIdModule(chosenFile)) { return false; } ShareUtils.recordInstallTime(chosenFile.getName(), installTime); From 0376e4742a8a7cbcf05f458c640e39d2a7d5b603 Mon Sep 17 00:00:00 2001 From: Starryi Date: Thu, 23 Dec 2021 11:12:07 +0800 Subject: [PATCH 14/30] =?UTF-8?q?REPORT-64811=20=E4=BF=9D=E6=8C=81?= =?UTF-8?q?=E8=AE=BE=E8=AE=A1=E5=99=A8=E5=95=86=E5=9F=8E=E4=B8=8B=E8=BD=BD?= =?UTF-8?q?reu=E6=96=87=E4=BB=B6=E5=90=8D=E4=B8=AD=E7=9A=84=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 【问题原因】 使用商城组件数据中的fileLoca字段值作为本地reu文件名,该字段与oss服务器中reu文件的 文件名保持一致. 设计器在下载安装组件时,不对reu文件进行重命名操作, 即本地安装组件时,使用原本地reu 文件名,在线安装商城组件时,使用原oss服务器中reu文件名. 【改动思路】 同上 --- .../mainframe/share/ui/block/OnlineWidgetBlock.java | 11 ++++++++++- .../fr/design/mainframe/share/util/DownloadUtils.java | 2 +- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/block/OnlineWidgetBlock.java b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/block/OnlineWidgetBlock.java index 646a4c8634..74651ccae7 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/block/OnlineWidgetBlock.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/block/OnlineWidgetBlock.java @@ -150,6 +150,14 @@ public class OnlineWidgetBlock extends AbstractOnlineWidgetBlock { } } + private String createLocalReuFilename() { + String filename = widget.getFileLoca(); + if (StringUtils.isEmpty(filename) || !filename.endsWith(".reu")) { + filename = widget.getName() + "." + widget.getUuid() + ".reu"; + } + return filename; + } + private void downLoadWidget() { if (OnlineWidgetRepoPane.getInstance().isShowPackagePanel()) { ComponentCollector.getInstance().collectDownloadPktNum(); @@ -170,7 +178,8 @@ public class OnlineWidgetBlock extends AbstractOnlineWidgetBlock { protected Boolean doInBackground() { String filePath; try { - filePath = DownloadUtils.download(widget.getId(), widget.getName() + "." + widget.getUuid(), process); + String filename = createLocalReuFilename(); + filePath = DownloadUtils.download(widget.getId(), filename, process); } catch (Exception e) { FineLoggerFactory.getLogger().error(e.getMessage(), e); return false; diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/util/DownloadUtils.java b/designer-form/src/main/java/com/fr/design/mainframe/share/util/DownloadUtils.java index 96c2cc28c6..18cb938387 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/share/util/DownloadUtils.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/util/DownloadUtils.java @@ -67,7 +67,7 @@ public class DownloadUtils { long totalSize = entity.getContentLength(); InputStream content = entity.getContent(); - filePath = StableUtils.pathJoin(realPath, fileName + ".reu"); + filePath = StableUtils.pathJoin(realPath, fileName); StableUtils.makesureFileExist(new File(filePath)); FileOutputStream writer = new FileOutputStream(filePath); byte[] data = new byte[PluginConstants.BYTES_NUM]; From 74d7f9cd4d02913b8885b2da6df5acf5c7207077 Mon Sep 17 00:00:00 2001 From: Hoky <303455184@qq.com> Date: Thu, 23 Dec 2021 14:38:20 +0800 Subject: [PATCH 15/30] =?UTF-8?q?REPORT-64601=20=E5=85=AC=E5=BC=8F?= =?UTF-8?q?=E7=BC=96=E8=BE=91=E5=99=A8=E9=A6=96=E6=AC=A1=E8=BF=9B=E5=85=A5?= =?UTF-8?q?=E7=9A=84=E6=97=B6=E5=80=99=E5=85=89=E6=A0=87=E4=BD=8D=E7=BD=AE?= =?UTF-8?q?=E4=B8=8D=E6=AD=A3=E7=A1=AE=201.=E5=8A=A0=E8=BD=BD=E5=AE=8C?= =?UTF-8?q?=E5=85=AC=E5=BC=8F=E7=BC=96=E8=BE=91=E5=99=A8=E5=90=8E=E5=BC=82?= =?UTF-8?q?=E6=AD=A5=E8=AF=B7=E6=B1=82=E4=B8=80=E4=B8=8B=E5=85=89=E6=A0=87?= =?UTF-8?q?=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/fr/design/formula/FormulaPane.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/designer-base/src/main/java/com/fr/design/formula/FormulaPane.java b/designer-base/src/main/java/com/fr/design/formula/FormulaPane.java index 27018e6e01..5b4842cfe0 100644 --- a/designer-base/src/main/java/com/fr/design/formula/FormulaPane.java +++ b/designer-base/src/main/java/com/fr/design/formula/FormulaPane.java @@ -7,6 +7,7 @@ import com.fr.base.ParameterMapNameSpace; import com.fr.base.TableDataNameSpace; import com.fr.base.Utils; import com.fr.base.io.IOFile; +import com.fr.concurrent.NamedThreadFactory; import com.fr.data.TableDataSource; import com.fr.design.actions.UpdateAction; import com.fr.design.border.UIRoundedBorder; @@ -115,6 +116,8 @@ import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; /** * 公式编辑面板 @@ -151,6 +154,7 @@ public class FormulaPane extends BasicPane implements KeyListener, UIFormula { private FormulaPaneAutoCompletion autoCompletion; private DefaultCompletionProvider completionProvider; private static final Map PARAM_PREFIX_MAP = new HashMap<>(); + private ExecutorService executorService = Executors.newCachedThreadPool(new NamedThreadFactory("formula-pane-refocus")); public FormulaPane() { initComponents(); @@ -290,6 +294,19 @@ public class FormulaPane extends BasicPane implements KeyListener, UIFormula { initTextPane(); initTipsPane(); initVariableTreeAndDescriptionArea(); + refocusInWindow(); + } + + private void refocusInWindow() { + executorService.execute(() -> { + try { + Thread.sleep(100); + formulaTextArea.requestFocusInWindow(); + } catch (Exception e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + } + }); + executorService.shutdown(); } private void initVariableTreeAndDescriptionArea() { From 79bf7e442f7108f96e2769ffb0bceb487952476d Mon Sep 17 00:00:00 2001 From: Hoky <303455184@qq.com> Date: Thu, 23 Dec 2021 14:44:32 +0800 Subject: [PATCH 16/30] =?UTF-8?q?REPORT-64601=20=E5=85=AC=E5=BC=8F?= =?UTF-8?q?=E7=BC=96=E8=BE=91=E5=99=A8=E9=A6=96=E6=AC=A1=E8=BF=9B=E5=85=A5?= =?UTF-8?q?=E7=9A=84=E6=97=B6=E5=80=99=E5=85=89=E6=A0=87=E4=BD=8D=E7=BD=AE?= =?UTF-8?q?=E4=B8=8D=E6=AD=A3=E7=A1=AE=201.=E4=BF=AE=E6=94=B9=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/fr/design/formula/FormulaPane.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/designer-base/src/main/java/com/fr/design/formula/FormulaPane.java b/designer-base/src/main/java/com/fr/design/formula/FormulaPane.java index 5b4842cfe0..60d324112b 100644 --- a/designer-base/src/main/java/com/fr/design/formula/FormulaPane.java +++ b/designer-base/src/main/java/com/fr/design/formula/FormulaPane.java @@ -154,7 +154,6 @@ public class FormulaPane extends BasicPane implements KeyListener, UIFormula { private FormulaPaneAutoCompletion autoCompletion; private DefaultCompletionProvider completionProvider; private static final Map PARAM_PREFIX_MAP = new HashMap<>(); - private ExecutorService executorService = Executors.newCachedThreadPool(new NamedThreadFactory("formula-pane-refocus")); public FormulaPane() { initComponents(); @@ -298,6 +297,7 @@ public class FormulaPane extends BasicPane implements KeyListener, UIFormula { } private void refocusInWindow() { + ExecutorService executorService = Executors.newCachedThreadPool(new NamedThreadFactory("formula-pane-refocus")); executorService.execute(() -> { try { Thread.sleep(100); From 8d46130275772012f8b8b859db8157cba50ccf60 Mon Sep 17 00:00:00 2001 From: pengda Date: Thu, 23 Dec 2021 15:23:26 +0800 Subject: [PATCH 17/30] =?UTF-8?q?CHART-22211=20=E7=94=98=E7=89=B9=E5=9B=BE?= =?UTF-8?q?=E7=94=A8=E6=96=87=E4=BB=B6=E6=95=B0=E6=8D=AE=E9=9B=86=E6=97=A5?= =?UTF-8?q?=E6=9C=9F=E6=98=BE=E7=A4=BA=E5=BC=82=E5=B8=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../data/component/GanttTableDataContentPane.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/designer-chart/src/main/java/com/fr/van/chart/gantt/designer/data/data/component/GanttTableDataContentPane.java b/designer-chart/src/main/java/com/fr/van/chart/gantt/designer/data/data/component/GanttTableDataContentPane.java index b8a2001147..82bb26e438 100644 --- a/designer-chart/src/main/java/com/fr/van/chart/gantt/designer/data/data/component/GanttTableDataContentPane.java +++ b/designer-chart/src/main/java/com/fr/van/chart/gantt/designer/data/data/component/GanttTableDataContentPane.java @@ -93,13 +93,13 @@ public class GanttTableDataContentPane extends AbstractTableDataContentPane{ ganttDefinition.setEndTime(endTime == null ? StringUtils.EMPTY : String.valueOf(endTime)); Object markTime = markerTimeComboBox.getSelectedItem(); - ganttDefinition.setMarkTime(isNoneObject(markTime) ? StringUtils.EMPTY : String.valueOf(markTime)); + ganttDefinition.setMarkTime(isNoneObject(markTime) ? null : String.valueOf(markTime)); Object process = processComboBox.getSelectedItem(); - ganttDefinition.setProgress(isNoneObject(process) ? StringUtils.EMPTY : String.valueOf(process)); + ganttDefinition.setProgress(isNoneObject(process) ? null : String.valueOf(process)); Object taskID = taskIDComboBox.getSelectedItem(); - ganttDefinition.setLinkID(isNoneObject(taskID) ? StringUtils.EMPTY : String.valueOf(taskID)); + ganttDefinition.setLinkID(isNoneObject(taskID) ? null : String.valueOf(taskID)); } private boolean isNoneObject(Object markTime) { @@ -117,9 +117,9 @@ public class GanttTableDataContentPane extends AbstractTableDataContentPane{ seriesComboBox.setSelectedItem(ganttDefinition.getSeriesName()); startTimeComboBox.setSelectedItem(ganttDefinition.getStartTime()); endTimeComboBox.setSelectedItem(ganttDefinition.getEndTime()); - markerTimeComboBox.setSelectedItem(StringUtils.isEmpty(ganttDefinition.getMarkTime()) ? NONE : ganttDefinition.getMarkTime()); - processComboBox.setSelectedItem(StringUtils.isEmpty(ganttDefinition.getProgress()) ? NONE : ganttDefinition.getProgress()); - taskIDComboBox.setSelectedItem(StringUtils.isEmpty(ganttDefinition.getLinkID()) ? NONE : ganttDefinition.getLinkID()); + markerTimeComboBox.setSelectedItem(ganttDefinition.getMarkTime() == null ? NONE : ganttDefinition.getMarkTime()); + processComboBox.setSelectedItem(ganttDefinition.getProgress() == null ? NONE : ganttDefinition.getProgress()); + taskIDComboBox.setSelectedItem(ganttDefinition.getLinkID() == null ? NONE : ganttDefinition.getLinkID()); } } From 1977aa29d38702c832596ff621f5efc750dfaec4 Mon Sep 17 00:00:00 2001 From: Hoky <303455184@qq.com> Date: Thu, 23 Dec 2021 16:03:39 +0800 Subject: [PATCH 18/30] =?UTF-8?q?REPORT-64601=20=E5=85=AC=E5=BC=8F?= =?UTF-8?q?=E7=BC=96=E8=BE=91=E5=99=A8=E9=A6=96=E6=AC=A1=E8=BF=9B=E5=85=A5?= =?UTF-8?q?=E7=9A=84=E6=97=B6=E5=80=99=E5=85=89=E6=A0=87=E4=BD=8D=E7=BD=AE?= =?UTF-8?q?=E4=B8=8D=E6=AD=A3=E7=A1=AE=201.=E6=94=BE=E5=88=B0swing?= =?UTF-8?q?=E6=89=A7=E8=A1=8C=E9=98=9F=E5=88=97=E9=98=9F=E5=B0=BE=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/fr/design/formula/FormulaPane.java | 16 ++-------------- 1 file changed, 2 insertions(+), 14 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/formula/FormulaPane.java b/designer-base/src/main/java/com/fr/design/formula/FormulaPane.java index 60d324112b..74bf3fe76f 100644 --- a/designer-base/src/main/java/com/fr/design/formula/FormulaPane.java +++ b/designer-base/src/main/java/com/fr/design/formula/FormulaPane.java @@ -7,7 +7,6 @@ import com.fr.base.ParameterMapNameSpace; import com.fr.base.TableDataNameSpace; import com.fr.base.Utils; import com.fr.base.io.IOFile; -import com.fr.concurrent.NamedThreadFactory; import com.fr.data.TableDataSource; import com.fr.design.actions.UpdateAction; import com.fr.design.border.UIRoundedBorder; @@ -116,8 +115,6 @@ import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; /** * 公式编辑面板 @@ -296,17 +293,8 @@ public class FormulaPane extends BasicPane implements KeyListener, UIFormula { refocusInWindow(); } - private void refocusInWindow() { - ExecutorService executorService = Executors.newCachedThreadPool(new NamedThreadFactory("formula-pane-refocus")); - executorService.execute(() -> { - try { - Thread.sleep(100); - formulaTextArea.requestFocusInWindow(); - } catch (Exception e) { - FineLoggerFactory.getLogger().error(e.getMessage(), e); - } - }); - executorService.shutdown(); + public void refocusInWindow() { + SwingUtilities.invokeLater(() -> formulaTextArea.requestFocusInWindow()); } private void initVariableTreeAndDescriptionArea() { From 82613a5566b467ede02191dedadcd5fe242073ba Mon Sep 17 00:00:00 2001 From: shine Date: Fri, 24 Dec 2021 10:34:41 +0800 Subject: [PATCH 19/30] =?UTF-8?q?=E5=90=88=E5=B9=B6=E5=86=B2=E7=AA=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/mainframe/cell/settingpane/CellStylePane.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/cell/settingpane/CellStylePane.java b/designer-realize/src/main/java/com/fr/design/mainframe/cell/settingpane/CellStylePane.java index 2d7d207a04..ec3c1bd05c 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/cell/settingpane/CellStylePane.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/cell/settingpane/CellStylePane.java @@ -119,9 +119,6 @@ public class CellStylePane extends AbstractCellAttrPane { elementCase.addCellElement(cellElement); } Style style = stylePane.updateBean(); - if (style == null) { - style = AdjustWorkBookDefaultStyleUtils.adjustCellElement(Style.DEFAULT_STYLE); - } cellElement.setStyle(style); } }); From a0c207e574feb3dbe703fc918acc9f3d40c26fe7 Mon Sep 17 00:00:00 2001 From: Starryi Date: Fri, 24 Dec 2021 12:15:35 +0800 Subject: [PATCH 20/30] =?UTF-8?q?REPORT-64733=20=E3=80=90=E8=A7=86?= =?UTF-8?q?=E8=A7=89=E9=AA=8C=E6=94=B6=E3=80=91=E6=A0=B7=E5=BC=8F=E6=9B=B4?= =?UTF-8?q?=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 【问题原因】 1. 更新单元格样式预览面板上的马赛克效果 2. 更新主题样式列表面板的选中效果 【改动思路】 同上 --- .../cell/CellRectangleStylePreviewPane.java | 70 ++++++++++++++++++ .../fr/design/cell/CellStylePreviewPane.java | 45 +---------- .../theme/ThemedCellStyleListPane.java | 23 ++++-- .../design/images/transparent_background.png | Bin 17319 -> 37392 bytes 4 files changed, 88 insertions(+), 50 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/cell/CellRectangleStylePreviewPane.java b/designer-base/src/main/java/com/fr/design/cell/CellRectangleStylePreviewPane.java index f23b5b0785..015fecee9d 100644 --- a/designer-base/src/main/java/com/fr/design/cell/CellRectangleStylePreviewPane.java +++ b/designer-base/src/main/java/com/fr/design/cell/CellRectangleStylePreviewPane.java @@ -4,11 +4,19 @@ import com.fr.base.CellBorderSourceFlag; import com.fr.base.CellBorderStyle; import com.fr.base.Style; import com.fr.design.mainframe.theme.utils.DefaultThemedTemplateCellElementCase; +import com.fr.general.IOUtils; import com.fr.report.cell.TemplateCellElement; import javax.swing.JPanel; +import java.awt.AlphaComposite; +import java.awt.Color; +import java.awt.Composite; import java.awt.Dimension; +import java.awt.Graphics; +import java.awt.Graphics2D; import java.awt.GridLayout; +import java.awt.RenderingHints; +import java.awt.image.BufferedImage; /** * @author Starryi @@ -16,6 +24,11 @@ import java.awt.GridLayout; * Created by Starryi on 2021/9/3 */ public class CellRectangleStylePreviewPane extends JPanel { + + private static final BufferedImage transparentBackgroundImage = IOUtils.readImage("/com/fr/design/images/transparent_background.png"); + private final float transparentBackgroundWidth; + private final float transparentBackgroundHeight; + private static final int ROW_COUNT = 2; private static final int COLUMN_COUNT = 2; @@ -24,7 +37,12 @@ public class CellRectangleStylePreviewPane extends JPanel { private final CellStylePreviewPane[][] cellStylePreviewPaneGrid = new CellStylePreviewPane[ROW_COUNT][COLUMN_COUNT]; public CellRectangleStylePreviewPane(boolean supportInnerBorder) { + transparentBackgroundWidth = transparentBackgroundImage.getWidth(null); + transparentBackgroundHeight = transparentBackgroundImage.getHeight(null); + setLayout(new GridLayout(2, 2)); + setOpaque(false); + setBackground(null); for (int r = 0; r < ROW_COUNT; r++) { for (int c = 0; c < COLUMN_COUNT; c++) { @@ -101,4 +119,56 @@ public class CellRectangleStylePreviewPane extends JPanel { return new Dimension(width, height); } + + @Override + public void paint(Graphics g) { + Graphics2D g2d = (Graphics2D) g; + g2d.clearRect(0, 0, getWidth(), getHeight()); + + g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); + g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON); + + paintTransparentBackground((Graphics2D) g, cellElementGrid[0][0].getStyle()); + + g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_OFF); + g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_OFF); + + super.paint(g); + } + + private void paintTransparentBackground(Graphics2D g2d, Style style) { + float alpha = computeTransparentBackgroundAlpha(style); + + float scaleWidth = 1.0F * getWidth() / transparentBackgroundWidth; + float scaleHeight = 1.0F * getHeight() / transparentBackgroundHeight; + float maxScale = Math.max(scaleWidth, scaleHeight); + + if (maxScale <= 1) { + scaleWidth = scaleHeight = 1; + } else { + scaleHeight = scaleWidth = maxScale; + } + + Composite oldComposite = g2d.getComposite(); + g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, alpha)); + g2d.drawImage(transparentBackgroundImage, 0, 0, (int) (transparentBackgroundWidth * scaleWidth), (int) (transparentBackgroundHeight * scaleHeight), null); + g2d.setComposite(oldComposite); + } + + private float computeTextColorBrightness(Style style) { + Color fontColor = style.getFRFont().getForeground(); + return fontColor.getRed() * 0.299F + fontColor.getGreen() * 0.587F + fontColor.getBlue() * 0.114F; + } + + private float computeTransparentBackgroundAlpha(Style style) { + float textBrightness = computeTextColorBrightness(style); + + float alpha = 1.0F; + if (textBrightness < 50) { + alpha = 0.2F; + } else if (textBrightness < 160){ + alpha = 0.5F; + } + return alpha; + } } diff --git a/designer-base/src/main/java/com/fr/design/cell/CellStylePreviewPane.java b/designer-base/src/main/java/com/fr/design/cell/CellStylePreviewPane.java index fb039fa4ab..b7e43c38cd 100644 --- a/designer-base/src/main/java/com/fr/design/cell/CellStylePreviewPane.java +++ b/designer-base/src/main/java/com/fr/design/cell/CellStylePreviewPane.java @@ -30,15 +30,10 @@ import java.util.List; public class CellStylePreviewPane extends JPanel { public static final int MINIMUM_HEIGHT = 40; - private static final BufferedImage transparentBackgroundImage = IOUtils.readImage("/com/fr/design/images/transparent_background.png"); - private final float transparentBackgroundWidth; - private final float transparentBackgroundHeight; private String paintText = "Report"; private Style style = Style.DEFAULT_STYLE; public CellStylePreviewPane() { - transparentBackgroundWidth = transparentBackgroundImage.getWidth(null); - transparentBackgroundHeight = transparentBackgroundImage.getHeight(null); setPreferredSize(new Dimension(0, 0)); } @@ -60,53 +55,15 @@ public class CellStylePreviewPane extends JPanel { @Override public void paint(Graphics g) { Graphics2D g2d = (Graphics2D) g; - g.clearRect(0, 0, getWidth(), getHeight()); g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON); - paintTransparentBackground(g2d, style); paintCellStyle(g2d, style); g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_OFF); g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_OFF); } - private void paintTransparentBackground(Graphics2D g2d, Style style) { - float alpha = computeTransparentBackgroundAlpha(style); - - float scaleWidth = 1.0F * getWidth() / transparentBackgroundWidth; - float scaleHeight = 1.0F * getHeight() / transparentBackgroundHeight; - float maxScale = Math.max(scaleWidth, scaleHeight); - - if (maxScale <= 1) { - scaleWidth = scaleHeight = 1; - } else { - scaleHeight = scaleWidth = maxScale; - } - - Composite oldComposite = g2d.getComposite(); - g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, alpha)); - g2d.drawImage(transparentBackgroundImage, 0, 0, (int) (transparentBackgroundWidth * scaleWidth), (int) (transparentBackgroundHeight * scaleHeight), null); - g2d.setComposite(oldComposite); - } - - private float computeTextColorBrightness(Style style) { - Color fontColor = style.getFRFont().getForeground(); - return fontColor.getRed() * 0.299F + fontColor.getGreen() * 0.587F + fontColor.getBlue() * 0.114F; - } - - private float computeTransparentBackgroundAlpha(Style style) { - float textBrightness = computeTextColorBrightness(style); - - float alpha = 1.0F; - if (textBrightness < 50) { - alpha = 0.2F; - } else if (textBrightness < 160){ - alpha = 0.5F; - } - return alpha; - } - private void paintCellStyle(Graphics2D g2d, Style style) { int resolution = ScreenResolution.getScreenResolution(); @@ -156,7 +113,7 @@ public class CellStylePreviewPane extends JPanel { final int textLineHeight = metrics.getHeight(); final double textLineSpacing = PT.pt2pix(style.getLineSpacing(), resolution); - List textLineList = BaseUtils.getLineTextList(paintText, style, rfont, height, width, resolution); + List textLineList = BaseUtils.getLineTextList(paintText, style, rfont, height, width, resolution); double textLinesHeight = textLineList.size() * textLineHeight + Math.max(0, textLineList.size() - 1) * textLineSpacing; diff --git a/designer-base/src/main/java/com/fr/design/mainframe/theme/ThemedCellStyleListPane.java b/designer-base/src/main/java/com/fr/design/mainframe/theme/ThemedCellStyleListPane.java index 92e7548b55..b3362e5fb0 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/theme/ThemedCellStyleListPane.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/theme/ThemedCellStyleListPane.java @@ -11,9 +11,11 @@ import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.mainframe.DesignerBean; import com.fr.design.mainframe.JTemplate; import com.fr.general.ComparatorUtils; +import com.fr.general.IOUtils; import javax.swing.BorderFactory; import javax.swing.DefaultListModel; +import javax.swing.Icon; import javax.swing.JList; import javax.swing.JPanel; import javax.swing.ListCellRenderer; @@ -24,6 +26,7 @@ import javax.swing.event.ListSelectionListener; import java.awt.BorderLayout; import java.awt.Component; import java.awt.Dimension; +import java.awt.Graphics; import java.io.Serializable; import java.util.List; @@ -112,32 +115,40 @@ public class ThemedCellStyleListPane extends FurtherBasicBeanPane, Serializable { - private final UIRadioButton button; + private static final Icon selectedMarkIcon = IOUtils.readIcon("/com/fr/design/form/images/marked.png"); + private final CellRectangleStylePreviewPane previewArea; + private boolean selected = false; public RadioButtonListCellRangeRenderer(boolean supportInnerBorder) { super(); setLayout(new BorderLayout(5, 0)); setBorder(BorderFactory.createEmptyBorder(5, 0, 5, 0)); - button = new UIRadioButton(); - button.setBorder(BorderFactory.createEmptyBorder()); previewArea = new CellRectangleStylePreviewPane(supportInnerBorder); - add(button, BorderLayout.WEST); add(previewArea, BorderLayout.CENTER); } @Override public Component getListCellRendererComponent(JList list, ThemedCellStyle value, int index, boolean isSelected, boolean cellHasFocus) { - button.setSelected(isSelected); + this.selected = isSelected; previewArea.setPlainText(value.getName()); previewArea.setStyle(value.getStyle(), value.getCellBorderStyle()); - int preferredWidth = list.getWidth() - 15 - button.getPreferredSize().width; + int preferredWidth = list.getWidth() - 15; preferredWidth = Math.max(0, preferredWidth); int preferredHeight = 0; previewArea.setPreferredSize(new Dimension(preferredWidth, preferredHeight)); return this; } + + @Override + public void paint(Graphics g) { + super.paint(g); + + if (selected) { + selectedMarkIcon.paintIcon(this, g, getWidth() - selectedMarkIcon.getIconWidth(), 5); + } + } } } \ No newline at end of file diff --git a/designer-base/src/main/resources/com/fr/design/images/transparent_background.png b/designer-base/src/main/resources/com/fr/design/images/transparent_background.png index 4f942536f8fe729157ba36a8bd37add0bf1f7ca5..61557d0a808f9bdcd63713b5ba0db246c026e9fa 100644 GIT binary patch literal 37392 zcma&Odpy(s|Nl>lPN-BWOhr*bDv@ngNz;iW$#F^%(o)%h*>Z>+vP1{TR4U40j!_#U zhvm5Be3~)LVY8DB+wk4%{rP?W`hMQ8%kQ5(cX{sld|sZ1$MgQU-LLoCeQ}rVp{nb5 ztyfS`P(5dN=8A&C>QMQ2%vxpn=k~syF!^G&->FNd6cmc^8)P@uC@7p%ICtjMRg@yT z(*5C>RZG z!?Wl@;lrL~sxI!)1Dx)cymWpr0!w%HfWh2rOHmjMd)GZU9QYN*+tBu7#6F9|iBP&1 z9h;e*oxS<03qI4-RDM`&iKVu?$KLVu^z?#t0KH1e5{Ky7QFE&CLf6r^^S@I<_Hmab zJ(1a%#}`&`OSvzQvGoMX4#1ML$!qy9!pv4Q@-BMbeIJ*xGCz#t#_U?WQL@aISSNY5@N)5buL%pI-@;bi;O+t+`PQFZq@czHEp zvb@IOl%;NG9bMhPj`tU}pEkee$F4#@xD&km!T^q_uv;WdR}d&CRSsi^p_z=-M9>OQejG{KDh)N zGn0}(KV~+sdjC0NX*ukN!=cw3-YRcdY4n*5RQg=L3bnF~AI}&vaK@9FRd%kT>s*wY z0!;KqWvuACldo4YwKMk?VU+mYNi0f|9#Y-=0~cNrV*9r8x;yvs*m7t{h;7#=49ak3 zaLChj{%O|1a+YTe8f!vR3Ja@ctsi~tStdVj<#qP{f9~RgVb}bo@JmbjG&f-qXpj0f zbzDut0!LWTJAd41>o=pL#Oi-WhCY{J`WILx6_+=KOQ*gLQtn;nt~!bH%A4?P#FI!< zEL#RqRmEf4xtMMSd8#*~_+qghB@o&UJH_)AX7l33)<^$72E=6e?Yhu*M)6r2_p=Db!l9h!D~t1?VVXC8B}-8 z&XKQpiHVzFJ{c-EHKHZV&(9BS0+|XxL}ptnPwqA&wuduqYg?FZeBGF2s_SBcNP2kO4dB1 zjC3x$DdTmHvTbS94xWX_CI*P3KiOroFnVy!t}(#LZipqTj8C z;YN}sEm6DHUqDTPI6*g@@*$>2qvD3}%vZ(}v_*=Aa?W_hgyK@egGugF$js&1EFJ7~ zD}eCqOxecD&1#Y|#9XKKG_=_4S(o*AYp`E~g+OJ8?7ob#>YX7s@}AZ=W4zIfXKpyw z{TMYB!iLxD5hpDkd@?H-tgz8mDkz&-z@C0nxAVZA`iUbcBJI5CL%Jcx&4-( zg24EJO**D_hlyv+4sXKx?{}~~cM`b8>ksi9@9fecB2=Wfo2daKXl57#)12ysi&sM< zb892r&n zK2o?cPgw~seA3X?`CiZpUcQ#7b6g*I?r`;Re*l;xQ>9P&FD9i|VNvyJFb>e7P)QnN z7``s7kO<%D#gEx5arZ7oD=7jHf0D-Fj~CP7)6N15vg{do^ajMzuKq*IFnbTwATZGz zRSTEoj=_(*)F2b@zhEv@)Ro1|3$83Tyvdj_3Bbq?QxoM2m1tHvnI#Mt~TxFWP{ z0#0ZOZGsI`kQbUs$)s0Q4ARk<`v%qm6Wqj6*k~sQ?NoL4=`Aj(k6yP`@uDQlGpJrA zLXu6|axb*9=^BWB-SjT~pxW&PgR0KlPEd_nmmVYlU0%vfa_>hb-l0cqP^;+79V7K$ z=blCT>F_it+hUKPp&r*ww0(IF)r`5==pMQwq{q{d%s0*Q)&jd-L3`E1Jo9Z(f2DCfSQC+bk@j(xo z8vZ2YBsFW0KpiL1tEFhPOVvOUCdPq1Z`o_*(F~k0!bW91a6zjSj3&E`?Ze*Cy)Drj zf)V`CPWZ@kk{*E?h^?{1^!w2;AaG+x)cT5L+1M(u|z)v_c8=}&S+#`_DmK^!j zp8@Ltv`iyuLDwCyFF39nNG;)>ju)r_(Q1}|QqF&={&{>U^|9uGl>a>v{wF+EZB&9{ zq(=>cdeMU{=gc3!h!$snj;NOMtHLh{lzP9c^o$(%@bQ(OTY>Jf{`Cm{{;eQHf57l6 zJQ&jqfeU2t1FbN`AWxHWwOH6#j;Y-Mf3e{1f_<4K&KEFtFNP=}#(L9KvJrouWO&s_ zLD)(vU$Ivv2Bvg5J+B`@Us4W0Af^h5-i)-7H@N+1?cpc znkyF`0T9c?ut17M)cn@p-aKndjsSUS?Xc#N4>mc8~S2;pampWpb{-!A9H zZHHt|=RDwWjyr?nqR&VmGkZ1%pnsKjaILrmcF)8c&4p8Re&C)m3(a1tY@hlYN}k4o zR^?7_3|2MLf;VQy;r$N%Wm&4%_k-2r$jAr@7!W1Fbaz8Q+`HabQ2_xtUf09v;Ptpy z*INseaD0c`naCJFG+W$PN2)NSoLyTmdfBUwxXTtD8!m#48$KP2ozUTrE!PoGok7O} z5XS6h>gXA00K4IOGm!TU?H5ywJ&RVMTXNSc&=gg~MtjOYd*E4QJulg=Gpg`X`c4Nf zjU)&>BWtai(3$7B$%oLUVQhG@!FG+h4>2q>YbFe>nT?)b3R~RvYc0M)EPe@l_yC7~ zf5cn%Y<7TQJ0CO}pRv#!{sN(onim`0$|L1vzD4F4VQ>O)gRJe~_en#Y#;Ypt{^a4E{*iDU~ZGu{6d}N-VE#h33^~Fu-gH3D}3*A3%;8iRtQt~ z30HIwCW%V0!zPp}J3u5=sAgati2fxR7%t}*ZYp1K1A&Vvn{q~KG*KYx3*>tZ2YpfH zA*L`e8e}2Hz6}?9REHn><+EHu0QC`XYCtPtn`3v;6IzLH!^_BeNi8a^Jh! zK)G-^Dnxh%2EjqW7K$EKf7}O&S9pvP7YDjgOG?&t52H`G|gsydstk@{ItHd zcwis;tkn^CsdD|KYKKYC?d(c?U8asSxZm63!t#END)HSJ zgk}8vdecH1sUs2CwCB0`A0o9Rx9X#Eds&o5zDBQYYQXzXS{2E8BPfz$Bva&3DhX73 z9QA0&WC?#74Z2k)tW_8~MDhOQe}bTCOA9W-qmQUE%K|9OH_FSD|7ya~kt$rapUi1)h_^1VQPApPTs2!41N z9}RB-Dp#vD*-iTm#Oi=IxnyXMcfA+UxNi^Y9kGU&+Hz=GvpE6ZA~m)q`JI1@^dhWU z{9w;bA*WqRLSz)gQZ(|)R*frFEf zR}(}!5%d0Ul>gbX(K8%^A5T-!@cm1v=w8m_%-a6YI4rrs|2zvBkB-yEcKtupfol;>}Uv zAm3YHc(gS=G84E87?qWxmnT&jNGYy<=IL_bHm%<$H%|*>_TpI!DX3Z?te5aW|pvQ>tN=l`98S- zxa1@MtmqdrXDP)fAb9DP@LMf(aYsnv9NPXy_%jJDpPR{@5X-JFbz|UN=|Iz8EQ5!@ z_zr5ZAb2tvqKkk?EnSZ9WwKCxS)U&b&)4nhhOeeI^lfA(4h5ey2=e#hzEusp_O8@# z;QZO3M_~gu=n}KPpr>v`nwLv}IA~`6>F2bhi8#XMDA(kT`bv!_k39c>7u7wt7*8#% z*k=~gO{7fA<4GSW+Y$yR;M7TIpJ=g9k+{PvQQ8N{+8I5hH@GM9^;Y6adQW8Y@T$le z9V5+|kSRFiAWuvkebRW1w3UGEouRyV64C$RiZY&ZiS=ZasIGDqvy~_=vB#*aRw?nC z@3zerH#I%qq1!j$$3I+2P_einSf%}GUJtLuUocU+&lqOL*QQ)cG#XNSd+6Exp-t{F zA$Zs&q5m2B4PEBpd-}$Tyz=s%(cLoJ!*1$cx;-C9ME!dVNz46$ggD>jWc;alM{^9Y z!2j~uBrD}@d75(%mv=l}7qjvHq>9>$koe-20QcL3i0s7+^yK{!C$a)!YSo&oOz-F_ z+N}|Pz-RWVgqL2JFPxP4z9%A|scAUqKF%zfF>vdN4j(I@=`jJpmp(FFA*ipv-Y722 zEahQ?lET7Q+j*@gNcV|C$g3tnZ`12uTDbMkj;-2Fpg)aFT40t8T!b zgH2O8ZH^niUFIw8ob>p8zE*bX#<%#(X(|L6V&8>kiFwdn3+^Pp8 z*^WNH;Co5Aea|2af4bwau(0n&16R5&yeTiN@?C?Fe|Xc|vBd&vMnk(BA>||4Y00gR zx>7Gt>zBD0i+bq0GL?8ZZI=zd4Y_N#f|VM{)t6aB1uNny5BW=^K83?^o=j2e=x#~AExXne8$v9Dg!aZh0)P&U|C*WF z@f*~xu_>kNe;<|q3{{M|vUr7$#~lmm;*)0Chjn`G4^X5@OqN`;{DnpQIg*OU<7?L& zyW*%F2qPbL@tT0J-muWnU0)xG7L*9HZ_MZ;Hx@&)IyzFGp>n&v1>&&S*;~=bM~?=} zGT&|88Da9exnOF1{I(vw@m$f&K-(+T`EstQvCAtYEnPUfP%&m&4Bg>{_Rw52Ux}t-ys_25tWne8 zKV%zSFwG}SuQ5!O_ngt58Tzt}oCQJkXC4tpKr7G7awp;zV=3{qtu?~7?rmLJdk9&~&W@R&gS=B3v12>tD3y+3XCEQ~p z1W^?)EasqFbSKt`4o|d4tO(B5*_bqP3Cj@DXI$6Ps?q)RDQm5IILf_uDRd;$>5JyZ371qP z*b6=DArXGG45*i*uS8rCi~Ta3-XW#coLVFk3_`!4+xq`kI`Tg`fwmHqeWvRWg+!XU ziegr`y_~)134wl@U%LB3-bf9F$Bh2MwY_ z$s+(WjJC9~wAEn9a$P%9RZkHB#{@2apBR$AJ5+_42*KIK<>e~UnCgp$C=1guGtghy zc>efMK#&2%&cjI`-pJ&mY&Uy-6eR^0seq=PL+O2?+RsRS24(jDNqxJ4pGK3Z`N8$W z)($apNuONlpEthF(hfz%@&aZILd(cXnz$^o5|MyhQ}hbS7^16j2X?794HqjbHktOnlCMIX&Wtj_Q1iEVsA~el=BH7#5ai(39Sy(GAqcDz4TgJLZqCgVVD> zH!A%IUA#Abn*rjo2^}&2tON6`SNX(HZLJN|xlR{UjC}yh0>tSqlP3+H#LfWudmIWi zwe^RMuQZdQYKu)gTnL(I>@SA~$2eSXHYXL$ba&?l1h2u%cq|=sRn)Len3H=mP`1Ve ztxWXQHP~Mr0TE=16hQ)$V)e>yk?=18f@fQ=hS~9ExlQ3=Ki*jv^%0Qu%==5nPJ_7Y zhw2NxPxRGzXXWpqPZ_zElAb~;HCw5wR^Au)2d_WFL!@}>*2hG;*xc34* zMN9Z=pN#gPkshpCX_y_zy3tydFTA(<`XPN>K=8Qr1;Sz7IN-P&{e#1DH!py;tu7+P zElc`@-w-bQWgigy_l4!2ny?Df`Jf4v6#w`)C&)et^Os{xTO z>_+OOR`YM`Zej)N(FURa&zBERn^_4rkv^i&gdI~8#mngpg8cXBU;MP3s#wFL>Qsne zE+SBu2^E6AQ7OsCAT?cx>A3Xo(AyG!plHm|7_u0$>$O4~qSLBd($&9Hx8gkEX=vG6 zh+cgfq8;)pVS38qRlP!pW=Zux2qBU4roa(+b%V6jtJ!J=rW9LK3v2Qr|3E6(?s(Nz zbz^40stu!-=^YEM)@n6%QX;NwBi+CmkL1s5tRX@j`wwh!FukCyt+ECg9pCz(bGY*> z@ePad#ufrspy{JOavagoe$j@ej=1TXbyWE3XfIwhvhOKV;<0+^SMa3f?;O}w-D;Hi zgunIUY!Th8;(g|EspY2p^`}nMmDG({Ydz9+#`6xhbZZFieDbq<;{cRoMfhGjOglT& zVr}v8)8V}P(wHvy*E}c1kD*F9-a~f3KKH{DVb5b#L}|T6)~#7Q(LJ8iq!9c!)L5fuy10GqB+BY}s@BLS z7uce%%=4Xvs4OIC;zdP3j zkA1hS#pcV*4oXsE?@(^~-|-LhsC0Rb>74jh$&a)iOfm9 zX{(|8l`6CP#`N{uWI{)nX0>E6pZCvx}lH;aa& zqq~@gf0a~BBaaz~x`I)4Ho}4~6WxZEoy?$gig28)<=pRW^5ke-S2o$xyd<7oYJ^@${XOr$4@O{)8Y~+ zZ>h`UVQPbj&3({tt)@(at*x77$zfR4aIq)((c~}Q$X%(a>{yOx{Gtgzp zZ6|qp!CKwuX&$mn6u02QxRb;dhHkYvF_wwV(O}`{P)viDij|46EPk-eC% zT`o2?1+DKz*I@V^IFnQDn-uBa5giW9li|0{UWZ()wJ^`UPpT!PsE*|e<6ez?9XbZx zLivRy#i#7tl*HtWuYyn!Hii%KikwyXIUy5OPnN?L6`>9Fz?hT?(RgWx{O8<_<^r^iHsRr=2#vY*n)d4_%i7$JSS2*(k z8+@wg+z$^El7vd7+DB5=j!pn{b&woCmS2kHRg>)rvx2FquPMAy;6r89KLy!L0s-+N z_>mHCaq&kW4vn7DH+ZmMzg3cvv5l03PssQJ+OiNg+{;?t#aLWK_smb`Xm9t?F2jRd z^RFpMe*=$C#~B3!cKU9sa~2l#m~Qv*dQ~yYeGRskZ=$RY9CT2s1MnE-xcMb3p`4$U+MIM0?yPREH3(ra!5<)7a5YiTRv@n?K`<*S8#A6a8@-5QODO~-53jFQ zmlCpuK8I~*d7|%~ap3n03kFy4>>t~;^~EEiHZ{Z7#%Gh^m9d4pE^PWa2At7 z!#@1 ztScc4FCOVQp9b1v5}=D6ivzr|OZ$JZ%Kyh&sx|!>Im3&C>~+AizwOd>42O$u=`~pu z`ZOeMzg_R+_grT%oe*oi>VnsGHY&BazLlQvgPqgBtL>JCvW~X~X=H{JSbAe(9O;Vn2E9lgUxK zHT>f-uTrK8Dpe|e(8U^>NV&|uE1ZxkSv2%VgO>OVxxLLEt4iaPSnO`vfTAK!=f=c( z+SRA0BOSyO7Qbq(?Xg|#1ljmAE%@=@<<~&nnuysrgDu*lr@>cxG-Mw$EDps&Z&&*0 z@DM+G%SCGRPw1<4RgO{4~!mT9aG1h8NMUE;gWtb!sm- zwy557AU)8i9mdtgFe)l!*Sw^IGY;Mi{<`}E&}Ez33_rLk6TRU%^87sF2C zJq>Jy@d9KK+5CF7`-Ul0yZ&T`@#|-3zu+~x+MgunD$m=WwIzRW@JQ~=tt0FL7`*uf zGV{JKFB*@#Y5$q&p|#Qu5Rf%O0~Gmd5?im}_iq@_5`Dear*Z?I{iD(xA7@1Su(U4X zX4>fGhI^k_8AEV>I$~_(hU;3(5r=U7ES7B-9%Z8*cA9=MS8eoV9e4l<+B^dzAyRys)7A6&buZwr0ja%aA4Kmg0h8VmCb6Rq^MKJ-h7fn_>b3& z?=`!x)_$Y)H4H36uhCT4`&IojEzw`K7X560+au!TFl(G#|Hc-t7-PI+uXWIvaOKwW z+}%;x2Iw3=FF7JhtC$8A6YbD5*PaKWJ>sU-Ykj8FowZDg9Gn?6wDXg+ar8A2!x6%E z@{$q|`xLHde^oL4dp6Wf(P0;~=^IgAar8%qwT@f^NuXPnWiBD)(_yJCS!j3c)@`8t z;qPqFx|4EGL)Ohscn<=vd@t|mgz<)u5U<~s!SuM%r1-I-qz&ZnPG2hV4mjI^)Xrrm zD_nP3!)x@WXMip!^9m&hBEgR(DF&h~c0qD>&)Ri>aA9a-#G%6qX^%jG z*@ps_Jrmtl=nsy01)|;<_d4Dtee<@%xV%v+M|`R+O}xzbU|uk(x3iURJexoNRjvY} z{#^xN2IB~xn`^hfy2s(HU&*k1XIOoaA@+YiI&=kkM=AO{C)6Qv&q;<*XRijhcv@)( z!$o86+1A^)f+nZW>Ck-ek5r2Tq3(Y_f90mW7GxzF4yi2Q?dh&gR49I2!k%|bLEs>-~>Y1D?eZ1@!)VQTwzA?=l+ zT6$Q0{vR+ceh0kAxcy~4<%m*#l*s z5Br)mz>amr*8ja4W7<%?3|U#EeQEtbA`P^aiGJn?!-TRbF#I@?NCbkLnpB3jga@LC zF+D4oQ#HfGMq!tS3yAB_@b81oJbn$U@4osV?Iuf7){8`=`$SgOCfF4PvkEfK5No2@d^t`=Lv@8JGWpSK{C0fhZf;v!n-y4p zNlwbZuQAqz=o-gu6Xw`%fxWPf8IU_L13-IBthBdJ)F!szMvpWBfkjCFnRBVsJZLz5 z8*tECFQ(!-HT9(hs;0`4t41p5)vVvPGRtiajjimZ5)ajA@-LGLeaa3A<=n2teR)C) z_s7T6s$699OAnt#uB~$Fc4(%o<;q2SV5pivO?n-YMYh3% z@>aa(gFLw)u6+gkb%?sQKB@}azjUn!IA?O#y3iyl>Wrz}%23BmNDzR6QI?hT2p1aZ zg~RLDx0mwdB2;a6o4gEfW7nNM9X>EyGKl2kE&u3(;IWn|y>g@p5l6)0@~EqX*A8J0 zz1B@dinZ%ySEX-z97u4;RY6k74iAwg0g%}w9BqE+%DqmzuKULaYc_luRFV+l)dQqQ zYp9HF8QJVIx)DC6wN$MK&w-Ar%)82FI7V-!V(rylsmMTg99L!?sJ>sJ|C#1WbuB;+ zj8!4ohpol6a_+A^hp8NJruVS`-7oJ{GONM^=7XMTh>NffhL4Lwk%H6hodVo1-obCq4dbum0k-s zIUXdGZ`dtd4|=;(7qeghnB3Do5JFEjsQagoARJ8qn@&GeSZtES4KKvi!Pukd&Gb3p zA##^sHi9;Aie6NuidaXS#Zredwdkx`#K_gV5vDZc7|8cH%IeNy0x zj%yFRUS1&Kyx{?t5-hwPed~*b)cLe(DJ#9#0enLtPH&)0#ex~h2F@Vnn&oQ8b!rv; z_GuvB?DSB5@mb*40zZSBycCI-pzQARD%-2Ryy@VXxl5M2P) zRBP?*ckUi-ifbDGNKWe}D>-noy!K&DT*hyyi@yODJ($l@A{^-v1MiT<1i3LQHj!P6 z{WMSx@xa$a$juM|o}&u*Ip{%qRdrGT8tFZ+18Hx3ynm-AiRa!)Ms0n!`&7h#OkdsP zT1dAK+Zog?dTKFOQ)698`$)CAR?EDkCwn5#-Gk@8 zU7cO)ppV(3&VG3e5pe)sG2AOY$O+)`~Uq1>AC|@s7k?sZCE0+M&GiN1U zjNQ^#BirU@&U=I^KIKT=o+i>a%AvyjHMOC$dV#>HtF?L#pek%+@TBR& zThmTG9h!Yxbrzl0SzySmu61DF0*ytiiMD*~Kx)bu&&VjHTI<9fLG1bJvd-R|n{;7S zC(li&1`MDbcsCZepa&j-6yqzlIN6`3vX>4pbzg+OWXP>P*37f0(p*Y=sLH)mBx6r_c)4`bQgWhJA5?pBL)vfH z{pZf)^Ymayiw5}2zYSs7yND^sAbo7B)~sE}v*qou4=BBwq-{XoZ>;gED3>LaBZufN zfglJK-5EEWYwpSA-(b_gTG&E1IOofWRN(vtdu6jiyp4xHil~2IQ4Q`DaZy>H5l6Jn& zNer)%@yVsjjtiiwc1!y3rpSuFLyK7-_bW*Qht6^^eV1CTQCf0vDxyY zBD@vrZE%I3N2oX_WbYNDEhB>!8)!&8EJ0JLEj4-Z6w3FbLk{=1dU?9Ex9+l&bDhlq zsG$F{5ou4v=tb$Ot;GHKy^w{3?c7ZsbG{nStM*S87yZnDxLX|mxb*W`o3y1O6cU`D zQSL~+@#JFf{|{E#?=V+bLygh>>j9?+BbUy$-SYcZ)brXgy?Fq7;@a>|I{!B*$!KwB zn*Z<@U31*kr2?kZsz-g|E6+yMq6Akx)_77CeEe%gMtZ7Szd}GO>6(R`$nCDoDZ8s` zJz(})r*+}Z4TwvZZwY9-40hpuVrMZ!WttCPC-|Fw&lxJybAQ9b6*YIyr+1^urp;3* z5347VabHHegX0nh`E|Z!NiiE{{Hhw&f+J({Iq^J1Te|DQO3JYqLgqwUn@YgyW9Ac| z37_6u+huWbk#m@ydndJYiOZ+FORzJTyDVD60O&4>l=-D^Lcy(_#X->Hvszq2+#Rk> z!~t#_HvbF8byR*UzctLp;a7Y3?#*&z=o$r}dnu*3BQDbX3=lSFBU$LzePaAM-FBth z_|n{^o0*bIjuwV`v>FS&rhM;^6=6yPpIrG2l~Xf3;P|8<9<{eU@MSMk>XjWvE#oQM&kR2{+RG$S3=p0Q7g^YmWNFc zg4|1;J^Dgra+OEu&CK$F@Lp=}Mg_Ru@}Bp9Vd-T9Yh8fXf6!8{L@fD8A4U6DZ*u5# z=VZAbGo6@FL4_TO;3ZW=<}Rafm5&eS#zI?3zMvWdn#{Jev?u-^epvH79-yflU{{Oa z*m_9$F_Kiqo_Hfm>~MR8!jW}=<-=77C6}2sv&MJtsJT~j+@-l6eBIXpe*>F>DyeS0 zQ2IHyB;fT+lct>gHPFoBRUP(VMD_OIkKqMZ3Dp^Rr{|s4f`S+eaR={{Pj2{T0BvAN zn7wCODLHXKvuJ~>8-jq`-L6^ZHbk>fvk@?vqp62n_a|D%hOwNLR$e0FD% zW@C~DDm8>B`uQg0p%d>>tm;y2RPC%_U><(;Qd3tzSJ&|1;KlDwjodaE4CZ8hKvS;C zabd`w#`d-kBC8W8rV30}b?7To z`TsbKO&N~e!D;`~d;)kZw@fU28`r_qWR70mPv|0-py)#`g4q_q?9GRCFc^Z|4+5oP z;sk0Wdj|(I^pzJ#ny(+;ulZGLf>AnAPPF9=n@)G78=t2aMPR*W*3Q(G!}sCU)te=! zaWC@><~q=d%jNL&9tXi#!$kc|XueIzZMkUvDAEWkgl}Qz7n^gpHy6`~hF*coeYOe1aRjPj1;<*l{XE#CWWAz{iD5e@V#8ltV`BW2lE0>;eWId`7!QPfi(8EjV6- zToKxhtwU>!BpZxfBfqj4x^_k&kLe3?T97^ z+W4|$q3{H^?d}o?0?D5FRA<8OtoR!zN?AM$egRU%v$pjo*KMXh-N2DoqS@$J>GOUS zy7`PBkGz&%AV?ywQOB^M#e@`j3r`(nBJI1=y;f3vLVhM9^E2iA=s8SThM;8FulXTB zbkJQmJ5t2}QBtMl4ck1}zwD=zTaY{n=&X-n+KSw`5hmB|we1oMkwy9V!|MKSqb@n1 zwQl+br5DljUH{nfd4(XFPpBG`gC~YY_C^3)V4GG<_+mQbe(%qMzF03j z)gE2+hu^~31(4L~2{c#S`5!@wu^QUuAp6I1h)SZs#K+auVlamR*hrf+#7lG1q&h*I zeKAZ`9TE`yCZUJb$h)*&Ed2N_AoD~gQx&Z&Uyo{YxJ@u;_MNNg`uUEhM?q<(2CoJvmUyW3%`bVo%zC!=%%IzZp zi~>R4RR-whp{jE06$f_#u$?@{hZyR)ce}h=ts87+*Q*n5HufxP zGN1h;GUaWjULfK_EZA<^c@)}e(vV;OVJB_lI(`fuA7(D)8P(a;+=`A}!pwdhskxv^ zQ=`w?&bziKshk6Ekv=tgf%w$FZDdLq5KaC0(A%IxbRr^n3NJ_PoFdQ9D%kf#%hZv5 zzp`}5ZXWH!+W?5OD5<#mcZK}GdcS-?G$wDc;9}`DGN_%|GGY7QlP_3$!~|@pKP~!_hhbIii;5NepAOCU$~jNbUPV786(2;K&AgETbh zd{kCD3PV_4QQ5Y!eCEb!vRkM*we|6D=Dfgp{IhQbDiQpXeqbYKazl%IQS#l;BH zS5|Je-tCKt=o9X3QkfPR4jezb^vCaeIAkv4XI`sDf3`$znuol6!lblcw~bTHFt(H5xGj_&#qrgPG@YCFi@DRTEJKyGNrKxrMTQbxCWL z_dnR+6&OtH4_eRY${g-LJ16>L&c9!(TGf?5G<5^^_`1JZD5ucs@OyB9jr%G~>?dRn z`9rEf=<(+%m;OaZ?Ni1s#{mWou!r-`hFyb2pG8=AsUj{@o@(X$R`nsX_%&)XM>Daru1y$;) zRIYsUZsV=iq>*Kr;B8|t`N{&L?!w>&E6dBAn*&($!N0RJHnw2#1*`9?{&IYVd{U9W zeQCpH4b+f~z{*$$U~xguMEyk<35%4b1Gzqg&PmKV_GG#>e$5^Xwph{k*Aw5RgQ}R= z`a45Qx1f+f^fV<*n6hrcdCM&-VpGpy?nIJ`_vhi+9+E>7{w&Vu5ys=Fc+DJHS)}Xt ze76gmNqYIIM>cv9Dm+8O#Fs$-`$(kdD?w$P9j1?Ds$VLnZbZdXBF=uZ=$uF04t!Sp zUAXtFxcuoH)w=4YBI%9_jPv)11iQE1i|?(@dB|UQsmwN_-2S^FX~clUjQDKv_`qzN z2YD$fl4@@uR=i#twW35~^yCi0q%TW-K~B+d`hvGEKd9j$DF$8Mqw+m!m4)DSDEk*& z_6fqlL|o!a_{oLh8K_$m71sH@th8um3i<+1<3;-td(X=#K)|DEz0x+j>cXadczNO1cmL8}(8gftm~}I1j>z10iT4QHjmaIE3N80b zI%-dFI{&R)=T^1WdPdDoZpPi<9sCT#lKZ_<3*2I?BS2_u=e$_t57_tEXC zySaa$kx_G@ugq)Lyn3=OY*AELrSoZTjh@5Cq}vTWK;9qSk8}I7shkq6s6oF#l$Dxf zP!qYW=T2ps#hsItxlTin}SS~$^3q;L9iqvVNxbBI_p0!4DGikW|s|pcUU~EiaZGXNCFegHNw?4H)>22Of zyDBI{vu>yMr;Qqt4JLfXV*K)E0O$D3fiD;TYvbpL)q4+@J+f*VEA5$UoP!%oz}EI(gpIl;+vm+8SgKo=ux$2-)ns z+#f%G7Qgc6&&_q34-O55yht&ZaZKSGs}+&Eg5c`!va@d*m|D)WFR^C=PnhvJ1LbO? zW1kjuMurBr(zhpQIt43}jsT}A;YPuhR&<%UWBCND`C$=W=Mh`4txm+_-T!+`a8dXs zwkKEW*FA>H#G?2)I5Nx~<}|0r&L5#t4tE%O-`g`~mc{qXC}42S8j z7Dac3L75g`zSz>k%R!T2tN8!-zW}VQO+acVv4)#eMn9sVRhwK!WlCp|=K#+Q7Hqv6 zH3b{x{W#@b#Gl`WahYD+KRu$9(3c6euG}}}V=BupdU)Gdo~}D!Ue!L8S`#{$O*BL9 zpRn&}n$>5y@i;@?I#OUO?{Y>{t(wv|3)H}Jc{Z;4&nMd{d{%>(!(nWWHRS$&-7T8M zL*&NFveAv%w!N$2Ni}+Kc>?wd)Zo?XBqvTB#;C6Fu9R%_)D%JaQ6|l6GiC3S)9JA1 zlSSC#f=w>7C1W}>tnu-Eo0Qf87SAqMT5zis%gc!yY3qJ8=iYQN=JHZRj~9vat`iWN zlak-?`h^P~Xlp&dr10!3xd-_U^gGM5@jZ9AS?HIF>=ly0rh@%CI2h*#YcdA}_0|>V zM4L_+V~;qDM6veI`o%{PCUk@)<;1zWZ9o!yc=)9>C>1$oT9F(+HdHbK0K8&Zj7ICq zeKDK80_8xwndwGP)*Pn1X7w#pd3IlzEm?qSSHK>-kl-oE-k!|IMlHP8TYH7>oQLs) zXIuA4klVHUhVvRH`WsyA3K{Y-$aF0jLuo5N+f@)JXJfO@#4svue; zV=}boEwTkS8(0^`uki!#X)D#^CrH_0!lY$+r?sEKY$2Z9U@~^aT9;|Cd;=l`EKlOk z(0WKD0r~ei;KWX0B+9E&Xx+S!_fYdC*{4#EE0G==*gsxXD~ZcUjM7(QfFZAGewf*` zbR?q)8$jQTSCWE2vaLzZ|5CiPQ?AlhTGj!ZH}^&O7{uv7rjtAM^gQTK|6^T)!bAV~ zXtO_B|B~D2U$Q%oT60e=4p`bN^UhLYs7VH>F!5&twn}K_&MQ=-_;AY2JwUN?AI|aY+(lRE22y@)n9AemJW@F6tdVjyy?f3nCuj}{ueE+-txo$WAINa=JUWdo?@q9e)FCBNA zr6V-wY0^N(YRS;x&7B{7hlM%&3nTpxU~npNSQ-80__skp%^P@k3C}8BqzkKOj@;mw zI#WQgxHZi^-&bE|1~tzL<{Hz7ZGa4sc?L;?1j;$A46QyJV|@h|61q`As^FGK^xRqZ zmrfEp#3K93j32q}_&uFfJ97+7kDD)xKcrJqwMdBu?!52CQ^Y3V&VzZ}@YG>vgKR0K zX#O$85;SkcB`InN`@&}0i?9zZEO*h{(d2MJh;L9l`c945C3zGQShDE?6j$Y2$KS65 z;klz>Oe}E|9S9?Vn5O5Kk3(1AbSD`jwdLCL-`0hx%vz{TVH%$zi4DIu?WG8O? z>+CbHL9K6P(_xrNlft_zw=y#v;%1&Nz0_2AQzt+u zX6@g;J0CO!em{ROuuo4vIP^h=3Yks#eQX4iEi+1`(G;zBx&Q==9Vd&VkrS!%AeVzHiB8bi06)NgU6R|t2xxBPL0&2p074(!2zPJfQ z8j0m+BHxd^L&ldis7HG~ABh=I*Be3_wzWpDo-^7W`tv%f?~Jk4PepnaE|Y0Dy;>-F z>}k=tLAL`ub^UNi_?~B8NxCs^Gz5=Mle_2#qw`}C3o?b>%SWZtiJtGkmTYA>-6P*z2`&p#}(5h z4aYg%6^v0?zXpyYjCGKF(d$E*t4L96H@LPAc`wP;D{x?6xmx+5Igd)0zTDM~)n5iL znB#5`4j1TkkUu{6gFP);xvy{4X(L%49G5(=xt;AKJP>~5dd&Q`qE9NnQq!8~KF`mc z3_Ntfn!k)o>oeYHbAcJqAC?&EWL+WvF%`yCtm)1EO~3D?iz+z4mWd+xk?f^N9*~qGr;xOosy; zBB766RD|uiKH?;>vuooLi}qb5t$C)crQk{(}8_Y!Lzq9TIvRVac z0wm=QKM?w!FfyG#(#v}!D?5dWqHEB*_W3()ECUj4=Fr4;^N8tn4tJr^D_?>vw=x{4 zX`|KZB}uFGUfs~|d*Lml!_o5{3&+~h8P*pbXbX)bA9~wlmzOZA-B%vD5KbBdCbwLG zt>nA4Q@8kyWz@_)O^-6$EF3X)OtYxG1>bcHj@hABAz8egvngWb33V&;i z4^K@^VKO83u-3u9*LEy6H$Q~TK<=docv z>KM00{Z&I6P)%EOhAqAP;`ns}6_0K+mlLkM&fk-%Th^dGf!ID_Y_sQ?Wq+#AJ7@aj#rb*@Dg1wR)Su!=8kDva^@w(-Y8^ z_OQfKK!XO${zF`G_~~!l0_Hp?igQiko58GF|I0(2I(drPe-!Cju?hQuUlt#3hrH7l zl7S7U=7a+_NJDCr`F}!P5ZuS+z|h5ur2@Ywx5eLraGs;Pbhhe{g6n?>aDF*LXEcKU zGbug&3DF#qjI*(TvGPw-ZMm=X%In|by0bUNnt1*r<=C8{(=Fg$^njXdgn14;8IrCE z6wZL|k>jMMXm_uSX6%yyVAZdJcVfJsyg#o7EdbC693KEdLlVo!v^b7ymcO=edYdQ? z3yPnLeTK&p#;=)gJ2-^^0`2+mdz8M{A`UR7u*aV)KLv3dIg{Ha=z#4nd@-pFdhP(s zZu{E_yW2S_LDKE~nZ{`9Saggfe&)Ad%fi|bY&fDX_JQN;xk2$1O$H!*KwJKI&dQKx zZc~nKr~f2oaRo42{N^=$KI^`}8tm(}d|1Zd-{>Tu`m44%hCn2?^%aWP-~q~XQEzs3 z_S}(yh*~z8OrCpZ>?kdp-`r-^U52DT`xrm-c$mR>Hrv;rU||1crq~gIY^))pq<<;U|Hw+se;`-r0)aq*H9vncWO};h?3{L=Lb~w2n^y9`WfedF z-5_Z`NaMkSF~L()Tj3+=bj%TEv=0u~dA8c+g^0)dW#p`jtxb%n(~<6++yX?EIMp2! zJ-3^cO0*psD@!1J_h0J0S@+?djA6!*->Q?mZVP#jR^aeX*}>)pZ;3~2Wl_9(PJv%Ki!L7;WGfk!di5Ig(D8K?nAkOnhCWRYW< zi*L0{ghe!PT@l1j@|Xp@pis#HbNff3@IVWAMzT0-PdBP{sfyDE3QTd5hW>uraG+G+ z-&c}v49!WzeQETL0*aVG!}#GL;8@P31RHmd*XJW&X!JFA+Y#QB0qYRysI@8TZk>8A zy79L}ke74w|7Ncog7ZR!FT{(SIP-!JdlifzG%$i0PLrwUNJQ_@KvS_YXk0ogoj>D> z4WV`hsZ;(`$!oWPR>q;1!8<9E5v(=9E_vZAtMT9|!)W3J$CM@$1qAjfP0$%@09rF+ zTCMP=>KHfdg!rC$1b{4BdKm>A!e3s72fem{6mSR2<{cDAQ=2BY;hn~?cjguFql#;9 zMgXlMy(seHr2#7;1!#mGze)c9;4Fwx(kH>f)j#>kIeEG0?AxZMTUcP=Fc?N)jq*rB9Lp@X8i~iV^oNj3b(z z$0k9ZN!k!rfxYuDCK=MIYcEwkuhQSWvRG7EZv+vqkDa_bukef&@ue!!btNNXrwu_p z0M-t*d_3o(s3jl@$C{z^!j7rc*CyROr^i4hA6Q+X9zd(pC7$&@_g~QlfxJvCFn=8U zH|G^Fe_#e5J~YV2u>LB=wV(B?wOiGkeXf2S8823U=F5UJ=0r%B{=tMTo1Uup0Mbz1ybX$96w{+YM|65!eX^!nR$Ofvb-cStp=T1D z;eqJ`DRlAMtXLZumuO~D18UVWt(!16G?jfJT<(jPj=Jj0Tjx6Y<1cRcntpvetNL;wPtb@N>X|%mjBkn;ugt2J{8+d+mlHz z@5CQ%M^qw~&U}^q9p%vwFULxGN3ds`>+jO7B{ZeJWzc`J* zK8)FV3a|G_y6^(0P#M!9o8&Rbn1WE z3q^dYR%Tg536+lbD|Q39t1m)CCGhtC1WD98tXEaCN3t>W7(I=*x?qI(w4tD%p;;3po7IRPa&?j4T5g?HiE8q}YdH==%6T;rX_<64 zTIA1<9!_>mcPjhK+(%Co3W}yZQL9JEc1_XqC#JQh1j)6_dxS)LCXCrWyHv28yTtfz zjCSfyARe;PZf$8wwU7q(tv6*{-n(T|rDG&%0Dbh`O6$zM)@}OiJ-rY^CSv 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 Date: Fri, 24 Dec 2021 14:19:20 +0800 Subject: [PATCH 21/30] =?UTF-8?q?REPORT-63660=20frm=E6=96=B0=E6=97=A7?= =?UTF-8?q?=E8=87=AA=E9=80=82=E5=BA=94=E5=88=87=E6=8D=A2-=E5=9B=BD?= =?UTF-8?q?=E9=99=85=E5=8C=96=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/mainframe/DesktopCardPane.java | 4 +- .../LoadingUtils.java} | 40 +++++++----------- .../{openloading.png => loading.png} | Bin .../fr/design/fit/toolbar/SwitchAction.java | 30 ++++++------- .../com/fr/design/form/images/loading.png | Bin 7641 -> 0 bytes 5 files changed, 32 insertions(+), 42 deletions(-) rename designer-base/src/main/java/com/fr/design/{mainframe/OpenLoadingPane.java => utils/LoadingUtils.java} (78%) rename designer-base/src/main/resources/com/fr/design/images/mainframe/{openloading.png => loading.png} (100%) delete mode 100644 designer-form/src/main/resources/com/fr/design/form/images/loading.png diff --git a/designer-base/src/main/java/com/fr/design/mainframe/DesktopCardPane.java b/designer-base/src/main/java/com/fr/design/mainframe/DesktopCardPane.java index 65a9a47d68..42b1a553ed 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/DesktopCardPane.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/DesktopCardPane.java @@ -11,9 +11,11 @@ import com.fr.design.dialog.BasicPane; import com.fr.design.event.TargetModifiedEvent; import com.fr.design.event.TargetModifiedListener; import com.fr.design.gui.itoolbar.UIToolbar; +import com.fr.design.utils.LoadingUtils; import javax.swing.JComponent; import javax.swing.JLayeredPane; +import javax.swing.JPanel; import java.awt.BorderLayout; import java.awt.Component; import java.util.HashMap; @@ -34,7 +36,7 @@ public class DesktopCardPane extends BasicPane implements TargetModifiedListener private static final long serialVersionUID = 1L; private JTemplate component; private TransparentPane transparentPane = new TransparentPane(); - private OpenLoadingPane loadingPane = new OpenLoadingPane(); + private JPanel loadingPane = LoadingUtils.createLoadingPane(); private OpenFailedPane failedPane = new OpenFailedPane(); Map backUpToolbarComponentState = new HashMap<>(); diff --git a/designer-base/src/main/java/com/fr/design/mainframe/OpenLoadingPane.java b/designer-base/src/main/java/com/fr/design/utils/LoadingUtils.java similarity index 78% rename from designer-base/src/main/java/com/fr/design/mainframe/OpenLoadingPane.java rename to designer-base/src/main/java/com/fr/design/utils/LoadingUtils.java index adc30b2bff..d464dec796 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/OpenLoadingPane.java +++ b/designer-base/src/main/java/com/fr/design/utils/LoadingUtils.java @@ -1,35 +1,29 @@ -package com.fr.design.mainframe; +package com.fr.design.utils; import com.fr.design.gui.ilable.UILabel; import com.fr.design.i18n.Toolkit; import com.fr.general.IOUtils; + +import javax.swing.ImageIcon; +import javax.swing.JPanel; import java.awt.Color; import java.awt.Component; import java.awt.Container; import java.awt.Dimension; import java.awt.LayoutManager; -import javax.swing.ImageIcon; -import javax.swing.JPanel; - -/** - * @author hades - * @version 10.0 - * Created by hades on 2021/4/9 - */ -public class OpenLoadingPane extends JPanel { - private static final ImageIcon LOADING_ICON = new ImageIcon(IOUtils.readImage("/com/fr/design/images/mainframe/openloading.png")); +public class LoadingUtils { + private static final ImageIcon LOADING_ICON = new ImageIcon(IOUtils.readImage("/com/fr/design/images/mainframe/loading.png")); private static final Color TIP_COLOR = new Color(108, 174, 235); private static final int Y_GAP = 50; private static final int X_GAP = 10; - private UILabel loadingLabel; - private UILabel tipLabel; - - public OpenLoadingPane() { - - setLayout(new LayoutManager() { - + public static JPanel createLoadingPane() { + JPanel jPanel = new JPanel(); + UILabel loadingLabel = new UILabel(LOADING_ICON); + UILabel tipLabel = new UILabel(Toolkit.i18nText("Fine-Design_Open_Template_Loading")); + tipLabel.setForeground(TIP_COLOR); + jPanel.setLayout(new LayoutManager() { @Override public void removeLayoutComponent(Component comp) { } @@ -64,12 +58,10 @@ public class OpenLoadingPane extends JPanel { public void addLayoutComponent(String name, Component comp) { } }); - setBackground(Color.WHITE); - loadingLabel = new UILabel(LOADING_ICON); - tipLabel = new UILabel(Toolkit.i18nText("Fine-Design_Open_Template_Loading")); - tipLabel.setForeground(TIP_COLOR); - add(loadingLabel); - add(tipLabel); + jPanel.setBackground(Color.WHITE); + jPanel.add(loadingLabel); + jPanel.add(tipLabel); + return jPanel; } } diff --git a/designer-base/src/main/resources/com/fr/design/images/mainframe/openloading.png b/designer-base/src/main/resources/com/fr/design/images/mainframe/loading.png similarity index 100% rename from designer-base/src/main/resources/com/fr/design/images/mainframe/openloading.png rename to designer-base/src/main/resources/com/fr/design/images/mainframe/loading.png diff --git a/designer-form/src/main/java/com/fr/design/fit/toolbar/SwitchAction.java b/designer-form/src/main/java/com/fr/design/fit/toolbar/SwitchAction.java index e14d39a68f..ed94eadb4d 100644 --- a/designer-form/src/main/java/com/fr/design/fit/toolbar/SwitchAction.java +++ b/designer-form/src/main/java/com/fr/design/fit/toolbar/SwitchAction.java @@ -11,8 +11,10 @@ import com.fr.design.gui.ibutton.UIButton; import com.fr.design.i18n.Toolkit; import com.fr.design.mainframe.BaseJForm; import com.fr.design.mainframe.DesignerContext; +import com.fr.design.mainframe.FormDesigner; import com.fr.design.mainframe.JTemplate; import com.fr.design.menu.MenuKeySet; +import com.fr.design.utils.LoadingUtils; import com.fr.file.FILE; import com.fr.file.FILEChooserPane; import com.fr.file.FileFILE; @@ -23,13 +25,10 @@ import com.fr.general.IOUtils; import com.fr.log.FineLoggerFactory; import javax.swing.Icon; -import javax.swing.ImageIcon; import javax.swing.JComponent; -import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.KeyStroke; -import java.awt.BorderLayout; import java.awt.Color; import java.awt.Font; import java.awt.event.ActionEvent; @@ -46,7 +45,6 @@ public class SwitchAction extends UpdateAction { private UIButton switchBtn; private static final Icon SWITCH_ICON = IOUtils.readIcon("/com/fr/design/form/images/icon_switch.png"); - private static final String LOADING_ICON_PATH = "/com/fr/design/form/images/loading.png"; private static final MenuKeySet SWITCH_ATTR = new MenuKeySet() { @Override public char getMnemonic() { @@ -136,19 +134,17 @@ public class SwitchAction extends UpdateAction { * @date: 2020/9/30 15:18 */ public void showLoadingJPanel() { - JComponent area = TemplateTool.getCurrentEditingNewJForm().getFormDesign().getArea(); - JComponent formDesigner = TemplateTool.getCurrentEditingNewJForm().getFormDesign(); - area.remove(formDesigner); - - JPanel loadingJPanel = new JPanel(new BorderLayout()); - loadingJPanel.setBackground(Color.WHITE); - loadingJPanel.setBounds(formDesigner.getBounds()); - JLabel jLabel = new JLabel(new ImageIcon(this.getClass().getResource(LOADING_ICON_PATH)), JLabel.CENTER); - loadingJPanel.add(jLabel, BorderLayout.CENTER); - - area.setLayout(null); - area.add(loadingJPanel); - DesignerContext.getDesignerFrame().setVisible(true); + NewJForm jForm = TemplateTool.getCurrentEditingNewJForm(); + if (jForm != null) { + FormDesigner formDesigner = jForm.getFormDesign(); + JComponent area = formDesigner.getArea(); + area.remove(formDesigner); + area.setLayout(null); + JPanel panel = LoadingUtils.createLoadingPane(); + panel.setBounds(formDesigner.getBounds()); + area.add(panel); + DesignerContext.getDesignerFrame().setVisible(true); + } } diff --git a/designer-form/src/main/resources/com/fr/design/form/images/loading.png b/designer-form/src/main/resources/com/fr/design/form/images/loading.png deleted file mode 100644 index d479fb376be6526651ffa41579bd4551f5d44916..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7641 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 Date: Fri, 24 Dec 2021 14:36:56 +0800 Subject: [PATCH 22/30] =?UTF-8?q?REPORT-62440=20=E5=BB=B6=E6=9C=9F?= =?UTF-8?q?=E5=8F=91=E5=B8=83=EF=BC=8C=E4=BB=A3=E7=A0=81=E5=9B=9E=E9=80=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../design/dscolumn/DSColumnAdvancedPane.java | 89 +++-- .../cell/AbstractDSCellEditorPane.java | 114 +++++- .../cell/settingpane/CellExpandAttrPane.java | 20 +- .../CellDSColumnSortGroupPane.java | 40 -- .../CellDSColumnSortItemPane.java | 40 -- .../celldscolumn/CellDSColumnSortPane.java | 59 --- .../cellexpand/CellExpandSortGroupPane.java | 19 - .../cellexpand/CellExpandSortItemPane.java | 37 -- .../sort/cellexpand/CellExpandSortPane.java | 39 -- .../sort/common/AbstractSortGroupPane.java | 151 ------- .../sort/common/AbstractSortItemPane.java | 153 -------- .../design/sort/common/AbstractSortPane.java | 113 ------ .../design/sort/common/SortColumnRowPane.java | 290 -------------- .../sort/common/SortUIExpandablePane.java | 117 ------ .../CellSortExpressionPane.java | 32 -- .../CustomSequenceEditPane.java | 190 --------- .../expressionpane/CustomSequencePane.java | 66 ---- .../CustomSequenceSortExpressionPane.java | 37 -- .../FormulaSortExpressionPane.java | 42 -- .../expressionpane/SortExpressionPane.java | 23 -- .../fr/design/sort/header/HeaderAreaPane.java | 149 ------- .../design/sort/header/HeaderSettingPane.java | 81 ---- .../sort/header/HeaderSortRulePane.java | 279 ------------- .../fr/design/sort/header/SortHeaderPane.java | 63 --- .../cellquick/CellDSColumnEditor.java | 367 +++++++++++++++--- 25 files changed, 475 insertions(+), 2135 deletions(-) delete mode 100644 designer-realize/src/main/java/com/fr/design/sort/celldscolumn/CellDSColumnSortGroupPane.java delete mode 100644 designer-realize/src/main/java/com/fr/design/sort/celldscolumn/CellDSColumnSortItemPane.java delete mode 100644 designer-realize/src/main/java/com/fr/design/sort/celldscolumn/CellDSColumnSortPane.java delete mode 100644 designer-realize/src/main/java/com/fr/design/sort/cellexpand/CellExpandSortGroupPane.java delete mode 100644 designer-realize/src/main/java/com/fr/design/sort/cellexpand/CellExpandSortItemPane.java delete mode 100644 designer-realize/src/main/java/com/fr/design/sort/cellexpand/CellExpandSortPane.java delete mode 100644 designer-realize/src/main/java/com/fr/design/sort/common/AbstractSortGroupPane.java delete mode 100644 designer-realize/src/main/java/com/fr/design/sort/common/AbstractSortItemPane.java delete mode 100644 designer-realize/src/main/java/com/fr/design/sort/common/AbstractSortPane.java delete mode 100644 designer-realize/src/main/java/com/fr/design/sort/common/SortColumnRowPane.java delete mode 100644 designer-realize/src/main/java/com/fr/design/sort/common/SortUIExpandablePane.java delete mode 100644 designer-realize/src/main/java/com/fr/design/sort/expressionpane/CellSortExpressionPane.java delete mode 100644 designer-realize/src/main/java/com/fr/design/sort/expressionpane/CustomSequenceEditPane.java delete mode 100644 designer-realize/src/main/java/com/fr/design/sort/expressionpane/CustomSequencePane.java delete mode 100644 designer-realize/src/main/java/com/fr/design/sort/expressionpane/CustomSequenceSortExpressionPane.java delete mode 100644 designer-realize/src/main/java/com/fr/design/sort/expressionpane/FormulaSortExpressionPane.java delete mode 100644 designer-realize/src/main/java/com/fr/design/sort/expressionpane/SortExpressionPane.java delete mode 100644 designer-realize/src/main/java/com/fr/design/sort/header/HeaderAreaPane.java delete mode 100644 designer-realize/src/main/java/com/fr/design/sort/header/HeaderSettingPane.java delete mode 100644 designer-realize/src/main/java/com/fr/design/sort/header/HeaderSortRulePane.java delete mode 100644 designer-realize/src/main/java/com/fr/design/sort/header/SortHeaderPane.java diff --git a/designer-realize/src/main/java/com/fr/design/dscolumn/DSColumnAdvancedPane.java b/designer-realize/src/main/java/com/fr/design/dscolumn/DSColumnAdvancedPane.java index 016281bc0d..31e81eb9a2 100644 --- a/designer-realize/src/main/java/com/fr/design/dscolumn/DSColumnAdvancedPane.java +++ b/designer-realize/src/main/java/com/fr/design/dscolumn/DSColumnAdvancedPane.java @@ -22,7 +22,6 @@ import com.fr.design.gui.style.TextFormatPane; import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.layout.TableLayout; import com.fr.design.layout.TableLayoutHelper; -import com.fr.design.sort.celldscolumn.CellDSColumnSortPane; import com.fr.design.utils.gui.GUICoreUtils; import com.fr.report.cell.CellElement; import com.fr.report.cell.TemplateCellElement; @@ -58,19 +57,8 @@ public class DSColumnAdvancedPane extends BasicPane { } public DSColumnAdvancedPane(int setting) { - initContentPane(setting); - initScrollPane(); - } - - private void initScrollPane() { - ScrollPane scrollPane = new ScrollPane(contentPane); - this.add(scrollPane); - } - - private void initContentPane(int setting) { - contentPane = new JPanel(); - contentPane.setBorder(BorderFactory.createEmptyBorder(3, 3, 3, 3)); - contentPane.setLayout(FRGUIPaneFactory.createBorderLayout()); + this.setBorder(BorderFactory.createEmptyBorder(3, 3, 3, 3)); + this.setLayout(FRGUIPaneFactory.createBorderLayout()); sortPane = new SortPane(); sortPane.setBorder(UITitledBorder.createBorderWithTitle(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Sort_Sort_Order"))); @@ -140,7 +128,7 @@ public class DSColumnAdvancedPane extends BasicPane { TableLayout.PREFERRED, TableLayout.PREFERRED, TableLayout.PREFERRED, TableLayout.PREFERRED}; double[] columnSize = {TableLayout.FILL}; - contentPane.add(TableLayoutHelper.createTableLayoutPane(components, rowSize, columnSize), BorderLayout.CENTER); + this.add(TableLayoutHelper.createTableLayoutPane(components, rowSize, columnSize), BorderLayout.CENTER); } @Override @@ -153,7 +141,7 @@ public class DSColumnAdvancedPane extends BasicPane { return; } - sortPane.populateBean(cellElement); + sortPane.populate(cellElement); valuePane.populate(cellElement); formatAttrPane.populate(cellElement); @@ -203,7 +191,7 @@ public class DSColumnAdvancedPane extends BasicPane { return; } - sortPane.updateBean(cellElement); + sortPane.update(cellElement); valuePane.update(cellElement); formatAttrPane.update(cellElement); @@ -239,25 +227,66 @@ public class DSColumnAdvancedPane extends BasicPane { } } - private static class ScrollPane extends UIScrollPane { - ScrollPane(Component component) { - super(component); - this.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0)); - } + private static class SortPane extends SortFormulaPane { + private CellElement cellElement; @Override - public Dimension getPreferredSize() { - return new Dimension(DSColumnPane.DEFAULT_DIMENSION.width - 20, DSColumnPane.DEFAULT_DIMENSION.height - 100); + public void formulaAction() { + if (cellElement == null) { + return; + } + Object value = cellElement.getValue(); + if (value == null || !(value instanceof DSColumn)) { + return; + } + + String[] displayNames = DesignTableDataManager.getSelectedColumnNames( + DesignTableDataManager.getEditingTableDataSource(), ((DSColumn) value).getDSName()); + + showFormulaDialog(displayNames); } - } - private static class SortPane extends CellDSColumnSortPane { - SortPane() { - this.setLayout(new FlowLayout(FlowLayout.LEFT)); + void populate(CellElement cellElement) { + if (cellElement == null) { + return; + } + this.cellElement = cellElement; + + Object value = cellElement.getValue(); + if (value == null || !(value instanceof DSColumn)) { + return; + } + DSColumn dSColumn = (DSColumn) value; + + int sort = dSColumn.getOrder(); + this.sortOrderComboBox.setSortOrder(new SortOrder(sort)); + + String sortFormula = dSColumn.getSortFormula(); + sortFormulaTextField.setText(sortFormula); } - protected boolean needSortHeaderPane() { - return false; + public void update(CellElement cellElement) { + if (cellElement == null) { + return; + } + Object value = cellElement.getValue(); + if (value == null || !(value instanceof DSColumn)) { + return; + } + DSColumn dSColumn = (DSColumn) (cellElement.getValue()); + + dSColumn.setOrder(this.sortOrderComboBox.getSortOrder().getOrder()); + //lance:sort formula + + String sText = null; + if (!(sortFormulaTextField.getText() == null || sortFormulaTextField.getText().trim().equals("") || sortFormulaTextField.getText().trim().equals("$$$"))) { + sText = new String(sortFormulaTextField.getText()); + } + if (!(sText == null || sText.length() < 1)) { + dSColumn.setSortFormula(sText); + } else { + dSColumn.setSortFormula(null); + } } } diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/cell/AbstractDSCellEditorPane.java b/designer-realize/src/main/java/com/fr/design/mainframe/cell/AbstractDSCellEditorPane.java index 7a26e53f2e..8a3b2ded4d 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/cell/AbstractDSCellEditorPane.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/cell/AbstractDSCellEditorPane.java @@ -1,7 +1,17 @@ package com.fr.design.mainframe.cell; -import com.fr.design.gui.frpane.AttributeChangeListener; -import com.fr.design.mainframe.AbstractAttrPane; +import com.fr.design.gui.iscrollbar.UIScrollBar; +import com.fr.design.mainframe.CellElementPropertyPane; +import com.fr.quickeditor.cellquick.layout.CellElementBarLayout; + +import javax.swing.BorderFactory; +import javax.swing.JPanel; +import java.awt.Container; +import java.awt.Dimension; +import java.awt.event.AdjustmentEvent; +import java.awt.event.AdjustmentListener; +import java.awt.event.MouseWheelEvent; +import java.awt.event.MouseWheelListener; /** * 右侧单元格元素面板抽象类 @@ -10,9 +20,26 @@ import com.fr.design.mainframe.AbstractAttrPane; * @version 2017年7月25日 * @since 9.0 */ -public abstract class AbstractDSCellEditorPane extends AbstractAttrPane { +public abstract class AbstractDSCellEditorPane extends JPanel { + + /** + * 滚动条相关配置 + */ + private static final int MAXVALUE = 100; + private static final int TITLE_HEIGHT = 95; + private static final int CONTENT_PANE_WIDTH_GAP = 3; + private static final int SCROLLBAR_WIDTH = 7; + private static final int MOUSE_WHEEL_SPEED = 5; + private int maxHeight = 280; + + private JPanel leftContentPane; + private UIScrollBar scrollBar; + + protected abstract JPanel createContentPane(); - private static final int FIXED_HEIGHT = 200; + public abstract String getIconPath(); + + public abstract String title4PopupWindow(); /** * 从面板拿数据保存 @@ -24,19 +51,78 @@ public abstract class AbstractDSCellEditorPane extends AbstractAttrPane { */ public abstract void populate(); + protected void createScrollPane() { + leftContentPane = this.createContentPane(); + this.prepareScrollBar(); + leftContentPane.setBorder(BorderFactory.createMatteBorder(10, 10, 0, 0, this.getBackground())); - /** - * 释放tc - */ - protected abstract void release(); + this.setLayout(new CellElementBarLayout(leftContentPane) { + @Override + public void layoutContainer(Container parent) { + maxHeight = CellElementPropertyPane.getInstance().getHeight() - TITLE_HEIGHT; + int beginY; + if ((MAXVALUE - scrollBar.getVisibleAmount()) == 0) { + beginY = 0; + } else { + int preferredHeight = leftContentPane.getPreferredSize().height; + int value = scrollBar.getValue(); + beginY = value * (preferredHeight - maxHeight) / (MAXVALUE - scrollBar.getVisibleAmount()); + } + int width = parent.getWidth(); + int height = parent.getHeight(); + if (leftContentPane.getPreferredSize().height > maxHeight) { + leftContentPane.setBounds(0, -beginY, width - SCROLLBAR_WIDTH - CONTENT_PANE_WIDTH_GAP, height + beginY); + scrollBar.setBounds(width - SCROLLBAR_WIDTH - CONTENT_PANE_WIDTH_GAP, 0, SCROLLBAR_WIDTH + CONTENT_PANE_WIDTH_GAP, height); + } else { + leftContentPane.setBounds(0, 0, width - SCROLLBAR_WIDTH - CONTENT_PANE_WIDTH_GAP, height); + } + } + }); + this.add(scrollBar); + this.add(leftContentPane); + } - protected abstract AttributeChangeListener getAttributeChangeListener(); - public void addAttributeChangeListener() { - this.addAttributeChangeListener(getAttributeChangeListener()); - } + private void prepareScrollBar() { + scrollBar = new UIScrollBar(UIScrollBar.VERTICAL) { + @Override + public int getVisibleAmount() { + int preferredHeight = leftContentPane.getPreferredSize().height; + int e = MAXVALUE * (maxHeight) / preferredHeight; + setVisibleAmount(e); + return e; + } + + @Override + public int getMaximum() { + return MAXVALUE; + } + }; + + scrollBar.addAdjustmentListener(new AdjustmentListener() { + + @Override + public void adjustmentValueChanged(AdjustmentEvent e) { + doLayout(); + } + }); + this.addMouseWheelListener(new MouseWheelListener() { - protected int getMaxHeight() { - return Math.max(super.getMaxHeight() - FIXED_HEIGHT, 0); + @Override + public void mouseWheelMoved(MouseWheelEvent e) { + int value = scrollBar.getValue(); + value += MOUSE_WHEEL_SPEED * e.getWheelRotation(); + scrollBar.setValue(value); + doLayout(); + } + }); + scrollBar.setPreferredSize(new Dimension(SCROLLBAR_WIDTH + CONTENT_PANE_WIDTH_GAP, this.getHeight())); + scrollBar.setBlockIncrement(SCROLLBAR_WIDTH + CONTENT_PANE_WIDTH_GAP); + scrollBar.setBorder(BorderFactory.createMatteBorder(0, CONTENT_PANE_WIDTH_GAP, 0, 0, this.getBackground())); } + + /** + * 释放tc + */ + protected abstract void release(); } diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/cell/settingpane/CellExpandAttrPane.java b/designer-realize/src/main/java/com/fr/design/mainframe/cell/settingpane/CellExpandAttrPane.java index 9549a3a7e8..cd454660df 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/cell/settingpane/CellExpandAttrPane.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/cell/settingpane/CellExpandAttrPane.java @@ -4,6 +4,7 @@ import com.fr.design.constants.LayoutConstants; import com.fr.design.constants.UIConstants; import com.fr.design.expand.ExpandLeftFatherPane; import com.fr.design.expand.ExpandUpFatherPane; +import com.fr.design.expand.SortExpandAttrPane; import com.fr.design.foldablepane.UIExpandablePane; import com.fr.design.gui.ibutton.UIButtonGroup; import com.fr.design.gui.icheckbox.UICheckBox; @@ -12,7 +13,6 @@ import com.fr.design.i18n.Toolkit; import com.fr.design.layout.TableLayout; import com.fr.design.layout.TableLayoutHelper; import com.fr.design.mainframe.theme.utils.DefaultThemedTemplateCellElementCase; -import com.fr.design.sort.cellexpand.CellExpandSortPane; import com.fr.general.ComparatorUtils; import com.fr.general.IOUtils; import com.fr.report.cell.TemplateCellElement; @@ -38,11 +38,11 @@ public class CellExpandAttrPane extends AbstractCellAttrPane { private ExpandUpFatherPane rightFatherPane; private UICheckBox horizontalExpandableCheckBox; private UICheckBox verticalExpandableCheckBox; + private SortExpandAttrPane sortAfterExpand; private JPanel layoutPane; private JPanel basicPane; private JPanel seniorPane; private CellExpandExtraAttrPane extraPane; - private CellExpandSortPane cellExpandSortPane; /** @@ -62,6 +62,7 @@ public class CellExpandAttrPane extends AbstractCellAttrPane { rightFatherPane = new ExpandUpFatherPane(); horizontalExpandableCheckBox = new UICheckBox(Toolkit.i18nText("Fine-Design_Report_ExpandD_Horizontal_Extendable")); verticalExpandableCheckBox = new UICheckBox(Toolkit.i18nText("Fine-Design_Report_ExpandD_Vertical_Extendable")); + sortAfterExpand = new SortExpandAttrPane(); initAllNames(); return layoutPane(); } @@ -80,11 +81,8 @@ public class CellExpandAttrPane extends AbstractCellAttrPane { seniorPane = new JPanel(); basicPane = new UIExpandablePane(Toolkit.i18nText("Fine-Design_Report_Basic"), 223, 24, basicPane()); seniorPane = new UIExpandablePane(Toolkit.i18nText("Fine-Design_Report_Advanced"), 223, 24, seniorPane()); - JPanel sortUIExpandablePane = new UIExpandablePane(Toolkit.i18nText("Fine-Design_Report_Expend_Sort"), - 223, 24, cellExpandSortPane = new CellExpandSortPane(this)); layoutPane.add(basicPane, BorderLayout.NORTH); layoutPane.add(seniorPane, BorderLayout.CENTER); - layoutPane.add(sortUIExpandablePane, BorderLayout.SOUTH); extraPane = CellExpandExtraAttrPane.getInstance(); @@ -121,12 +119,16 @@ public class CellExpandAttrPane extends AbstractCellAttrPane { private JPanel seniorPane() { double f = TableLayout.FILL; double p = TableLayout.PREFERRED; + UILabel expendSort = new UILabel(Toolkit.i18nText("Fine-Design_Report_Expend_Sort"), SwingConstants.LEFT); + JPanel expendSortPane = new JPanel(new BorderLayout()); + expendSortPane.add(expendSort, BorderLayout.NORTH); horizontalExpandableCheckBox.setBorder(UIConstants.CELL_ATTR_ZEROBORDER); verticalExpandableCheckBox.setBorder(UIConstants.CELL_ATTR_ZEROBORDER); Component[][] components = new Component[][]{ new Component[]{null, null}, new Component[]{horizontalExpandableCheckBox, null}, new Component[]{verticalExpandableCheckBox, null}, + new Component[]{expendSortPane, sortAfterExpand}, }; double[] rowSize = {p, p, p, p, p}; double[] columnSize = {p, f}; @@ -167,8 +169,9 @@ public class CellExpandAttrPane extends AbstractCellAttrPane { } } + sortAfterExpand.populate(cellExpandAttr); + extraPane.populate(cellElement); - cellExpandSortPane.populateBean(cellElement); } @@ -214,8 +217,11 @@ public class CellExpandAttrPane extends AbstractCellAttrPane { } } + if (ComparatorUtils.equals(getGlobalName(), Toolkit.i18nText("Fine-Design_Basic_ExpandD_Sort_After_Expand"))) { + sortAfterExpand.update(cellExpandAttr); + } + extraPane.update(cellElement); - cellExpandSortPane.updateBean(cellElement); } /** diff --git a/designer-realize/src/main/java/com/fr/design/sort/celldscolumn/CellDSColumnSortGroupPane.java b/designer-realize/src/main/java/com/fr/design/sort/celldscolumn/CellDSColumnSortGroupPane.java deleted file mode 100644 index 788f1a57cb..0000000000 --- a/designer-realize/src/main/java/com/fr/design/sort/celldscolumn/CellDSColumnSortGroupPane.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.fr.design.sort.celldscolumn; - -import com.fr.design.data.DesignTableDataManager; -import com.fr.design.data.tabledata.wrapper.TableDataWrapper; -import com.fr.design.file.HistoryTemplateListCache; -import com.fr.design.sort.common.AbstractSortGroupPane; -import com.fr.design.sort.common.AbstractSortItemPane; -import com.fr.report.cell.cellattr.core.group.DSColumn; -import com.fr.report.core.sort.sortexpression.SortExpression; - -public class CellDSColumnSortGroupPane extends AbstractSortGroupPane { - DSColumn dsColumn; - - public CellDSColumnSortGroupPane(int sortGroupPaneWidth, int sortGroupPaneRightWidth) { - super(sortGroupPaneWidth, sortGroupPaneRightWidth); - } - - public void populateDsColumn(DSColumn dsColumn) { - this.dsColumn = dsColumn; - } - - @Override - protected AbstractSortItemPane refreshSortItemPane(int sortItemPaneWidth, int sortItemPaneRightWidth, SortExpression sortExpression) { - CellDSColumnSortItemPane cellDSColumnSortItemPane = new CellDSColumnSortItemPane(sortItemPaneWidth, sortItemPaneRightWidth); - java.util.Map tableDataWrapperMap = - DesignTableDataManager.getAllEditingDataSet(HistoryTemplateListCache.getInstance().getCurrentEditingTemplate().getTarget()); - TableDataWrapper tableDataWrapper = tableDataWrapperMap.get(dsColumn.getDSName()); - if (tableDataWrapper != null) { - java.util.List columnNameList = tableDataWrapper.calculateColumnNameList(); - String[] columnNames = new String[columnNameList.size()]; - columnNameList.toArray(columnNames); - cellDSColumnSortItemPane.sortAreaUiComboBox.removeAllItems(); - for (String columnName : columnNames) { - cellDSColumnSortItemPane.sortAreaUiComboBox.addItem(columnName); - } - } - cellDSColumnSortItemPane.populateBean(sortExpression); - return cellDSColumnSortItemPane; - } -} diff --git a/designer-realize/src/main/java/com/fr/design/sort/celldscolumn/CellDSColumnSortItemPane.java b/designer-realize/src/main/java/com/fr/design/sort/celldscolumn/CellDSColumnSortItemPane.java deleted file mode 100644 index 0c202fe0e2..0000000000 --- a/designer-realize/src/main/java/com/fr/design/sort/celldscolumn/CellDSColumnSortItemPane.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.fr.design.sort.celldscolumn; - -import com.fr.design.gui.icombobox.UIComboBox; -import com.fr.design.sort.common.AbstractSortItemPane; -import com.fr.design.sort.common.AbstractSortPane; -import com.fr.report.core.sort.sortexpression.SortExpression; - -import javax.swing.*; -import java.awt.*; - - -public class CellDSColumnSortItemPane extends AbstractSortItemPane { - - UIComboBox sortAreaUiComboBox; - - public CellDSColumnSortItemPane(int sortItemPaneWidth, int sortItemPaneRightWidth) { - super(sortItemPaneWidth, sortItemPaneRightWidth); - } - - @Override - public void initMainSortAreaPane(JPanel sortAreaPane) { - sortAreaUiComboBox = new UIComboBox(new String[0]); - sortAreaUiComboBox.setPreferredSize(new Dimension(sortItemPaneRightWidth, AbstractSortPane.PANE_COMPONENT_HEIGHT)); - sortAreaPane.add(sortAreaUiComboBox); - } - - public void populateBean(SortExpression sortExpression) { - sortAreaUiComboBox.setSelectedItem(sortExpression.getSortArea()); - super.populateBean(sortExpression); - } - - public SortExpression updateBean() { - SortExpression sortExpression = super.updateBean(); - if (sortExpression != null && sortAreaUiComboBox.getSelectedItem() != null) { - sortExpression.setSortArea(sortAreaUiComboBox.getSelectedItem().toString()); - } - return sortExpression; - } - -} \ No newline at end of file diff --git a/designer-realize/src/main/java/com/fr/design/sort/celldscolumn/CellDSColumnSortPane.java b/designer-realize/src/main/java/com/fr/design/sort/celldscolumn/CellDSColumnSortPane.java deleted file mode 100644 index aec9c0bccf..0000000000 --- a/designer-realize/src/main/java/com/fr/design/sort/celldscolumn/CellDSColumnSortPane.java +++ /dev/null @@ -1,59 +0,0 @@ -package com.fr.design.sort.celldscolumn; - -import com.fr.design.gui.ilable.UILabel; -import com.fr.design.sort.common.AbstractSortPane; -import com.fr.general.data.TableDataColumn; -import com.fr.report.cell.TemplateCellElement; -import com.fr.report.cell.cellattr.core.group.DSColumn; -import com.fr.report.core.sort.common.CellSortAttr; - -import javax.swing.*; - - -public class CellDSColumnSortPane extends AbstractSortPane { - - public CellDSColumnSortPane() { - super(220, 150); - //this.setLayout(new BoxLayout(this, BoxLayout.Y_AXIS)); - } - - @Override - protected void initSortGroupPane() { - sortGroupPane = new CellDSColumnSortGroupPane(sortPaneWidth, sortPaneRightWidth); - this.add(sortGroupPane); - } - - @Override - protected CellSortAttr getCellSortAttr(TemplateCellElement cellElement) { - if (cellElement.getValue() instanceof DSColumn) { - DSColumn dsColumn = ((DSColumn) cellElement.getValue()); - if (dsColumn.getCellSortAttr() == null) { - dsColumn.setCellSortAttr(new CellSortAttr()); - } - return dsColumn.getCellSortAttr(); - } - return null; - } - - protected void populateSortArea(TemplateCellElement cellElement) { - super.populateSortArea(cellElement); - if (cellElement.getValue() instanceof DSColumn) { - DSColumn dsColumn = ((DSColumn) cellElement.getValue()); - TableDataColumn tableDataColumn = dsColumn.getColumn(); - if (tableDataColumn instanceof TableDataColumn) { - selfSortArea = TableDataColumn.getColumnName(tableDataColumn); - } - } - } - - public void populateBean(TemplateCellElement cellElement) { - if (cellElement.getValue() instanceof DSColumn) { - DSColumn dsColumn = ((DSColumn) cellElement.getValue()); - if (sortGroupPane != null) { - ((CellDSColumnSortGroupPane) sortGroupPane).populateDsColumn(dsColumn); - } - } - super.populateBean(cellElement); - } - -} \ No newline at end of file diff --git a/designer-realize/src/main/java/com/fr/design/sort/cellexpand/CellExpandSortGroupPane.java b/designer-realize/src/main/java/com/fr/design/sort/cellexpand/CellExpandSortGroupPane.java deleted file mode 100644 index 62cb37e91f..0000000000 --- a/designer-realize/src/main/java/com/fr/design/sort/cellexpand/CellExpandSortGroupPane.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.fr.design.sort.cellexpand; - -import com.fr.design.sort.common.AbstractSortGroupPane; -import com.fr.design.sort.common.AbstractSortItemPane; -import com.fr.report.core.sort.sortexpression.SortExpression; - -public class CellExpandSortGroupPane extends AbstractSortGroupPane { - - public CellExpandSortGroupPane(int sortGroupPaneWidth, int sortGroupPaneRightWidth) { - super(sortGroupPaneWidth, sortGroupPaneRightWidth); - } - - @Override - protected AbstractSortItemPane refreshSortItemPane(int sortItemPaneWidth, int sortItemPaneRightWidth, SortExpression sortExpression) { - AbstractSortItemPane abstractSortItemPane = new CellExpandSortItemPane( sortItemPaneWidth, sortItemPaneRightWidth); - abstractSortItemPane.populateBean(sortExpression); - return abstractSortItemPane; - } -} diff --git a/designer-realize/src/main/java/com/fr/design/sort/cellexpand/CellExpandSortItemPane.java b/designer-realize/src/main/java/com/fr/design/sort/cellexpand/CellExpandSortItemPane.java deleted file mode 100644 index 4b14dc6929..0000000000 --- a/designer-realize/src/main/java/com/fr/design/sort/cellexpand/CellExpandSortItemPane.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.fr.design.sort.cellexpand; - -import com.fr.design.sort.common.AbstractSortPane; -import com.fr.design.sort.common.SortColumnRowPane; -import com.fr.design.sort.common.AbstractSortItemPane; -import com.fr.report.core.sort.sortexpression.SortExpression; -import com.fr.stable.ColumnRow; - -import javax.swing.*; - -public class CellExpandSortItemPane extends AbstractSortItemPane { - SortColumnRowPane columnRowPane; - - public CellExpandSortItemPane(int sortItemPaneWidth, int sortItemPaneRightWidth) { - super(sortItemPaneWidth, sortItemPaneRightWidth); - } - - @Override - public void initMainSortAreaPane(JPanel sortAreaPane) { - columnRowPane = new SortColumnRowPane(sortItemPaneRightWidth + 4, AbstractSortPane.PANE_COMPONENT_HEIGHT); - sortAreaPane.add(columnRowPane); - } - - public void populateBean(SortExpression sortExpression) { - columnRowPane.populateBean(ColumnRow.valueOf(sortExpression.getSortArea())); - super.populateBean(sortExpression); - } - - public SortExpression updateBean() { - SortExpression sortExpression = super.updateBean(); - if (sortExpression != null) { - ColumnRow columnRow = columnRowPane.updateBean(); - sortExpression.setSortArea(columnRow == null ? null : columnRow.toString()); - } - return sortExpression; - } -} diff --git a/designer-realize/src/main/java/com/fr/design/sort/cellexpand/CellExpandSortPane.java b/designer-realize/src/main/java/com/fr/design/sort/cellexpand/CellExpandSortPane.java deleted file mode 100644 index 5bfc20eeae..0000000000 --- a/designer-realize/src/main/java/com/fr/design/sort/cellexpand/CellExpandSortPane.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.fr.design.sort.cellexpand; - - -import com.fr.design.mainframe.cell.settingpane.CellExpandAttrPane; -import com.fr.design.sort.common.AbstractSortPane; -import com.fr.report.cell.TemplateCellElement; -import com.fr.report.cell.cellattr.CellExpandAttr; -import com.fr.report.core.sort.common.CellSortAttr; - - -import javax.swing.*; - -public class CellExpandSortPane extends AbstractSortPane { - CellExpandAttrPane cellExpandAttrPane; - - public CellExpandSortPane(CellExpandAttrPane cellExpandAttrPane) { - super(227, 155); - this.cellExpandAttrPane = cellExpandAttrPane; - this.setLayout(new BoxLayout(this, BoxLayout.Y_AXIS)); - } - - @Override - protected void initSortGroupPane() { - sortGroupPane = new CellExpandSortGroupPane(sortPaneWidth, sortPaneRightWidth); - this.add(sortGroupPane); - } - - @Override - protected CellSortAttr getCellSortAttr(TemplateCellElement cellElement) { - CellExpandAttr cellExpandAttr = cellElement.getCellExpandAttr(); - if (cellExpandAttr != null) { - if (cellExpandAttr.getCellSortAttr() == null) { - cellExpandAttr.setCellSortAttr(new CellSortAttr()); - } - return cellExpandAttr.getCellSortAttr(); - } - return null; - } -} diff --git a/designer-realize/src/main/java/com/fr/design/sort/common/AbstractSortGroupPane.java b/designer-realize/src/main/java/com/fr/design/sort/common/AbstractSortGroupPane.java deleted file mode 100644 index 6cdde9eb4a..0000000000 --- a/designer-realize/src/main/java/com/fr/design/sort/common/AbstractSortGroupPane.java +++ /dev/null @@ -1,151 +0,0 @@ -package com.fr.design.sort.common; - -import com.fr.base.svg.IconUtils; -import com.fr.design.event.ComponentChangeListener; -import com.fr.design.event.ComponentChangeObserver; -import com.fr.design.gui.ibutton.UIButton; -import com.fr.design.i18n.Toolkit; -import com.fr.report.core.sort.sortexpression.CellSortExpression; -import com.fr.report.core.sort.sortexpression.SortExpression; - -import javax.swing.*; -import java.awt.*; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.util.ArrayList; -import java.util.List; - - -public abstract class AbstractSortGroupPane extends JPanel implements ComponentChangeObserver { - - private static final int SECOND_SORT_LENGTH_REDUCTION = 13; - - protected int sortGroupPaneWidth; - protected int sortGroupPaneRightWidth; - List sortExpressions; - List sortItemPanes = new ArrayList<>(); - AddSortItemBar addSortItemBar; - JPanel sortItemListPane; - UIButton uiButton; - String selfSortArea; - - ComponentChangeListener componentChangeListener; - - public AbstractSortGroupPane(int sortGroupPaneWidth, int sortGroupPaneRightWidth) { - this.sortGroupPaneRightWidth = sortGroupPaneRightWidth; - this.sortGroupPaneWidth = sortGroupPaneWidth; - this.setLayout(new BoxLayout(this, BoxLayout.Y_AXIS)); - initComponents(); - } - - private void initComponents() { - addSortItemBar = new AddSortItemBar(this); - sortItemListPane = new JPanel(); - sortItemListPane.setLayout(new BoxLayout(sortItemListPane, BoxLayout.Y_AXIS)); - this.add(sortItemListPane); - this.add(addSortItemBar); - } - - public void populateBean(List sortExpressions, String selfSortArea) { - this.sortItemListPane.removeAll(); - this.selfSortArea = selfSortArea; - this.sortExpressions = sortExpressions; - this.sortItemPanes = new ArrayList<>(); - for (int i = 0; i < sortExpressions.size(); i++) { - addSortItem(sortExpressions.get(i), i == 0); - } - refresh(); - } - - protected abstract AbstractSortItemPane refreshSortItemPane(int sortItemPaneWidth, int sortItemPaneRightWidth, SortExpression sortExpression); - - public List updateBean() { - List sortExpressions = new ArrayList<>(); - for (JPanel sortItemPane : sortItemPanes) { - SortExpression sortExpression = null; - AbstractSortItemPane abstractSortItemPane = null; - if (sortItemPane instanceof AbstractSortItemPane) { - abstractSortItemPane = (AbstractSortItemPane) sortItemPane; - } else if (sortItemPane instanceof SortUIExpandablePane) { - abstractSortItemPane = (AbstractSortItemPane) ((SortUIExpandablePane) sortItemPane).getContentPane(); - } - if (abstractSortItemPane != null) { - sortExpression = abstractSortItemPane.updateBean(); - } - if (sortExpression != null) { - sortExpressions.add(sortExpression); - } - } - return sortExpressions; - } - - - public void removeSortItem(int no) { - if (no < sortExpressions.size()) { - sortItemListPane.remove(sortItemPanes.get(no)); - sortExpressions.remove(no); - sortItemPanes.remove(no); - refresh(); - } - } - - public void registerChangeListener(ComponentChangeListener componentChangeListener) { - this.componentChangeListener = componentChangeListener; - } - - public void addSortItem(SortExpression sortExpression, boolean mainSort) { - int sortItemPaneWidth = sortGroupPaneWidth; - int sortItemPaneRightWidth = sortGroupPaneRightWidth; - if (!mainSort) { - sortItemPaneWidth -= SECOND_SORT_LENGTH_REDUCTION; - sortItemPaneRightWidth -= SECOND_SORT_LENGTH_REDUCTION; - } - if (sortExpression == null) { - sortExpression = new CellSortExpression(selfSortArea); - sortExpressions.add(sortExpression); - } - - AbstractSortItemPane abstractSortItemPane = - refreshSortItemPane(sortItemPaneWidth, sortItemPaneRightWidth, sortExpression); - - JPanel sortItemPane = abstractSortItemPane; - if (!mainSort) { - sortItemPane = new SortUIExpandablePane(abstractSortItemPane, this); - } - sortItemListPane.add(sortItemPane); - sortItemPanes.add(sortItemPane); - - if (componentChangeListener != null) { - componentChangeListener.initListener(sortItemPane); - } - refresh(); - } - - protected void refresh() { - validate(); - repaint(); - revalidate(); - } - - class AddSortItemBar extends JPanel { - AbstractSortGroupPane sortGroupPane; - - AddSortItemBar(AbstractSortGroupPane sortGroupPane) { - init(); - this.sortGroupPane = sortGroupPane; - this.setLayout(new FlowLayout(FlowLayout.CENTER, 0, 5)); - } - - void init() { - uiButton = new UIButton(Toolkit.i18nText("Fine-Design_Sort_Add_Second_Sort"), - IconUtils.readIcon("/com/fr/design/images/sort/add.png")); - uiButton.setPreferredSize(new Dimension(sortGroupPaneWidth - 4, AbstractSortPane.PANE_COMPONENT_HEIGHT)); - this.add(uiButton); - uiButton.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - sortGroupPane.addSortItem(null, false); - } - }); - } - } -} diff --git a/designer-realize/src/main/java/com/fr/design/sort/common/AbstractSortItemPane.java b/designer-realize/src/main/java/com/fr/design/sort/common/AbstractSortItemPane.java deleted file mode 100644 index 82d14bb7ec..0000000000 --- a/designer-realize/src/main/java/com/fr/design/sort/common/AbstractSortItemPane.java +++ /dev/null @@ -1,153 +0,0 @@ -package com.fr.design.sort.common; - -import com.fr.design.gui.icombobox.UIComboBox; -import com.fr.design.gui.ilable.UILabel; - -import com.fr.design.i18n.Toolkit; -import com.fr.design.sort.expressionpane.CellSortExpressionPane; -import com.fr.design.sort.expressionpane.CustomSequenceSortExpressionPane; -import com.fr.design.sort.expressionpane.FormulaSortExpressionPane; -import com.fr.design.sort.expressionpane.SortExpressionPane; -import com.fr.report.core.sort.sortexpression.SortExpression; -import com.fr.report.core.sort.common.SortRule; -import com.fr.stable.StringUtils; - -import javax.swing.*; -import java.awt.*; -import java.awt.event.ItemEvent; -import java.awt.event.ItemListener; -import java.util.ArrayList; -import java.util.List; - -public abstract class AbstractSortItemPane extends JPanel { - protected int sortItemPaneWidth; - protected int sortItemPaneRightWidth; - List sortExpressionPanes = new ArrayList<>(); - SortExpressionPane currentSortExpressionPane = null; - JPanel sortBasisPanel = null; - UIComboBox sortRuleUiComboBox; - UIComboBox sortBasisUiComboBox; - JPanel sortAreaPane; - JPanel sortRulePane; - - public AbstractSortItemPane(int sortItemPaneWidth, int sortItemPaneRightWidth) { - this.sortItemPaneWidth = sortItemPaneWidth; - this.sortItemPaneRightWidth = sortItemPaneRightWidth; - this.setLayout(new BoxLayout(this, BoxLayout.Y_AXIS)); - registerSortExpressionPanes(); - initComponents(); - } - - private void initComponents() { - initSortAreaPane(); - initSortBasisPanel(); - initSortRulePane(); - } - - private void registerSortExpressionPanes() { - sortExpressionPanes.add(new CellSortExpressionPane(sortItemPaneRightWidth)); - sortExpressionPanes.add(new FormulaSortExpressionPane(sortItemPaneRightWidth)); - sortExpressionPanes.add(new CustomSequenceSortExpressionPane(sortItemPaneWidth, sortItemPaneRightWidth)); - } - - void initSortAreaPane() { - sortAreaPane = new JPanel(new FlowLayout(FlowLayout.LEFT, 0, AbstractSortPane.PANE_COMPONENT_V_GAP)); - sortAreaPane.add(new UILabel(Toolkit.i18nText("Fine-Design_Sort_Sort_Area"), SwingConstants.LEFT)); - sortAreaPane.add(AbstractSortPane.createIntervalUILabel()); - initMainSortAreaPane(sortAreaPane); - this.add(sortAreaPane); - } - - public abstract void initMainSortAreaPane(JPanel sortAreaPane); - - void initSortRulePane() { - sortRulePane = new JPanel(new FlowLayout(FlowLayout.LEFT, 0, AbstractSortPane.PANE_COMPONENT_V_GAP)); - sortRuleUiComboBox = new UIComboBox(new String[]{SortRule.ASC.getDescription(), - SortRule.DES.getDescription(), SortRule.NO_SORT.getDescription()}); - sortRuleUiComboBox.setPreferredSize(new Dimension(sortItemPaneRightWidth, AbstractSortPane.PANE_COMPONENT_HEIGHT)); - sortRulePane.add(new UILabel(Toolkit.i18nText("Fine-Design_Sort_Sort_Rule"), SwingConstants.LEFT)); - sortRulePane.add(AbstractSortPane.createIntervalUILabel()); - sortRulePane.add(sortRuleUiComboBox); - this.add(sortRulePane); - } - - void initSortBasisPanel() { - sortBasisPanel = new JPanel(new FlowLayout(FlowLayout.LEFT, 0, AbstractSortPane.PANE_COMPONENT_V_GAP)); - sortBasisUiComboBox = new UIComboBox(getSortNames()); - sortBasisUiComboBox.setPreferredSize(new Dimension(sortItemPaneRightWidth, AbstractSortPane.PANE_COMPONENT_HEIGHT)); - sortBasisUiComboBox.addItemListener(new ItemListener() { - @Override - public void itemStateChanged(ItemEvent e) { - if (sortExpressionPanes.get(sortBasisUiComboBox.getSelectedIndex()) != currentSortExpressionPane) { - if (currentSortExpressionPane != null) { - currentSortExpressionPane.setVisible(false); - } - currentSortExpressionPane = sortExpressionPanes.get(sortBasisUiComboBox.getSelectedIndex()); - refreshCurrentSortExpressionPane(); - } - } - }); - sortBasisPanel.add(new UILabel(Toolkit.i18nText("Fine-Design_Sort_Sort_Basis"), SwingConstants.LEFT)); - sortBasisPanel.add(AbstractSortPane.createIntervalUILabel()); - sortBasisPanel.add(sortBasisUiComboBox); - this.add(sortBasisPanel); - for (SortExpressionPane sortExpressionPane : sortExpressionPanes) { - this.add(sortExpressionPane); - sortExpressionPane.setVisible(false); - } - } - - private void refreshCurrentSortExpressionPane() { - currentSortExpressionPane.setVisible(true); - sortAreaPane.setVisible(currentSortExpressionPane.needSortArea()); - sortRulePane.setVisible(currentSortExpressionPane.needSortRule()); - } - - private String[] getSortNames() { - String[] sortNames = new String[sortExpressionPanes.size()]; - for (int i = 0; i < sortExpressionPanes.size(); i++) { - sortNames[i] = sortExpressionPanes.get(i).getSortName(); - } - return sortNames; - } - - public void populateBean(SortExpression sortExpression) { - if (sortExpression.getSortRule() == SortRule.ASC) { - sortRuleUiComboBox.setSelectedIndex(0); - } else if (sortExpression.getSortRule() == SortRule.DES) { - sortRuleUiComboBox.setSelectedIndex(1); - } else if (sortExpression.getSortRule() == SortRule.NO_SORT) { - sortRuleUiComboBox.setSelectedIndex(2); - } - for (int i = 0; i < sortExpressionPanes.size(); i++) { - if (StringUtils.equals(sortExpression.getSortName(), sortExpressionPanes.get(i).getSortName())) { - if (currentSortExpressionPane != null) { - currentSortExpressionPane.setVisible(false); - } - currentSortExpressionPane = sortExpressionPanes.get(i); - currentSortExpressionPane.populateBean(sortExpression); - sortBasisUiComboBox.setSelectedIndex(i); - refreshCurrentSortExpressionPane(); - break; - } - } - refresh(); - } - - public SortExpression updateBean() { - SortExpression sortExpression = currentSortExpressionPane.updateBean(); - if (sortExpression != null) { - String sortRule = sortRuleUiComboBox.getSelectedItem().toString(); - if (StringUtils.isNotBlank(sortRule)) { - sortExpression.setSortRule(SortRule.parse(sortRule)); - } - } - return sortExpression; - } - - protected void refresh() { - validate(); - repaint(); - revalidate(); - } -} diff --git a/designer-realize/src/main/java/com/fr/design/sort/common/AbstractSortPane.java b/designer-realize/src/main/java/com/fr/design/sort/common/AbstractSortPane.java deleted file mode 100644 index 071d587067..0000000000 --- a/designer-realize/src/main/java/com/fr/design/sort/common/AbstractSortPane.java +++ /dev/null @@ -1,113 +0,0 @@ -package com.fr.design.sort.common; - -import com.fr.design.gui.ilable.UILabel; -import com.fr.design.sort.header.SortHeaderPane; -import com.fr.report.cell.TemplateCellElement; -import com.fr.report.core.sort.common.CellSortAttr; -import com.fr.report.core.sort.sortexpression.CellSortExpression; -import com.fr.report.core.sort.sortexpression.SortExpression; -import com.fr.report.core.sort.header.SortHeader; -import com.fr.stable.ColumnRow; - -import javax.swing.*; -import java.awt.*; -import java.util.ArrayList; -import java.util.List; - - -public abstract class AbstractSortPane extends JPanel { - protected int sortPaneWidth; - protected int sortPaneRightWidth; - public static final int PANE_COMPONENT_HEIGHT = 20; - public static final int PANE_COMPONENT_V_GAP = 4; - public static final int PANE_COMPONENT_H_GAP = 14; - protected AbstractSortGroupPane sortGroupPane; - protected SortHeaderPane sortHeaderPane; - protected String selfSortArea; - protected String defaultHeaderArea; - - public AbstractSortPane(int sortPaneWidth, int sortPaneRightWidth) { - this.sortPaneWidth = sortPaneWidth; - this.sortPaneRightWidth = sortPaneRightWidth; - initComponents(); - } - - private void initComponents() { - initSortGroupPane(); - if (needSortHeaderPane()) { - sortHeaderPane = new SortHeaderPane(sortPaneWidth, sortPaneRightWidth + 5); - this.add(sortHeaderPane); - } - } - - protected abstract void initSortGroupPane(); - - - protected boolean needSortHeaderPane() { - return true; - } - - protected abstract CellSortAttr getCellSortAttr(TemplateCellElement cellElement); - - public void populateBean(TemplateCellElement cellElement) { - populateSortArea(cellElement); - List sortExpressions = null; - CellSortAttr cellSortAttr = getCellSortAttr(cellElement); - if (cellSortAttr != null) { - sortExpressions = cellSortAttr.getSortExpressions(); - } - if (sortExpressions == null || sortExpressions.size() == 0) { - sortExpressions = new ArrayList<>(); - sortExpressions.add(new CellSortExpression(selfSortArea)); - } - sortGroupPane.populateBean(sortExpressions, selfSortArea); - if (needSortHeaderPane()) { - SortHeader sortHeader = null; - if (cellSortAttr != null) { - sortHeader = cellSortAttr.getSortHeader(); - } - sortHeaderPane.populateBean(sortHeader, defaultHeaderArea); - } - refresh(); - } - - protected void populateSortArea(TemplateCellElement cellElement) { - int row = cellElement.getRow(); - int column = cellElement.getColumn(); - selfSortArea = ColumnRow.valueOf(column, row).toString(); - if (row > 0) { - defaultHeaderArea = ColumnRow.valueOf(column, row - 1).toString(); - } else { - defaultHeaderArea = null; - } - } - - public void updateBean(TemplateCellElement cellElement) { - List sortExpressions = sortGroupPane.updateBean(); - CellSortAttr cellSortAttr = getCellSortAttr(cellElement); - cellSortAttr.setSortExpressions(sortExpressions); - if (needSortHeaderPane()) { - SortHeader sortHeader = sortHeaderPane.updateBean(); - if (sortHeader != null) { - sortHeader.setSortArea(selfSortArea); - } - cellSortAttr.setSortHeader(sortHeader); - } - } - - protected void refresh() { - validate(); - repaint(); - revalidate(); - } - - public static UILabel createIntervalUILabel() { - return createIntervalUILabel(PANE_COMPONENT_H_GAP); - } - - public static UILabel createIntervalUILabel(int vGap) { - UILabel uiLabel = new UILabel(); - uiLabel.setPreferredSize(new Dimension(vGap, 10)); - return uiLabel; - } -} diff --git a/designer-realize/src/main/java/com/fr/design/sort/common/SortColumnRowPane.java b/designer-realize/src/main/java/com/fr/design/sort/common/SortColumnRowPane.java deleted file mode 100644 index 016ce330f2..0000000000 --- a/designer-realize/src/main/java/com/fr/design/sort/common/SortColumnRowPane.java +++ /dev/null @@ -1,290 +0,0 @@ -package com.fr.design.sort.common; - -import com.fr.base.Style; -import com.fr.base.background.ColorBackground; -import com.fr.base.svg.IconUtils; -import com.fr.design.designer.TargetComponent; -import com.fr.design.event.UIObserver; -import com.fr.design.event.UIObserverListener; -import com.fr.design.file.HistoryTemplateListCache; -import com.fr.design.gui.ibutton.UIButton; -import com.fr.design.gui.ilable.UILabel; -import com.fr.design.mainframe.ElementCasePane; -import com.fr.design.selection.SelectionEvent; -import com.fr.design.selection.SelectionListener; -import com.fr.grid.selection.CellSelection; -import com.fr.grid.selection.Selection; -import com.fr.log.FineLoggerFactory; -import com.fr.report.cell.DefaultTemplateCellElement; -import com.fr.report.cell.TemplateCellElement; -import com.fr.report.cell.cellattr.CellExpandAttr; -import com.fr.report.cell.cellattr.core.group.DSColumn; -import com.fr.report.core.sort.common.CellSortable; -import com.fr.report.core.sort.header.SortHeader; -import com.fr.report.elementcase.TemplateElementCase; -import com.fr.stable.ColumnRow; -import com.fr.stable.EssentialUtils; -import com.fr.stable.StringUtils; - -import javax.swing.*; -import java.awt.*; -import java.awt.event.MouseAdapter; -import java.awt.event.MouseEvent; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Iterator; -import java.util.Map; - -public class SortColumnRowPane extends JPanel implements UIObserver { - int paneWidth; - int paneHeight; - int jTextFieldWidth; - JTextField colJTextField; - JTextField rowJTextField; - UIButton selectButton; - private boolean isAlreadyAddListener = false; - private CellSelection oldSelection; - private SelectionListener gridSelectionChangeListener; - UIObserverListener uiObserverListener; - private final static Icon DISABLED_ICON = IconUtils.readIcon("/com/fr/design/images/buttonicon/select_disabled.svg"); - private final static Icon ENABLE_ICON = IconUtils.readIcon("/com/fr/design/images/buttonicon/select_normal.svg"); - private boolean enabled; - - public SortColumnRowPane(int paneWidth, int paneHeight) { - this.paneWidth = paneWidth; - this.paneHeight = paneHeight; - initComponents(); - } - - private void initComponents() { - initSize(); - this.setLayout(new FlowLayout(FlowLayout.LEFT, 0, 0)); - intUILabel(); - initTextField(); - initSelectButton(); - this.setSize(new Dimension(paneWidth, paneHeight)); - } - - void initSize() { - jTextFieldWidth = (paneWidth - 40) / 2; - } - - void intUILabel() { - UILabel uiLabel = new UILabel(IconUtils.readIcon("/com/fr/design/images/buttonicon/propertiestab/cellelement_normal.png")); - this.add(uiLabel); - } - - public static boolean isAvailableColumnRow(ColumnRow columnRow) { - return columnRow != null && columnRow.getRow() != -1 && columnRow.getColumn() != -1; - } - - void initTextField() { - colJTextField = new JTextField(); - colJTextField.setEditable(false); - rowJTextField = new JTextField(); - rowJTextField.setEditable(false); - colJTextField.setPreferredSize(new Dimension(jTextFieldWidth, paneHeight)); - rowJTextField.setPreferredSize(new Dimension(jTextFieldWidth, paneHeight)); - this.add(colJTextField); - this.add(rowJTextField); - } - - void initSelectButton() { - selectButton = new UIButton(ENABLE_ICON); - selectButton.addMouseListener(new SelectActionListener(this)); - this.add(selectButton); - } - - public void populateBean(ColumnRow columnRow) { - populateBean(columnRow, true); - } - - public void populateBean(ColumnRow columnRow, boolean enabled) { - this.enabled = enabled; - if (SortColumnRowPane.isAvailableColumnRow(columnRow)) { - colJTextField.setText(EssentialUtils.convertIntToABC(columnRow.column + 1)); - rowJTextField.setText(String.valueOf(columnRow.row + 1)); - } else { - colJTextField.setText(StringUtils.EMPTY); - rowJTextField.setText(StringUtils.EMPTY); - } - if (enabled) { - selectButton.setIcon(ENABLE_ICON); - } else { - selectButton.setIcon(DISABLED_ICON); - } - selectButton.setEnabled(false); - refresh(); - } - - public void setColumnRow(ColumnRow columnRow) { - populateBean(columnRow); - uiObserverListener.doChange(); - } - - public ColumnRow updateBean() { - if (StringUtils.isNotBlank(colJTextField.getText()) && StringUtils.isNotBlank(rowJTextField.getText())) { - return ColumnRow.valueOf(colJTextField.getText() + rowJTextField.getText()); - } - return null; - } - - @Override - public void registerChangeListener(UIObserverListener listener) { - this.uiObserverListener = listener; - } - - @Override - public boolean shouldResponseChangeListener() { - return true; - } - - class SelectActionListener extends MouseAdapter { - SortColumnRowPane columnRowPane; - - Map disableHeaderCellsStyleMap = new HashMap<>(); - java.util.List tempHeaderCells = new ArrayList<>(); - - SelectActionListener(SortColumnRowPane columnRowPane) { - this.columnRowPane = columnRowPane; - } - - @Override - public void mouseClicked(MouseEvent e) { - if (enabled) { - ElementCasePane elementCasePane = getCurrentElementCase(); - if (elementCasePane == null || isAlreadyAddListener) { - return; - } - prepareSelectHeader(elementCasePane); - gridSelectionChangeListener = new SelectionListener() { - @Override - public void selectionChanged(SelectionEvent e) { - completeSelectHeader(elementCasePane); - } - }; - elementCasePane.addSelectionChangeListener(gridSelectionChangeListener); - isAlreadyAddListener = true; - } - } - - private void prepareSelectHeader(ElementCasePane elementCasePane) { - ashDisableHeaderCellsStyle(elementCasePane.getEditingElementCase()); - oldSelection = (CellSelection) elementCasePane.getSelection(); - elementCasePane.getGrid().setNotShowingTableSelectPane(false); - elementCasePane.setRepeatSelection(true); - elementCasePane.setEditable(false); - elementCasePane.repaint(10); - } - - private void completeSelectHeader(ElementCasePane elementCasePane) { - Selection selection = elementCasePane.getSelection(); - if (selection instanceof CellSelection) { - CellSelection cellselection = (CellSelection) selection; - ColumnRow columnRow = ColumnRow.valueOf(cellselection.getColumn(), cellselection.getRow()); - elementCasePane.setOldSelecton(oldSelection); - oldSelection.getQuickEditor(elementCasePane); - if (!disableHeaderCellsStyleMap.keySet().contains(columnRow)) { - columnRowPane.setColumnRow(columnRow); - } - restoreDisableHeaderCellsStyle(elementCasePane.getEditingElementCase()); - } - elementCasePane.removeSelectionChangeListener(gridSelectionChangeListener); - isAlreadyAddListener = false; - elementCasePane.getGrid().setNotShowingTableSelectPane(true); - elementCasePane.setRepeatSelection(false); - elementCasePane.setEditable(true); - elementCasePane.repaint(); - } - - private void ashDisableHeaderCellsStyle(TemplateElementCase elementCase) { - disableHeaderCellsStyleMap = new HashMap<>(); - tempHeaderCells = new ArrayList<>(); - Map disableHeaderCellsMap = getDisableHeaderCellsMap(elementCase); - for (ColumnRow headerColumnRow : disableHeaderCellsMap.keySet()) { - TemplateCellElement headerCell = disableHeaderCellsMap.get(headerColumnRow); - if (headerCell == null) { - headerCell = new DefaultTemplateCellElement(headerColumnRow.column, headerColumnRow.row); - elementCase.addCellElement(headerCell); - tempHeaderCells.add(headerCell); - } - Style style = headerCell.getStyle(); - disableHeaderCellsStyleMap.put(headerColumnRow, style); - style = style.deriveBackground(ColorBackground.getInstance(Color.gray)); - headerCell.setStyle(style); - } - } - - private void restoreDisableHeaderCellsStyle(TemplateElementCase elementCase) { - try { - for (ColumnRow headerColumnRow : disableHeaderCellsStyleMap.keySet()) { - TemplateCellElement headerTemplateCellElement - = elementCase.getTemplateCellElement(headerColumnRow.column, headerColumnRow.row); - headerTemplateCellElement.setStyle(disableHeaderCellsStyleMap.get(headerColumnRow)); - } - for (TemplateCellElement templateCellElement : tempHeaderCells) { - elementCase.removeCellElement(templateCellElement); - } - disableHeaderCellsStyleMap = new HashMap<>(); - tempHeaderCells = new ArrayList<>(); - } catch (Exception e) { - FineLoggerFactory.getLogger().error(e, e.getMessage()); - } - } - - private Map getDisableHeaderCellsMap(TemplateElementCase elementCase) { - Map headerCellsMap = new HashMap<>(); - Iterator iterator = elementCase.cellIterator(); - while (iterator.hasNext()) { - TemplateCellElement templateCellElement = (TemplateCellElement) iterator.next(); - CellExpandAttr cellExpandAttr = templateCellElement.getCellExpandAttr(); - if (cellExpandAttr != null) { - handleDisableHeaderCell(elementCase, cellExpandAttr, headerCellsMap); - } - Object value = templateCellElement.getValue(); - if (value instanceof DSColumn) { - handleDisableHeaderCell(elementCase, (DSColumn) value, headerCellsMap); - } - } - return headerCellsMap; - } - - private void handleDisableHeaderCell(TemplateElementCase elementCase, CellSortable cellSortable, Map headerCellsMap) { - if (cellSortable.getCellSortAttr() != null) { - SortHeader sortHeader = cellSortable.getCellSortAttr().getSortHeader(); - if (sortHeader != null) { - String headerArea = sortHeader.getHeaderArea(); - if (headerArea != null) { - ColumnRow headerColumnRow = ColumnRow.valueOf(headerArea); - ColumnRow columnRow = columnRowPane.updateBean(); - if (!headerColumnRow.equals(columnRow)) { - TemplateCellElement headerCell - = elementCase.getTemplateCellElement(headerColumnRow.column, headerColumnRow.row); - headerCellsMap.put(headerColumnRow, headerCell); - } - } - } - } - } - - private ElementCasePane getCurrentElementCase() { - try { - TargetComponent targetComponent - = HistoryTemplateListCache.getInstance().getCurrentEditingTemplate().getCurrentElementCasePane(); - if (targetComponent instanceof ElementCasePane) { - return (ElementCasePane) targetComponent; - } - } catch (Exception e) { - FineLoggerFactory.getLogger().error(e, e.getMessage()); - } - return null; - } - } - - - protected void refresh() { - validate(); - repaint(); - revalidate(); - } -} \ No newline at end of file diff --git a/designer-realize/src/main/java/com/fr/design/sort/common/SortUIExpandablePane.java b/designer-realize/src/main/java/com/fr/design/sort/common/SortUIExpandablePane.java deleted file mode 100644 index 3a1bbd779f..0000000000 --- a/designer-realize/src/main/java/com/fr/design/sort/common/SortUIExpandablePane.java +++ /dev/null @@ -1,117 +0,0 @@ -package com.fr.design.sort.common; - -import com.fr.base.BaseUtils; -import com.fr.base.svg.IconUtils; -import com.fr.design.event.UIObserver; -import com.fr.design.event.UIObserverListener; -import com.fr.design.gui.ibutton.UIButton; -import com.fr.design.gui.ilable.UILabel; -import com.fr.design.i18n.Toolkit; - -import javax.swing.*; -import java.awt.*; -import java.awt.event.MouseAdapter; -import java.awt.event.MouseEvent; - - -public class SortUIExpandablePane extends JPanel { - private static final long serialVersionUID = 1L; - private HeaderPane headerPane; - private AbstractSortItemPane contentPane; - private AbstractSortGroupPane sortGroupPane; - - private JPanel wrapPane; - - public JPanel getContentPane() { - return contentPane; - } - - public SortUIExpandablePane(AbstractSortItemPane contentPane, AbstractSortGroupPane sortGroupPane) { - super(); - this.sortGroupPane = sortGroupPane; - this.contentPane = contentPane; - initComponents(); - wrapPane.setBorder(BorderFactory.createLineBorder(new Color(217, 218, 221), 1)); - wrapPane.setBackground(Color.WHITE); - this.setLayout(new FlowLayout(FlowLayout.LEFT, 0, 5)); - } - - - private void initComponents() { - wrapPane = new JPanel(); - wrapPane.setLayout(new BorderLayout()); - headerPane = new HeaderPane(sortGroupPane); - headerPane.addMouseListener(new MouseAdapter() { - @Override - public void mouseClicked(MouseEvent e) { - setContentPanelShow(!contentPane.isVisible()); - } - }); - headerPane.setBorder(BorderFactory.createMatteBorder(0, 0, 1, 0, new Color(217, 218, 221))); - contentPane.setBorder(BorderFactory.createEmptyBorder(0, 5, 0, 5)); - wrapPane.add(headerPane, BorderLayout.NORTH); - wrapPane.add(contentPane, BorderLayout.CENTER); - setContentPanelShow(true); - this.add(wrapPane); - } - - - private void setContentPanelShow(Boolean show) { - contentPane.setVisible(show); - headerPane.setShow(show); - } - - class HeaderPane extends JPanel implements UIObserver { - UILabel iconUiLabel; - UILabel closeButton; - AbstractSortGroupPane sortGroupPane; - UIObserverListener uiObserverListener; - - HeaderPane(AbstractSortGroupPane sortGroupPane) { - this.sortGroupPane = sortGroupPane; - this.setLayout(new FlowLayout(FlowLayout.LEFT, 3, 0)); - initComponents(); - } - - private void initComponents() { - iconUiLabel = new UILabel(); - this.add(iconUiLabel); - UILabel uiLabel = new UILabel(Toolkit.i18nText("Fine-Design_Sort_Second_Sort")); - this.add(uiLabel); - this.add(AbstractSortPane.createIntervalUILabel(108)); - - closeButton = new UILabel(IconUtils.readIcon("/com/fr/design/images/control/close.png")); - closeButton.setPreferredSize(new Dimension(16, 20)); - this.add(closeButton); - closeButton.addMouseListener(new MouseAdapter() { - @Override - public void mouseClicked(MouseEvent e) { - sortGroupPane.removeSortItem(1); - if (uiObserverListener != null) { - uiObserverListener.doChange(); - } - } - }); - this.setPreferredSize(new Dimension(contentPane.sortItemPaneWidth + 7, AbstractSortPane.PANE_COMPONENT_HEIGHT)); - } - - public void setShow(boolean show) { - if (show) { - iconUiLabel.setIcon(IconUtils.readIcon("/com/fr/design/images/sort/down_arrow.png")); - } else { - iconUiLabel.setIcon(IconUtils.readIcon("/com/fr/design/images/sort/left_arrow.png")); - } - } - - @Override - public void registerChangeListener(UIObserverListener uiObserverListener) { - this.uiObserverListener = uiObserverListener; - } - - @Override - public boolean shouldResponseChangeListener() { - return true; - } - } - -} \ No newline at end of file diff --git a/designer-realize/src/main/java/com/fr/design/sort/expressionpane/CellSortExpressionPane.java b/designer-realize/src/main/java/com/fr/design/sort/expressionpane/CellSortExpressionPane.java deleted file mode 100644 index 1381b92cf2..0000000000 --- a/designer-realize/src/main/java/com/fr/design/sort/expressionpane/CellSortExpressionPane.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.fr.design.sort.expressionpane; - -import com.fr.design.i18n.Toolkit; -import com.fr.locale.InterProviderFactory; -import com.fr.report.core.sort.sortexpression.CellSortExpression; - - -import java.awt.*; - - -public class CellSortExpressionPane extends SortExpressionPane { - public CellSortExpressionPane(int with) { - this.setLayout(new FlowLayout(FlowLayout.LEFT, 0, 0)); - } - - @Override - public String getSortName() { - return InterProviderFactory.getProvider().getLocText("Fine-Engine_Sort_Cell"); - } - - @Override - public void populateBean(CellSortExpression cellSortExpression) { - - } - - @Override - public CellSortExpression updateBean() { - return new CellSortExpression(); - } - - -} diff --git a/designer-realize/src/main/java/com/fr/design/sort/expressionpane/CustomSequenceEditPane.java b/designer-realize/src/main/java/com/fr/design/sort/expressionpane/CustomSequenceEditPane.java deleted file mode 100644 index c65657836b..0000000000 --- a/designer-realize/src/main/java/com/fr/design/sort/expressionpane/CustomSequenceEditPane.java +++ /dev/null @@ -1,190 +0,0 @@ -package com.fr.design.sort.expressionpane; - -import com.fr.design.dialog.BasicPane; -import com.fr.design.gui.icontainer.UIScrollPane; -import com.fr.design.gui.ilable.UILabel; -import com.fr.design.gui.ilist.UIList; -import com.fr.design.i18n.Toolkit; -import com.fr.design.mainframe.alphafine.listener.DocumentAdapter; -import com.fr.design.mainframe.dnd.SerializableTransferable; -import com.fr.design.mainframe.share.ui.base.PlaceholderTextArea; -import com.fr.locale.InterProviderFactory; -import com.fr.report.core.sort.sortexpression.CustomSequenceSortExpression; -import com.fr.stable.StringUtils; - -import javax.swing.*; -import javax.swing.event.DocumentEvent; -import java.awt.*; -import java.awt.datatransfer.DataFlavor; -import java.awt.datatransfer.Transferable; -import java.awt.dnd.DnDConstants; -import java.awt.dnd.DragGestureEvent; -import java.awt.dnd.DragGestureListener; -import java.awt.dnd.DragSource; -import java.awt.dnd.DragSourceAdapter; -import java.awt.dnd.DropTarget; -import java.awt.dnd.DropTargetAdapter; -import java.awt.dnd.DropTargetDropEvent; -import java.util.ArrayList; -import java.util.List; - -public class CustomSequenceEditPane extends BasicPane { - java.util.List customSequence; - JSplitPane jSplitPane; - JPanel referenceSequencePanel; - JPanel editSequencePanel; - JTextArea jTextArea; - - CustomSequenceEditPane(java.util.List customSequence) { - this.customSequence = customSequence; - initComponents(); - } - - void initComponents() { - this.setLayout(new BorderLayout()); - initReferenceSequencePanel(); - initEditSequencePanel(); - initSplitPane(); - } - - void initSplitPane() { - jSplitPane = new JSplitPane(); - this.add(jSplitPane); - jSplitPane.setOneTouchExpandable(true); - jSplitPane.setContinuousLayout(true); - jSplitPane.setOrientation(JSplitPane.HORIZONTAL_SPLIT); - jSplitPane.setLeftComponent(referenceSequencePanel); - jSplitPane.setRightComponent(editSequencePanel); - jSplitPane.setDividerSize(10); - jSplitPane.setDividerLocation(200); - } - - void initReferenceSequencePanel() { - referenceSequencePanel = new JPanel(); - referenceSequencePanel.setLayout(new BoxLayout(referenceSequencePanel, BoxLayout.Y_AXIS)); - JPanel titlePane = new JPanel(new FlowLayout(FlowLayout.LEFT)); - UILabel uiLabel = new UILabel(Toolkit.i18nText("Fine-Design_Sort_Reference_Sequence")); - titlePane.add(uiLabel); - referenceSequencePanel.add(titlePane); - UIScrollPane uiScrollPane = new UIScrollPane(getReferenceSequenceList()); - uiScrollPane.setPreferredSize(new Dimension(200, 300)); - referenceSequencePanel.add(uiScrollPane); - referenceSequencePanel.setSize(new Dimension(200, 400)); - } - - private UIList getReferenceSequenceList() { - UIList uiList = new UIList(getReferenceSequenceModel()); - new CustomSequenceEditDragSource(uiList, DnDConstants.ACTION_MOVE); - return uiList; - } - - private String[] getReferenceSequenceModel() { - List> customSequences = CustomSequenceSortExpression.getReferenceCustomSequences(); - String[] listModel = new String[customSequences.size()]; - for (int i = 0; i < customSequences.size(); i++) { - listModel[i] = CustomSequenceSortExpression.customSequenceToString(customSequences.get(i), ","); - } - return listModel; - } - - void initEditSequencePanel() { - editSequencePanel = new JPanel(); - editSequencePanel.setLayout(new BoxLayout(editSequencePanel, BoxLayout.Y_AXIS)); - JPanel titlePane = new JPanel(new FlowLayout(FlowLayout.LEFT)); - UILabel uiLabel = new UILabel(Toolkit.i18nText("Fine-Design_Sort_Input_Sequence")); - titlePane.add(uiLabel); - UILabel uiLabel2 = new UILabel(Toolkit.i18nText("Fine-Design_Sort_Please_Interlace_Sequence_Elements")); - uiLabel2.setForeground(Color.lightGray); - titlePane.add(uiLabel2); - editSequencePanel.add(titlePane); - jTextArea = getTextArea(); - UIScrollPane uiScrollPane = new UIScrollPane(jTextArea); - uiScrollPane.setPreferredSize(new Dimension(475, 300)); - editSequencePanel.add(uiScrollPane); - editSequencePanel.setSize(new Dimension(475, 300)); - } - - - JTextArea getTextArea() { - PlaceholderTextArea placeholderTextArea = new PlaceholderTextArea(10, 10, getPlaceholderText()); - new CustomSequenceEditDropTarget(placeholderTextArea, CustomSequenceSortExpression.getReferenceCustomSequences()); - placeholderTextArea.setText(CustomSequenceSortExpression.customSequenceToString(customSequence, "\n")); - placeholderTextArea.getDocument().addDocumentListener(new DocumentAdapter() { - @Override - protected void textChanged(DocumentEvent e) { - placeholderTextArea.repaint(); - } - }); - return placeholderTextArea; - } - - String getPlaceholderText() { - StringBuilder stringBuilder = new StringBuilder(); - stringBuilder.append(Toolkit.i18nText("Fine-Design_Sort_Please_Interlace_Sequence_Elements_Such_As") + "\n"); - stringBuilder.append(Toolkit.i18nText("Fine-Design_Sort_Department_One") + "\n"); - stringBuilder.append(Toolkit.i18nText("Fine-Design_Sort_Department_Two") + "\n"); - stringBuilder.append(Toolkit.i18nText("Fine-Design_Sort_Department_Three") + "\n"); - return stringBuilder.toString(); - } - - @Override - protected String title4PopupWindow() { - return InterProviderFactory.getProvider().getLocText("Fine-Engine_Sort_Custom_Sequence"); - } - - - class CustomSequenceEditDragSource extends DragSourceAdapter implements DragGestureListener { - private DragSource source; - - public CustomSequenceEditDragSource(UIList uiList, int actions) { - source = new DragSource(); - source.createDefaultDragGestureRecognizer(uiList, actions, this); - } - - public void dragGestureRecognized(DragGestureEvent dge) { - Component comp = dge.getComponent(); - if (comp instanceof UIList) { - UIList uiList = (UIList) comp; - source.startDrag(dge, DragSource.DefaultLinkDrop, new SerializableTransferable(uiList.getSelectedIndex()), this); - } - } - } - - - class CustomSequenceEditDropTarget extends DropTargetAdapter { - java.util.List> customSequences = new ArrayList<>(); - - public CustomSequenceEditDropTarget(PlaceholderTextArea jPanel, java.util.List> customSequences) { - new DropTarget(jPanel, this); - this.customSequences = customSequences; - } - - @Override - public void drop(DropTargetDropEvent dtde) { - try { - Transferable transferable = dtde.getTransferable(); - DataFlavor[] dataFlavors = transferable.getTransferDataFlavors(); - if (dataFlavors.length == 1) { - Integer index = (Integer) transferable.getTransferData(dataFlavors[0]); - JTextArea jTextArea = (JTextArea) dtde.getDropTargetContext().getComponent(); - String text = jTextArea.getText(); - if (StringUtils.isNotEmpty(text) && !text.endsWith("\n")) { - text += "\n"; - } - java.util.List customSequence = customSequences.get(index); - for (int i = 0; i < customSequence.size(); i++) { - text += customSequence.get(i) + "\n"; - } - jTextArea.setText(text); - } - } catch (Exception e) { - - } - } - } - - public List updateBean() { - return CustomSequenceSortExpression.stringToCustomSequence(jTextArea.getText(), "\n"); - } - -} diff --git a/designer-realize/src/main/java/com/fr/design/sort/expressionpane/CustomSequencePane.java b/designer-realize/src/main/java/com/fr/design/sort/expressionpane/CustomSequencePane.java deleted file mode 100644 index 34fca093b2..0000000000 --- a/designer-realize/src/main/java/com/fr/design/sort/expressionpane/CustomSequencePane.java +++ /dev/null @@ -1,66 +0,0 @@ -package com.fr.design.sort.expressionpane; - -import com.fr.base.svg.IconUtils; -import com.fr.design.dialog.DialogActionAdapter; -import com.fr.design.gui.ibutton.UIButton; -import com.fr.design.gui.itextfield.UITextField; -import com.fr.design.mainframe.DesignerContext; -import com.fr.design.sort.common.AbstractSortPane; -import com.fr.report.core.sort.sortexpression.CustomSequenceSortExpression; - -import javax.swing.*; -import java.awt.*; -import java.awt.event.MouseAdapter; -import java.awt.event.MouseEvent; -import java.util.List; - - -public class CustomSequencePane extends JPanel { - protected UITextField textField; - protected UIButton button; - List customSequence; - - public CustomSequencePane(int width) { - this.setLayout(new FlowLayout(FlowLayout.RIGHT, 0, 0)); - this.initComponents(width); - } - - protected void initComponents(int width) { - textField = new UITextField(); - textField.setEditable(false); - textField.setPreferredSize(new Dimension(width - 20, AbstractSortPane.PANE_COMPONENT_HEIGHT)); - Icon icon = IconUtils.readIcon("/com/fr/design/images/sort/sequence.png"); - button = new UIButton(icon); - button.setBackground(Color.RED); - button.setOpaque(false); - button.setCursor(new Cursor(Cursor.HAND_CURSOR)); - button.setPreferredSize(new Dimension(20, AbstractSortPane.PANE_COMPONENT_HEIGHT)); - MouseAdapter mouseAdapter = new MouseAdapter() { - @Override - public void mouseClicked(MouseEvent e) { - CustomSequenceEditPane customSequenceEditPane = new CustomSequenceEditPane(customSequence); - customSequenceEditPane.showWindowWithCustomSize(DesignerContext.getDesignerFrame(), new DialogActionAdapter() { - @Override - public void doOk() { - customSequence = customSequenceEditPane.updateBean(); - textField.setText(CustomSequenceSortExpression.customSequenceToString(customSequence, ",")); - } - }, new Dimension(700, 400)).setVisible(true); - } - }; - button.addMouseListener(mouseAdapter); - textField.addMouseListener(mouseAdapter); - this.add(textField); - this.add(button); - } - - - public List updateBean() { - return customSequence; - } - - public void populateBean(List customSequence) { - this.customSequence = customSequence; - textField.setText(CustomSequenceSortExpression.customSequenceToString(customSequence, ",")); - } -} \ No newline at end of file diff --git a/designer-realize/src/main/java/com/fr/design/sort/expressionpane/CustomSequenceSortExpressionPane.java b/designer-realize/src/main/java/com/fr/design/sort/expressionpane/CustomSequenceSortExpressionPane.java deleted file mode 100644 index 69dac2a2ab..0000000000 --- a/designer-realize/src/main/java/com/fr/design/sort/expressionpane/CustomSequenceSortExpressionPane.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.fr.design.sort.expressionpane; - -import com.fr.design.sort.common.AbstractSortPane; -import com.fr.locale.InterProviderFactory; -import com.fr.report.core.sort.sortexpression.CustomSequenceSortExpression; - -import javax.swing.*; -import java.awt.*; -import java.util.List; - - -public class CustomSequenceSortExpressionPane extends SortExpressionPane { - CustomSequencePane customSequencePane; - - public CustomSequenceSortExpressionPane(int width, int rightWidth) { - this.setLayout(new FlowLayout(FlowLayout.RIGHT, 2, 0)); - customSequencePane = new CustomSequencePane(rightWidth + 5); - this.add(customSequencePane); - } - - @Override - public String getSortName() { - return InterProviderFactory.getProvider().getLocText("Fine-Engine_Sort_Custom_Sequence"); - } - - @Override - public void populateBean(CustomSequenceSortExpression customSequenceSortExpression) { - List customSequence = customSequenceSortExpression.getCustomSequence(); - customSequencePane.populateBean(customSequence); - } - - @Override - public CustomSequenceSortExpression updateBean() { - List customSequence = customSequencePane.updateBean(); - return new CustomSequenceSortExpression(customSequence); - } -} diff --git a/designer-realize/src/main/java/com/fr/design/sort/expressionpane/FormulaSortExpressionPane.java b/designer-realize/src/main/java/com/fr/design/sort/expressionpane/FormulaSortExpressionPane.java deleted file mode 100644 index 3785a7e973..0000000000 --- a/designer-realize/src/main/java/com/fr/design/sort/expressionpane/FormulaSortExpressionPane.java +++ /dev/null @@ -1,42 +0,0 @@ -package com.fr.design.sort.expressionpane; - -import com.fr.design.formula.TinyFormulaPane; -import com.fr.design.sort.common.AbstractSortPane; -import com.fr.locale.InterProviderFactory; -import com.fr.report.core.sort.sortexpression.FormulaSortExpression; - -import java.awt.*; - -public class FormulaSortExpressionPane extends SortExpressionPane { - - TinyFormulaPane tinyFormulaPane; - - public FormulaSortExpressionPane(int width) { - this.setLayout(new FlowLayout(FlowLayout.RIGHT, 2, 0)); - tinyFormulaPane = new TinyFormulaPane(); - tinyFormulaPane.setPreferredSize(new Dimension(width + 5, AbstractSortPane.PANE_COMPONENT_HEIGHT)); - this.add(tinyFormulaPane); - } - - @Override - public String getSortName() { - return InterProviderFactory.getProvider().getLocText("Fine-Engine_Sort_Formula"); - } - - @Override - public void populateBean(FormulaSortExpression formulaSortExpression) { - String formula = formulaSortExpression.getFormula(); - tinyFormulaPane.getUITextField().setText(formula); - } - - @Override - public FormulaSortExpression updateBean() { - String formula = tinyFormulaPane.getUITextField().getText(); - return new FormulaSortExpression(formula); - } - - public boolean needSortArea() { - return false; - } - -} diff --git a/designer-realize/src/main/java/com/fr/design/sort/expressionpane/SortExpressionPane.java b/designer-realize/src/main/java/com/fr/design/sort/expressionpane/SortExpressionPane.java deleted file mode 100644 index 69af8464cb..0000000000 --- a/designer-realize/src/main/java/com/fr/design/sort/expressionpane/SortExpressionPane.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.fr.design.sort.expressionpane; - -import com.fr.report.core.sort.sortexpression.SortExpression; - -import javax.swing.*; - - -public abstract class SortExpressionPane extends JPanel { - - public abstract String getSortName(); - - public abstract void populateBean(T sortExpression); - - public abstract T updateBean(); - - public boolean needSortArea() { - return true; - } - - public boolean needSortRule() { - return true; - } -} diff --git a/designer-realize/src/main/java/com/fr/design/sort/header/HeaderAreaPane.java b/designer-realize/src/main/java/com/fr/design/sort/header/HeaderAreaPane.java deleted file mode 100644 index 3e1adbe48c..0000000000 --- a/designer-realize/src/main/java/com/fr/design/sort/header/HeaderAreaPane.java +++ /dev/null @@ -1,149 +0,0 @@ -package com.fr.design.sort.header; - -import com.fr.design.designer.TargetComponent; -import com.fr.design.file.HistoryTemplateListCache; -import com.fr.design.gui.icombobox.UIComboBox; -import com.fr.design.gui.ilable.UILabel; -import com.fr.design.i18n.Toolkit; -import com.fr.design.mainframe.ElementCasePane; -import com.fr.design.sort.common.AbstractSortPane; -import com.fr.design.sort.common.SortColumnRowPane; -import com.fr.log.FineLoggerFactory; -import com.fr.stable.ColumnRow; - -import javax.swing.*; -import java.awt.*; -import java.awt.event.ItemEvent; -import java.awt.event.ItemListener; - - -public class HeaderAreaPane extends JPanel { - protected int headerAreaPaneWidth; - protected int headerAreaPaneRightWidth; - - AreaJLayeredPane areaJLayeredPane; - - HeaderAreaPane(int headerAreaPaneWidth, int headerAreaPaneRightWidth) { - this.headerAreaPaneWidth = headerAreaPaneWidth; - this.headerAreaPaneRightWidth = headerAreaPaneRightWidth; - this.setLayout(new FlowLayout(FlowLayout.LEFT, 0, 0)); - initComponents(); - } - - void initComponents() { - initUILabel(); - initLayeredPane(); - } - - void initUILabel() { - UILabel uiLabel = new UILabel(Toolkit.i18nText("Fine-Design_Sort_Header_Area"), SwingConstants.LEFT); - this.add(uiLabel); - this.add(AbstractSortPane.createIntervalUILabel()); - } - - void initLayeredPane() { - areaJLayeredPane = new AreaJLayeredPane(); - this.add(areaJLayeredPane); - } - - public void populateBean(ColumnRow columnRow, boolean showHeaderArea) { - boolean enabled = true; - ElementCasePane elementCasePane = getCurrentElementCase(); - if (elementCasePane != null) { - enabled = elementCasePane.isSelectedOneCell(); - } - areaJLayeredPane.populateBean(columnRow, showHeaderArea, enabled); - } - - public ColumnRow updateBean() { - return areaJLayeredPane.updateBean(); - } - - private ElementCasePane getCurrentElementCase() { - try { - TargetComponent targetComponent - = HistoryTemplateListCache.getInstance().getCurrentEditingTemplate().getCurrentElementCasePane(); - if (targetComponent instanceof ElementCasePane) { - return (ElementCasePane) targetComponent; - } - } catch (Exception e) { - FineLoggerFactory.getLogger().error(e, e.getMessage()); - } - return null; - } - - class AreaJLayeredPane extends JPanel { - SortColumnRowPane columnRowPane; - JLayeredPane jLayeredPane; - UIComboBox uiComboBox; - - AreaJLayeredPane() { - this.setLayout(new FlowLayout(FlowLayout.LEFT, 0, 0)); - initComponents(); - } - - private void initComponents() { - initUIComboBox(); - initJLayeredPane(); - } - - - void initUIComboBox() { - uiComboBox = new UIComboBox(new String[]{Toolkit.i18nText("Fine-Design_Basic_None"), Toolkit.i18nText("Fine-Design_Basic_Custom")}); - uiComboBox.setSize(new Dimension(headerAreaPaneRightWidth, AbstractSortPane.PANE_COMPONENT_HEIGHT)); - uiComboBox.addItemListener(new ItemListener() { - @Override - public void itemStateChanged(ItemEvent e) { - setSortColumnRowPaneShow(uiComboBox.getSelectedIndex() == 1); - } - }); - uiComboBox.setEnabled(false); - } - - void setSortColumnRowPaneShow(boolean show) { - if (show) { - jLayeredPane.setLayer(columnRowPane, JLayeredPane.POPUP_LAYER); - jLayeredPane.setLayer(uiComboBox, JLayeredPane.MODAL_LAYER); - } else { - jLayeredPane.setLayer(uiComboBox, JLayeredPane.POPUP_LAYER); - jLayeredPane.setLayer(columnRowPane, JLayeredPane.MODAL_LAYER); - } - refresh(); - } - - void initJLayeredPane() { - jLayeredPane = new JLayeredPane(); - columnRowPane = new SortColumnRowPane(headerAreaPaneRightWidth - 18, AbstractSortPane.PANE_COMPONENT_HEIGHT); - jLayeredPane.setPreferredSize(new Dimension(headerAreaPaneRightWidth, AbstractSortPane.PANE_COMPONENT_HEIGHT)); - jLayeredPane.add(columnRowPane, JLayeredPane.MODAL_LAYER); - jLayeredPane.add(uiComboBox, JLayeredPane.POPUP_LAYER); - this.add(jLayeredPane); - } - - public void populateBean(ColumnRow columnRow, boolean showHeaderArea, boolean enabled) { - if (showHeaderArea) { - uiComboBox.setSelectedIndex(1); - } else { - uiComboBox.setSelectedIndex(0); - } - columnRowPane.populateBean(columnRow, enabled); - setSortColumnRowPaneShow(uiComboBox.getSelectedIndex() == 1); - uiComboBox.setEnabled(enabled); - } - - public ColumnRow updateBean() { - if (uiComboBox.getSelectedIndex() == 0) { - return null; - } else { - return columnRowPane.updateBean(); - } - } - - public void refresh() { - validate(); - repaint(); - revalidate(); - } - - } -} \ No newline at end of file diff --git a/designer-realize/src/main/java/com/fr/design/sort/header/HeaderSettingPane.java b/designer-realize/src/main/java/com/fr/design/sort/header/HeaderSettingPane.java deleted file mode 100644 index f31c409290..0000000000 --- a/designer-realize/src/main/java/com/fr/design/sort/header/HeaderSettingPane.java +++ /dev/null @@ -1,81 +0,0 @@ -package com.fr.design.sort.header; - -import com.fr.design.gui.icheckbox.UICheckBox; -import com.fr.design.gui.ilable.UILabel; -import com.fr.design.i18n.Toolkit; -import com.fr.design.sort.common.AbstractSortPane; -import com.fr.report.core.sort.header.SortHeader; - -import javax.swing.*; -import javax.swing.event.ChangeEvent; -import javax.swing.event.ChangeListener; -import java.awt.*; - -public class HeaderSettingPane extends JPanel { - protected int headerSettingPaneWidth; - protected int headerSettingPaneRightWidth; - HeaderSortRulePane headerSortRulePane; - UICheckBox uiCheckBox; - - HeaderSettingPane(int headerSettingPaneWidth, int headerSettingPaneRightWidth) { - this.headerSettingPaneWidth = headerSettingPaneWidth; - this.headerSettingPaneRightWidth = headerSettingPaneRightWidth; - this.setLayout(new BoxLayout(this, BoxLayout.Y_AXIS)); - initComponents(); - } - - void initComponents() { - initUILabel(); - initHeaderSortRulePane(); - } - - void initUILabel() { - JPanel jPanel = new JPanel(new FlowLayout(FlowLayout.LEFT, 0, 2)); - UILabel uiLabel = new UILabel(Toolkit.i18nText("Fine-Design_Sort_Header_Setting")); - UILabel emptyUILabel = new UILabel(); - emptyUILabel.setPreferredSize(new Dimension(10, 10)); - - uiCheckBox = new UICheckBox(Toolkit.i18nText("Fine-Design_Sort_Allow_User_Click_Sort_Order")); - uiCheckBox.setPreferredSize(new Dimension(headerSettingPaneRightWidth - 10, AbstractSortPane.PANE_COMPONENT_HEIGHT)); - uiCheckBox.addChangeListener(new ChangeListener() { - @Override - public void stateChanged(ChangeEvent e) { - headerSortRulePane.setVisible(uiCheckBox.isSelected()); - } - }); - jPanel.add(uiLabel); - jPanel.add(emptyUILabel); - jPanel.add(uiCheckBox); - this.add(jPanel); - } - - void initHeaderSortRulePane() { - headerSortRulePane = new HeaderSortRulePane(); - this.add(headerSortRulePane); - headerSortRulePane.setVisible(false); - } - - protected void refresh() { - validate(); - repaint(); - revalidate(); - } - - public void populateBean(SortHeader.SortItem[] sortItems) { - if (sortItems == null) { - uiCheckBox.setSelected(false); - } else { - uiCheckBox.setSelected(true); - } - headerSortRulePane.populateBean(sortItems); - } - - public SortHeader.SortItem[] updateBean() { - if (uiCheckBox.isSelected()) { - return headerSortRulePane.updateBean(); - } else { - return null; - } - } - -} diff --git a/designer-realize/src/main/java/com/fr/design/sort/header/HeaderSortRulePane.java b/designer-realize/src/main/java/com/fr/design/sort/header/HeaderSortRulePane.java deleted file mode 100644 index 79f939639e..0000000000 --- a/designer-realize/src/main/java/com/fr/design/sort/header/HeaderSortRulePane.java +++ /dev/null @@ -1,279 +0,0 @@ -package com.fr.design.sort.header; - -import com.fr.base.svg.SVGIcon; -import com.fr.base.svg.SVGTranscoder; -import com.fr.design.event.UIObserver; -import com.fr.design.event.UIObserverListener; -import com.fr.design.gui.icheckbox.UICheckBox; -import com.fr.design.gui.ilable.UILabel; -import com.fr.design.i18n.Toolkit; -import com.fr.design.layout.TableLayoutHelper; -import com.fr.design.mainframe.theme.edit.ui.ColorListPane; -import com.fr.general.IOUtils; -import com.fr.log.FineLoggerFactory; -import com.fr.report.core.sort.header.SortHeader; -import com.fr.report.core.sort.common.SortRule; -import org.apache.batik.transcoder.TranscoderInput; - -import javax.swing.*; -import javax.swing.event.ChangeEvent; -import javax.swing.event.ChangeListener; -import java.awt.*; -import java.awt.image.BufferedImage; -import java.io.ByteArrayInputStream; -import java.io.InputStream; -import java.nio.charset.StandardCharsets; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Map; - -public class HeaderSortRulePane extends JPanel { - private static final String ASC_ICON_TEMPLATE_PATH = "/com/fr/design/images/sort/asc.svg"; - private static final String DES_ICON_TEMPLATE_PATH = "/com/fr/design/images/sort/des.svg"; - private static final String NOSORT_ICON_TEMPLATE_PATH = "/com/fr/design/images/sort/nosort.svg"; - private static final double ICON_SCALE = SVGIcon.SYSTEM_SCALE * 1.25; - private static final int ICON_LENGTH = (int) Math.ceil(16 * ICON_SCALE); - IconButton ascIconButton; - IconButton desIconButton; - IconButton nosortIconButton; - UICheckBox ascUICheckBox; - UICheckBox desUICheckBox; - UICheckBox nosortUICheckBox; - static Map originalSvgTextMap = new HashMap<>(); - - HeaderSortRulePane() { - initComponents(); - initState(true); - this.setBorder(BorderFactory.createEmptyBorder(0, 15, 0, 15)); - } - - void initComponents() { - this.setLayout(new BorderLayout()); - initUILabel(); - initSortRuleItem(); - this.setPreferredSize(new Dimension(160, 160)); - } - - void initUILabel() { - UILabel uiLabel = new UILabel(Toolkit.i18nText("Fine-Design_Sort_Header_Sort_Basis"), SwingConstants.LEFT); - this.add(uiLabel, BorderLayout.NORTH); - } - - void initSortRuleItem() { - Component[][] components = new Component[][]{ - new Component[]{ascUICheckBox = new UICheckBox(SortRule.ASC.getDescription()), ascIconButton = new IconButton(ASC_ICON_TEMPLATE_PATH)}, - new Component[]{desUICheckBox = new UICheckBox(SortRule.DES.getDescription()), desIconButton = new IconButton(DES_ICON_TEMPLATE_PATH)}, - new Component[]{nosortUICheckBox = new UICheckBox(SortRule.NO_SORT.getDescription()), nosortIconButton = new IconButton(NOSORT_ICON_TEMPLATE_PATH)}, - }; - double[] rowSize = {ICON_LENGTH + 10, ICON_LENGTH + 10, ICON_LENGTH + 10}; - double[] columnSize = {80, ICON_LENGTH + 10}; - JPanel sortRuleItem = TableLayoutHelper.createCommonTableLayoutPane(components, rowSize, columnSize, 0); - this.add(sortRuleItem, BorderLayout.CENTER); - initUICheckBoxChange(ascUICheckBox, ascIconButton); - initUICheckBoxChange(desUICheckBox, desIconButton); - initUICheckBoxChange(nosortUICheckBox, nosortIconButton); - } - - void initUICheckBoxChange(UICheckBox uiCheckBox, IconButton iconButton) { - uiCheckBox.addChangeListener(new ChangeListener() { - @Override - public void stateChanged(ChangeEvent e) { - iconButton.setActiveState(uiCheckBox.isSelected()); - } - }); - } - - void initState(boolean selected) { - ascUICheckBox.setSelected(selected); - desUICheckBox.setSelected(selected); - nosortUICheckBox.setSelected(selected); - ascIconButton.refreshIconLabelColor(new Color(33, 33, 34)); - desIconButton.refreshIconLabelColor(new Color(33, 33, 34)); - nosortIconButton.refreshIconLabelColor(new Color(33, 33, 34)); - } - - class IconButton extends JPanel implements UIObserver { - JLayeredPane jLayeredPane; - String iconTemplatePath; - UILabel iconLabel; - ColorListPane.ColorButton colorButton; - Color color; - BufferedImage bufferedImage; - UIObserverListener uiObserverListener; - boolean activeState; - UILabel borderUiLabel; - - IconButton(String iconTemplatePath) { - this.iconTemplatePath = iconTemplatePath; - initComponents(); - } - - public boolean isActiveState() { - return activeState; - } - - public void setActiveState(boolean activeState) { - if (activeState) { - borderUiLabel.setBorder(BorderFactory.createLineBorder(Color.gray, 1)); - colorButton.setVisible(true); - } else { - borderUiLabel.setBorder(null); - colorButton.setVisible(false); - } - this.activeState = activeState; - } - - void initComponents() { - jLayeredPane = new JLayeredPane(); - iconLabel = getIconLabel(iconTemplatePath); - borderUiLabel = new UILabel(); - borderUiLabel.setSize(ICON_LENGTH, ICON_LENGTH); - borderUiLabel.setOpaque(true); - borderUiLabel.setBackground(Color.WHITE); - iconLabel.setSize(ICON_LENGTH, ICON_LENGTH); - colorButton = new ColorListPane.ColorButton(Color.CYAN); - colorButton.setSize(ICON_LENGTH, ICON_LENGTH); - colorButton.addChangeListener(new ChangeListener() { - @Override - public void stateChanged(ChangeEvent e) { - color = colorButton.getSelectObject(); - refreshIconLabelColor(color); - uiObserverListener.doChange(); - } - }); - jLayeredPane.setPreferredSize(new Dimension(ICON_LENGTH, ICON_LENGTH)); - - jLayeredPane.add(iconLabel, JLayeredPane.POPUP_LAYER); - jLayeredPane.add(borderUiLabel, JLayeredPane.MODAL_LAYER); - jLayeredPane.add(colorButton, JLayeredPane.PALETTE_LAYER); - this.add(jLayeredPane); - } - - void refreshIconLabelColor(Color color) { - Icon icon = getIcon(iconTemplatePath, color); - refreshIconLabel(icon); - } - - void refreshIconLabel(BufferedImage bufferedImage) { - if (bufferedImage != null) { - this.bufferedImage = bufferedImage; - Icon icon = new SVGIcon(bufferedImage); - refreshIconLabel(icon); - } - } - - void refreshIconLabel(Icon icon) { - if (icon != null) { - iconLabel.removeAll(); - iconLabel.setIcon(icon); - iconLabel.repaint(); - } - } - - UILabel getIconLabel(String iconPath) { - return getIconLabel(iconPath, new Color(33, 33, 34)); - } - - UILabel getIconLabel(String iconPath, Color color) { - Icon svgIcon = getIcon(iconPath, color); - return new UILabel(svgIcon); - } - - Icon getIcon(String iconPath, Color color) { - try { - String originalSvgText = getOriginalSvgText(iconPath); - String svgText = originalSvgText.replaceAll("\\{fillColor\\}", shiftColor(color)); - InputStream svgInputStream = new ByteArrayInputStream(svgText.getBytes(StandardCharsets.UTF_8)); - TranscoderInput input = new TranscoderInput(svgInputStream); - bufferedImage = SVGTranscoder.createImage(ICON_SCALE, input).getImage(); - SVGIcon svgIcon = new SVGIcon(bufferedImage); - return svgIcon; - } catch (Exception e) { - FineLoggerFactory.getLogger().error(e, e.getMessage()); - } - return null; - } - - String getOriginalSvgText(String iconPath) throws Exception { - String originalSvgText = originalSvgTextMap.get(iconPath); - if (originalSvgText == null) { - InputStream inputStream = IOUtils.getResourceAsStream(iconPath, HeaderSortRulePane.class); - originalSvgText = getSvgText(inputStream); - originalSvgTextMap.put(iconPath, originalSvgText); - } - return originalSvgText; - } - - String shiftColor(Color color) { - StringBuilder stringBuilder = new StringBuilder(); - stringBuilder.append(shiftValue(color.getRed())); - stringBuilder.append(shiftValue(color.getGreen())); - stringBuilder.append(shiftValue(color.getBlue())); - return stringBuilder.toString(); - } - - String shiftValue(int value) { - String resultValue = Integer.toHexString(value); - if (resultValue.length() == 1) { - resultValue = "0" + resultValue; - } - return resultValue; - } - - private String getSvgText(InputStream inputStream) throws Exception { - StringBuffer stringBuffer = new StringBuffer(); - byte[] b = new byte[1024]; - for (int n; (n = inputStream.read(b)) != -1; ) { - stringBuffer.append(new String(b, 0, n)); - } - return stringBuffer.toString(); - } - - @Override - public void registerChangeListener(UIObserverListener uiObserverListener) { - this.uiObserverListener = uiObserverListener; - } - - @Override - public boolean shouldResponseChangeListener() { - return true; - } - } - - public void populateBean(SortHeader.SortItem[] sortItems) { - initState(sortItems == null); - if (sortItems != null) { - for (SortHeader.SortItem sortItem : sortItems) { - SortRule sortRule = sortItem.getSortRule(); - BufferedImage bufferedImage = sortItem.getBufferedImage(); - if (sortRule == SortRule.ASC) { - ascIconButton.refreshIconLabel(bufferedImage); - ascUICheckBox.setSelected(true); - } else if (sortRule == SortRule.DES) { - desIconButton.refreshIconLabel(bufferedImage); - desUICheckBox.setSelected(true); - } else if (sortRule == SortRule.NO_SORT) { - nosortIconButton.refreshIconLabel(bufferedImage); - nosortUICheckBox.setSelected(true); - } - - } - } - } - - public SortHeader.SortItem[] updateBean() { - java.util.List items = new ArrayList<>(); - if (ascUICheckBox.isSelected()) { - items.add(new SortHeader.SortItem(SortRule.ASC, ascIconButton.bufferedImage)); - } - if (desUICheckBox.isSelected()) { - items.add(new SortHeader.SortItem(SortRule.DES, desIconButton.bufferedImage)); - } - if (nosortUICheckBox.isSelected()) { - items.add(new SortHeader.SortItem(SortRule.NO_SORT, nosortIconButton.bufferedImage)); - } - SortHeader.SortItem[] resultItems = new SortHeader.SortItem[items.size()]; - return items.toArray(resultItems); - } - -} diff --git a/designer-realize/src/main/java/com/fr/design/sort/header/SortHeaderPane.java b/designer-realize/src/main/java/com/fr/design/sort/header/SortHeaderPane.java deleted file mode 100644 index b79065e331..0000000000 --- a/designer-realize/src/main/java/com/fr/design/sort/header/SortHeaderPane.java +++ /dev/null @@ -1,63 +0,0 @@ -package com.fr.design.sort.header; - -import com.fr.design.sort.common.SortColumnRowPane; -import com.fr.report.core.sort.header.SortHeader; -import com.fr.stable.ColumnRow; - -import javax.swing.*; - -public class SortHeaderPane extends JPanel { - int sortHeaderPaneWidth; - int sortHeaderPaneRightWidth; - SortHeader sortHeader; - HeaderAreaPane headerAreaPane; - HeaderSettingPane headerSettingPane; - - public SortHeaderPane(int sortHeaderPaneWidth, int sortHeaderPaneRightWidth) { - this.sortHeaderPaneWidth = sortHeaderPaneWidth; - this.sortHeaderPaneRightWidth = sortHeaderPaneRightWidth; - this.setLayout(new BoxLayout(this, BoxLayout.Y_AXIS)); - initHeaderArea(); - initHeaderSetting(); - this.setBorder(BorderFactory.createEmptyBorder(10, 0, 0, 0)); - } - - void initHeaderArea() { - this.headerAreaPane = new HeaderAreaPane(sortHeaderPaneWidth, sortHeaderPaneRightWidth); - this.add(headerAreaPane); - } - - void initHeaderSetting() { - this.headerSettingPane = new HeaderSettingPane(sortHeaderPaneWidth, sortHeaderPaneRightWidth); - this.add(headerSettingPane); - } - - public void populateBean(SortHeader sortHeader, String defaultHeaderArea) { - this.sortHeader = sortHeader; - boolean showHeaderArea = false; - SortHeader.SortItem[] sortItems = null; - String headerArea = defaultHeaderArea; - ColumnRow columnRow = ColumnRow.valueOf(headerArea); - if (sortHeader != null) { - headerArea = sortHeader.getHeaderArea(); - sortItems = sortHeader.getSortItems(); - showHeaderArea = SortColumnRowPane.isAvailableColumnRow(ColumnRow.valueOf(headerArea)); - if (showHeaderArea) { - columnRow = ColumnRow.valueOf(headerArea); - } - } - headerAreaPane.populateBean(columnRow, showHeaderArea); - headerSettingPane.populateBean(sortItems); - } - - public SortHeader updateBean() { - ColumnRow columnRow = headerAreaPane.updateBean(); - SortHeader.SortItem[] items = headerSettingPane.updateBean(); - String headerArea = null; - if (columnRow != null) { - headerArea = columnRow.toString(); - } - SortHeader sortHeader = new SortHeader(headerArea, null, items); - return sortHeader; - } -} \ No newline at end of file diff --git a/designer-realize/src/main/java/com/fr/quickeditor/cellquick/CellDSColumnEditor.java b/designer-realize/src/main/java/com/fr/quickeditor/cellquick/CellDSColumnEditor.java index 2a4852ee88..0ede5114ff 100644 --- a/designer-realize/src/main/java/com/fr/quickeditor/cellquick/CellDSColumnEditor.java +++ b/designer-realize/src/main/java/com/fr/quickeditor/cellquick/CellDSColumnEditor.java @@ -11,7 +11,6 @@ import com.fr.design.dscolumn.DSColumnAdvancedPane; import com.fr.design.dscolumn.ResultSetGroupDockingPane; import com.fr.design.dscolumn.SelectedDataColumnPane; import com.fr.design.event.UIObserverListener; -import com.fr.design.foldablepane.UIExpandablePane; import com.fr.design.formula.CustomVariableResolver; import com.fr.design.formula.FormulaFactory; import com.fr.design.formula.UIFormula; @@ -32,7 +31,6 @@ import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.layout.TableLayout; import com.fr.design.layout.TableLayoutHelper; import com.fr.design.mainframe.cell.AbstractDSCellEditorPane; -import com.fr.design.sort.celldscolumn.CellDSColumnSortPane; import com.fr.design.utils.gui.UIComponentUtils; import com.fr.design.widget.FRWidgetFactory; import com.fr.general.IOUtils; @@ -223,6 +221,62 @@ public class CellDSColumnEditor extends CellQuickEditor { */ private UIButton conditionUIButton; + /** + * 分组设置监听器 + */ + private ItemListener groupListener = new ItemListener() { + @Override + public void itemStateChanged(ItemEvent e) { + if (e == null) { + //分组-高级-自定义点确定的时候传进来null的e,但是这时候应该触发保存 + groupPane.update(); + fireTargetModified(); + return; + } + if (e.getStateChange() == ItemEvent.DESELECTED) { + groupPane.update(); + fireTargetModified(); + } + } + }; + /** + * 数据集列设置监听器 + */ + private ItemListener dataListener = new ItemListener() { + @Override + public void itemStateChanged(ItemEvent e) { + if (e.getStateChange() == ItemEvent.SELECTED) { + dataPane.update(cellElement); + fireTargetModified(); + } + } + }; + + DSColumnBasicEditorPane() { + dataPane = new SelectedDataColumnPane(true, true); + groupPane = new ResultSetGroupDockingPane(); + dataPane.setListener(dataListener); + groupPane.setListener(groupListener); + + double[] rowSize = {P}, columnSize = {60, F}; + UILabel uiLabel = FRWidgetFactory.createLineWrapLabel(Toolkit.i18nText("Fine-Design_Report_Filter_Conditions")); + condition = new DSColumnConditionAction(); + if (tc != null) { + condition.setEditingComponent(tc); + } + //丢掉icon,修改按钮名称为编辑 + condition.setSmallIcon(UIConstants.EMPTY_ICON); + condition.setName(Toolkit.i18nText("Fine-Design_Basic_Edit")); + conditionUIButton = new UIButton(condition); + Component[][] components = new Component[][]{ + new Component[]{uiLabel, UIComponentUtils.wrapWithBorderLayoutPane(conditionUIButton)} + }; + conditionPane = TableLayoutHelper.createGapTableLayoutPane(components, rowSize, columnSize, HGAP, VGAP); + this.createScrollPane(); + this.setBorder(BorderFactory.createEmptyBorder(10, 0, 0, 0)); + + } + @Override public String getIconPath() { @@ -243,13 +297,11 @@ public class CellDSColumnEditor extends CellQuickEditor { @Override public void populate() { - this.removeAttributeChangeListener(); dataPane.populate(DesignTableDataManager.getEditingTableDataSource(), cellElement, tc); groupPane.populate(cellElement); if (tc != null) { condition.setEditingComponent(tc); } - this.addAttributeChangeListener(); } @Override @@ -266,7 +318,7 @@ public class CellDSColumnEditor extends CellQuickEditor { */ @Override protected JPanel createContentPane() { - initComponents(); + double[] columnSize = {F}; double[] rowSize = {P, P, P}; Component[][] components = new Component[][]{ @@ -279,43 +331,16 @@ public class CellDSColumnEditor extends CellQuickEditor { }; return TableLayoutHelper.createGapTableLayoutPane(components, rowSize, columnSize, HGAP, VGAP); } - - private void initComponents(){ - dataPane = new SelectedDataColumnPane(true, true); - groupPane = new ResultSetGroupDockingPane(); - - double[] rowSize = {P}, columnSize = {60, F}; - UILabel uiLabel = FRWidgetFactory.createLineWrapLabel(Toolkit.i18nText("Fine-Design_Report_Filter_Conditions")); - condition = new DSColumnConditionAction(); - if (tc != null) { - condition.setEditingComponent(tc); - } - //丢掉icon,修改按钮名称为编辑 - condition.setSmallIcon(UIConstants.EMPTY_ICON); - condition.setName(Toolkit.i18nText("Fine-Design_Basic_Edit")); - conditionUIButton = new UIButton(condition); - Component[][] components = new Component[][]{ - new Component[]{uiLabel, UIComponentUtils.wrapWithBorderLayoutPane(conditionUIButton)} - }; - conditionPane = TableLayoutHelper.createGapTableLayoutPane(components, rowSize, columnSize, HGAP, VGAP); - this.setBorder(BorderFactory.createEmptyBorder(10, 0, 0, 0)); - } - @Override - protected AttributeChangeListener getAttributeChangeListener() { - return new AttributeChangeListener() { - @Override - public void attributeChange() { - update(); - fireTargetModified(); - } - }; - } } class DSColumnAdvancedEditorPane extends AbstractDSCellEditorPane { /*pane begin*/ + /** + * 排列顺序 + */ + private ResultSetSortConfigPane sortPane; /** * 结果集筛选 */ @@ -348,13 +373,88 @@ public class CellDSColumnEditor extends CellQuickEditor { * 补充空白数据数目面板 可隐藏 */ private JPanel multiPane; - - private CellDSColumnSortPane cellDSColumnSortPane; /*pane end*/ + /*listeners begin*/ + private UIObserverListener sortPaneFormulaChangeListener = new UIObserverListener() { + @Override + public void doChange() { + sortPane.update(cellElement); + fireTargetModified(); + } + }; + + private ChangeListener sortTypeBtnGroupChangeListener = new ChangeListener() { + @Override + public void stateChanged(ChangeEvent e) { + sortPane.update(cellElement); + fireTargetModified(); + } + }; + + private UIObserverListener filterPaneChangeListener = new UIObserverListener() { + @Override + public void doChange() { + filterPane.update(cellElement); + fireTargetModified(); + } + }; + + private UIObserverListener customValuePaneChangeListener = new UIObserverListener() { + @Override + public void doChange() { + valuePane.update(cellElement); + fireTargetModified(); + } + }; + + private AttributeChangeListener formatChangeListener = new AttributeChangeListener() { + @Override + public void attributeChange() { + formatAttrPane.update(cellElement); + fireTargetModified(); + } + }; + + private ChangeListener heCheckBoxChangeListener = new ChangeListener() { + @Override + public void stateChanged(ChangeEvent e) { + cellDSColumnAdvancedPane.updateExtendConfig(); + fireTargetModified(); + } + }; + + private ChangeListener veCheckBoxChangeListener = new ChangeListener() { + @Override + public void stateChanged(ChangeEvent e) { + cellDSColumnAdvancedPane.updateExtendConfig(); + fireTargetModified(); + } + }; + + private ActionListener useMultiNumCheckBoxChangeListener = new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + checkButtonEnabled(); + cellDSColumnAdvancedPane.updateMultipleConfig(); + fireTargetModified(); + } + }; + + private ChangeListener multiNumSpinnerChangeListener = new ChangeListener() { + @Override + public void stateChanged(ChangeEvent e) { + cellDSColumnAdvancedPane.updateMultipleConfig(); + fireTargetModified(); + } + }; + /*listeners end*/ + + public DSColumnAdvancedEditorPane() { this.setBorder(BorderFactory.createEmptyBorder(10, 0, 0, 0)); + this.createScrollPane(); } @@ -369,10 +469,10 @@ public class CellDSColumnEditor extends CellQuickEditor { } - @Override public void update() { if (cellElement != null) { + sortPane.update(cellElement); valuePane.update(cellElement); formatAttrPane.update(cellElement); filterPane.update(cellElement); @@ -380,14 +480,14 @@ public class CellDSColumnEditor extends CellQuickEditor { updateExtendConfig(); //更新补充空白设置 updateMultipleConfig(); - cellDSColumnSortPane.updateBean(cellElement); } } @Override public void populate() { if (cellElement != null) { - this.removeAttributeChangeListener(); + disableListener(); + sortPane.populate(cellElement); valuePane.populate(cellElement); formatAttrPane.populate(cellElement); filterPane.populate(cellElement); @@ -424,11 +524,8 @@ public class CellDSColumnEditor extends CellQuickEditor { useMultiNumCheckBox.setSelected(true); multiNumSpinner.setValue(cellExpandAttr.getMultipleNumber()); } - if (cellDSColumnSortPane != null) { - cellDSColumnSortPane.populateBean(cellElement); - } this.checkButtonEnabled(); - this.addAttributeChangeListener(); + enableListener(); } } @@ -437,17 +534,6 @@ public class CellDSColumnEditor extends CellQuickEditor { } - @Override - protected AttributeChangeListener getAttributeChangeListener() { - return new AttributeChangeListener() { - @Override - public void attributeChange() { - update(); - fireTargetModified(); - } - }; - } - /** * 更新单元格扩展属性 */ @@ -492,8 +578,11 @@ public class CellDSColumnEditor extends CellQuickEditor { */ @Override protected JPanel createContentPane() { - JPanel contentPane = new JPanel(new BorderLayout()); this.setLayout(FRGUIPaneFactory.createBorderLayout()); + + //结果集排序 + sortPane = new ResultSetSortConfigPane(); + //结果筛选 filterPane = new ResultSetFilterConfigPane(); @@ -527,7 +616,10 @@ public class CellDSColumnEditor extends CellQuickEditor { multiPane.setBorder(BorderFactory.createEmptyBorder(0, 20, 0, 0)); multiNumPane.add(multiPane); + enableListener(); + Component[][] components = new Component[][]{ + {sortPane}, {filterPane}, {valuePane}, {formatAttrPane}, @@ -538,15 +630,32 @@ public class CellDSColumnEditor extends CellQuickEditor { double[] rowSize = new double[components.length]; Arrays.fill(rowSize, P); double[] columnSize = {F}; - JPanel advancePropertyPane = TableLayoutHelper.createGapTableLayoutPane(components, rowSize, columnSize, HGAP, VGAP); - contentPane.add(advancePropertyPane, BorderLayout.NORTH); - UIExpandablePane sortUIExpandablePane = - new UIExpandablePane(Toolkit.i18nText("Fine-Design_Sort_Data_Column_Sort"), - 223, 24, cellDSColumnSortPane = new CellDSColumnSortPane()); - contentPane.add(sortUIExpandablePane, BorderLayout.CENTER); - return contentPane; + + return TableLayoutHelper.createGapTableLayoutPane(components, rowSize, columnSize, HGAP, VGAP); + } + + public void enableListener() { + sortPane.addListener(sortPaneFormulaChangeListener, sortTypeBtnGroupChangeListener); + filterPane.addListener(filterPaneChangeListener); + valuePane.addListener(customValuePaneChangeListener); + formatAttrPane.addAttributeChangeListener(formatChangeListener); + heCheckBox.addChangeListener(heCheckBoxChangeListener); + veCheckBox.addChangeListener(veCheckBoxChangeListener); + useMultiNumCheckBox.addActionListener(useMultiNumCheckBoxChangeListener); + multiNumSpinner.addChangeListener(multiNumSpinnerChangeListener); + } + + public void disableListener() { + sortPane.removeListener(sortTypeBtnGroupChangeListener); + filterPane.removeListener(); + valuePane.removeListener(); + heCheckBox.removeChangeListener(heCheckBoxChangeListener); + veCheckBox.removeChangeListener(veCheckBoxChangeListener); + useMultiNumCheckBox.removeActionListener(useMultiNumCheckBoxChangeListener); + multiNumSpinner.removeChangeListener(multiNumSpinnerChangeListener); } + private void checkButtonEnabled() { if (useMultiNumCheckBox.isSelected()) { multiNumSpinner.setEnabled(true); @@ -557,6 +666,136 @@ public class CellDSColumnEditor extends CellQuickEditor { } } + /** + * 单元格元素>数据集>高级设置>结果排序设置面板 + * + * @see com.fr.design.expand.SortExpandAttrPane + * @see DSColumnAdvancedPane.SortPane + */ + public class ResultSetSortConfigPane extends JPanel { + private static final String DEFAULT_VALUE = "="; + private JPanel contentPane; + private UIButtonGroup sortTypePane; + private JFormulaField formulaField; + private CardLayout cardLayout; + private JPanel centerPane; + + + public ResultSetSortConfigPane() { + this.setLayout(new BorderLayout()); + Icon[] iconArray = { + IOUtils.readIcon("/com/fr/design/images/expand/none16x16.png"), + IOUtils.readIcon("/com/fr/design/images/expand/asc.png"), + IOUtils.readIcon("/com/fr/design/images/expand/des.png") + }; + String[] nameArray = {Toolkit.i18nText("Fine-Design_Report_Sort_Original"), Toolkit.i18nText("Fine-Design_Report_Sort_Ascending"), Toolkit.i18nText("Fine-Design_Report_Sort_Descending")}; + sortTypePane = new UIButtonGroup(iconArray); + sortTypePane.setAllToolTips(nameArray); + sortTypePane.setGlobalName(Toolkit.i18nText("Fine-Design_Basic_ExpandD_Sort_After_Expand")); + + cardLayout = new CardLayout(); + centerPane = new JPanel(cardLayout); + formulaField = new JFormulaField(DEFAULT_VALUE); + centerPane.add(new JPanel(), "none"); + centerPane.add(formulaField, "content"); + UILabel sortLabel = new UILabel(Toolkit.i18nText("Fine-Design_Report_Sort_Sort_Order")); + sortLabel.setPreferredSize(LABEL_DIMENSION); + sortTypePane.addChangeListener(new ChangeListener() { + @Override + public void stateChanged(ChangeEvent e) { + boolean noContent = sortTypePane.getSelectedIndex() == 0; + cardLayout.show(centerPane, noContent ? "none" : "content"); + if (noContent) { + centerPane.setPreferredSize(new Dimension(0, 0)); + TableLayoutHelper.modifyTableLayoutIndexVGap(contentPane, 2, 0); + } else { + centerPane.setPreferredSize(new Dimension(165, 20)); + TableLayoutHelper.modifyTableLayoutIndexVGap(contentPane, 2, VGAP); + } + } + }); + + Component[][] components = new Component[][]{ + new Component[]{sortLabel, sortTypePane}, + new Component[]{null, centerPane} + }; + + double[] rowSize = {P, P}, columnSize = {P, F}; + contentPane = TableLayoutHelper.createGapTableLayoutPane(components, rowSize, columnSize, HGAP, VGAP); + this.add(contentPane, BorderLayout.CENTER); + } + + + /** + * 刷新面板信息 + * + * @param cellElement 单元格 + */ + public void populate(TemplateCellElement cellElement) { + if (cellElement != null) { + Object value = cellElement.getValue(); + if (value instanceof DSColumn) { + this.formulaField.populateElement(cellElement); + DSColumn dSColumn = (DSColumn) value; + int sort = dSColumn.getOrder(); + this.sortTypePane.setSelectedIndex(sort); + boolean noContent = sortTypePane.getSelectedIndex() == 0; + cardLayout.show(centerPane, noContent ? "none" : "content"); + if (noContent) { + centerPane.setPreferredSize(new Dimension(0, 0)); + TableLayoutHelper.modifyTableLayoutIndexVGap(contentPane, 2, 0); + } else { + centerPane.setPreferredSize(new Dimension(156, 20)); + TableLayoutHelper.modifyTableLayoutIndexVGap(contentPane, 2, VGAP); + } + String sortFormula = dSColumn.getSortFormula(); + if (sortFormula != null && sortFormula.length() >= 1) { + this.formulaField.populate(sortFormula); + } else { + this.formulaField.populate(DEFAULT_VALUE); + } + } + } + } + + /** + * 保存面板配置信息 + * + * @param cellElement 单元格 + */ + public void update(CellElement cellElement) { + if (cellElement != null) { + Object value = cellElement.getValue(); + if (value instanceof DSColumn) { + DSColumn dSColumn = (DSColumn) value; + dSColumn.setOrder(this.sortTypePane.getSelectedIndex()); + dSColumn.setSortFormula(this.formulaField.getFormulaText()); + } + } + } + + /** + * 添加事件监听器 + * + * @param formulaChangeListener 公式输入框改动事件监听器 + * @param changeListener 排序类型下拉框改动事件监听器 + */ + public void addListener(UIObserverListener formulaChangeListener, ChangeListener changeListener) { + formulaField.addListener(formulaChangeListener); + sortTypePane.addChangeListener(changeListener); + } + + /** + * 去除事件监听器 + * + * @param changeListener 排序类型下拉框改动事件监听器 + */ + public void removeListener(ChangeListener changeListener) { + formulaField.removeListener(); + sortTypePane.removeChangeListener(changeListener); + } + } + /** * 单元格元素>数据集>高级设置>结果集筛选设置面板 * From 8db845854c8aed853c75febc185f49384fc86735 Mon Sep 17 00:00:00 2001 From: "Henry.Wang" Date: Fri, 24 Dec 2021 14:44:36 +0800 Subject: [PATCH 23/30] =?UTF-8?q?REPORT-62440=20=E5=BB=B6=E6=9C=9F?= =?UTF-8?q?=E5=8F=91=E5=B8=83=EF=BC=8C=E4=BB=A3=E7=A0=81=E5=9B=9E=E9=80=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AbstractAuthorityCheckerProvider.java | 16 ---------------- .../authority/AuthorityCheckerProvider.java | 10 ---------- .../authority/DSColumnAuthorityChecker.java | 2 +- .../authority/ElementAuthorityChecker.java | 6 +++--- .../authority/FormulaAuthorityChecker.java | 2 +- .../authority/JTemplateAuthorityChecker.java | 8 -------- .../NameDatabaseConnectionAuthorityChecker.java | 2 +- .../authority/NameTableDataAuthorityChecker.java | 2 +- 8 files changed, 7 insertions(+), 41 deletions(-) delete mode 100644 designer-base/src/main/java/com/fr/design/mainframe/authority/AbstractAuthorityCheckerProvider.java delete mode 100644 designer-base/src/main/java/com/fr/design/mainframe/authority/AuthorityCheckerProvider.java diff --git a/designer-base/src/main/java/com/fr/design/mainframe/authority/AbstractAuthorityCheckerProvider.java b/designer-base/src/main/java/com/fr/design/mainframe/authority/AbstractAuthorityCheckerProvider.java deleted file mode 100644 index 30d594df2c..0000000000 --- a/designer-base/src/main/java/com/fr/design/mainframe/authority/AbstractAuthorityCheckerProvider.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.fr.design.mainframe.authority; - -import com.fr.stable.fun.mark.API; - -@API(level = AuthorityCheckerProvider.CURRENT_LEVEL) -public abstract class AbstractAuthorityCheckerProvider implements AuthorityCheckerProvider { - @Override - public int currentAPILevel() { - return CURRENT_LEVEL; - } - - @Override - public String mark4Provider() { - return getClass().getName(); - } -} diff --git a/designer-base/src/main/java/com/fr/design/mainframe/authority/AuthorityCheckerProvider.java b/designer-base/src/main/java/com/fr/design/mainframe/authority/AuthorityCheckerProvider.java deleted file mode 100644 index 4aa38717ae..0000000000 --- a/designer-base/src/main/java/com/fr/design/mainframe/authority/AuthorityCheckerProvider.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.fr.design.mainframe.authority; - -import com.fr.stable.fun.mark.Mutable; - -public interface AuthorityCheckerProvider extends Mutable { - String XML_TAG = "AuthorityCheckerProvider"; - int CURRENT_LEVEL = 1; - - ElementAuthorityChecker getElementAuthorityChecker(); -} diff --git a/designer-base/src/main/java/com/fr/design/mainframe/authority/DSColumnAuthorityChecker.java b/designer-base/src/main/java/com/fr/design/mainframe/authority/DSColumnAuthorityChecker.java index 0d1df60673..fdab6ea2a2 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/authority/DSColumnAuthorityChecker.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/authority/DSColumnAuthorityChecker.java @@ -11,7 +11,7 @@ public class DSColumnAuthorityChecker extends ElementAuthorityChecker @Override @Nullable - protected Set getNoAuthDatasetNames(DSColumn dsColumn, Set authDatasetNames) { + Set getNoAuthDatasetNames(DSColumn dsColumn, Set authDatasetNames) { if (!authDatasetNames.contains(dsColumn.getDSName())) { return new HashSet<>(Arrays.asList(dsColumn.getDSName())); } diff --git a/designer-base/src/main/java/com/fr/design/mainframe/authority/ElementAuthorityChecker.java b/designer-base/src/main/java/com/fr/design/mainframe/authority/ElementAuthorityChecker.java index 82740da4ec..67d0f1da36 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/authority/ElementAuthorityChecker.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/authority/ElementAuthorityChecker.java @@ -17,7 +17,7 @@ public abstract class ElementAuthorityChecker { * @return 如果有返回名称,没有返回null */ @Nullable - protected Set getNoAuthConnectionNames(T t, Set authConnectionNames) { + Set getNoAuthConnectionNames(T t, Set authConnectionNames) { return null; } @@ -29,7 +29,7 @@ public abstract class ElementAuthorityChecker { * @return 如果有返回名称,没有返回null */ @Nullable - protected Set getNoAuthDatasetNames(T t, Set authDatasetNames) { + Set getNoAuthDatasetNames(T t, Set authDatasetNames) { return null; } @@ -37,7 +37,7 @@ public abstract class ElementAuthorityChecker { * @Description 要检查对象的className * @return className */ - protected String getCheckClassName() { + String getCheckClassName() { ParameterizedTypeImpl parameterizedType = (ParameterizedTypeImpl) this.getClass().getGenericSuperclass(); Type type = parameterizedType.getActualTypeArguments()[0]; return type.getTypeName(); diff --git a/designer-base/src/main/java/com/fr/design/mainframe/authority/FormulaAuthorityChecker.java b/designer-base/src/main/java/com/fr/design/mainframe/authority/FormulaAuthorityChecker.java index 086a437b12..15a7f4853f 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/authority/FormulaAuthorityChecker.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/authority/FormulaAuthorityChecker.java @@ -29,7 +29,7 @@ public class FormulaAuthorityChecker extends ElementAuthorityChecker { @Override @Nullable - public Set getNoAuthDatasetNames(Formula formula, Set authDatasetNames) { + Set getNoAuthDatasetNames(Formula formula, Set authDatasetNames) { return getNoAuthNames(formula, DATASET_NAME_FORMULA_PARSER, authDatasetNames); } diff --git a/designer-base/src/main/java/com/fr/design/mainframe/authority/JTemplateAuthorityChecker.java b/designer-base/src/main/java/com/fr/design/mainframe/authority/JTemplateAuthorityChecker.java index 0c81c2fffe..d76031f654 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/authority/JTemplateAuthorityChecker.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/authority/JTemplateAuthorityChecker.java @@ -1,7 +1,6 @@ package com.fr.design.mainframe.authority; -import com.fr.design.ExtraDesignClassManager; import com.fr.design.dialog.FineJOptionPane; import com.fr.design.i18n.Toolkit; @@ -69,13 +68,6 @@ public class JTemplateAuthorityChecker { registerChecker(new DSColumnAuthorityChecker()); registerChecker(new FormulaAuthorityChecker()); registerChecker(new NameTableDataAuthorityChecker()); - Set authorityCheckerProviders - = ExtraDesignClassManager.getInstance().getArray(AuthorityCheckerProvider.XML_TAG); - for (AuthorityCheckerProvider authorityCheckerProvider : authorityCheckerProviders) { - ElementAuthorityChecker elementAuthorityChecker - = authorityCheckerProvider.getElementAuthorityChecker(); - registerChecker(elementAuthorityChecker); - } } private void registerChecker(ElementAuthorityChecker checker) { diff --git a/designer-base/src/main/java/com/fr/design/mainframe/authority/NameDatabaseConnectionAuthorityChecker.java b/designer-base/src/main/java/com/fr/design/mainframe/authority/NameDatabaseConnectionAuthorityChecker.java index e65fe55cc1..96bc0b8c5d 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/authority/NameDatabaseConnectionAuthorityChecker.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/authority/NameDatabaseConnectionAuthorityChecker.java @@ -11,7 +11,7 @@ import java.util.stream.Collectors; public class NameDatabaseConnectionAuthorityChecker extends ElementAuthorityChecker { @Override @Nullable - protected Set getNoAuthConnectionNames(NameDatabaseConnection nameDatabaseConnection, Set authConnectionNames) { + Set getNoAuthConnectionNames(NameDatabaseConnection nameDatabaseConnection, Set authConnectionNames) { String name = nameDatabaseConnection.getName(); if (!authConnectionNames.contains(name)) { return new HashSet<>(Arrays.asList(name)); diff --git a/designer-base/src/main/java/com/fr/design/mainframe/authority/NameTableDataAuthorityChecker.java b/designer-base/src/main/java/com/fr/design/mainframe/authority/NameTableDataAuthorityChecker.java index 93cad06e26..13e7300856 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/authority/NameTableDataAuthorityChecker.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/authority/NameTableDataAuthorityChecker.java @@ -10,7 +10,7 @@ import java.util.Set; public class NameTableDataAuthorityChecker extends ElementAuthorityChecker { @Override @Nullable - protected Set getNoAuthDatasetNames(NameTableData nameTableData, Set authDatasetNames) { + Set getNoAuthDatasetNames(NameTableData nameTableData, Set authDatasetNames) { if (!authDatasetNames.contains(nameTableData.getName())) { return new HashSet<>(Arrays.asList(nameTableData.getName())); } From 7d78a0e66cadda5c89e9303a041c861128a1561d Mon Sep 17 00:00:00 2001 From: Starryi Date: Fri, 24 Dec 2021 14:46:10 +0800 Subject: [PATCH 24/30] =?UTF-8?q?REPORT-64655=20=E3=80=90=E8=A7=86?= =?UTF-8?q?=E8=A7=89=E9=AA=8C=E6=94=B6=E3=80=91=E6=A8=A1=E6=9D=BF=E4=B8=BB?= =?UTF-8?q?=E9=A2=98=E7=AE=A1=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 【问题原因】 修改主题单元格样式编辑中的外边距 【改动思路】 同上 --- .../theme/edit/cell/CellStyleEditPane.java | 27 +++++++++++++------ 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/mainframe/theme/edit/cell/CellStyleEditPane.java b/designer-base/src/main/java/com/fr/design/mainframe/theme/edit/cell/CellStyleEditPane.java index 6c63953509..f599500486 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/theme/edit/cell/CellStyleEditPane.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/theme/edit/cell/CellStyleEditPane.java @@ -137,9 +137,6 @@ public class CellStyleEditPane extends MultiTabPane { protected void initLayout() { this.setLayout(new BorderLayout(0, 10)); - JPanel jPanel = new JPanel(); - jPanel.setLayout(new BorderLayout(0, 4)); - JPanel previewPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); previewArea = new CellRectangleStylePreviewPane(true); previewArea.setPreferredSize(new Dimension(215, 48)); @@ -150,8 +147,13 @@ public class CellStyleEditPane extends MultiTabPane { this.add(previewPane, BorderLayout.NORTH); - this.add(jPanel, BorderLayout.CENTER); - jPanel.add(tabPane, BorderLayout.NORTH); + JPanel settingsPane = new JPanel(); + this.add(settingsPane, BorderLayout.CENTER); + + settingsPane.setBorder(BorderFactory.createEmptyBorder(0, 4, 0, 4)); + settingsPane.setLayout(new BorderLayout(0, 4)); + + settingsPane.add(tabPane, BorderLayout.NORTH); JPanel attrListenerPane = new AbstractAttrNoScrollPane() { @Override @@ -176,18 +178,27 @@ public class CellStyleEditPane extends MultiTabPane { fireAttrChangeListener(); } }); - BasicScrollPane basicScrollPane = new AttrScrollPane() { + return new EmptyBorderAttrScrollPane() { @Override protected JPanel createContentPane() { return centerPane; } }; - return basicScrollPane; } }; - jPanel.add(attrListenerPane, BorderLayout.CENTER); + settingsPane.add(attrListenerPane, BorderLayout.CENTER); } @Override public void updateBean(ThemedCellStyle ob) {} + + + private static abstract class EmptyBorderAttrScrollPane extends AttrScrollPane { + + @Override + protected void layoutContentPane() { + super.layoutContentPane(); + leftcontentPane.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0)); + } + } } From 105fac05d51135c8c866a7fb1481b15f2777613b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=96=B9=E7=A3=8A?= <294531121@qq.com> Date: Fri, 24 Dec 2021 17:48:06 +0800 Subject: [PATCH 25/30] =?UTF-8?q?CHART-22465=20=E6=8F=90=E7=A4=BA=E9=A2=9C?= =?UTF-8?q?=E8=89=B2=E4=B8=8D=E9=9C=80=E8=A6=81=E6=96=B0=E5=A2=9E=E8=87=AA?= =?UTF-8?q?=E5=8A=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../component/VanChartLabelContentPane.java | 17 ++++++++++ .../component/VanChartTooltipContentPane.java | 32 ++++++++++--------- 2 files changed, 34 insertions(+), 15 deletions(-) diff --git a/designer-chart/src/main/java/com/fr/van/chart/designer/component/VanChartLabelContentPane.java b/designer-chart/src/main/java/com/fr/van/chart/designer/component/VanChartLabelContentPane.java index 06c0640819..1aaf53424c 100644 --- a/designer-chart/src/main/java/com/fr/van/chart/designer/component/VanChartLabelContentPane.java +++ b/designer-chart/src/main/java/com/fr/van/chart/designer/component/VanChartLabelContentPane.java @@ -1,13 +1,17 @@ package com.fr.van.chart.designer.component; +import com.fr.design.mainframe.chart.gui.style.ChartTextAttrPane; +import com.fr.design.mainframe.chart.gui.style.ChartTextAttrPaneWithAuto; import com.fr.design.mainframe.chart.gui.style.ChartTextAttrPaneWithThemeStyle; import com.fr.design.mainframe.chart.mode.ChartEditContext; import com.fr.plugin.chart.base.AttrTooltipContent; +import com.fr.plugin.chart.type.FontAutoType; import com.fr.plugin.chart.type.TextAlign; import com.fr.van.chart.designer.style.VanChartStylePane; import javax.swing.JPanel; import java.awt.BorderLayout; +import java.awt.Component; public class VanChartLabelContentPane extends VanChartTooltipContentPane { @@ -37,6 +41,19 @@ public class VanChartLabelContentPane extends VanChartTooltipContentPane { return stylePanel; } + @Override + protected ChartTextAttrPane createChartTextAttrPane() { + return new ChartTextAttrPaneWithAuto(FontAutoType.COLOR) { + protected Component[][] getComponents(JPanel buttonPane) { + return new Component[][]{ + new Component[]{null, null}, + new Component[]{null, getFontNameComboBox()}, + new Component[]{null, buttonPane} + }; + } + }; + } + public void updateTextAttr(AttrTooltipContent attrTooltipContent) { if (isInCondition() || !ChartEditContext.supportTheme()) { super.updateTextAttr(attrTooltipContent); diff --git a/designer-chart/src/main/java/com/fr/van/chart/designer/component/VanChartTooltipContentPane.java b/designer-chart/src/main/java/com/fr/van/chart/designer/component/VanChartTooltipContentPane.java index bdbdee6a86..ab84b88b89 100644 --- a/designer-chart/src/main/java/com/fr/van/chart/designer/component/VanChartTooltipContentPane.java +++ b/designer-chart/src/main/java/com/fr/van/chart/designer/component/VanChartTooltipContentPane.java @@ -11,7 +11,6 @@ import com.fr.design.layout.TableLayout; import com.fr.design.layout.TableLayoutHelper; import com.fr.design.mainframe.DesignerContext; import com.fr.design.mainframe.chart.gui.style.ChartTextAttrPane; -import com.fr.design.mainframe.chart.gui.style.ChartTextAttrPaneWithAuto; import com.fr.design.ui.ModernUIPane; import com.fr.general.ComparatorUtils; import com.fr.plugin.chart.base.AttrTooltipContent; @@ -22,7 +21,6 @@ import com.fr.plugin.chart.base.format.AttrTooltipFormat; import com.fr.plugin.chart.base.format.AttrTooltipPercentFormat; import com.fr.plugin.chart.base.format.AttrTooltipSeriesFormat; import com.fr.plugin.chart.base.format.AttrTooltipValueFormat; -import com.fr.plugin.chart.type.FontAutoType; import com.fr.stable.StringUtils; import com.fr.van.chart.designer.TableLayout4VanChartHelper; import com.fr.van.chart.designer.component.format.CategoryNameFormatPaneWithCheckBox; @@ -41,10 +39,6 @@ import com.fr.van.chart.designer.style.VanChartStylePane; import javax.swing.JComponent; import javax.swing.JPanel; import javax.swing.SwingUtilities; -import java.util.Arrays; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; import java.awt.BorderLayout; import java.awt.CardLayout; import java.awt.Component; @@ -53,6 +47,10 @@ import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; +import java.util.Arrays; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; /** * 数据点提示内容界面,含有通用设置、富文本编辑器、自定义JS界面 @@ -317,15 +315,7 @@ public class VanChartTooltipContentPane extends BasicBeanPane Date: Mon, 27 Dec 2021 10:11:45 +0800 Subject: [PATCH 26/30] =?UTF-8?q?REPORT-64655=20=E3=80=90=E8=A7=86?= =?UTF-8?q?=E8=A7=89=E9=AA=8C=E6=94=B6=E3=80=91=E6=A8=A1=E6=9D=BF=E4=B8=BB?= =?UTF-8?q?=E9=A2=98=E7=AE=A1=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 【问题原因】 1. 修改主题单元格样式编辑中的外边距 2. 去除主题编辑面板中单元格样式列表项的默认图标 【改动思路】 同上 --- .../theme/edit/CellStyleListEditPane.java | 47 +++++++++++++------ .../theme/edit/cell/CellStyleEditPane.java | 4 +- 2 files changed, 35 insertions(+), 16 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/mainframe/theme/edit/CellStyleListEditPane.java b/designer-base/src/main/java/com/fr/design/mainframe/theme/edit/CellStyleListEditPane.java index ec0d085b95..0b5c7b61e7 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/theme/edit/CellStyleListEditPane.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/theme/edit/CellStyleListEditPane.java @@ -102,20 +102,8 @@ public class CellStyleListEditPane extends JListControlPane { @Override protected JNameEdList createJNameList() { JNameEdList nameEdList = super.createJNameList(); - nameEdList.setCellEditor(new DefaultListCellEditor(new UITextField()) { - @Override - public Component getListCellEditorComponent(JList list, Object value, boolean isSelected, int index) { - ListModelElement element = (ListModelElement) getModel().getElementAt(index); - if (element != null) { - NameObject selectNameObject = (NameObject) element.wrapper; - ThemedCellStyle cellStyle = (ThemedCellStyle) (selectNameObject.getObject()); - if (!cellStyle.isRemovable()) { - return null; - } - } - return super.getListCellEditorComponent(list, value, isSelected, index); - } - }); + nameEdList.setCellEditor(new UnEditableListCellEditor(new UITextField())); + nameEdList.setCellRenderer(new NoIconNameableListCellRenderer()); return nameEdList; } @@ -294,4 +282,35 @@ public class CellStyleListEditPane extends JListControlPane { return ((ThemedCellStyle) ob).isUse4Default(); } } + + private class NoIconNameableListCellRenderer extends NameableListCellRenderer { + @Override + public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { + Component component = super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); + if (component instanceof NameableListCellRenderer) { + ((NameableListCellRenderer) component).setIcon(null); + ((NameableListCellRenderer) component).setBorder(BorderFactory.createEmptyBorder(0, 4, 0, 0)); + } + return component; + } + } + private class UnEditableListCellEditor extends DefaultListCellEditor { + + public UnEditableListCellEditor(UITextField textField) { + super(textField); + } + + @Override + public Component getListCellEditorComponent(JList list, Object value, boolean isSelected, int index) { + ListModelElement element = (ListModelElement) getModel().getElementAt(index); + if (element != null) { + NameObject selectNameObject = (NameObject) element.wrapper; + ThemedCellStyle cellStyle = (ThemedCellStyle) (selectNameObject.getObject()); + if (!cellStyle.isRemovable()) { + return null; + } + } + return super.getListCellEditorComponent(list, value, isSelected, index); + } + } } diff --git a/designer-base/src/main/java/com/fr/design/mainframe/theme/edit/cell/CellStyleEditPane.java b/designer-base/src/main/java/com/fr/design/mainframe/theme/edit/cell/CellStyleEditPane.java index f599500486..8efbb1eee5 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/theme/edit/cell/CellStyleEditPane.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/theme/edit/cell/CellStyleEditPane.java @@ -136,10 +136,11 @@ public class CellStyleEditPane extends MultiTabPane { @Override protected void initLayout() { this.setLayout(new BorderLayout(0, 10)); + this.setBorder(BorderFactory.createEmptyBorder(0, 4, 0, 4)); JPanel previewPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); previewArea = new CellRectangleStylePreviewPane(true); - previewArea.setPreferredSize(new Dimension(215, 48)); + previewArea.setPreferredSize(new Dimension(207, 48)); previewPane.setBorder(BorderFactory.createCompoundBorder( BorderUtils.createTitleBorder(i18nText("Fine-Design_Basic_Preview")), BorderFactory.createEmptyBorder(4, 4, 4, 4))); @@ -150,7 +151,6 @@ public class CellStyleEditPane extends MultiTabPane { JPanel settingsPane = new JPanel(); this.add(settingsPane, BorderLayout.CENTER); - settingsPane.setBorder(BorderFactory.createEmptyBorder(0, 4, 0, 4)); settingsPane.setLayout(new BorderLayout(0, 4)); settingsPane.add(tabPane, BorderLayout.NORTH); From 952d60a41efd3cbd7167d1a0fe3b51321fc26dee Mon Sep 17 00:00:00 2001 From: kerry Date: Mon, 27 Dec 2021 14:39:28 +0800 Subject: [PATCH 27/30] =?UTF-8?q?KERNEL-9651=20=E6=8A=A5=E8=A1=A8=E5=9D=97?= =?UTF-8?q?=E5=9B=BE=E8=A1=A8=E5=9D=97=E5=9C=A8=E8=AE=BE=E8=AE=A1=E5=99=A8?= =?UTF-8?q?=E4=B8=8A=E6=94=B9=E5=8F=98=E5=A4=A7=E5=B0=8F=E7=9A=84=E6=97=B6?= =?UTF-8?q?=E5=80=99=EF=BC=8C=E4=BF=9D=E5=AD=98=E5=9C=A8=20xml=20=E9=87=8C?= =?UTF-8?q?=E9=9D=A2=E7=9A=84=20elementcaseEdito=20=E7=9A=84=E5=B0=BA?= =?UTF-8?q?=E5=AF=B8=E4=BE=9D=E7=84=B6=E6=98=AF=E5=88=9D=E5=A7=8B=E5=B0=BA?= =?UTF-8?q?=E5=AF=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../creator/XBorderStyleWidgetCreator.java | 25 +++++++++++-------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/designer-form/src/main/java/com/fr/design/designer/creator/XBorderStyleWidgetCreator.java b/designer-form/src/main/java/com/fr/design/designer/creator/XBorderStyleWidgetCreator.java index f99864c629..16fd4ce3ca 100644 --- a/designer-form/src/main/java/com/fr/design/designer/creator/XBorderStyleWidgetCreator.java +++ b/designer-form/src/main/java/com/fr/design/designer/creator/XBorderStyleWidgetCreator.java @@ -180,16 +180,21 @@ public class XBorderStyleWidgetCreator extends XWidgetCreator{ this.setBackground4Painting(null, 0.0); } } - - private void clearTitleWidget() { - if (acceptType(XWFitLayout.class)) { - return; - } - XWTitleLayout parent = (XWTitleLayout) this.getParent(); - if (parent.getComponentCount() > 1) { - parent.remove(parent.getTitleCreator()); - } - } + + private void clearTitleWidget() { + if (acceptType(XWFitLayout.class)) { + return; + } + XWTitleLayout parent = (XWTitleLayout) this.getParent(); + if (parent.getComponentCount() > 1) { + parent.remove(parent.getTitleCreator()); + WTitleLayout layout = parent.toData(); + Rectangle rec = new Rectangle(layout.getBodyBoundsWidget().getBounds()); + //删除标题组件后,容器高度为body高度+标题组件的高度 + rec.height += WTitleLayout.TITLE_HEIGHT; + layout.updateChildBounds(rec); + } + } /** * 设置样式为标题样式时,对应组件加上标题 From eb35507eb4216b0ece2c8242fd53debe0e1cf1eb Mon Sep 17 00:00:00 2001 From: Starryi Date: Thu, 23 Dec 2021 14:03:15 +0800 Subject: [PATCH 28/30] =?UTF-8?q?REPORT-64741=20=E3=80=90=E7=BB=84?= =?UTF-8?q?=E4=BB=B6=E5=8F=AF=E6=9B=B4=E6=96=B0=E6=8F=90=E9=86=92=E3=80=91?= =?UTF-8?q?=E7=BB=84=E4=BB=B6=E5=A4=8D=E7=94=A8-=E8=AE=BE=E8=AE=A1?= =?UTF-8?q?=E5=99=A8=E7=AB=AF=E5=AE=89=E8=A3=85=E8=AE=BE=E8=AE=A1=E5=99=A8?= =?UTF-8?q?=E7=89=88=E6=9C=AC=E9=AB=98=E4=BA=8E=E5=BD=93=E5=89=8D=E8=AE=BE?= =?UTF-8?q?=E8=AE=A1=E5=99=A8=E7=89=88=E6=9C=AC=E7=9A=84=E7=BB=84=E4=BB=B6?= =?UTF-8?q?=E7=9A=84=E6=83=85=E5=86=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 【问题原因】 1. 重新确定了组件是否可以被安装的规则。 安装新组件时,如果之前没有安装过该UID的组件,则允许安装; 否则将会比较新旧组件的兼容性和版本高低,以确定是否安装新组件。 优先满足兼容性需求,兼容性相同时,再考虑组件版本. 兼容 + 高版本 > 兼容 + 低版本 > 不兼容 + 高版本 > 不兼容 + 低版本 2. 安装新的组件reu时,删除组内旧的组件reu文件 【改动思路】 同上 --- .../fr/design/mainframe/share/ui/block/OnlineWidgetBlock.java | 2 +- .../java/com/fr/design/mainframe/share/util/InstallUtils.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/block/OnlineWidgetBlock.java b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/block/OnlineWidgetBlock.java index b8cb0e6788..646a4c8634 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/block/OnlineWidgetBlock.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/block/OnlineWidgetBlock.java @@ -179,7 +179,7 @@ public class OnlineWidgetBlock extends AbstractOnlineWidgetBlock { //安装 File file = new File(filePath); try { - if (file.exists() && getDefaultGroup().installModule(file)) { + if (file.exists() && getDefaultGroup().installUniqueIdModule(file)) { ShareUtils.recordInstallTime(file.getName(), System.currentTimeMillis()); ComponentCollector.getInstance().collectCmpDownLoad(widget.getUuid()); } diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/util/InstallUtils.java b/designer-form/src/main/java/com/fr/design/mainframe/share/util/InstallUtils.java index 610f688a46..b3c711c01a 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/share/util/InstallUtils.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/util/InstallUtils.java @@ -112,7 +112,7 @@ public class InstallUtils { private static boolean installReuFile(Group group, File chosenFile, long installTime) { try { - if (!group.installModule(chosenFile)) { + if (!group.installUniqueIdModule(chosenFile)) { return false; } ShareUtils.recordInstallTime(chosenFile.getName(), installTime); From eb17d1c17f3979829df1cdeb74094e8f3d98232c Mon Sep 17 00:00:00 2001 From: Starryi Date: Thu, 23 Dec 2021 11:12:07 +0800 Subject: [PATCH 29/30] =?UTF-8?q?REPORT-64811=20=E4=BF=9D=E6=8C=81?= =?UTF-8?q?=E8=AE=BE=E8=AE=A1=E5=99=A8=E5=95=86=E5=9F=8E=E4=B8=8B=E8=BD=BD?= =?UTF-8?q?reu=E6=96=87=E4=BB=B6=E5=90=8D=E4=B8=AD=E7=9A=84=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 【问题原因】 使用商城组件数据中的fileLoca字段值作为本地reu文件名,该字段与oss服务器中reu文件的 文件名保持一致. 设计器在下载安装组件时,不对reu文件进行重命名操作, 即本地安装组件时,使用原本地reu 文件名,在线安装商城组件时,使用原oss服务器中reu文件名. 【改动思路】 同上 --- .../mainframe/share/ui/block/OnlineWidgetBlock.java | 11 ++++++++++- .../fr/design/mainframe/share/util/DownloadUtils.java | 2 +- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/block/OnlineWidgetBlock.java b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/block/OnlineWidgetBlock.java index 646a4c8634..74651ccae7 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/block/OnlineWidgetBlock.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/block/OnlineWidgetBlock.java @@ -150,6 +150,14 @@ public class OnlineWidgetBlock extends AbstractOnlineWidgetBlock { } } + private String createLocalReuFilename() { + String filename = widget.getFileLoca(); + if (StringUtils.isEmpty(filename) || !filename.endsWith(".reu")) { + filename = widget.getName() + "." + widget.getUuid() + ".reu"; + } + return filename; + } + private void downLoadWidget() { if (OnlineWidgetRepoPane.getInstance().isShowPackagePanel()) { ComponentCollector.getInstance().collectDownloadPktNum(); @@ -170,7 +178,8 @@ public class OnlineWidgetBlock extends AbstractOnlineWidgetBlock { protected Boolean doInBackground() { String filePath; try { - filePath = DownloadUtils.download(widget.getId(), widget.getName() + "." + widget.getUuid(), process); + String filename = createLocalReuFilename(); + filePath = DownloadUtils.download(widget.getId(), filename, process); } catch (Exception e) { FineLoggerFactory.getLogger().error(e.getMessage(), e); return false; diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/util/DownloadUtils.java b/designer-form/src/main/java/com/fr/design/mainframe/share/util/DownloadUtils.java index 96c2cc28c6..18cb938387 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/share/util/DownloadUtils.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/util/DownloadUtils.java @@ -67,7 +67,7 @@ public class DownloadUtils { long totalSize = entity.getContentLength(); InputStream content = entity.getContent(); - filePath = StableUtils.pathJoin(realPath, fileName + ".reu"); + filePath = StableUtils.pathJoin(realPath, fileName); StableUtils.makesureFileExist(new File(filePath)); FileOutputStream writer = new FileOutputStream(filePath); byte[] data = new byte[PluginConstants.BYTES_NUM]; From 1a4503a242ca89a06448b5aa73aaa12bf8c163f0 Mon Sep 17 00:00:00 2001 From: rinoux Date: Tue, 28 Dec 2021 17:21:15 +0800 Subject: [PATCH 30/30] =?UTF-8?q?REPORT-65087=20=E5=85=B1=E4=BA=AB?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E9=9B=86=E5=85=BC=E5=AE=B9=E6=80=A7=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../design/data/tabledata/tabledatapane/DBTableDataPane.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/data/tabledata/tabledatapane/DBTableDataPane.java b/designer-base/src/main/java/com/fr/design/data/tabledata/tabledatapane/DBTableDataPane.java index 173da2fbf7..1746330f11 100644 --- a/designer-base/src/main/java/com/fr/design/data/tabledata/tabledatapane/DBTableDataPane.java +++ b/designer-base/src/main/java/com/fr/design/data/tabledata/tabledatapane/DBTableDataPane.java @@ -715,8 +715,8 @@ public class DBTableDataPane extends AbstractTableDataPane { if (useGlobal(getTableData(), strategyConfig)) { //使用全局配置 strategyConfig = StrategyConfigHelper.createStrategyConfig(true); - } else if (getTableData().isShare()) { - //使用共享数据集兼容配置 + } else if (strategyConfig == null && getTableData().isShare()) { + //没有配置时,使用共享数据集兼容配置 strategyConfig = StrategyConfigHelper.createStrategyConfig(true, false, true); } }