From 7038beae50a27d61f76405ba7fb481e694a89f29 Mon Sep 17 00:00:00 2001 From: "Henry.Wang" Date: Thu, 16 Dec 2021 17:19:28 +0800 Subject: [PATCH 1/3] =?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 aba5552f6e8b09a62048a9354aa7b03c2f4e9061 Mon Sep 17 00:00:00 2001 From: "Henry.Wang" Date: Fri, 24 Dec 2021 14:36:56 +0800 Subject: [PATCH 2/3] =?UTF-8?q?REPORT-62440=20=E5=BB=B6=E6=9C=9F=E5=8F=91?= =?UTF-8?q?=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 3/3] =?UTF-8?q?REPORT-62440=20=E5=BB=B6=E6=9C=9F=E5=8F=91?= =?UTF-8?q?=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())); }