From f6ee8dd2ce03865cf257069ff2b13d803662f6fb Mon Sep 17 00:00:00 2001 From: "Henry.Wang" Date: Wed, 8 Dec 2021 19:01:18 +0800 Subject: [PATCH 01/18] =?UTF-8?q?REPORT-62440=20=E8=A1=A8=E5=A4=B4?= =?UTF-8?q?=E6=8E=92=E5=BA=8F=E5=86=85=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../gui/frpane/AbstractAttrNoScrollPane.java | 3 + .../fr/design/gui/icheckbox/UICheckBox.java | 6 +- .../theme/edit/ui/ColorListPane.java | 2 +- .../com/fr/design/images/sort/add.png | Bin 0 -> 141 bytes .../com/fr/design/images/sort/asc.svg | 19 ++ .../com/fr/design/images/sort/des.svg | 17 ++ .../com/fr/design/images/sort/down_arrow.png | Bin 0 -> 175 bytes .../com/fr/design/images/sort/left_arrow.png | Bin 0 -> 166 bytes .../com/fr/design/images/sort/nosort.svg | 41 +++ .../share/ui/base/PlaceholderTextArea.java | 33 ++- .../cell/settingpane/CellExpandAttrPane.java | 6 + .../CellDSColumnSortGroupPane.java | 40 +++ .../CellDSColumnSortItemPane.java | 52 ++++ .../celldscolumn/CellDSColumnSortPane.java | 57 ++++ .../cellexpand/CellExpandSortGroupPane.java | 20 ++ .../cellexpand/CellExpandSortItemPane.java | 49 ++++ .../sort/cellexpand/CellExpandSortPane.java | 58 ++++ .../sort/common/AbstractSortGroupPane.java | 146 ++++++++++ .../sort/common/AbstractSortItemPane.java | 173 ++++++++++++ .../design/sort/common/AbstractSortPane.java | 118 ++++++++ .../design/sort/common/SortColumnRowPane.java | 167 ++++++++++++ .../sort/common/SortUIExpandablePane.java | 102 +++++++ .../CellSortExpressionPane.java | 31 +++ .../CustomSequenceEditPane.java | 160 +++++++++++ .../expressionpane/CustomSequencePane.java | 70 +++++ .../CustomSequenceSortExpressionPane.java | 37 +++ .../expressionpane/EmptyExpressionPane.java | 37 +++ .../FormulaSortExpressionPane.java | 41 +++ .../expressionpane/SortExpressionPane.java | 23 ++ .../fr/design/sort/header/HeaderAreaPane.java | 149 ++++++++++ .../design/sort/header/HeaderSettingPane.java | 91 +++++++ .../sort/header/HeaderSortRulePane.java | 256 ++++++++++++++++++ .../fr/design/sort/header/SortHeaderPane.java | 74 +++++ .../cellquick/CellDSColumnEditor.java | 31 ++- 34 files changed, 2097 insertions(+), 12 deletions(-) create mode 100644 designer-base/src/main/resources/com/fr/design/images/sort/add.png create mode 100644 designer-base/src/main/resources/com/fr/design/images/sort/asc.svg create mode 100644 designer-base/src/main/resources/com/fr/design/images/sort/des.svg create mode 100644 designer-base/src/main/resources/com/fr/design/images/sort/down_arrow.png create mode 100644 designer-base/src/main/resources/com/fr/design/images/sort/left_arrow.png create mode 100644 designer-base/src/main/resources/com/fr/design/images/sort/nosort.svg create mode 100644 designer-realize/src/main/java/com/fr/design/sort/celldscolumn/CellDSColumnSortGroupPane.java create mode 100644 designer-realize/src/main/java/com/fr/design/sort/celldscolumn/CellDSColumnSortItemPane.java create mode 100644 designer-realize/src/main/java/com/fr/design/sort/celldscolumn/CellDSColumnSortPane.java create mode 100644 designer-realize/src/main/java/com/fr/design/sort/cellexpand/CellExpandSortGroupPane.java create mode 100644 designer-realize/src/main/java/com/fr/design/sort/cellexpand/CellExpandSortItemPane.java create mode 100644 designer-realize/src/main/java/com/fr/design/sort/cellexpand/CellExpandSortPane.java create mode 100644 designer-realize/src/main/java/com/fr/design/sort/common/AbstractSortGroupPane.java create mode 100644 designer-realize/src/main/java/com/fr/design/sort/common/AbstractSortItemPane.java create mode 100644 designer-realize/src/main/java/com/fr/design/sort/common/AbstractSortPane.java create mode 100644 designer-realize/src/main/java/com/fr/design/sort/common/SortColumnRowPane.java create mode 100644 designer-realize/src/main/java/com/fr/design/sort/common/SortUIExpandablePane.java create mode 100644 designer-realize/src/main/java/com/fr/design/sort/expressionpane/CellSortExpressionPane.java create mode 100644 designer-realize/src/main/java/com/fr/design/sort/expressionpane/CustomSequenceEditPane.java create mode 100644 designer-realize/src/main/java/com/fr/design/sort/expressionpane/CustomSequencePane.java create mode 100644 designer-realize/src/main/java/com/fr/design/sort/expressionpane/CustomSequenceSortExpressionPane.java create mode 100644 designer-realize/src/main/java/com/fr/design/sort/expressionpane/EmptyExpressionPane.java create mode 100644 designer-realize/src/main/java/com/fr/design/sort/expressionpane/FormulaSortExpressionPane.java create mode 100644 designer-realize/src/main/java/com/fr/design/sort/expressionpane/SortExpressionPane.java create mode 100644 designer-realize/src/main/java/com/fr/design/sort/header/HeaderAreaPane.java create mode 100644 designer-realize/src/main/java/com/fr/design/sort/header/HeaderSettingPane.java create mode 100644 designer-realize/src/main/java/com/fr/design/sort/header/HeaderSortRulePane.java create mode 100644 designer-realize/src/main/java/com/fr/design/sort/header/SortHeaderPane.java diff --git a/designer-base/src/main/java/com/fr/design/gui/frpane/AbstractAttrNoScrollPane.java b/designer-base/src/main/java/com/fr/design/gui/frpane/AbstractAttrNoScrollPane.java index a9321879c8..ce09568d6b 100644 --- a/designer-base/src/main/java/com/fr/design/gui/frpane/AbstractAttrNoScrollPane.java +++ b/designer-base/src/main/java/com/fr/design/gui/frpane/AbstractAttrNoScrollPane.java @@ -76,6 +76,9 @@ public abstract class AbstractAttrNoScrollPane extends BasicPane { hasChangeListener = false; } + public AttributeChangeListener getListener() { + return listener; + } public void initListener(Container parentComponent) { for (int i = 0; i < parentComponent.getComponentCount(); i++) { diff --git a/designer-base/src/main/java/com/fr/design/gui/icheckbox/UICheckBox.java b/designer-base/src/main/java/com/fr/design/gui/icheckbox/UICheckBox.java index e294d80220..0ddd3e22d2 100644 --- a/designer-base/src/main/java/com/fr/design/gui/icheckbox/UICheckBox.java +++ b/designer-base/src/main/java/com/fr/design/gui/icheckbox/UICheckBox.java @@ -58,7 +58,7 @@ public class UICheckBox extends JCheckBox implements UIObserver, GlobalNameObser super(locText, b); setUI(new UICheckBoxUI()); initListener(); - this.markMnemonic=markMnemonic; + this.markMnemonic = markMnemonic; } public UICheckBox(String text, Icon icon) { @@ -100,6 +100,10 @@ public class UICheckBox extends JCheckBox implements UIObserver, GlobalNameObser } + public void removeChangeListener() { + uiObserverListener = null; + } + @Override public void setGlobalName(String name) { checkboxName = name; diff --git a/designer-base/src/main/java/com/fr/design/mainframe/theme/edit/ui/ColorListPane.java b/designer-base/src/main/java/com/fr/design/mainframe/theme/edit/ui/ColorListPane.java index 5c282033f0..ab5d8a4ecf 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/theme/edit/ui/ColorListPane.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/theme/edit/ui/ColorListPane.java @@ -139,7 +139,7 @@ public class ColorListPane extends JPanel implements UIObserver { return true; } - private static class ColorButton extends AbstractSelectBox { + public static class ColorButton extends AbstractSelectBox { private Color color; private NewColorSelectPane colorPane; private ChangeListener changeListener; diff --git a/designer-base/src/main/resources/com/fr/design/images/sort/add.png b/designer-base/src/main/resources/com/fr/design/images/sort/add.png new file mode 100644 index 0000000000000000000000000000000000000000..a14e2a40b81c54355768336ccb23450ccb570551 GIT binary patch literal 141 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|+&x_!LoEE0 zQx*sqJi45plT#$2QvdCZWOU3c4#^MlSqy%qi`fhe8V)l^-7-@-_Che=O~7%67&B?< m**$K`qK6tbopJHm#lY~}#7a>2LZvs*NCr<=KbLh*2~7Zq{3}-g literal 0 HcmV?d00001 diff --git a/designer-base/src/main/resources/com/fr/design/images/sort/asc.svg b/designer-base/src/main/resources/com/fr/design/images/sort/asc.svg new file mode 100644 index 0000000000..67dd9e829e --- /dev/null +++ b/designer-base/src/main/resources/com/fr/design/images/sort/asc.svg @@ -0,0 +1,19 @@ + + + 升序备份 + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/designer-base/src/main/resources/com/fr/design/images/sort/des.svg b/designer-base/src/main/resources/com/fr/design/images/sort/des.svg new file mode 100644 index 0000000000..2fcef077e6 --- /dev/null +++ b/designer-base/src/main/resources/com/fr/design/images/sort/des.svg @@ -0,0 +1,17 @@ + + + 降序 + + + + + + + + + + + + + + \ No newline at end of file diff --git a/designer-base/src/main/resources/com/fr/design/images/sort/down_arrow.png b/designer-base/src/main/resources/com/fr/design/images/sort/down_arrow.png new file mode 100644 index 0000000000000000000000000000000000000000..84b4909efc7e542dd69b5e7f9e25fdf0f98e27aa GIT binary patch literal 175 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|GCf@!LoEE0 zQx*sq1g)5#Xd!vwzP)BkV`HM}#6+Q}h#A}2mWZkH{Q9ka-Pqty{(*dsWaq@hJY^qV zH-$&$ETP72+zHE)%vpks{g@quR|XeHJktd literal 0 HcmV?d00001 diff --git a/designer-base/src/main/resources/com/fr/design/images/sort/left_arrow.png b/designer-base/src/main/resources/com/fr/design/images/sort/left_arrow.png new file mode 100644 index 0000000000000000000000000000000000000000..9166a9c96d8226d4396aea9096deb66105473683 GIT binary patch literal 166 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|5GG zqKj0+ZGkGu25W=P0>*zc7NnX8`7u9OaCF)w4Zl+@lk_*)9Nj6%a74>WF#1($B+xDf MPgg&ebxsLQ0Fz5I9RL6T literal 0 HcmV?d00001 diff --git a/designer-base/src/main/resources/com/fr/design/images/sort/nosort.svg b/designer-base/src/main/resources/com/fr/design/images/sort/nosort.svg new file mode 100644 index 0000000000..ca04928fc8 --- /dev/null +++ b/designer-base/src/main/resources/com/fr/design/images/sort/nosort.svg @@ -0,0 +1,41 @@ + + + 不排序 + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/base/PlaceholderTextArea.java b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/base/PlaceholderTextArea.java index c463a49034..d37ee52c28 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/base/PlaceholderTextArea.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/base/PlaceholderTextArea.java @@ -10,22 +10,27 @@ import java.awt.RenderingHints; * created by Harrison on 2020/04/21 **/ public class PlaceholderTextArea extends UITextArea { - + private String placeholder; - + public PlaceholderTextArea() { } - + public PlaceholderTextArea(String s, String placeholder) { super(s); this.placeholder = placeholder; } - + + public PlaceholderTextArea(int i, int j, String placeholder) { + super(i, j); + this.placeholder = placeholder; + } + public void setPlaceholder(String placeholder) { - + this.placeholder = placeholder; } - + @Override protected void paintComponent(final Graphics pG) { super.paintComponent(pG); @@ -37,6 +42,16 @@ public class PlaceholderTextArea extends UITextArea { RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g.setColor(getDisabledTextColor()); - g.drawString(placeholder, getInsets().left, pG.getFontMetrics() - .getMaxAscent() + getInsets().top + 1); - }} + drawPlaceholder(pG); + } + + private void drawPlaceholder(Graphics g) { + int x = getInsets().left; + int y = g.getFontMetrics().getMaxAscent() + getInsets().top + 1; + for (String line : placeholder.split("\n")) { + g.drawString(line, x, y); + y += g.getFontMetrics().getHeight(); + } + + } +} 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 cd454660df..979d4534f6 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 @@ -13,6 +13,7 @@ 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; @@ -43,6 +44,7 @@ public class CellExpandAttrPane extends AbstractCellAttrPane { private JPanel basicPane; private JPanel seniorPane; private CellExpandExtraAttrPane extraPane; + private CellExpandSortPane cellExpandSortPane; /** @@ -81,8 +83,10 @@ 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("扩展后排序", 223, 24, cellExpandSortPane = new CellExpandSortPane(this)); layoutPane.add(basicPane, BorderLayout.NORTH); layoutPane.add(seniorPane, BorderLayout.CENTER); + layoutPane.add(sortUIExpandablePane, BorderLayout.SOUTH); extraPane = CellExpandExtraAttrPane.getInstance(); @@ -172,6 +176,7 @@ public class CellExpandAttrPane extends AbstractCellAttrPane { sortAfterExpand.populate(cellExpandAttr); extraPane.populate(cellElement); + cellExpandSortPane.populateBean(cellElement); } @@ -222,6 +227,7 @@ public class CellExpandAttrPane extends AbstractCellAttrPane { } 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 new file mode 100644 index 0000000000..f5cdd0a8d9 --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/sort/celldscolumn/CellDSColumnSortGroupPane.java @@ -0,0 +1,40 @@ +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()); + 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 new file mode 100644 index 0000000000..c87b729e65 --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/sort/celldscolumn/CellDSColumnSortItemPane.java @@ -0,0 +1,52 @@ +package com.fr.design.sort.celldscolumn; + +import com.fr.design.event.UIObserverListener; +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) { + sortExpression.setSortArea(sortAreaUiComboBox.getSelectedItem().toString()); + } + return sortExpression; + } + + public void addListener(UIObserverListener uiObserverListener) { + super.addListener(uiObserverListener); + sortAreaUiComboBox.registerChangeListener(uiObserverListener); + } + + + public void removeListener(UIObserverListener uiObserverListener) { + super.removeListener(uiObserverListener); + sortAreaUiComboBox.removeChangeListener(); + } +} \ 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 new file mode 100644 index 0000000000..68865dca43 --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/sort/celldscolumn/CellDSColumnSortPane.java @@ -0,0 +1,57 @@ +package com.fr.design.sort.celldscolumn; + +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; + + +public class CellDSColumnSortPane extends AbstractSortPane { + + + public CellDSColumnSortPane() { + super(220, 150); + + } + + + @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()); + return dsColumn.getCellSortAttr(); + } + return new CellSortAttr(); + } + + 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.ColumnName) { + selfSortArea = ((TableDataColumn.ColumnName) dsColumn.getColumn()).getName(); + } + } + } + + + 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 new file mode 100644 index 0000000000..330b43d739 --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/sort/cellexpand/CellExpandSortGroupPane.java @@ -0,0 +1,20 @@ +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 new file mode 100644 index 0000000000..2b3bee9943 --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/sort/cellexpand/CellExpandSortItemPane.java @@ -0,0 +1,49 @@ +package com.fr.design.sort.cellexpand; + +import com.fr.design.event.UIObserverListener; +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, 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; + } + + public void addListener(UIObserverListener uiObserverListener) { + super.addListener(uiObserverListener); + columnRowPane.addListener(uiObserverListener); + } + + + public void removeListener(UIObserverListener uiObserverListener) { + super.removeListener(uiObserverListener); + columnRowPane.removeListener(uiObserverListener); + } +} 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 new file mode 100644 index 0000000000..b1412d18bc --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/sort/cellexpand/CellExpandSortPane.java @@ -0,0 +1,58 @@ +package com.fr.design.sort.cellexpand; + +import com.fr.design.event.UIObserverListener; +import com.fr.design.gui.frpane.AttributeChangeListener; +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 com.fr.report.core.sort.sortexpression.FormulaSortExpression; +import com.fr.report.core.sort.sortexpression.SortExpression; +import com.fr.report.core.sort.header.SortHeader; +import com.fr.report.core.sort.common.SortRule; + + +import javax.swing.*; +import java.util.ArrayList; +import java.util.List; + +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 void initUIObserverListener() { + uiObserverListener = new UIObserverListener() { + @Override + public void doChange() { + AttributeChangeListener attributeChangeListener = cellExpandAttrPane.getListener(); + if (attributeChangeListener != null) { + attributeChangeListener.attributeChange(); + } + } + }; + } + + @Override + protected CellSortAttr getCellSortAttr(TemplateCellElement cellElement) { + CellExpandAttr cellExpandAttr = cellElement.getCellExpandAttr(); + if (cellExpandAttr != null) { + return cellExpandAttr.getCellSortAttr(); + } + return new CellSortAttr(); + } + +} 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 new file mode 100644 index 0000000000..8aae8d30fe --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/sort/common/AbstractSortGroupPane.java @@ -0,0 +1,146 @@ +package com.fr.design.sort.common; + +import com.fr.base.svg.IconUtils; +import com.fr.design.event.UIObserverListener; +import com.fr.design.gui.ibutton.UIButton; +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.MouseAdapter; +import java.awt.event.MouseEvent; +import java.util.ArrayList; +import java.util.List; + + +public abstract class AbstractSortGroupPane extends JPanel { + + protected int sortGroupPaneWidth; + protected int sortGroupPaneRightWidth; + UIObserverListener uiObserverListener; + List sortExpressions; + List sortItemPanes = new ArrayList<>(); + AddSortItemBar addSortItemBar; + UIButton uiButton; + String selfSortArea; + + 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); + this.add(addSortItemBar); + } + + public void populateBean(List sortExpressions, String selfSortArea) { + this.selfSortArea = selfSortArea; + this.sortExpressions = sortExpressions; + refreshBean(); + } + + public void refreshBean() { + removeListener(uiObserverListener); + this.removeAll(); + sortItemPanes = new ArrayList<>(); + for (int i = 0; i < sortExpressions.size(); i++) { + int sortItemPaneWidth = sortGroupPaneWidth; + int sortItemPaneRightWidth = sortGroupPaneRightWidth; + if (i != 0) { + sortItemPaneWidth -= 12; + sortItemPaneRightWidth -= 12; + } + AbstractSortItemPane sortItemPane = refreshSortItemPane(sortItemPaneWidth, sortItemPaneRightWidth, sortExpressions.get(i)); + sortItemPanes.add(sortItemPane); + if (i == 0) { + this.add(sortItemPane); + } else { + SortUIExpandablePane sortUIExpandablePane = new SortUIExpandablePane(sortItemPane, this); + this.add(sortUIExpandablePane); + } + } + initComponents(); + addListener(uiObserverListener); + refresh(); + } + + protected abstract AbstractSortItemPane refreshSortItemPane(int sortItemPaneWidth, int sortItemPaneRightWidth, SortExpression sortExpression); + + public List updateBean() { + updateSortExpressions(); + return sortExpressions; + } + + private void updateSortExpressions() { + sortExpressions = new ArrayList<>(); + for (AbstractSortItemPane sortItemPane : sortItemPanes) { + SortExpression sortExpression = sortItemPane.updateBean(); + if (sortExpression != null) { + sortExpressions.add(sortExpression); + } + } + } + + public void removeSortItem(int no) { + updateSortExpressions(); + if (no < sortExpressions.size()) { + sortExpressions.remove(no); + } + refreshBean(); + } + + public void addSortItem() { + updateSortExpressions(); + sortExpressions.add(new CellSortExpression(selfSortArea)); + refreshBean(); + } + + + protected void refresh() { + validate(); + repaint(); + revalidate(); + } + + class AddSortItemBar extends JPanel { + AbstractSortGroupPane sortGroupPane; + + AddSortItemBar(AbstractSortGroupPane sortGroupPane) { + init(); + this.sortGroupPane = sortGroupPane; + } + + void init() { + uiButton = new UIButton("添加排序", IconUtils.readIcon("/com/fr/design/images/sort/add.png")); + uiButton.setPreferredSize(new Dimension(sortGroupPaneWidth - 4, 20)); + this.add(uiButton); + uiButton.addMouseListener(new MouseAdapter() { + @Override + public void mouseClicked(MouseEvent e) { + sortGroupPane.addSortItem(); + uiObserverListener.doChange(); + } + }); + } + } + + + public void addListener(UIObserverListener uiObserverListener) { + this.uiObserverListener = uiObserverListener; + for (AbstractSortItemPane abstractSortItemPane : sortItemPanes) { + abstractSortItemPane.addListener(uiObserverListener); + } + } + + public void removeListener(UIObserverListener uiObserverListener) { + for (AbstractSortItemPane abstractSortItemPane : sortItemPanes) { + abstractSortItemPane.removeListener(uiObserverListener); + } + } + +} 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 new file mode 100644 index 0000000000..0bd3701bbe --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/sort/common/AbstractSortItemPane.java @@ -0,0 +1,173 @@ +package com.fr.design.sort.common; + +import com.fr.design.event.UIObserverListener; +import com.fr.design.gui.icombobox.UIComboBox; +import com.fr.design.gui.ilable.UILabel; + +import com.fr.design.sort.expressionpane.CellSortExpressionPane; +import com.fr.design.sort.expressionpane.CustomSequenceSortExpressionPane; +import com.fr.design.sort.expressionpane.EmptyExpressionPane; +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 EmptyExpressionPane()); + 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("排序区域", 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[]{"升序", "降序", "不排序"}); + sortRuleUiComboBox.setPreferredSize(new Dimension(sortItemPaneRightWidth, AbstractSortPane.PANE_COMPONENT_HEIGHT)); + sortRulePane.add(new UILabel("排序规则", 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("排序依据", 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) { + if (StringUtils.equals(sortRuleUiComboBox.getSelectedItem().toString(), "升序")) { + sortExpression.setSortRule(SortRule.ASC); + } else if (StringUtils.equals(sortRuleUiComboBox.getSelectedItem().toString(), "降序")) { + sortExpression.setSortRule(SortRule.DES); + } else if (StringUtils.equals(sortRuleUiComboBox.getSelectedItem().toString(), "不排序")) { + sortExpression.setSortRule(SortRule.NO_SORT); + } + } + return sortExpression; + } + + public void addListener(UIObserverListener uiObserverListener) { + sortBasisUiComboBox.registerChangeListener(uiObserverListener); + sortRuleUiComboBox.registerChangeListener(uiObserverListener); + } + + + public void removeListener(UIObserverListener uiObserverListener) { + sortBasisUiComboBox.removeChangeListener(); + sortRuleUiComboBox.removeChangeListener(); + } + + 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 new file mode 100644 index 0000000000..2febc4b6e5 --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/sort/common/AbstractSortPane.java @@ -0,0 +1,118 @@ +package com.fr.design.sort.common; + +import com.fr.design.event.UIObserverListener; +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 UIObserverListener uiObserverListener; + protected AbstractSortGroupPane sortGroupPane; + protected SortHeaderPane sortHeaderPane; + protected String selfSortArea; + protected String defaultHeaderArea; + + + public AbstractSortPane(int sortPaneWidth, int sortPaneRightWidth) { + this.sortPaneWidth = sortPaneWidth; + this.sortPaneRightWidth = sortPaneRightWidth; + initUIObserverListener(); + initComponents(); + } + + + private void initComponents() { + initSortGroupPane(); + sortHeaderPane = new SortHeaderPane(sortPaneWidth, sortPaneRightWidth + 5); + this.add(sortHeaderPane); + } + + protected abstract void initSortGroupPane(); + + protected void initUIObserverListener() { + + } + + protected abstract CellSortAttr getCellSortAttr(TemplateCellElement cellElement); + + public void populateBean(TemplateCellElement cellElement) { + System.out.println("sport pane populateBean"); + populateSortArea(cellElement); + CellSortAttr cellSortAttr = getCellSortAttr(cellElement); + List sortExpressions = cellSortAttr.getSortExpressions(); + if (sortExpressions == null || sortExpressions.size() == 0) { + sortExpressions = new ArrayList<>(); + sortExpressions.add(new CellSortExpression(selfSortArea)); + } + sortGroupPane.populateBean(sortExpressions, selfSortArea); + sortHeaderPane.populateBean(cellSortAttr.getSortHeader(),defaultHeaderArea); + addListener(uiObserverListener); + refresh(); + } + + + protected void populateSortArea(TemplateCellElement cellElement) { + int row = cellElement.getRow(); + int column = cellElement.getColumn(); + selfSortArea = ColumnRow.valueOf(column, row).toString(); + if (row > 1) { + defaultHeaderArea = ColumnRow.valueOf(column, row - 1).toString(); + } else { + defaultHeaderArea = null; + } + } + + public void updateBean(TemplateCellElement cellElement) { + System.out.println("sport pane updateBean"); + List sortExpressions = sortGroupPane.updateBean(); + SortHeader sortHeader = sortHeaderPane.updateBean(); + CellSortAttr cellSortAttr = getCellSortAttr(cellElement); + cellSortAttr.setSortExpressions(sortExpressions); + cellSortAttr.setSortHeader(sortHeader); + } + + + public void addListener(UIObserverListener uiObserverListener) { + sortGroupPane.addListener(uiObserverListener); + sortHeaderPane.addListener(uiObserverListener); + } + + + public void removeListener(UIObserverListener uiObserverListener) { + sortGroupPane.removeListener(uiObserverListener); + sortHeaderPane.removeListener(uiObserverListener); + } + + + 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 new file mode 100644 index 0000000000..16e0319cc0 --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/sort/common/SortColumnRowPane.java @@ -0,0 +1,167 @@ +package com.fr.design.sort.common; + +import com.fr.base.BaseUtils; +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.stable.ColumnRow; +import com.fr.stable.EssentialUtils; +import com.fr.stable.StringUtils; + +import javax.swing.*; +import javax.swing.event.ChangeEvent; +import javax.swing.event.ChangeListener; +import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; + +public class SortColumnRowPane extends JPanel { + int paneWidth; + int paneHeight; + int jTextFieldWidth; + JTextField colJTextField; + JTextField rowJTextField; + UIButton selectButton; + private boolean isAlreadyAddListener = false; + private CellSelection oldSelection; + private SelectionListener gridSelectionChangeListener; + UIObserverListener uiObserverListener; + + 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 - 42) / 2; + } + + void intUILabel() { + UILabel uiLabel = new UILabel(BaseUtils.readIcon("com\\fr\\design\\images\\buttonicon\\propertiestab\\cellelement_normal.png")); + this.add(uiLabel); + } + + + 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(BaseUtils.readIcon("com/fr/design/images/buttonicon/select.png")); + selectButton.addActionListener(new SelectActionListener(this)); + this.add(selectButton); + } + + public void populateBean(ColumnRow columnRow) { + if (columnRow != null && columnRow.getRow() != -1 && columnRow.getColumn() != -1) { + colJTextField.setText(EssentialUtils.convertIntToABC(columnRow.column + 1)); + rowJTextField.setText(String.valueOf(columnRow.row + 1)); + } + refresh(); + + } + + public ColumnRow updateBean() { + if (StringUtils.isNotBlank(colJTextField.getText()) && StringUtils.isNotBlank(rowJTextField.getText())) { + return ColumnRow.valueOf(colJTextField.getText() + rowJTextField.getText()); + } + return null; + } + + class SelectActionListener implements ActionListener { + SortColumnRowPane columnRowPane; + + SelectActionListener(SortColumnRowPane columnRowPane) { + this.columnRowPane = columnRowPane; + } + + @Override + public void actionPerformed(ActionEvent e) { + ElementCasePane elementCasePane = getCurrentElementCase(); + if (elementCasePane == null || isAlreadyAddListener) { + return; + } + oldSelection = (CellSelection) elementCasePane.getSelection(); + elementCasePane.getGrid().setNotShowingTableSelectPane(false); + elementCasePane.setEditable(false); + elementCasePane.repaint(10); + + gridSelectionChangeListener = new SelectionListener() { + @Override + public void selectionChanged(SelectionEvent e) { + Selection selection = elementCasePane.getSelection(); + if (selection instanceof CellSelection) { + CellSelection cellselection = (CellSelection) selection; + ColumnRow cr = ColumnRow.valueOf(cellselection.getColumn(), cellselection.getRow()); + elementCasePane.setOldSelecton(oldSelection); + columnRowPane.populateBean(cr); + if (columnRowPane.uiObserverListener != null) { + columnRowPane.uiObserverListener.doChange(); + } + } + elementCasePane.removeSelectionChangeListener(gridSelectionChangeListener); + isAlreadyAddListener = false; + elementCasePane.getGrid().setNotShowingTableSelectPane(true); + elementCasePane.setEditable(true); + elementCasePane.repaint(); + } + }; + elementCasePane.addSelectionChangeListener(gridSelectionChangeListener); + isAlreadyAddListener = true; + } + } + + 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; + } + + public void addListener(UIObserverListener uiObserverListener) { + this.uiObserverListener = uiObserverListener; + } + + + public void removeListener(UIObserverListener uiObserverListener) { + this.uiObserverListener = 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 new file mode 100644 index 0000000000..ccee50fe75 --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/sort/common/SortUIExpandablePane.java @@ -0,0 +1,102 @@ +package com.fr.design.sort.common; + +import com.fr.base.BaseUtils; +import com.fr.base.svg.IconUtils; +import com.fr.design.gui.ibutton.UIButton; +import com.fr.design.gui.ilable.UILabel; + +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(Color.gray, 1)); + wrapPane.setBackground(Color.WHITE); + } + + + 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, Color.gray)); + contentPane.setBorder(BorderFactory.createEmptyBorder(0, 5, 0, 5)); + wrapPane.add(headerPane, BorderLayout.NORTH); + wrapPane.add(contentPane, BorderLayout.CENTER); + setContentPanelShow(false); + this.add(wrapPane); + } + + + private void setContentPanelShow(boolean show) { + contentPane.setVisible(show); + headerPane.setShow(show); + } + + class HeaderPane extends JPanel { + UILabel iconUiLabel; + UILabel closeButton; + AbstractSortGroupPane sortGroupPane; + + HeaderPane(AbstractSortGroupPane sortGroupPane) { + this.sortGroupPane = sortGroupPane; + this.setLayout(new FlowLayout(FlowLayout.LEFT, 3, 3)); + initComponents(); + + } + + private void initComponents() { + iconUiLabel = new UILabel(); + this.add(iconUiLabel); + UILabel uiLabel = new UILabel("次要排序列"); + this.add(uiLabel); + this.add(AbstractSortPane.createIntervalUILabel(114)); + + closeButton = new UILabel(IconUtils.readIcon("/com/fr/design/images/control/close.png")); + this.add(closeButton); + closeButton.addMouseListener(new MouseAdapter() { + @Override + public void mouseClicked(MouseEvent e) { + sortGroupPane.removeSortItem(1); + } + }); + System.out.println(contentPane.sortItemPaneWidth); + 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")); + } + } + + } + +} \ 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 new file mode 100644 index 0000000000..863ca6d22b --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/sort/expressionpane/CellSortExpressionPane.java @@ -0,0 +1,31 @@ +package com.fr.design.sort.expressionpane; + +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 "单元格"; + } + + @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 new file mode 100644 index 0000000000..db3d3b9208 --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/sort/expressionpane/CustomSequenceEditPane.java @@ -0,0 +1,160 @@ +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.mainframe.dnd.SerializableTransferable; +import com.fr.design.mainframe.share.ui.base.PlaceholderTextArea; +import com.fr.report.core.sort.sortexpression.CustomSequenceSortExpression; + +import javax.swing.*; +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; + JPanel referenceSequencePanel; + JPanel editSequencePanel; + JTextArea jTextArea; + + CustomSequenceEditPane(java.util.List customSequence) { + this.customSequence = customSequence; + initComponents(); + } + + + void initComponents() { + this.setLayout(new BorderLayout()); + initReferenceSequencePanel(); + initEditSequencePanel(); + } + + void initReferenceSequencePanel() { + referenceSequencePanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); + UILabel uiLabel = new UILabel("参考序列:"); + referenceSequencePanel.add(uiLabel); + UIScrollPane uiScrollPane = new UIScrollPane(getReferenceSequenceList()); + uiScrollPane.setPreferredSize(new Dimension(200, 300)); + referenceSequencePanel.add(uiScrollPane); + referenceSequencePanel.setPreferredSize(new Dimension(200, 400)); + this.add(referenceSequencePanel, BorderLayout.WEST); + } + + 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(new FlowLayout(FlowLayout.LEFT)); + UILabel uiLabel = new UILabel("输入序列(E):"); + editSequencePanel.add(uiLabel); + UILabel uiLabel2 = new UILabel("请将序列元素隔行输入"); + uiLabel2.setForeground(Color.lightGray); + editSequencePanel.add(uiLabel2); + jTextArea = getTextArea(); + UIScrollPane uiScrollPane = new UIScrollPane(jTextArea); + uiScrollPane.setPreferredSize(new Dimension(475, 300)); + editSequencePanel.add(uiScrollPane); + this.add(editSequencePanel, BorderLayout.CENTER); + + } + + + JTextArea getTextArea() { + PlaceholderTextArea placeholderTextArea = new PlaceholderTextArea(10, 10, getPlaceholderText()); + new CustomSequenceEditDropTarget(placeholderTextArea, CustomSequenceSortExpression.getReferenceCustomSequences()); + placeholderTextArea.setText(CustomSequenceSortExpression.customSequenceToString(customSequence, "\n")); + return placeholderTextArea; + } + + String getPlaceholderText() { + StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.append("请将序列元素隔行输入,如:\n"); + stringBuilder.append("部门一\n"); + stringBuilder.append("部门二\n"); + stringBuilder.append("部门三\n"); + System.out.println(stringBuilder); + return stringBuilder.toString(); + } + + @Override + protected String title4PopupWindow() { + return "自定义序列"; + } + + + 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]); + String text = ""; + java.util.List customSequence = customSequences.get(index); + for (int i = 0; i < customSequence.size(); i++) { + text += customSequence.get(i) + "\n"; + } + JTextArea jTextArea = (JTextArea) dtde.getDropTargetContext().getComponent(); + jTextArea.setText(text); + } + } catch (Exception e) { + + } + } + } + + 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 new file mode 100644 index 0000000000..507ac204ca --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/sort/expressionpane/CustomSequencePane.java @@ -0,0 +1,70 @@ +package com.fr.design.sort.expressionpane; + +import com.fr.base.BaseUtils; +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.ActionEvent; +import java.awt.event.ActionListener; +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, 20)); + + // 添加一公式编辑器按钮 + Icon icon = BaseUtils.readIcon("/com/fr/design/images/control/refresh.png"); + button = new UIButton(icon); + button.setBackground(Color.RED); + button.setPreferredSize(new Dimension(24, 20)); + button.setOpaque(false); + button.setCursor(new Cursor(Cursor.HAND_CURSOR)); + button.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent evt) { + 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.setPreferredSize(new Dimension(24, AbstractSortPane.PANE_COMPONENT_HEIGHT)); + + 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 new file mode 100644 index 0000000000..c9589f92e3 --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/sort/expressionpane/CustomSequenceSortExpressionPane.java @@ -0,0 +1,37 @@ +package com.fr.design.sort.expressionpane; + + +import com.fr.design.sort.common.AbstractSortPane; +import com.fr.report.core.sort.sortexpression.CustomSequenceSortExpression; + +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, 0, 0)); + customSequencePane = new CustomSequencePane(rightWidth); + customSequencePane.setPreferredSize(new Dimension(width, AbstractSortPane.PANE_COMPONENT_HEIGHT)); + this.add(customSequencePane); + } + + @Override + public String getSortName() { + return "自定义序列"; + } + + @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/EmptyExpressionPane.java b/designer-realize/src/main/java/com/fr/design/sort/expressionpane/EmptyExpressionPane.java new file mode 100644 index 0000000000..042be1b975 --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/sort/expressionpane/EmptyExpressionPane.java @@ -0,0 +1,37 @@ +package com.fr.design.sort.expressionpane; + + +import com.fr.report.core.sort.sortexpression.SortExpression; + +import java.awt.*; + + +public class EmptyExpressionPane extends SortExpressionPane { + + public EmptyExpressionPane() { + this.setLayout(new FlowLayout(FlowLayout.LEFT, 0, 0)); + } + + @Override + public String getSortName() { + return "无"; + } + + @Override + public void populateBean(SortExpression sortExpression) { + + } + + @Override + public SortExpression updateBean() { + return null; + } + + public boolean needSortArea() { + return false; + } + + public boolean needSortRule() { + return false; + } +} \ No newline at end of file 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 new file mode 100644 index 0000000000..2dd098ab65 --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/sort/expressionpane/FormulaSortExpressionPane.java @@ -0,0 +1,41 @@ +package com.fr.design.sort.expressionpane; + +import com.fr.design.formula.TinyFormulaPane; +import com.fr.design.sort.common.AbstractSortPane; +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, 0, 1)); + tinyFormulaPane = new TinyFormulaPane(); + tinyFormulaPane.setPreferredSize(new Dimension(width, AbstractSortPane.PANE_COMPONENT_HEIGHT)); + this.add(tinyFormulaPane); + } + + @Override + public String getSortName() { + return "公式"; + } + + @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 new file mode 100644 index 0000000000..69af8464cb --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/sort/expressionpane/SortExpressionPane.java @@ -0,0 +1,23 @@ +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 new file mode 100644 index 0000000000..92f7aaf2e9 --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/sort/header/HeaderAreaPane.java @@ -0,0 +1,149 @@ +package com.fr.design.sort.header; + +import com.fr.design.event.UIObserverListener; +import com.fr.design.gui.icombobox.UIComboBox; +import com.fr.design.gui.ilable.UILabel; +import com.fr.design.mainframe.ElementCasePane; +import com.fr.design.sort.common.AbstractSortPane; +import com.fr.design.sort.common.SortColumnRowPane; +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("表头区域", SwingConstants.LEFT); + this.add(uiLabel); + this.add(AbstractSortPane.createIntervalUILabel()); + } + + void initLayeredPane() { + areaJLayeredPane = new AreaJLayeredPane(); + this.add(areaJLayeredPane); + } + + + public void populateBean(ColumnRow columnRow) { + areaJLayeredPane.populateBean(columnRow); + } + + public ColumnRow updateBean() { + return areaJLayeredPane.updateBean(); + } + + 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[]{"无", "自定义"}); + uiComboBox.setSize(new Dimension(headerAreaPaneRightWidth, AbstractSortPane.PANE_COMPONENT_HEIGHT)); + uiComboBox.addItemListener(new ItemListener() { + @Override + public void itemStateChanged(ItemEvent e) { + setSortColumnRowPaneShow(uiComboBox.getSelectedIndex() == 1); + } + }); + } + + 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) { + if (columnRow != null && columnRow.getRow() != -1 && columnRow.getColumn() != -1) { + columnRowPane.populateBean(columnRow); + uiComboBox.setSelectedIndex(1); + } else { + uiComboBox.setSelectedIndex(0); + } + setSortColumnRowPaneShow(uiComboBox.getSelectedIndex() == 1); + } + + public ColumnRow updateBean() { + if (uiComboBox.getSelectedIndex() == 0) { + return null; + } else { + return columnRowPane.updateBean(); + } + } + + public void addListener(UIObserverListener uiObserverListener) { + columnRowPane.addListener(uiObserverListener); + uiComboBox.registerChangeListener(uiObserverListener); + } + + + public void removeListener(UIObserverListener uiObserverListener) { + columnRowPane.removeListener(uiObserverListener); + uiComboBox.removeChangeListener(); + } + + public void refresh() { + validate(); + repaint(); + revalidate(); + } + + } + + public void addListener(UIObserverListener uiObserverListener) { + areaJLayeredPane.addListener(uiObserverListener); + } + + + public void removeListener(UIObserverListener uiObserverListener) { + areaJLayeredPane.removeListener(uiObserverListener); + } + +} \ 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 new file mode 100644 index 0000000000..4cf2229c81 --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/sort/header/HeaderSettingPane.java @@ -0,0 +1,91 @@ +package com.fr.design.sort.header; + +import com.fr.design.event.UIObserverListener; +import com.fr.design.gui.icheckbox.UICheckBox; +import com.fr.design.gui.ilable.UILabel; +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("表头设置"); + UILabel emptyUILabel = new UILabel(); + emptyUILabel.setPreferredSize(new Dimension(10, 10)); + + uiCheckBox = new UICheckBox("用户点击排列顺序"); + 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; + } + } + + public void addListener(UIObserverListener uiObserverListener) { + uiCheckBox.registerChangeListener(uiObserverListener); + headerSortRulePane.addListener(uiObserverListener); + } + + + public void removeListener(UIObserverListener uiObserverListener) { + uiCheckBox.removeChangeListener(); + headerSortRulePane.removeListener(uiObserverListener); + } +} 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 new file mode 100644 index 0000000000..55db383b29 --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/sort/header/HeaderSortRulePane.java @@ -0,0 +1,256 @@ +package com.fr.design.sort.header; + +import com.fr.base.svg.SVGIcon; +import com.fr.base.svg.SVGTranscoder; +import com.fr.design.event.UIObserverListener; +import com.fr.design.gui.icheckbox.UICheckBox; +import com.fr.design.gui.ilable.UILabel; +import com.fr.design.layout.TableLayoutHelper; +import com.fr.design.mainframe.theme.edit.ui.ColorListPane; +import com.fr.general.IOUtils; +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.util.ArrayList; + +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"; + IconButton ascIconButton; + IconButton desIconButton; + IconButton nosortIconButton; + UICheckBox ascUICheckBox; + UICheckBox desUICheckBox; + UICheckBox nosortUICheckBox; + + + HeaderSortRulePane() { + initComponents(); + initState(); + 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("排序依据:", SwingConstants.LEFT); + this.add(uiLabel, BorderLayout.NORTH); + } + + void initSortRuleItem() { + Component[][] components = new Component[][]{ + new Component[]{ascUICheckBox = new UICheckBox("升序"), ascIconButton = new IconButton(ASC_ICON_TEMPLATE_PATH)}, + new Component[]{desUICheckBox = new UICheckBox("降序"), desIconButton = new IconButton(DES_ICON_TEMPLATE_PATH)}, + new Component[]{nosortUICheckBox = new UICheckBox("不排序"), nosortIconButton = new IconButton(NOSORT_ICON_TEMPLATE_PATH)}, + }; + double[] rowSize = {24, 24, 24}; + double[] columnSize = {80, 30}; + JPanel sortRuleItem = TableLayoutHelper.createCommonTableLayoutPane(components, rowSize, columnSize, 0); + this.add(sortRuleItem, BorderLayout.CENTER); + } + + void initState() { + ascUICheckBox.setSelected(false); + desUICheckBox.setSelected(false); + nosortUICheckBox.setSelected(false); + 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 { + JLayeredPane jLayeredPane; + String iconTemplatePath; + UILabel iconLabel; + ColorListPane.ColorButton colorButton; + Color color; + BufferedImage bufferedImage; + UIObserverListener uiObserverListener; + + IconButton(String iconTemplatePath) { + this.iconTemplatePath = iconTemplatePath; + initComponents(); + } + + void initComponents() { + jLayeredPane = new JLayeredPane(); + iconLabel = getIconLabel(iconTemplatePath); + + + UILabel emptyUiLabel = new UILabel(); + emptyUiLabel.setSize(16, 16); + emptyUiLabel.setOpaque(true); + emptyUiLabel.setBackground(Color.WHITE); + iconLabel.setSize(16, 16); + colorButton = new ColorListPane.ColorButton(Color.CYAN); + colorButton.setSize(16, 16); + colorButton.addChangeListener(new ChangeListener() { + @Override + public void stateChanged(ChangeEvent e) { + color = colorButton.getSelectObject(); + refreshIconLabelColor(color); + if (uiObserverListener != null) { + uiObserverListener.doChange(); + } + } + }); + jLayeredPane.setPreferredSize(new Dimension(16, 16)); + + jLayeredPane.add(iconLabel, JLayeredPane.POPUP_LAYER); + jLayeredPane.add(emptyUiLabel, 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(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 { + InputStream inputStream = IOUtils.getResourceAsStream(iconPath, HeaderSortRulePane.class); + String svgText = getSvgText(inputStream); + svgText = svgText.replaceAll("\\{fillColor\\}", shiftColor(color)); + InputStream svgInputStream = new ByteArrayInputStream(svgText.getBytes()); + TranscoderInput input = new TranscoderInput(svgInputStream); + bufferedImage = SVGTranscoder.createImage(1.0, input).getImage(); + SVGIcon svgIcon = new SVGIcon(bufferedImage); + return svgIcon; + } catch (Exception e) { + + } + return null; + + } + + 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) { + int resultValue = (int) ((((float) value) / 255) * 99); + if (resultValue < 10) { + return "0" + resultValue; + } else { + 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(); + } + + public void addListener(UIObserverListener uiObserverListener) { + this.uiObserverListener = uiObserverListener; + } + + + public void removeListener(UIObserverListener uiObserverListener) { + this.uiObserverListener = null; + } + } + + + public void populateBean(SortHeader.SortItem[] sortItems) { + initState(); + if (sortItems != null) { + for (SortHeader.SortItem sortItem : sortItems) { + SortRule sortRule = sortItem.getSortRule(); + BufferedImage bufferedImage = sortItem.getBufferedImage(); + Icon icon = null; + if (bufferedImage != null) { + icon = new SVGIcon(bufferedImage); + } + if (sortRule == SortRule.ASC) { + ascIconButton.refreshIconLabel(icon); + ascUICheckBox.setSelected(true); + } else if (sortRule == SortRule.DES) { + desIconButton.refreshIconLabel(icon); + desUICheckBox.setSelected(true); + } else if (sortRule == SortRule.NO_SORT) { + nosortIconButton.refreshIconLabel(icon); + 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); + } + + public void addListener(UIObserverListener uiObserverListener) { + ascIconButton.addListener(uiObserverListener); + desIconButton.addListener(uiObserverListener); + nosortIconButton.addListener(uiObserverListener); + ascUICheckBox.registerChangeListener(uiObserverListener); + desUICheckBox.registerChangeListener(uiObserverListener); + nosortUICheckBox.registerChangeListener(uiObserverListener); + } + + + public void removeListener(UIObserverListener uiObserverListener) { + ascIconButton.removeListener(uiObserverListener); + desIconButton.removeListener(uiObserverListener); + nosortIconButton.removeListener(uiObserverListener); + ascUICheckBox.removeChangeListener(); + desUICheckBox.removeChangeListener(); + nosortUICheckBox.removeChangeListener(); + } +} 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 new file mode 100644 index 0000000000..d82c2483c6 --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/sort/header/SortHeaderPane.java @@ -0,0 +1,74 @@ +package com.fr.design.sort.header; + +import com.fr.design.event.UIObserverListener; +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; + ColumnRow columnRow = null; + SortHeader.SortItem[] sortItems = null; + String sortArea = defaultHeaderArea; + if (sortHeader != null) { + sortArea = sortHeader.getSortArea(); + sortItems = sortHeader.getSortItems(); + } + columnRow = ColumnRow.valueOf(sortArea); + + headerAreaPane.populateBean(columnRow); + headerSettingPane.populateBean(sortItems); + } + + public SortHeader updateBean() { + ColumnRow columnRow = headerAreaPane.updateBean(); + SortHeader.SortItem[] items = headerSettingPane.updateBean(); + String sortArea = null; + if (columnRow != null) { + sortArea = columnRow.toString(); + } + SortHeader sortHeader = new SortHeader(sortArea, items); + return sortHeader; + } + + public void addListener(UIObserverListener uiObserverListener) { + headerAreaPane.addListener(uiObserverListener); + headerSettingPane.addListener(uiObserverListener); + } + + + public void removeListener(UIObserverListener uiObserverListener) { + headerAreaPane.removeListener(uiObserverListener); + headerSettingPane.removeListener(uiObserverListener); + } +} + 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 0ede5114ff..3d82ebb315 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,6 +11,7 @@ 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; @@ -31,6 +32,7 @@ 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; @@ -221,6 +223,7 @@ public class CellDSColumnEditor extends CellQuickEditor { */ private UIButton conditionUIButton; + /** * 分组设置监听器 */ @@ -373,6 +376,8 @@ public class CellDSColumnEditor extends CellQuickEditor { * 补充空白数据数目面板 可隐藏 */ private JPanel multiPane; + + private CellDSColumnSortPane cellDSColumnSortPane; /*pane end*/ @@ -449,6 +454,14 @@ public class CellDSColumnEditor extends CellQuickEditor { fireTargetModified(); } }; + + private UIObserverListener cellDSColumnSortPaneChangeListener = new UIObserverListener() { + @Override + public void doChange() { + cellDSColumnSortPane.updateBean(cellElement); + fireTargetModified(); + } + }; /*listeners end*/ @@ -480,6 +493,7 @@ public class CellDSColumnEditor extends CellQuickEditor { updateExtendConfig(); //更新补充空白设置 updateMultipleConfig(); + cellDSColumnSortPane.updateBean(cellElement); } } @@ -524,6 +538,9 @@ public class CellDSColumnEditor extends CellQuickEditor { useMultiNumCheckBox.setSelected(true); multiNumSpinner.setValue(cellExpandAttr.getMultipleNumber()); } + if (cellDSColumnSortPane != null) { + cellDSColumnSortPane.populateBean(cellElement); + } this.checkButtonEnabled(); enableListener(); } @@ -578,6 +595,7 @@ public class CellDSColumnEditor extends CellQuickEditor { */ @Override protected JPanel createContentPane() { + JPanel contentPane = new JPanel(new BorderLayout()); this.setLayout(FRGUIPaneFactory.createBorderLayout()); //结果集排序 @@ -630,8 +648,13 @@ 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("扩展后排序", 223, 24, cellDSColumnSortPane = new CellDSColumnSortPane()); - return TableLayoutHelper.createGapTableLayoutPane(components, rowSize, columnSize, HGAP, VGAP); + contentPane.add(sortUIExpandablePane, BorderLayout.CENTER); + return contentPane; } public void enableListener() { @@ -643,6 +666,9 @@ public class CellDSColumnEditor extends CellQuickEditor { veCheckBox.addChangeListener(veCheckBoxChangeListener); useMultiNumCheckBox.addActionListener(useMultiNumCheckBoxChangeListener); multiNumSpinner.addChangeListener(multiNumSpinnerChangeListener); + if (cellDSColumnSortPane != null) { + cellDSColumnSortPane.addListener(cellDSColumnSortPaneChangeListener); + } } public void disableListener() { @@ -653,6 +679,9 @@ public class CellDSColumnEditor extends CellQuickEditor { veCheckBox.removeChangeListener(veCheckBoxChangeListener); useMultiNumCheckBox.removeActionListener(useMultiNumCheckBoxChangeListener); multiNumSpinner.removeChangeListener(multiNumSpinnerChangeListener); + if (cellDSColumnSortPane != null) { + cellDSColumnSortPane.removeListener(cellDSColumnSortPaneChangeListener); + } } From 4b710825aecd8e60d28f808463adab29b245c109 Mon Sep 17 00:00:00 2001 From: "Henry.Wang" Date: Thu, 9 Dec 2021 22:03:30 +0800 Subject: [PATCH 02/18] =?UTF-8?q?REPORT-62440=20=E8=A1=A8=E5=A4=B4?= =?UTF-8?q?=E6=8E=92=E5=BA=8F=E5=86=85=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../chart/AbstractExtendedStylePane.java | 2 +- .../celldscolumn/CellDSColumnSortPane.java | 5 ++- .../cellexpand/CellExpandSortItemPane.java | 2 +- .../sort/cellexpand/CellExpandSortPane.java | 7 +++- .../sort/common/AbstractSortGroupPane.java | 4 +- .../sort/common/AbstractSortItemPane.java | 21 +++++------ .../design/sort/common/AbstractSortPane.java | 16 ++++++-- .../design/sort/common/SortColumnRowPane.java | 22 ++++++----- .../sort/common/SortUIExpandablePane.java | 6 +-- .../CellSortExpressionPane.java | 4 +- .../CustomSequenceEditPane.java | 19 +++++----- .../CustomSequenceSortExpressionPane.java | 4 +- .../expressionpane/EmptyExpressionPane.java | 37 ------------------- .../FormulaSortExpressionPane.java | 4 +- .../fr/design/sort/header/HeaderAreaPane.java | 9 +++-- .../design/sort/header/HeaderSettingPane.java | 5 ++- .../sort/header/HeaderSortRulePane.java | 9 +++-- .../fr/design/sort/header/SortHeaderPane.java | 12 +++--- 18 files changed, 88 insertions(+), 100 deletions(-) delete mode 100644 designer-realize/src/main/java/com/fr/design/sort/expressionpane/EmptyExpressionPane.java diff --git a/designer-chart/src/main/java/com/fr/extended/chart/AbstractExtendedStylePane.java b/designer-chart/src/main/java/com/fr/extended/chart/AbstractExtendedStylePane.java index 3346c03eca..d71f59a07d 100644 --- a/designer-chart/src/main/java/com/fr/extended/chart/AbstractExtendedStylePane.java +++ b/designer-chart/src/main/java/com/fr/extended/chart/AbstractExtendedStylePane.java @@ -48,7 +48,7 @@ public abstract class AbstractExtendedStylePane extends return this.chart; } - protected AttributeChangeListener getListener() { + public AttributeChangeListener getListener() { return this.listener; } 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 index 68865dca43..9760de0ff2 100644 --- 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 @@ -27,9 +27,12 @@ public class CellDSColumnSortPane extends AbstractSortPane { 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 new CellSortAttr(); + return null; } protected void populateSortArea(TemplateCellElement cellElement) { 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 index 2b3bee9943..3812fbaf62 100644 --- 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 @@ -18,7 +18,7 @@ public class CellExpandSortItemPane extends AbstractSortItemPane { @Override public void initMainSortAreaPane(JPanel sortAreaPane) { - columnRowPane = new SortColumnRowPane(sortItemPaneRightWidth, AbstractSortPane.PANE_COMPONENT_HEIGHT); + columnRowPane = new SortColumnRowPane(sortItemPaneRightWidth + 4, AbstractSortPane.PANE_COMPONENT_HEIGHT); sortAreaPane.add(columnRowPane); } 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 index b1412d18bc..36243533d3 100644 --- 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 @@ -6,6 +6,7 @@ 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.cell.cellattr.core.group.DSColumn; import com.fr.report.core.sort.common.CellSortAttr; import com.fr.report.core.sort.sortexpression.FormulaSortExpression; import com.fr.report.core.sort.sortexpression.SortExpression; @@ -50,9 +51,11 @@ public class CellExpandSortPane extends AbstractSortPane { protected CellSortAttr getCellSortAttr(TemplateCellElement cellElement) { CellExpandAttr cellExpandAttr = cellElement.getCellExpandAttr(); if (cellExpandAttr != null) { + if (cellExpandAttr.getCellSortAttr() == null) { + cellExpandAttr.setCellSortAttr(new CellSortAttr()); + } return cellExpandAttr.getCellSortAttr(); } - return new CellSortAttr(); + 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 index 8aae8d30fe..ed1fde2420 100644 --- 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 @@ -3,6 +3,7 @@ package com.fr.design.sort.common; import com.fr.base.svg.IconUtils; import com.fr.design.event.UIObserverListener; 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; @@ -116,7 +117,8 @@ public abstract class AbstractSortGroupPane extends JPanel { } void init() { - uiButton = new UIButton("添加排序", IconUtils.readIcon("/com/fr/design/images/sort/add.png")); + 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, 20)); this.add(uiButton); uiButton.addMouseListener(new MouseAdapter() { 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 index 0bd3701bbe..8a86813396 100644 --- 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 @@ -4,9 +4,9 @@ import com.fr.design.event.UIObserverListener; 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.EmptyExpressionPane; import com.fr.design.sort.expressionpane.FormulaSortExpressionPane; import com.fr.design.sort.expressionpane.SortExpressionPane; import com.fr.report.core.sort.sortexpression.SortExpression; @@ -47,7 +47,6 @@ public abstract class AbstractSortItemPane extends JPanel { } private void registerSortExpressionPanes() { - sortExpressionPanes.add(new EmptyExpressionPane()); sortExpressionPanes.add(new CellSortExpressionPane(sortItemPaneRightWidth)); sortExpressionPanes.add(new FormulaSortExpressionPane(sortItemPaneRightWidth)); sortExpressionPanes.add(new CustomSequenceSortExpressionPane(sortItemPaneWidth, sortItemPaneRightWidth)); @@ -55,7 +54,7 @@ public abstract class AbstractSortItemPane extends JPanel { void initSortAreaPane() { sortAreaPane = new JPanel(new FlowLayout(FlowLayout.LEFT, 0, AbstractSortPane.PANE_COMPONENT_V_GAP)); - sortAreaPane.add(new UILabel("排序区域", SwingConstants.LEFT)); + sortAreaPane.add(new UILabel(Toolkit.i18nText("Fine-Design_Sort_Sort_Area"), SwingConstants.LEFT)); sortAreaPane.add(AbstractSortPane.createIntervalUILabel()); initMainSortAreaPane(sortAreaPane); this.add(sortAreaPane); @@ -65,9 +64,10 @@ public abstract class AbstractSortItemPane extends JPanel { void initSortRulePane() { sortRulePane = new JPanel(new FlowLayout(FlowLayout.LEFT, 0, AbstractSortPane.PANE_COMPONENT_V_GAP)); - sortRuleUiComboBox = new UIComboBox(new String[]{"升序", "降序", "不排序"}); + 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("排序规则", SwingConstants.LEFT)); + sortRulePane.add(new UILabel(Toolkit.i18nText("Fine-Design_Sort_Sort_Rule"), SwingConstants.LEFT)); sortRulePane.add(AbstractSortPane.createIntervalUILabel()); sortRulePane.add(sortRuleUiComboBox); this.add(sortRulePane); @@ -92,7 +92,7 @@ public abstract class AbstractSortItemPane extends JPanel { }); - sortBasisPanel.add(new UILabel("排序依据", SwingConstants.LEFT)); + sortBasisPanel.add(new UILabel(Toolkit.i18nText("Fine-Design_Sort_Sort_Basis"), SwingConstants.LEFT)); sortBasisPanel.add(AbstractSortPane.createIntervalUILabel()); sortBasisPanel.add(sortBasisUiComboBox); this.add(sortBasisPanel); @@ -143,12 +143,9 @@ public abstract class AbstractSortItemPane extends JPanel { public SortExpression updateBean() { SortExpression sortExpression = currentSortExpressionPane.updateBean(); if (sortExpression != null) { - if (StringUtils.equals(sortRuleUiComboBox.getSelectedItem().toString(), "升序")) { - sortExpression.setSortRule(SortRule.ASC); - } else if (StringUtils.equals(sortRuleUiComboBox.getSelectedItem().toString(), "降序")) { - sortExpression.setSortRule(SortRule.DES); - } else if (StringUtils.equals(sortRuleUiComboBox.getSelectedItem().toString(), "不排序")) { - sortExpression.setSortRule(SortRule.NO_SORT); + String sortRule = sortRuleUiComboBox.getSelectedItem().toString(); + if (StringUtils.isNotBlank(sortRule)) { + sortExpression.setSortRule(SortRule.parse(sortRule)); } } return sortExpression; 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 index 2febc4b6e5..35e8a3c096 100644 --- 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 @@ -52,16 +52,22 @@ public abstract class AbstractSortPane extends JPanel { protected abstract CellSortAttr getCellSortAttr(TemplateCellElement cellElement); public void populateBean(TemplateCellElement cellElement) { - System.out.println("sport pane populateBean"); populateSortArea(cellElement); + List sortExpressions = null; CellSortAttr cellSortAttr = getCellSortAttr(cellElement); - List sortExpressions = cellSortAttr.getSortExpressions(); + if (cellSortAttr != null) { + sortExpressions = cellSortAttr.getSortExpressions(); + } if (sortExpressions == null || sortExpressions.size() == 0) { sortExpressions = new ArrayList<>(); sortExpressions.add(new CellSortExpression(selfSortArea)); } sortGroupPane.populateBean(sortExpressions, selfSortArea); - sortHeaderPane.populateBean(cellSortAttr.getSortHeader(),defaultHeaderArea); + SortHeader sortHeader = null; + if (cellSortAttr != null) { + sortHeader = cellSortAttr.getSortHeader(); + } + sortHeaderPane.populateBean(sortHeader, defaultHeaderArea); addListener(uiObserverListener); refresh(); } @@ -79,11 +85,13 @@ public abstract class AbstractSortPane extends JPanel { } public void updateBean(TemplateCellElement cellElement) { - System.out.println("sport pane updateBean"); List sortExpressions = sortGroupPane.updateBean(); SortHeader sortHeader = sortHeaderPane.updateBean(); CellSortAttr cellSortAttr = getCellSortAttr(cellElement); cellSortAttr.setSortExpressions(sortExpressions); + if (sortHeader != null) { + sortHeader.setSortArea(selfSortArea); + } cellSortAttr.setSortHeader(sortHeader); } diff --git a/designer-realize/src/main/java/com/fr/design/sort/common/SortColumnRowPane.java b/designer-realize/src/main/java/com/fr/design/sort/common/SortColumnRowPane.java index 16e0319cc0..489f136bee 100644 --- a/designer-realize/src/main/java/com/fr/design/sort/common/SortColumnRowPane.java +++ b/designer-realize/src/main/java/com/fr/design/sort/common/SortColumnRowPane.java @@ -1,8 +1,7 @@ package com.fr.design.sort.common; -import com.fr.base.BaseUtils; +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; @@ -18,8 +17,6 @@ import com.fr.stable.EssentialUtils; import com.fr.stable.StringUtils; import javax.swing.*; -import javax.swing.event.ChangeEvent; -import javax.swing.event.ChangeListener; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; @@ -52,14 +49,18 @@ public class SortColumnRowPane extends JPanel { } void initSize() { - jTextFieldWidth = (paneWidth - 42) / 2; + jTextFieldWidth = (paneWidth - 40) / 2; } void intUILabel() { - UILabel uiLabel = new UILabel(BaseUtils.readIcon("com\\fr\\design\\images\\buttonicon\\propertiestab\\cellelement_normal.png")); + 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(); @@ -73,18 +74,20 @@ public class SortColumnRowPane extends JPanel { } void initSelectButton() { - selectButton = new UIButton(BaseUtils.readIcon("com/fr/design/images/buttonicon/select.png")); + selectButton = new UIButton(IconUtils.readIcon("/com/fr/design/images/buttonicon/select.png")); selectButton.addActionListener(new SelectActionListener(this)); this.add(selectButton); } public void populateBean(ColumnRow columnRow) { - if (columnRow != null && columnRow.getRow() != -1 && columnRow.getColumn() != -1) { + 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); } refresh(); - } public ColumnRow updateBean() { @@ -154,7 +157,6 @@ public class SortColumnRowPane extends JPanel { this.uiObserverListener = uiObserverListener; } - public void removeListener(UIObserverListener uiObserverListener) { this.uiObserverListener = null; } diff --git a/designer-realize/src/main/java/com/fr/design/sort/common/SortUIExpandablePane.java b/designer-realize/src/main/java/com/fr/design/sort/common/SortUIExpandablePane.java index ccee50fe75..47c6c62cc7 100644 --- a/designer-realize/src/main/java/com/fr/design/sort/common/SortUIExpandablePane.java +++ b/designer-realize/src/main/java/com/fr/design/sort/common/SortUIExpandablePane.java @@ -4,6 +4,7 @@ import com.fr.base.BaseUtils; import com.fr.base.svg.IconUtils; 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.*; @@ -73,7 +74,7 @@ public class SortUIExpandablePane extends JPanel { private void initComponents() { iconUiLabel = new UILabel(); this.add(iconUiLabel); - UILabel uiLabel = new UILabel("次要排序列"); + UILabel uiLabel = new UILabel(Toolkit.i18nText("Fine-Design_Sort_Second_Sort")); this.add(uiLabel); this.add(AbstractSortPane.createIntervalUILabel(114)); @@ -85,8 +86,7 @@ public class SortUIExpandablePane extends JPanel { sortGroupPane.removeSortItem(1); } }); - System.out.println(contentPane.sortItemPaneWidth); - this.setPreferredSize(new Dimension(contentPane.sortItemPaneWidth+7, AbstractSortPane.PANE_COMPONENT_HEIGHT)); + this.setPreferredSize(new Dimension(contentPane.sortItemPaneWidth + 7, AbstractSortPane.PANE_COMPONENT_HEIGHT)); } public void setShow(boolean show) { 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 index 863ca6d22b..5891cfcf09 100644 --- 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 @@ -1,5 +1,7 @@ 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; @@ -14,7 +16,7 @@ public class CellSortExpressionPane extends SortExpressionPane Date: Thu, 9 Dec 2021 22:19:02 +0800 Subject: [PATCH 03/18] =?UTF-8?q?REPORT-62440=20=E8=A1=A8=E5=A4=B4?= =?UTF-8?q?=E6=8E=92=E5=BA=8F=E5=86=85=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../design/mainframe/cell/settingpane/CellExpandAttrPane.java | 3 ++- .../java/com/fr/quickeditor/cellquick/CellDSColumnEditor.java | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) 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 979d4534f6..2a9aab95de 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 @@ -83,7 +83,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("扩展后排序", 223, 24, cellExpandSortPane = new CellExpandSortPane(this)); + 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); 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 3d82ebb315..473cb599ac 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 @@ -651,7 +651,8 @@ public class CellDSColumnEditor extends CellQuickEditor { JPanel advancePropertyPane = TableLayoutHelper.createGapTableLayoutPane(components, rowSize, columnSize, HGAP, VGAP); contentPane.add(advancePropertyPane, BorderLayout.NORTH); UIExpandablePane sortUIExpandablePane = - new UIExpandablePane("扩展后排序", 223, 24, cellDSColumnSortPane = new CellDSColumnSortPane()); + new UIExpandablePane(Toolkit.i18nText("Fine-Design_Report_Expend_Sort"), + 223, 24, cellDSColumnSortPane = new CellDSColumnSortPane()); contentPane.add(sortUIExpandablePane, BorderLayout.CENTER); return contentPane; From 787fb204af5b69a24d67d8d4f4aec810033916b6 Mon Sep 17 00:00:00 2001 From: "Henry.Wang" Date: Thu, 9 Dec 2021 22:21:32 +0800 Subject: [PATCH 04/18] =?UTF-8?q?REPORT-62440=20=E8=A1=A8=E5=A4=B4?= =?UTF-8?q?=E6=8E=92=E5=BA=8F=E5=86=85=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/sort/celldscolumn/CellDSColumnSortPane.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 index 9760de0ff2..20c65cb801 100644 --- 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 @@ -41,7 +41,7 @@ public class CellDSColumnSortPane extends AbstractSortPane { DSColumn dsColumn = ((DSColumn) cellElement.getValue()); TableDataColumn tableDataColumn = dsColumn.getColumn(); if (tableDataColumn instanceof TableDataColumn.ColumnName) { - selfSortArea = ((TableDataColumn.ColumnName) dsColumn.getColumn()).getName(); + selfSortArea = TableDataColumn.getColumnName(tableDataColumn); } } } From 20452f96e5bc2a55856ac3158e82a4d38e0d9498 Mon Sep 17 00:00:00 2001 From: "Henry.Wang" Date: Thu, 9 Dec 2021 22:56:03 +0800 Subject: [PATCH 05/18] =?UTF-8?q?REPORT-62440=20=E8=A1=A8=E5=A4=B4?= =?UTF-8?q?=E6=8E=92=E5=BA=8F=E5=86=85=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sort/celldscolumn/CellDSColumnSortGroupPane.java | 2 -- .../sort/celldscolumn/CellDSColumnSortItemPane.java | 2 -- .../fr/design/sort/celldscolumn/CellDSColumnSortPane.java | 7 +------ .../design/sort/cellexpand/CellExpandSortGroupPane.java | 1 - .../fr/design/sort/cellexpand/CellExpandSortItemPane.java | 1 - .../com/fr/design/sort/cellexpand/CellExpandSortPane.java | 1 - .../com/fr/design/sort/common/AbstractSortItemPane.java | 5 ----- .../java/com/fr/design/sort/common/AbstractSortPane.java | 5 ----- .../java/com/fr/design/sort/common/SortColumnRowPane.java | 1 - .../com/fr/design/sort/common/SortUIExpandablePane.java | 1 - .../sort/expressionpane/CellSortExpressionPane.java | 1 - .../sort/expressionpane/CustomSequenceEditPane.java | 1 - .../fr/design/sort/expressionpane/CustomSequencePane.java | 8 ++------ .../expressionpane/CustomSequenceSortExpressionPane.java | 2 -- .../java/com/fr/design/sort/header/HeaderAreaPane.java | 3 --- .../java/com/fr/design/sort/header/HeaderSettingPane.java | 1 - .../com/fr/design/sort/header/HeaderSortRulePane.java | 6 ------ .../java/com/fr/design/sort/header/SortHeaderPane.java | 6 +----- 18 files changed, 4 insertions(+), 50 deletions(-) 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 index f5cdd0a8d9..c74c3c9e3e 100644 --- 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 @@ -11,7 +11,6 @@ import com.fr.report.core.sort.sortexpression.SortExpression; public class CellDSColumnSortGroupPane extends AbstractSortGroupPane { DSColumn dsColumn; - public CellDSColumnSortGroupPane(int sortGroupPaneWidth, int sortGroupPaneRightWidth) { super(sortGroupPaneWidth, sortGroupPaneRightWidth); } @@ -20,7 +19,6 @@ public class CellDSColumnSortGroupPane extends AbstractSortGroupPane { this.dsColumn = dsColumn; } - @Override protected AbstractSortItemPane refreshSortItemPane(int sortItemPaneWidth, int sortItemPaneRightWidth, SortExpression sortExpression) { CellDSColumnSortItemPane cellDSColumnSortItemPane = new CellDSColumnSortItemPane( sortItemPaneWidth, sortItemPaneRightWidth); diff --git a/designer-realize/src/main/java/com/fr/design/sort/celldscolumn/CellDSColumnSortItemPane.java b/designer-realize/src/main/java/com/fr/design/sort/celldscolumn/CellDSColumnSortItemPane.java index c87b729e65..cd7b33ee02 100644 --- a/designer-realize/src/main/java/com/fr/design/sort/celldscolumn/CellDSColumnSortItemPane.java +++ b/designer-realize/src/main/java/com/fr/design/sort/celldscolumn/CellDSColumnSortItemPane.java @@ -12,7 +12,6 @@ import java.awt.*; public class CellDSColumnSortItemPane extends AbstractSortItemPane { - UIComboBox sortAreaUiComboBox; public CellDSColumnSortItemPane(int sortItemPaneWidth, int sortItemPaneRightWidth) { @@ -44,7 +43,6 @@ public class CellDSColumnSortItemPane extends AbstractSortItemPane { sortAreaUiComboBox.registerChangeListener(uiObserverListener); } - public void removeListener(UIObserverListener uiObserverListener) { super.removeListener(uiObserverListener); sortAreaUiComboBox.removeChangeListener(); 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 index 20c65cb801..c215ab1507 100644 --- 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 @@ -9,20 +9,16 @@ import com.fr.report.core.sort.common.CellSortAttr; public class CellDSColumnSortPane extends AbstractSortPane { - public CellDSColumnSortPane() { super(220, 150); - } - @Override protected void initSortGroupPane() { sortGroupPane = new CellDSColumnSortGroupPane(sortPaneWidth, sortPaneRightWidth); this.add(sortGroupPane); } - @Override protected CellSortAttr getCellSortAttr(TemplateCellElement cellElement) { if (cellElement.getValue() instanceof DSColumn) { @@ -40,13 +36,12 @@ public class CellDSColumnSortPane extends AbstractSortPane { if (cellElement.getValue() instanceof DSColumn) { DSColumn dsColumn = ((DSColumn) cellElement.getValue()); TableDataColumn tableDataColumn = dsColumn.getColumn(); - if (tableDataColumn instanceof TableDataColumn.ColumnName) { + if (tableDataColumn instanceof TableDataColumn) { selfSortArea = TableDataColumn.getColumnName(tableDataColumn); } } } - public void populateBean(TemplateCellElement cellElement) { if (cellElement.getValue() instanceof DSColumn) { DSColumn dsColumn = ((DSColumn) cellElement.getValue()); 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 index 330b43d739..62cb37e91f 100644 --- 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 @@ -6,7 +6,6 @@ import com.fr.report.core.sort.sortexpression.SortExpression; public class CellExpandSortGroupPane extends AbstractSortGroupPane { - public CellExpandSortGroupPane(int sortGroupPaneWidth, int sortGroupPaneRightWidth) { super(sortGroupPaneWidth, sortGroupPaneRightWidth); } 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 index 3812fbaf62..12be4ec20d 100644 --- 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 @@ -41,7 +41,6 @@ public class CellExpandSortItemPane extends AbstractSortItemPane { columnRowPane.addListener(uiObserverListener); } - public void removeListener(UIObserverListener uiObserverListener) { super.removeListener(uiObserverListener); columnRowPane.removeListener(uiObserverListener); 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 index 36243533d3..e230d319dd 100644 --- 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 @@ -27,7 +27,6 @@ public class CellExpandSortPane extends AbstractSortPane { this.setLayout(new BoxLayout(this, BoxLayout.Y_AXIS)); } - @Override protected void initSortGroupPane() { sortGroupPane = new CellExpandSortGroupPane(sortPaneWidth, sortPaneRightWidth); 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 index 8a86813396..0e58985528 100644 --- 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 @@ -21,7 +21,6 @@ import java.util.ArrayList; import java.util.List; public abstract class AbstractSortItemPane extends JPanel { - protected int sortItemPaneWidth; protected int sortItemPaneRightWidth; List sortExpressionPanes = new ArrayList<>(); @@ -73,7 +72,6 @@ public abstract class AbstractSortItemPane extends JPanel { this.add(sortRulePane); } - void initSortBasisPanel() { sortBasisPanel = new JPanel(new FlowLayout(FlowLayout.LEFT, 0, AbstractSortPane.PANE_COMPONENT_V_GAP)); sortBasisUiComboBox = new UIComboBox(getSortNames()); @@ -90,8 +88,6 @@ public abstract class AbstractSortItemPane extends JPanel { } } }); - - sortBasisPanel.add(new UILabel(Toolkit.i18nText("Fine-Design_Sort_Sort_Basis"), SwingConstants.LEFT)); sortBasisPanel.add(AbstractSortPane.createIntervalUILabel()); sortBasisPanel.add(sortBasisUiComboBox); @@ -124,7 +120,6 @@ public abstract class AbstractSortItemPane extends JPanel { } 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) { 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 index 35e8a3c096..24e1f6bac8 100644 --- 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 @@ -28,7 +28,6 @@ public abstract class AbstractSortPane extends JPanel { protected String selfSortArea; protected String defaultHeaderArea; - public AbstractSortPane(int sortPaneWidth, int sortPaneRightWidth) { this.sortPaneWidth = sortPaneWidth; this.sortPaneRightWidth = sortPaneRightWidth; @@ -36,7 +35,6 @@ public abstract class AbstractSortPane extends JPanel { initComponents(); } - private void initComponents() { initSortGroupPane(); sortHeaderPane = new SortHeaderPane(sortPaneWidth, sortPaneRightWidth + 5); @@ -46,7 +44,6 @@ public abstract class AbstractSortPane extends JPanel { protected abstract void initSortGroupPane(); protected void initUIObserverListener() { - } protected abstract CellSortAttr getCellSortAttr(TemplateCellElement cellElement); @@ -72,7 +69,6 @@ public abstract class AbstractSortPane extends JPanel { refresh(); } - protected void populateSortArea(TemplateCellElement cellElement) { int row = cellElement.getRow(); int column = cellElement.getColumn(); @@ -107,7 +103,6 @@ public abstract class AbstractSortPane extends JPanel { sortHeaderPane.removeListener(uiObserverListener); } - protected void refresh() { validate(); repaint(); diff --git a/designer-realize/src/main/java/com/fr/design/sort/common/SortColumnRowPane.java b/designer-realize/src/main/java/com/fr/design/sort/common/SortColumnRowPane.java index 489f136bee..814651063b 100644 --- a/designer-realize/src/main/java/com/fr/design/sort/common/SortColumnRowPane.java +++ b/designer-realize/src/main/java/com/fr/design/sort/common/SortColumnRowPane.java @@ -61,7 +61,6 @@ public class SortColumnRowPane extends JPanel { return columnRow != null && columnRow.getRow() != -1 && columnRow.getColumn() != -1; } - void initTextField() { colJTextField = new JTextField(); colJTextField.setEditable(false); diff --git a/designer-realize/src/main/java/com/fr/design/sort/common/SortUIExpandablePane.java b/designer-realize/src/main/java/com/fr/design/sort/common/SortUIExpandablePane.java index 47c6c62cc7..88e61a4e34 100644 --- a/designer-realize/src/main/java/com/fr/design/sort/common/SortUIExpandablePane.java +++ b/designer-realize/src/main/java/com/fr/design/sort/common/SortUIExpandablePane.java @@ -13,7 +13,6 @@ import java.awt.event.MouseEvent; public class SortUIExpandablePane extends JPanel { - private static final long serialVersionUID = 1L; private HeaderPane headerPane; private AbstractSortItemPane contentPane; 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 index 5891cfcf09..1381b92cf2 100644 --- 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 @@ -13,7 +13,6 @@ public class CellSortExpressionPane extends SortExpressionPane customSequence; @@ -28,13 +27,10 @@ public class CustomSequencePane extends JPanel { } protected void initComponents(int width) { - textField = new UITextField(); textField.setEditable(false); textField.setPreferredSize(new Dimension(width - 20, 20)); - - // 添加一公式编辑器按钮 - Icon icon = BaseUtils.readIcon("/com/fr/design/images/control/refresh.png"); + Icon icon = IconUtils.readIcon("/com/fr/design/images/control/refresh.png"); button = new UIButton(icon); button.setBackground(Color.RED); button.setPreferredSize(new Dimension(24, 20)); 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 index 6ce23b8e7c..56ccfc511b 100644 --- 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 @@ -1,7 +1,5 @@ package com.fr.design.sort.expressionpane; - -import com.fr.design.i18n.Toolkit; import com.fr.design.sort.common.AbstractSortPane; import com.fr.locale.InterProviderFactory; import com.fr.report.core.sort.sortexpression.CustomSequenceSortExpression; diff --git a/designer-realize/src/main/java/com/fr/design/sort/header/HeaderAreaPane.java b/designer-realize/src/main/java/com/fr/design/sort/header/HeaderAreaPane.java index 799be4f67a..8a728cae17 100644 --- a/designer-realize/src/main/java/com/fr/design/sort/header/HeaderAreaPane.java +++ b/designer-realize/src/main/java/com/fr/design/sort/header/HeaderAreaPane.java @@ -33,7 +33,6 @@ public class HeaderAreaPane extends JPanel { initLayeredPane(); } - void initUILabel() { UILabel uiLabel = new UILabel(Toolkit.i18nText("Fine-Design_Sort_Header_Area"), SwingConstants.LEFT); this.add(uiLabel); @@ -45,7 +44,6 @@ public class HeaderAreaPane extends JPanel { this.add(areaJLayeredPane); } - public void populateBean(ColumnRow columnRow) { areaJLayeredPane.populateBean(columnRow); } @@ -142,7 +140,6 @@ public class HeaderAreaPane extends JPanel { areaJLayeredPane.addListener(uiObserverListener); } - public void removeListener(UIObserverListener uiObserverListener) { areaJLayeredPane.removeListener(uiObserverListener); } 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 index 7d4f3663cf..38d75e55e5 100644 --- 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 @@ -84,7 +84,6 @@ public class HeaderSettingPane extends JPanel { headerSortRulePane.addListener(uiObserverListener); } - public void removeListener(UIObserverListener uiObserverListener) { uiCheckBox.removeChangeListener(); headerSortRulePane.removeListener(uiObserverListener); diff --git a/designer-realize/src/main/java/com/fr/design/sort/header/HeaderSortRulePane.java b/designer-realize/src/main/java/com/fr/design/sort/header/HeaderSortRulePane.java index dc9b4f615c..0bff87af5c 100644 --- a/designer-realize/src/main/java/com/fr/design/sort/header/HeaderSortRulePane.java +++ b/designer-realize/src/main/java/com/fr/design/sort/header/HeaderSortRulePane.java @@ -23,8 +23,6 @@ import java.io.InputStream; import java.util.ArrayList; 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"; @@ -35,7 +33,6 @@ public class HeaderSortRulePane extends JPanel { UICheckBox desUICheckBox; UICheckBox nosortUICheckBox; - HeaderSortRulePane() { initComponents(); initState(); @@ -75,7 +72,6 @@ public class HeaderSortRulePane extends JPanel { nosortIconButton.refreshIconLabelColor(new Color(33, 33, 34)); } - class IconButton extends JPanel { JLayeredPane jLayeredPane; String iconTemplatePath; @@ -195,7 +191,6 @@ public class HeaderSortRulePane extends JPanel { } } - public void populateBean(SortHeader.SortItem[] sortItems) { initState(); if (sortItems != null) { @@ -245,7 +240,6 @@ public class HeaderSortRulePane extends JPanel { nosortUICheckBox.registerChangeListener(uiObserverListener); } - public void removeListener(UIObserverListener uiObserverListener) { ascIconButton.removeListener(uiObserverListener); desIconButton.removeListener(uiObserverListener); diff --git a/designer-realize/src/main/java/com/fr/design/sort/header/SortHeaderPane.java b/designer-realize/src/main/java/com/fr/design/sort/header/SortHeaderPane.java index 2780139338..ff8807d835 100644 --- a/designer-realize/src/main/java/com/fr/design/sort/header/SortHeaderPane.java +++ b/designer-realize/src/main/java/com/fr/design/sort/header/SortHeaderPane.java @@ -22,7 +22,6 @@ public class SortHeaderPane extends JPanel { this.setBorder(BorderFactory.createEmptyBorder(10, 0, 0, 0)); } - void initHeaderArea() { this.headerAreaPane = new HeaderAreaPane(sortHeaderPaneWidth, sortHeaderPaneRightWidth); this.add(headerAreaPane); @@ -33,7 +32,6 @@ public class SortHeaderPane extends JPanel { this.add(headerSettingPane); } - public void populateBean(SortHeader sortHeader, String defaultHeaderArea) { this.sortHeader = sortHeader; ColumnRow columnRow = null; @@ -65,10 +63,8 @@ public class SortHeaderPane extends JPanel { headerSettingPane.addListener(uiObserverListener); } - public void removeListener(UIObserverListener uiObserverListener) { headerAreaPane.removeListener(uiObserverListener); headerSettingPane.removeListener(uiObserverListener); } -} - +} \ No newline at end of file From c6677e6906cb0f518aa8d76e56fb18e196a88928 Mon Sep 17 00:00:00 2001 From: hades Date: Fri, 10 Dec 2021 11:12:50 +0800 Subject: [PATCH 06/18] =?UTF-8?q?REPORT-64095=20websocket=E9=A2=91?= =?UTF-8?q?=E7=B9=81=E5=87=BA=E7=8E=B0=E6=96=AD=E5=BC=80=E5=8F=88=E8=BF=9E?= =?UTF-8?q?=E4=B8=8A=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/mainframe/socketio/DesignerSocketIO.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/socketio/DesignerSocketIO.java b/designer-realize/src/main/java/com/fr/design/mainframe/socketio/DesignerSocketIO.java index 2cb2099bf8..97e8692dc0 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/socketio/DesignerSocketIO.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/socketio/DesignerSocketIO.java @@ -34,6 +34,8 @@ import io.socket.client.IO; import io.socket.client.Socket; import io.socket.emitter.Emitter; +import io.socket.engineio.client.transports.Polling; +import io.socket.engineio.client.transports.WebSocket; import java.io.File; import java.io.FileInputStream; import java.security.KeyStore; @@ -116,6 +118,7 @@ public class DesignerSocketIO { private static IO.Options createOptions() { IO.Options options = new IO.Options(); options.path = WebSocketConfig.getInstance().getSocketContext(); + options.transports = new String[]{WebSocket.NAME, Polling.NAME}; try { if (ComparatorUtils.equals(currentProtocol, HTTPS)) { options.sslContext = getSSLContext(); From cbdbc9d5d06f4bcc31f8679eba2d8854f17096d5 Mon Sep 17 00:00:00 2001 From: Yvan Date: Fri, 10 Dec 2021 11:25:49 +0800 Subject: [PATCH 07/18] =?UTF-8?q?KERNEL-9860=20=E6=8F=92=E4=BB=B6=E4=BF=AE?= =?UTF-8?q?=E6=94=B9xml=E4=B8=ADactive=E6=A0=87=E7=AD=BE=E9=80=BB=E8=BE=91?= =?UTF-8?q?=E9=87=8D=E6=9E=84=20=E3=80=90=E9=97=AE=E9=A2=98=E5=8E=9F?= =?UTF-8?q?=E5=9B=A0=E3=80=91rt=20=E3=80=90=E6=94=B9=E5=8A=A8=E6=80=9D?= =?UTF-8?q?=E8=B7=AF=E3=80=91=E8=AF=A6=E8=A7=81https://kms.fineres.com/pag?= =?UTF-8?q?es/viewpage.action=3FpageId=3D289590798=20=E3=80=90review?= =?UTF-8?q?=E5=BB=BA=E8=AE=AE=E3=80=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/extra/PluginInstalledPane.java | 29 ++++++++++++++----- .../fr/design/extra/PluginOperateUtils.java | 12 ++++---- 2 files changed, 28 insertions(+), 13 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/extra/PluginInstalledPane.java b/designer-base/src/main/java/com/fr/design/extra/PluginInstalledPane.java index 2fa1ea1102..1923a22876 100644 --- a/designer-base/src/main/java/com/fr/design/extra/PluginInstalledPane.java +++ b/designer-base/src/main/java/com/fr/design/extra/PluginInstalledPane.java @@ -60,11 +60,14 @@ public class PluginInstalledPane extends PluginAbstractViewPane { public void actionPerformed(ActionEvent e) { PluginView plugin = controlPane.getSelectedPlugin(); if (plugin != null) { - boolean isActive = plugin.isActive(); - PluginMarker pluginMarker = PluginMarker.create(plugin.getID(), plugin.getVersion()); - final String modifyMessage = isActive ? com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Plugin_Has_Been_Actived") : com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Plugin_Has_Been_Disabled"); - if (isActive) { - PluginManager.getController().forbid(pluginMarker, new PluginTaskCallback() { + PluginContext pluginContext = getPluginContextByView(plugin); + if (pluginContext == null) { + return; + } + boolean running = pluginContext.isRunning(); + final String modifyMessage = running ? com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Plugin_Has_Been_Actived") : com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Plugin_Has_Been_Disabled"); + if (running) { + PluginManager.getController().forbidPersistently(pluginContext.getMarker(), new PluginTaskCallback() { @Override public void done(PluginTaskResult result) { if (result.isSuccess()) { @@ -75,7 +78,7 @@ public class PluginInstalledPane extends PluginAbstractViewPane { } }); } else { - PluginManager.getController().enable(pluginMarker, new PluginTaskCallback() { + PluginManager.getController().enablePersistently(pluginContext.getMarker(), new PluginTaskCallback() { @Override public void done(PluginTaskResult result) { if (result.isSuccess()) { @@ -145,13 +148,25 @@ public class PluginInstalledPane extends PluginAbstractViewPane { } private void changeTextForButton(PluginView plugin) { - if (plugin.isActive()) { + PluginContext pluginContext = getPluginContextByView(plugin); + if (pluginContext == null) { + return; + } + if (pluginContext.isRunning()) { disableButton.setText(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Plugin_Disable")); } else { disableButton.setText(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Plugin_Active")); } } + private PluginContext getPluginContextByView(PluginView pluginView) { + if (pluginView != null) { + PluginMarker pluginMarker = PluginMarker.create(pluginView.getID(), pluginView.getVersion()); + return PluginManager.getContext(pluginMarker); + } + return null; + } + @Override protected String title4PopupWindow() { return "Installed"; diff --git a/designer-base/src/main/java/com/fr/design/extra/PluginOperateUtils.java b/designer-base/src/main/java/com/fr/design/extra/PluginOperateUtils.java index 7dd2097dc7..379daab28e 100644 --- a/designer-base/src/main/java/com/fr/design/extra/PluginOperateUtils.java +++ b/designer-base/src/main/java/com/fr/design/extra/PluginOperateUtils.java @@ -99,9 +99,9 @@ public class PluginOperateUtils { public void run() { PluginMarker pluginMarker = PluginUtils.createPluginMarker(pluginInfo); PluginContext plugin = PluginManager.getContext(pluginMarker); - boolean active = plugin.isActive(); - PluginTaskCallback modifyStatusCallback = new ModifyStatusCallback(active, jsCallback); - if (active) { + boolean isRunning = plugin.isRunning(); + PluginTaskCallback modifyStatusCallback = new ModifyStatusCallback(isRunning, jsCallback); + if (isRunning) { PluginXmlElement forbidReminder = plugin.getXml().getElement(PluginElementName.ForbidReminder); if (forbidReminder != null && forbidReminder.getContent() != null) { // 禁用前提示 @@ -113,14 +113,14 @@ public class PluginOperateUtils { JOptionPane.WARNING_MESSAGE ); if (rv == JOptionPane.OK_OPTION) { - PluginManager.getController().forbid(pluginMarker, modifyStatusCallback); + PluginManager.getController().forbidPersistently(pluginMarker, modifyStatusCallback); } } else { // 正常禁用 - PluginManager.getController().forbid(pluginMarker, modifyStatusCallback); + PluginManager.getController().forbidPersistently(pluginMarker, modifyStatusCallback); } } else { - PluginManager.getController().enable(pluginMarker, modifyStatusCallback); + PluginManager.getController().enablePersistently(pluginMarker, modifyStatusCallback); } } }); From 5b5f49540f2b3f7efa1250514af1c050d9ce6d72 Mon Sep 17 00:00:00 2001 From: Starryi Date: Fri, 10 Dec 2021 14:36:09 +0800 Subject: [PATCH 08/18] =?UTF-8?q?REPORT-64062=20=E3=80=90=E4=B8=BB?= =?UTF-8?q?=E9=A2=98=E8=BE=B9=E6=A1=86=E3=80=91=E4=B8=8A=E4=B8=80=E4=B8=AA?= =?UTF-8?q?=E6=A0=B7=E5=BC=8F=E8=AE=BE=E7=BD=AE=E8=BE=B9=E6=A1=86=E9=A2=9C?= =?UTF-8?q?=E8=89=B2=E5=90=8E=EF=BC=8C=E6=96=B0=E5=A2=9E=E7=9A=84=E6=A0=B7?= =?UTF-8?q?=E5=BC=8F=E9=BB=98=E8=AE=A4=E8=BE=B9=E6=A1=86=E8=89=B2=E4=BC=9A?= =?UTF-8?q?=E8=AE=B0=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 【问题原因】 在新建主题单元格样式情况下,CellBorderStyle中的各字段为空,导致无法重置 线宽和颜色配置项。 【改动思路】 重置先宽和颜色配置项时给一个默认值 --- .../src/main/java/com/fr/design/gui/style/BorderPane.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/designer-base/src/main/java/com/fr/design/gui/style/BorderPane.java b/designer-base/src/main/java/com/fr/design/gui/style/BorderPane.java index fe85d55030..9954162da7 100644 --- a/designer-base/src/main/java/com/fr/design/gui/style/BorderPane.java +++ b/designer-base/src/main/java/com/fr/design/gui/style/BorderPane.java @@ -223,6 +223,9 @@ public class BorderPane extends AbstractBasicStylePane implements GlobalNameObse } else if (cellBorderStyle.getHorizontalStyle() != Constants.LINE_NONE) { this.currentLineCombo.setSelectedLineStyle(cellBorderStyle.getHorizontalStyle()); this.currentLineColorPane.setSelectObject(cellBorderStyle.getHorizontalColor()); + } else { + this.currentLineCombo.setSelectedLineStyle(Constants.LINE_NONE); + this.currentLineColorPane.setSelectObject(Color.BLACK); } } From b7d61b5196cdf01ab27be87c2cae39eefe8a2235 Mon Sep 17 00:00:00 2001 From: hades Date: Fri, 10 Dec 2021 15:13:28 +0800 Subject: [PATCH 09/18] =?UTF-8?q?KERNEL-9687=20log4j=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E5=8D=87=E7=BA=A7-=E8=AE=BE=E8=AE=A1=E5=99=A8=E9=85=8D?= =?UTF-8?q?=E5=90=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/DesignerEnvManager.java | 15 +++--- .../design/actions/file/PreferencePane.java | 5 +- .../loghandler/DesignerLogAppender.java | 42 ++++++++--------- .../loghandler/DesignerLogHandler.java | 22 ++++----- .../mainframe/loghandler/DesignerLogger.java | 41 ++++++++-------- .../loghandler/LogEventConverter.java | 27 +++++++++++ .../errorinfo/ErrorInfoLogAppender.java | 47 ++++++++++--------- .../errorinfo/ErrorInfoUploader.java | 27 ++++++----- .../mainframe/socketio/DesignerSocketIO.java | 11 ++++- .../fr/start/module/DesignerActivator.java | 4 +- 10 files changed, 141 insertions(+), 100 deletions(-) create mode 100644 designer-base/src/main/java/com/fr/design/mainframe/loghandler/LogEventConverter.java diff --git a/designer-base/src/main/java/com/fr/design/DesignerEnvManager.java b/designer-base/src/main/java/com/fr/design/DesignerEnvManager.java index 9d84e25bae..1f39f024d2 100644 --- a/designer-base/src/main/java/com/fr/design/DesignerEnvManager.java +++ b/designer-base/src/main/java/com/fr/design/DesignerEnvManager.java @@ -53,7 +53,8 @@ import com.fr.stable.xml.XMLReadable; import com.fr.stable.xml.XMLTools; import com.fr.stable.xml.XMLWriter; import com.fr.stable.xml.XMLableReader; -import com.fr.third.apache.log4j.FileAppender; +import com.fr.third.apache.logging.log4j.core.appender.FileAppender; +import com.fr.third.apache.logging.log4j.core.layout.PatternLayout; import com.fr.third.org.apache.commons.io.FilenameUtils; import com.fr.workspace.WorkContext; import com.fr.workspace.WorkContextCallback; @@ -324,18 +325,18 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { if (!new File(fileName).exists()) { StableUtils.makesureFileExist(new File(fileName)); } - LogHandler handler = new LogHandler() { - final FileAppender appender = new FileAppender( - new com.fr.third.apache.log4j.PatternLayout("%d{HH:mm:ss} %t %p [%c] %m%n"), - fileName - ); + LogHandler handler = new LogHandler() { + final FileAppender appender = FileAppender.newBuilder(). + setName(FileAppender.class.getSimpleName()). + setLayout(PatternLayout.newBuilder().withPattern("%d{HH:mm:ss} %t %p [%c] %m%n").build()). + withFileName(fileName).build(); @Override public FileAppender getHandler() { return appender; } }; - + handler.getHandler().start(); FineLoggerFactory.getLogger().addLogAppender(handler); } catch (SecurityException e) { FineLoggerFactory.getLogger().error(e.getMessage(), e); diff --git a/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java b/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java index 303d9fd816..c0797e9462 100644 --- a/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java +++ b/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java @@ -29,7 +29,6 @@ import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.layout.TableLayout; import com.fr.design.layout.TableLayoutHelper; import com.fr.design.layout.VerticalFlowLayout; -import com.fr.design.mainframe.DesignerContext; import com.fr.design.mainframe.vcs.VcsConfigManager; import com.fr.design.mainframe.vcs.common.VcsHelper; import com.fr.design.os.impl.SupportOSImpl; @@ -45,14 +44,12 @@ import com.fr.locale.InterProviderFactory; import com.fr.log.FineLoggerFactory; import com.fr.stable.Constants; import com.fr.stable.os.OperatingSystem; -import com.fr.third.apache.log4j.Level; +import com.fr.third.apache.logging.log4j.Level; import com.fr.transaction.Configurations; import com.fr.transaction.Worker; import com.fr.workspace.WorkContext; import com.fr.workspace.server.vcs.VcsOperator; import com.fr.workspace.server.vcs.git.config.GcConfig; -import com.sun.javafx.tk.FileChooserType; -import javafx.stage.FileChooser; import javax.swing.BorderFactory; import javax.swing.BoxLayout; diff --git a/designer-base/src/main/java/com/fr/design/mainframe/loghandler/DesignerLogAppender.java b/designer-base/src/main/java/com/fr/design/mainframe/loghandler/DesignerLogAppender.java index 118ea2e321..f965c21725 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/loghandler/DesignerLogAppender.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/loghandler/DesignerLogAppender.java @@ -1,41 +1,41 @@ package com.fr.design.mainframe.loghandler; - -import com.fr.third.apache.log4j.AppenderSkeleton; -import com.fr.third.apache.log4j.Level; -import com.fr.third.apache.log4j.spi.LoggingEvent; - +import com.fr.third.apache.logging.log4j.Level; +import com.fr.third.apache.logging.log4j.core.Filter; +import com.fr.third.apache.logging.log4j.core.Layout; +import com.fr.third.apache.logging.log4j.core.LogEvent; +import com.fr.third.apache.logging.log4j.core.appender.AbstractAppender; +import com.fr.third.apache.logging.log4j.core.config.Property; +import com.fr.third.apache.logging.log4j.core.layout.PatternLayout; +import java.io.Serializable; import java.util.Date; /** * Created by Administrator on 2017/7/18 0018. */ -public class DesignerLogAppender extends AppenderSkeleton { +public class DesignerLogAppender extends AbstractAppender { - public DesignerLogAppender() { - this.layout = new com.fr.third.apache.log4j.PatternLayout("%d{HH:mm:ss} %t %p [%c] %m%n"); + protected DesignerLogAppender(String name, Filter filter, + Layout layout, + boolean ignoreExceptions, + Property[] properties) { + super(name, filter, layout, ignoreExceptions, properties); } - protected void append(LoggingEvent event) { - this.subAppend(event); + public static DesignerLogAppender createDesignerLogAppender() { + return new DesignerLogAppender(DesignerLogAppender.class.getSimpleName(), null, PatternLayout.newBuilder().withPattern("%d{HH:mm:ss} %t %p [%c] %m%n %throwable{0}").build(), false, Property.EMPTY_ARRAY); } - public boolean requiresLayout() { - return true; + @Override + public void append(LogEvent event) { + this.subAppend(event); } - public synchronized void close() { - if (this.closed) { - return; - } - this.closed = true; - - } - public void subAppend(LoggingEvent event) { + public void subAppend(LogEvent event) { synchronized (DesignerLogHandler.getInstance()) { Level level = event.getLevel(); - String msg = this.layout.format(event); + String msg = (String) this.toSerializable(event); DesignerLogHandler.getInstance().printRemoteLog(msg, level, new Date()); } } diff --git a/designer-base/src/main/java/com/fr/design/mainframe/loghandler/DesignerLogHandler.java b/designer-base/src/main/java/com/fr/design/mainframe/loghandler/DesignerLogHandler.java index 1d67c47df1..1cb8e5d1aa 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/loghandler/DesignerLogHandler.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/loghandler/DesignerLogHandler.java @@ -9,10 +9,9 @@ import com.fr.general.ComparatorUtils; import com.fr.general.log.Log4jConfig; import com.fr.log.FineLoggerFactory; import com.fr.stable.StringUtils; -import com.fr.third.apache.log4j.Level; -import com.fr.third.apache.log4j.spi.LoggingEvent; -import com.fr.third.apache.log4j.spi.ThrowableInformation; +import com.fr.third.apache.logging.log4j.Level; +import com.fr.third.apache.logging.log4j.core.LogEvent; import javax.swing.AbstractAction; import javax.swing.ActionMap; import javax.swing.InputMap; @@ -128,7 +127,7 @@ public class DesignerLogHandler { JPopupMenu jPopupMenu = new JPopupMenu(); - int logLevelInt = Log4jConfig.getInstance().getRootLevel().toInt(); + int logLevelInt = Log4jConfig.getInstance().getRootLevel().intLevel(); if (logLevelInt <= DesignerLogger.INFO_INT) { jPopupMenu.add(showInfo); jPopupMenu.add(showError); @@ -240,23 +239,22 @@ public class DesignerLogHandler { return resultPane; } - public void printStackTrace(LoggingEvent event) { + public void printStackTrace(LogEvent event) { - int intLevel = event.getLevel().toInt(); - Date date = new Date(event.getTimeStamp()); - ThrowableInformation information = event.getThrowableInformation(); + int intLevel = event.getLevel().intLevel(); + Date date = new Date(event.getTimeMillis()); if (intLevel == DesignerLogger.INFO_INT && showInfo.isSelected()) { - printMessage(event.getRenderedMessage(), intLevel, date, information == null ? null : information.getThrowable()); + printMessage(event.getMessage().getFormattedMessage(), intLevel, date, event.getThrown()); } else if (intLevel == DesignerLogger.ERROR_INT && showError.isSelected()) { - printMessage(event.getRenderedMessage(), intLevel, date, information == null ? null : information.getThrowable()); + printMessage(event.getMessage().getFormattedMessage(), intLevel, date, event.getThrown()); } else if (intLevel == DesignerLogger.WARN_INT && showServer.isSelected()) { - printMessage(event.getRenderedMessage(), intLevel, date, information == null ? null : information.getThrowable()); + printMessage(event.getMessage().getFormattedMessage(), intLevel, date, event.getThrown()); } } public void printStackTrace(String message, Level level, Date date) { - int intLevel = level.toInt(); + int intLevel = level.intLevel(); if (intLevel == DesignerLogger.INFO_INT && showInfo.isSelected()) { printMessage(message, intLevel, date); } else if (intLevel == DesignerLogger.ERROR_INT && showError.isSelected()) { diff --git a/designer-base/src/main/java/com/fr/design/mainframe/loghandler/DesignerLogger.java b/designer-base/src/main/java/com/fr/design/mainframe/loghandler/DesignerLogger.java index b2b35da1cd..3b6d4bf7a6 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/loghandler/DesignerLogger.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/loghandler/DesignerLogger.java @@ -1,26 +1,25 @@ package com.fr.design.mainframe.loghandler; import com.fr.log.FineLoggerFactory; -import com.fr.third.apache.log4j.Level; -import com.fr.third.apache.log4j.spi.LoggingEvent; -import com.fr.third.apache.log4j.spi.ThrowableInformation; +import com.fr.third.apache.logging.log4j.Level; +import com.fr.third.apache.logging.log4j.core.LogEvent; /** * 设计器日志记录 */ public class DesignerLogger { - public static final int INFO_INT = Level.INFO.toInt(); + public static final int INFO_INT = Level.INFO.intLevel(); - public static final int ERROR_INT = Level.ERROR.toInt(); + public static final int ERROR_INT = Level.ERROR.intLevel(); - public static final int WARN_INT = Level.WARN.toInt(); + public static final int WARN_INT = Level.WARN.intLevel(); /** * 记录LoggingEvent对象 * * @param event */ - public static void log(LoggingEvent event) { + public static void log(LogEvent event) { if (event == null) { return; } @@ -30,29 +29,27 @@ public class DesignerLogger { public enum LogParser { DEFAULT(-1) { @Override - public void log(LoggingEvent event) { + public void log(LogEvent event) { } }, - INFO(Level.INFO.toInt()) { + INFO(Level.INFO.intLevel()) { @Override - public void log(LoggingEvent event) { - FineLoggerFactory.getLogger().info(event.getRenderedMessage()); + public void log(LogEvent event) { + FineLoggerFactory.getLogger().info(event.getMessage().getFormattedMessage()); } }, - WARN(Level.WARN.toInt()) { + WARN(Level.WARN.intLevel()) { @Override - public void log(LoggingEvent event) { - ThrowableInformation information = event.getThrowableInformation(); - FineLoggerFactory.getLogger().warn(event.getRenderedMessage(), information == null ? null : information.getThrowable()); + public void log(LogEvent event) { + FineLoggerFactory.getLogger().warn(event.getMessage().getFormattedMessage(), event.getThrown()); } }, - ERROR(Level.ERROR.toInt()) { + ERROR(Level.ERROR.intLevel()) { @Override - public void log(LoggingEvent event) { - ThrowableInformation information = event.getThrowableInformation(); - FineLoggerFactory.getLogger().error(event.getRenderedMessage(), information == null ? null : information.getThrowable()); + public void log(LogEvent event) { + FineLoggerFactory.getLogger().error(event.getMessage().getFormattedMessage(), event.getThrown()); } }; private int level; @@ -65,8 +62,8 @@ public class DesignerLogger { return level; } - public static LogParser parse(LoggingEvent event) { - int intLevel = event.getLevel().toInt(); + public static LogParser parse(LogEvent event) { + int intLevel = event.getLevel().intLevel(); for (LogParser logParser : values()) { if (logParser.getLevel() == intLevel) { return logParser; @@ -76,7 +73,7 @@ public class DesignerLogger { } - public void log(LoggingEvent event) { + public void log(LogEvent event) { } } } \ No newline at end of file diff --git a/designer-base/src/main/java/com/fr/design/mainframe/loghandler/LogEventConverter.java b/designer-base/src/main/java/com/fr/design/mainframe/loghandler/LogEventConverter.java new file mode 100644 index 0000000000..92995add54 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mainframe/loghandler/LogEventConverter.java @@ -0,0 +1,27 @@ +package com.fr.design.mainframe.loghandler; + +import com.fr.third.apache.log4j.spi.LoggingEvent; +import com.fr.third.apache.logging.log4j.Level; +import com.fr.third.apache.logging.log4j.core.LogEvent; +import com.fr.third.apache.logging.log4j.core.impl.Log4jLogEvent; +import com.fr.third.apache.logging.log4j.message.SimpleMessage; + +/** + * 兼容log4j1和2之间logEvent之间的转换 + * + * @author hades + * @version 11.0 + * Created by hades on 2021/12/9 + */ +public class LogEventConverter { + + public static LogEvent convert(LoggingEvent loggingEvent) { + SimpleMessage message = new SimpleMessage(loggingEvent.getRenderedMessage()); + return Log4jLogEvent.newBuilder(). + setMessage(message). + setLevel(Level.getLevel(loggingEvent.getLevel().toString())). + build(); + } + + +} diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/errorinfo/ErrorInfoLogAppender.java b/designer-realize/src/main/java/com/fr/design/mainframe/errorinfo/ErrorInfoLogAppender.java index 2626193a4c..7157316c2f 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/errorinfo/ErrorInfoLogAppender.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/errorinfo/ErrorInfoLogAppender.java @@ -4,6 +4,13 @@ import com.fr.base.io.IOFile; import com.fr.base.io.XMLReadHelper; import com.fr.design.DesignerEnvManager; import com.fr.design.i18n.Toolkit; +import com.fr.third.apache.logging.log4j.Level; +import com.fr.third.apache.logging.log4j.core.Filter; +import com.fr.third.apache.logging.log4j.core.Layout; +import com.fr.third.apache.logging.log4j.core.LogEvent; +import com.fr.third.apache.logging.log4j.core.appender.AbstractAppender; +import com.fr.third.apache.logging.log4j.core.config.Property; +import com.fr.third.apache.logging.log4j.core.layout.PatternLayout; import com.fr.web.session.SessionLocalManager; import com.fr.stable.StableUtils; @@ -12,22 +19,20 @@ import com.fr.stable.project.ProjectConstants; import com.fr.stable.web.SessionProvider; import com.fr.stable.xml.XMLPrintWriter; import com.fr.stable.xml.XMLableReader; -import com.fr.third.apache.log4j.AppenderSkeleton; -import com.fr.third.apache.log4j.Level; -import com.fr.third.apache.log4j.spi.LoggingEvent; import com.fr.web.core.SessionPoolManager; import com.fr.web.core.TemplateSessionIDInfo; import com.fr.workspace.WorkContext; import java.io.ByteArrayInputStream; import java.io.InputStream; +import java.io.Serializable; /** * 收集设计器报错信息的appender. *

* Created by Administrator on 2017/7/24 0024. */ -public class ErrorInfoLogAppender extends AppenderSkeleton { +public class ErrorInfoLogAppender extends AbstractAppender { private static final int ERROR_LEN = 8; private static final int ERROR_STACK_TRACE = 15; @@ -38,16 +43,23 @@ public class ErrorInfoLogAppender extends AppenderSkeleton { private String uuid; private String activekey; - public ErrorInfoLogAppender() { - this.layout = new com.fr.third.apache.log4j.PatternLayout("%d{HH:mm:ss} %t %p [%c] %m%n"); - + protected ErrorInfoLogAppender(String name, Filter filter, + Layout layout, + boolean ignoreExceptions, + Property[] properties) { + super(name, filter, layout, ignoreExceptions, properties); DesignerEnvManager envManager = DesignerEnvManager.getEnvManager(); this.username = envManager.getDesignerLoginUsername(); this.uuid = envManager.getUUID(); this.activekey = envManager.getActivationKey(); } - protected void append(LoggingEvent event) { + public static ErrorInfoLogAppender createErrorLogAppender() { + return new ErrorInfoLogAppender(ErrorInfoLogAppender.class.getSimpleName(), null, PatternLayout.newBuilder().withPattern("%d{HH:mm:ss} %t %p [%c] %m%n %throwable{0}").build(), false, Property.EMPTY_ARRAY); + } + + @Override + public void append(LogEvent event) { this.subAppend(event); } @@ -55,19 +67,12 @@ public class ErrorInfoLogAppender extends AppenderSkeleton { return true; } - public synchronized void close() { - if (this.closed) { - return; - } - this.closed = true; - - } - public void subAppend(LoggingEvent event) { + public void subAppend(LogEvent event) { Level level = event.getLevel(); // 只分析上传记录error以上的. - if (level.isGreaterOrEqual(Level.ERROR)) { - String msg = this.layout.format(event); + if (level.isMoreSpecificThan(Level.ERROR)) { + String msg = (String) this.toSerializable(event); // 这个id并不是一定会有的, 有就记录下, 说明是预览模板出的错. String templateid = readTemplateID(); String logid = readLogID(msg); @@ -80,13 +85,13 @@ public class ErrorInfoLogAppender extends AppenderSkeleton { } } - private String readStackTrace(LoggingEvent event) { - String[] s = event.getThrowableStrRep(); + private String readStackTrace(LogEvent event) { + StackTraceElement[] s = event.getThrown() == null ? null : event.getThrown().getStackTrace(); StringBuilder sb = new StringBuilder(); if (s != null) { int len = Math.min(s.length, ERROR_STACK_TRACE); for (int i = 0; i < len; i++) { - sb.append(s[i]).append("\n"); + sb.append(s[i].toString()).append("\n"); } } return sb.toString(); diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/errorinfo/ErrorInfoUploader.java b/designer-realize/src/main/java/com/fr/design/mainframe/errorinfo/ErrorInfoUploader.java index 81da862123..73ecf610d1 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/errorinfo/ErrorInfoUploader.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/errorinfo/ErrorInfoUploader.java @@ -44,30 +44,35 @@ public class ErrorInfoUploader { //单次发送的错误信息最大条数 private static final int MAX_ITEMS = 200; + private static LogHandler logHandler; + static { GeneralContext.addEnvChangedListener(new EnvChangedListener() { @Override public void envChanged() { - FineLoggerFactory.getLogger().addLogAppender(new LogHandler() { - private ErrorInfoLogAppender errorInfoLogAppender = new ErrorInfoLogAppender(); - - @Override - public ErrorInfoLogAppender getHandler() { - return errorInfoLogAppender; - } - }); + if (logHandler != null) { + logHandler.getHandler().stop(); + FineLoggerFactory.getLogger().removeLogAppender(logHandler); + logHandler.getHandler().start(); + FineLoggerFactory.getLogger().addLogAppender(logHandler); + } } }); } private ErrorInfoUploader() { - FineLoggerFactory.getLogger().addLogAppender(new LogHandler() { + logHandler = new LogHandler() { + + private final ErrorInfoLogAppender errorInfoLogAppender = ErrorInfoLogAppender.createErrorLogAppender(); + @Override public ErrorInfoLogAppender getHandler() { - return new ErrorInfoLogAppender(); + return errorInfoLogAppender; } - }); + }; + logHandler.getHandler().start(); + FineLoggerFactory.getLogger().addLogAppender(logHandler); } public static ErrorInfoUploader getInstance() { diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/socketio/DesignerSocketIO.java b/designer-realize/src/main/java/com/fr/design/mainframe/socketio/DesignerSocketIO.java index 6b65a7bd3d..1742e3c3dc 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/socketio/DesignerSocketIO.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/socketio/DesignerSocketIO.java @@ -11,6 +11,7 @@ import com.fr.design.i18n.Toolkit; import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.mainframe.DesignerContext; import com.fr.design.mainframe.loghandler.DesignerLogger; +import com.fr.design.mainframe.loghandler.LogEventConverter; import com.fr.design.mainframe.share.ui.base.MouseClickListener; import com.fr.design.mainframe.toast.DesignerToastMsgUtil; import com.fr.design.mainframe.toast.ToastMsgDialog; @@ -23,6 +24,7 @@ import com.fr.serialization.SerializerHelper; import com.fr.stable.ArrayUtils; import com.fr.stable.StableUtils; import com.fr.third.apache.log4j.spi.LoggingEvent; +import com.fr.third.apache.logging.log4j.core.LogEvent; import com.fr.third.org.apache.http.client.config.RequestConfig; import com.fr.third.org.apache.http.client.methods.CloseableHttpResponse; import com.fr.third.org.apache.http.client.methods.HttpGet; @@ -148,7 +150,14 @@ public class DesignerSocketIO { public void call(Object... objects) { if (ArrayUtils.isNotEmpty(objects)) { try { - LoggingEvent event = SerializerHelper.deserialize((byte[]) objects[0]); + Object obj = SerializerHelper.deserialize((byte[]) objects[0]); + // 兼容下老版本服务器 + LogEvent event; + if (obj instanceof LoggingEvent) { + event = LogEventConverter.convert((LoggingEvent) obj); + } else { + event = (LogEvent) obj; + } DesignerLogger.log(event); } catch (Exception e) { FineLoggerFactory.getLogger().error(e.getMessage(), e); diff --git a/designer-realize/src/main/java/com/fr/start/module/DesignerActivator.java b/designer-realize/src/main/java/com/fr/start/module/DesignerActivator.java index 477ac8ae38..56b5785784 100644 --- a/designer-realize/src/main/java/com/fr/start/module/DesignerActivator.java +++ b/designer-realize/src/main/java/com/fr/start/module/DesignerActivator.java @@ -191,18 +191,20 @@ public class DesignerActivator extends Activator implements Prepare { private void loadLogAppender() { logHandler = new LogHandler() { - final DesignerLogAppender logAppender = new DesignerLogAppender(); + final DesignerLogAppender logAppender = DesignerLogAppender.createDesignerLogAppender(); @Override public DesignerLogAppender getHandler() { return logAppender; } }; + logHandler.getHandler().start(); FineLoggerFactory.getLogger().addLogAppender(logHandler); } private void unloadLogAppender() { if (logHandler != null) { + logHandler.getHandler().stop(); FineLoggerFactory.getLogger().removeLogAppender(logHandler); } } From 6c57ae3713ab5b5bb8c807d6b5e33adcb29b7988 Mon Sep 17 00:00:00 2001 From: shine Date: Wed, 8 Dec 2021 17:08:57 +0800 Subject: [PATCH 10/18] =?UTF-8?q?CHART-22213=20fix:=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E8=AD=A6=E6=88=92=E7=BA=BF=20=E9=BB=98=E8=AE=A4=E5=BA=94?= =?UTF-8?q?=E8=AF=A5=E6=98=AF9px12px=20=E4=B8=8D=E6=98=AF9px?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../chart/config/DefaultStyleConstants.java | 26 +++++------ .../chart/config/DefaultStyleHelper4Van.java | 45 ++++++++++++++----- 2 files changed, 43 insertions(+), 28 deletions(-) diff --git a/designer-chart/src/main/java/com/fr/van/chart/config/DefaultStyleConstants.java b/designer-chart/src/main/java/com/fr/van/chart/config/DefaultStyleConstants.java index 6d0de41cee..4cbba62906 100644 --- a/designer-chart/src/main/java/com/fr/van/chart/config/DefaultStyleConstants.java +++ b/designer-chart/src/main/java/com/fr/van/chart/config/DefaultStyleConstants.java @@ -18,35 +18,35 @@ import java.awt.Font; * Created by shine on 2021/6/25 */ public class DefaultStyleConstants { - static final FRFont TITLE = FRFont.getInstance(ChartBaseUtils.getLocalDefaultFont("Microsoft YaHei"), Font.BOLD, 14, new Color(241, 246, 255)); - static final FRFont LEGEND = FRFont.getInstance(ChartBaseUtils.getLocalDefaultFont("Microsoft YaHei"), Font.PLAIN, 9, new Color(159, 173, 191)); + static final FRFont TITLE = FRFont.getInstance(ChartBaseUtils.getLocalDefaultFont("Microsoft YaHei"), Font.BOLD, 19, new Color(241, 246, 255)); + static final FRFont LEGEND = FRFont.getInstance(ChartBaseUtils.getLocalDefaultFont("Microsoft YaHei"), Font.PLAIN, 12, new Color(159, 173, 191)); - static final FRFont AXIS_LABEL = FRFont.getInstance(ChartBaseUtils.getLocalDefaultFont("Microsoft YaHei"), Font.PLAIN, 9, new Color(159, 173, 191)); - static final FRFont AXIS_TITLE = FRFont.getInstance(ChartBaseUtils.getLocalDefaultFont("Microsoft YaHei"), Font.PLAIN, 9, new Color(200, 211, 228)); + static final FRFont AXIS_LABEL = FRFont.getInstance(ChartBaseUtils.getLocalDefaultFont("Microsoft YaHei"), Font.PLAIN, 12, new Color(159, 173, 191)); + static final FRFont AXIS_TITLE = FRFont.getInstance(ChartBaseUtils.getLocalDefaultFont("Microsoft YaHei"), Font.PLAIN, 12, new Color(200, 211, 228)); static final Color AXIS_LINE = new Color(46, 75, 102); static final Color GRID_LINE = new Color(30, 55, 78); - static final FRFont ALERT_FONT = FRFont.getInstance(ChartBaseUtils.getLocalDefaultFont("Microsoft YaHei"), Font.PLAIN, 9, new Color(255, 0, 0)); + static final FRFont ALERT_FONT = FRFont.getInstance(ChartBaseUtils.getLocalDefaultFont("Microsoft YaHei"), Font.PLAIN, 12, new Color(255, 0, 0)); - static final FRFont DATA_SHEET = FRFont.getInstance(ChartBaseUtils.getLocalDefaultFont("Microsoft YaHei"), Font.PLAIN, 9, new Color(159, 173, 191)); + static final FRFont DATA_SHEET = FRFont.getInstance(ChartBaseUtils.getLocalDefaultFont("Microsoft YaHei"), Font.PLAIN, 12, new Color(159, 173, 191)); static final Color DATA_SHEET_BORDER = new Color(46, 75, 102); static final Color BORDER = Color.BLACK; static final int BORDER_WIDTH = Constants.LINE_NONE; static final int SPECIAL_BORDER_WIDTH = Constants.LINE_THIN; - static final FRFont PIE_CATEGORY_LABEL = FRFont.getInstance(ChartBaseUtils.getLocalDefaultFont("Microsoft YaHei"), Font.PLAIN, 10, new Color(232, 232, 232)); + static final FRFont PIE_CATEGORY_LABEL = FRFont.getInstance(ChartBaseUtils.getLocalDefaultFont("Microsoft YaHei"), Font.PLAIN, 13, new Color(232, 232, 232)); static final Color GAUGE_PANE_BACK_COLOR = null; static final Color GAUGE_HINGE = null; static final Color GAUGE_PANE_BACK_COLOR_4_RING = new Color(72, 73, 79); static final Color GAUGE_SLOT_BACKGROUND_COLOR = new Color(72, 73, 79); private static final String FONT_NAME = ChartBaseUtils.getLocalDefaultFont("verdana"); - static final FRFont THERMOMETER_LABEL_FONT = FRFont.getInstance(FONT_NAME, Font.BOLD, 9, new Color(232, 232, 232));//试管仪表盘标签的默认样式 - static final FRFont THERMOMETER_AXIS_LABEL = FRFont.getInstance(FONT_NAME, Font.PLAIN, 8, new Color(159, 173, 191)); + static final FRFont THERMOMETER_LABEL_FONT = FRFont.getInstance(FONT_NAME, Font.BOLD, 12, new Color(232, 232, 232));//试管仪表盘标签的默认样式 + static final FRFont THERMOMETER_AXIS_LABEL = FRFont.getInstance(FONT_NAME, Font.PLAIN, 11, new Color(159, 173, 191)); static final FRFont RING_VALUE_LABEL_FONT = FRFont.getInstance(FONT_NAME, Font.PLAIN, ChartConstants.AUTO_FONT_SIZE, new Color(232, 232, 232));//百分比圆环仪表盘值标签的默认样式 static final FRFont POINTER_VALUE_LABEL_FONT = FRFont.getInstance(FONT_NAME, Font.PLAIN, ChartConstants.AUTO_FONT_SIZE, new Color(232, 232, 232));//多指针仪表盘值标签的默认样式 - static final FRFont POINTER_CATE_LABEL_FONT = FRFont.getInstance(FONT_NAME, Font.PLAIN, 10, new Color(232, 232, 232));//多指针仪表盘分类标签的默认样式 + static final FRFont POINTER_CATE_LABEL_FONT = FRFont.getInstance(FONT_NAME, Font.PLAIN, 13, new Color(232, 232, 232));//多指针仪表盘分类标签的默认样式 static final Color MAP_NULL_VALUE_COLOR = new Color(168, 168, 168); static final Color MAP_BORDER = Color.BLACK; @@ -56,12 +56,6 @@ public class DefaultStyleConstants { static final Color DRILL_MAP_DRILL_TOOLS_BACK = Color.BLACK; static final float DRILL_MAP_DRILL_TOOLS_BACK_OPACITY = 0.8f; - //todo vancharts - private static final Color GANTT_OUT_LINE = GRID_LINE; - private static final FRFont GANTT_LABEL = FRFont.getInstance(ChartBaseUtils.getLocalDefaultFont("Microsoft YaHei"), Font.PLAIN, 8, new Color(217, 217, 217)); - private static final Color GANTT_BORDER_LINE = new Color(30, 36, 58); - private static final Color GAUGE_TICK = new Color(39, 49, 71); - static final Background BACK = null; static String COLORS = null; diff --git a/designer-chart/src/main/java/com/fr/van/chart/config/DefaultStyleHelper4Van.java b/designer-chart/src/main/java/com/fr/van/chart/config/DefaultStyleHelper4Van.java index d6fc30bd5d..31694433ff 100644 --- a/designer-chart/src/main/java/com/fr/van/chart/config/DefaultStyleHelper4Van.java +++ b/designer-chart/src/main/java/com/fr/van/chart/config/DefaultStyleHelper4Van.java @@ -1,5 +1,7 @@ package com.fr.van.chart.config; +import com.fr.base.ChartColorMatching; +import com.fr.base.ChartPreStyleConfig; import com.fr.chart.base.AttrBorder; import com.fr.chart.base.AttrFillStyle; import com.fr.chart.base.ChartConstants; @@ -28,8 +30,17 @@ import com.fr.plugin.chart.type.GaugeStyle; */ public class DefaultStyleHelper4Van { + private static boolean duchampMode() { + try { + return ChartEditContext.duchampMode(); + } catch (Throwable e) { + //tomcat预览 默认数据的图表 + return true; + } + } + public static void dealVanPlot4Custom(VanChartPlot plot, CustomPlotType customPlotType) { - if (!ChartEditContext.duchampMode()) { + if (!duchampMode()) { return; } dealVanPlotCommonAttr(plot); @@ -60,7 +71,7 @@ public class DefaultStyleHelper4Van { } public static VanChartAxis dealAxisDefault(VanChartAxis axis) { - if (!ChartEditContext.duchampMode()) { + if (!duchampMode()) { return axis; } axis.getTitle().getTextAttr().setFRFont(DefaultStyleConstants.AXIS_TITLE); @@ -71,28 +82,38 @@ public class DefaultStyleHelper4Van { } public static void dealAxisAlert(VanChartAlertValue vanChartAlertValue) { - if (!ChartEditContext.duchampMode()) { + if (!duchampMode()) { return; } vanChartAlertValue.setAlertFont(DefaultStyleConstants.ALERT_FONT); } static void dealVanPlotCommonAttr(Plot plot) { - if (!ChartEditContext.duchampMode()) { + if (!duchampMode()) { return; } if (plot instanceof VanChartPlot) { VanChartPlot vanChartPlot = (VanChartPlot) plot; - ColorFillStyle colorFillStyle = new ColorFillStyle(); - colorFillStyle.setColorStyle(ChartConstants.COLOR_ACC); - colorFillStyle.setFillStyleName(DefaultStyleConstants.COLORS); - AttrFillStyle plotFillStyle = vanChartPlot.getPlotFillStyle(); - if (plotFillStyle == null) { - plotFillStyle = new AttrFillStyle(); - vanChartPlot.setPlotFillStyle(plotFillStyle); + ChartPreStyleConfig manager = ChartPreStyleConfig.getInstance(); + Object preStyle = manager.getPreStyle(DefaultStyleConstants.COLORS); + if (preStyle instanceof ChartColorMatching) { + ColorFillStyle colorFillStyle = new ColorFillStyle(); + //default是默认的意思,为服务器默认配色方案 + //acc为多个颜色组合 + //gradient为渐变颜色 + colorFillStyle.setColorStyle(ChartConstants.COLOR_ACC); + colorFillStyle.setFillStyleName(DefaultStyleConstants.COLORS); + colorFillStyle.setColorList(((ChartColorMatching) preStyle).getColorList()); + + AttrFillStyle plotFillStyle = vanChartPlot.getPlotFillStyle(); + if (plotFillStyle == null) { + plotFillStyle = new AttrFillStyle(); + vanChartPlot.setPlotFillStyle(plotFillStyle); + } + plotFillStyle.setColorFillStyle(colorFillStyle); } - plotFillStyle.setColorFillStyle(colorFillStyle); + if (vanChartPlot.getLegend() != null) { vanChartPlot.getLegend().setFRFont(DefaultStyleConstants.LEGEND); From 47409dd6900278633202c201fa89e67061dd2d3d Mon Sep 17 00:00:00 2001 From: Starryi Date: Fri, 10 Dec 2021 15:16:48 +0800 Subject: [PATCH 11/18] =?UTF-8?q?REPORT-64079=20=E3=80=90=E4=B8=BB?= =?UTF-8?q?=E9=A2=98=E8=BE=B9=E6=A1=86=E3=80=91=E6=82=AC=E6=B5=AE=E5=85=83?= =?UTF-8?q?=E7=B4=A0=E7=9A=84=E6=A0=B7=E5=BC=8F=E6=95=88=E6=9E=9C=E8=B7=9F?= =?UTF-8?q?=E4=BA=A4=E4=BA=92=E7=A8=BF=E4=B8=8D=E4=B8=80=E8=87=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 【问题原因】 悬浮元素本身不支持内边框,所以重新确定了下悬浮元素主题 单元格样式预览效果实现 【改动思路】 同上 --- .../cell/CellRectangleStylePreviewPane.java | 30 ++++++++------- .../theme/ThemedCellStyleListPane.java | 38 ++----------------- .../theme/edit/cell/CellStyleEditPane.java | 2 +- .../settingpane/style/NameStyleListPane.java | 7 +--- .../com/fr/design/report/ReportStylePane.java | 2 +- 5 files changed, 25 insertions(+), 54 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/cell/CellRectangleStylePreviewPane.java b/designer-base/src/main/java/com/fr/design/cell/CellRectangleStylePreviewPane.java index da80b6c6e2..2ca96616fb 100644 --- a/designer-base/src/main/java/com/fr/design/cell/CellRectangleStylePreviewPane.java +++ b/designer-base/src/main/java/com/fr/design/cell/CellRectangleStylePreviewPane.java @@ -23,27 +23,31 @@ public class CellRectangleStylePreviewPane extends JPanel { private final int[][] borderSourceFlags = new int[ROW_COUNT][COLUMN_COUNT]; private final CellStylePreviewPane[][] cellStylePreviewPaneGrid = new CellStylePreviewPane[ROW_COUNT][COLUMN_COUNT]; - public CellRectangleStylePreviewPane() { + public CellRectangleStylePreviewPane(boolean supportInnerBorder) { setLayout(new GridLayout(2, 2)); for (int r = 0; r < ROW_COUNT; r++) { for (int c = 0; c < COLUMN_COUNT; c++) { CellStylePreviewPane pane = new CellStylePreviewPane(); TemplateCellElement cellElement = DefaultThemedTemplateCellElementCase.createInstance(c, r); - int flags = CellBorderSourceFlag.ALL_BORDER_SOURCE_OUTER; - if (r != 0) { - flags |= CellBorderSourceFlag.TOP_BORDER_SOURCE_INNER; - } - if (r != ROW_COUNT - 1) { - flags |= CellBorderSourceFlag.BOTTOM_BORDER_SOURCE_INNER; - } - if (c != 0) { - flags |= CellBorderSourceFlag.LEFT_BORDER_SOURCE_INNER; - } - if (c != COLUMN_COUNT - 1) { - flags |= CellBorderSourceFlag.RIGHT_BORDER_SOURCE_INNER; + int flags = CellBorderSourceFlag.INVALID_BORDER_SOURCE; + if (supportInnerBorder) { + flags = CellBorderSourceFlag.ALL_BORDER_SOURCE_OUTER; + if (r != 0) { + flags |= CellBorderSourceFlag.TOP_BORDER_SOURCE_INNER; + } + if (r != ROW_COUNT - 1) { + flags |= CellBorderSourceFlag.BOTTOM_BORDER_SOURCE_INNER; + } + if (c != 0) { + flags |= CellBorderSourceFlag.LEFT_BORDER_SOURCE_INNER; + } + if (c != COLUMN_COUNT - 1) { + flags |= CellBorderSourceFlag.RIGHT_BORDER_SOURCE_INNER; + } } + pane.setStyle(cellElement.getStyle()); add(pane); diff --git a/designer-base/src/main/java/com/fr/design/mainframe/theme/ThemedCellStyleListPane.java b/designer-base/src/main/java/com/fr/design/mainframe/theme/ThemedCellStyleListPane.java index 53838d1c7f..bcb160e1f2 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/theme/ThemedCellStyleListPane.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/theme/ThemedCellStyleListPane.java @@ -4,7 +4,6 @@ import com.fr.base.theme.TemplateTheme; import com.fr.base.theme.settings.ThemedCellStyle; import com.fr.design.beans.FurtherBasicBeanPane; import com.fr.design.cell.CellRectangleStylePreviewPane; -import com.fr.design.cell.CellStylePreviewPane; import com.fr.design.file.HistoryTemplateListCache; import com.fr.design.gui.ibutton.UIRadioButton; import com.fr.design.i18n.Toolkit; @@ -36,14 +35,10 @@ public class ThemedCellStyleListPane extends FurtherBasicBeanPane styleList; private ChangeListener changeListener; - public ThemedCellStyleListPane() { - this(false); - } - - public ThemedCellStyleListPane(boolean supportCellRange) { + public ThemedCellStyleListPane(boolean supportInnerBorder) { defaultListModel = new DefaultListModel<>(); styleList = new JList<>(defaultListModel); - styleList.setCellRenderer(supportCellRange ? new RadioButtonListCellRangeRenderer() : new RadioButtonListCellRenderer()); + styleList.setCellRenderer(new RadioButtonListCellRangeRenderer(supportInnerBorder)); styleList.setOpaque(false); styleList.setBackground(null); styleList.addListSelectionListener(new ListSelectionListener() { @@ -115,44 +110,19 @@ public class ThemedCellStyleListPane extends FurtherBasicBeanPane, Serializable { - - private final UIRadioButton button; - private final CellStylePreviewPane previewArea; - - public RadioButtonListCellRenderer() { - super(); - setLayout(new BorderLayout(20, 0)); - setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5)); - setPreferredSize(new Dimension(getPreferredSize().width, 40)); - button = new UIRadioButton(); - previewArea = new CellStylePreviewPane(); - add(button, BorderLayout.WEST); - add(previewArea, BorderLayout.CENTER); - } - - @Override - public Component getListCellRendererComponent(JList list, ThemedCellStyle value, int index, boolean isSelected, boolean cellHasFocus) { - button.setSelected(isSelected); - previewArea.setPaintText(value.getName()); - previewArea.setStyle(value.getStyle()); - return this; - } - } - private static class RadioButtonListCellRangeRenderer extends JPanel implements ListCellRenderer, Serializable { private final UIRadioButton button; private final CellRectangleStylePreviewPane previewArea; - public RadioButtonListCellRangeRenderer() { + public RadioButtonListCellRangeRenderer(boolean supportInnerBorder) { super(); setLayout(new BorderLayout(5, 0)); setBorder(BorderFactory.createEmptyBorder(5, 0, 5, 0)); setPreferredSize(new Dimension(getPreferredSize().width, 80)); button = new UIRadioButton(); button.setBorder(BorderFactory.createEmptyBorder()); - previewArea = new CellRectangleStylePreviewPane(); + previewArea = new CellRectangleStylePreviewPane(supportInnerBorder); add(button, BorderLayout.WEST); add(previewArea, BorderLayout.CENTER); } diff --git a/designer-base/src/main/java/com/fr/design/mainframe/theme/edit/cell/CellStyleEditPane.java b/designer-base/src/main/java/com/fr/design/mainframe/theme/edit/cell/CellStyleEditPane.java index 39e4394b8d..c3ba368a31 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/theme/edit/cell/CellStyleEditPane.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/theme/edit/cell/CellStyleEditPane.java @@ -116,7 +116,7 @@ public class CellStyleEditPane extends MultiTabPane { jPanel.setLayout(new BorderLayout(0, 4)); JPanel previewPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); - previewArea = new CellRectangleStylePreviewPane(); + previewArea = new CellRectangleStylePreviewPane(true); previewArea.setPreferredSize(new Dimension(223, 60)); previewPane.setBorder(BorderUtils.createTitleBorder(i18nText("Fine-Design_Basic_Preview"))); previewPane.add(previewArea, BorderLayout.CENTER); diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/cell/settingpane/style/NameStyleListPane.java b/designer-realize/src/main/java/com/fr/design/mainframe/cell/settingpane/style/NameStyleListPane.java index 3e4b3ac716..0863927994 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/cell/settingpane/style/NameStyleListPane.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/cell/settingpane/style/NameStyleListPane.java @@ -16,11 +16,8 @@ import com.fr.design.mainframe.theme.ThemedCellStyleListPane; */ public class NameStyleListPane extends ThemedCellStyleListPane { - public NameStyleListPane() { - } - - public NameStyleListPane(boolean supportCellRange) { - super(supportCellRange); + public NameStyleListPane(boolean supportInnerBorder) { + super(supportInnerBorder); } public void populateNameStyle(NameStyle style) { diff --git a/designer-realize/src/main/java/com/fr/design/report/ReportStylePane.java b/designer-realize/src/main/java/com/fr/design/report/ReportStylePane.java index a8ebc1c080..ec0f06339b 100644 --- a/designer-realize/src/main/java/com/fr/design/report/ReportStylePane.java +++ b/designer-realize/src/main/java/com/fr/design/report/ReportStylePane.java @@ -541,7 +541,7 @@ public class ReportStylePane extends BasicPane { UITabbedPane mainTabbedPane = new UITabbedPane(); setLayout(FRGUIPaneFactory.createBorderLayout()); - nameStyleListPane = new NameStyleListPane(); + nameStyleListPane = new NameStyleListPane(false); nameStyleListPane.setBorder(BorderFactory.createEmptyBorder()); UIScrollPane scrollPane = new UIScrollPane(nameStyleListPane); scrollPane.setBorder(BorderFactory.createEmptyBorder(10, 5, 5, 0)); From 77ba71a7be6404f60122114043416b1c89c2420a Mon Sep 17 00:00:00 2001 From: Starryi Date: Fri, 10 Dec 2021 15:37:37 +0800 Subject: [PATCH 12/18] =?UTF-8?q?REPORT-64112=20=E3=80=90=E6=A8=A1?= =?UTF-8?q?=E6=9D=BF=E4=B8=BB=E9=A2=98=E3=80=91=E6=82=AC=E6=B5=AE=E5=85=83?= =?UTF-8?q?=E7=B4=A0=E6=A0=B7=E5=BC=8F=E5=88=87=E6=8D=A2=EF=BC=8C=E4=B8=8A?= =?UTF-8?q?=E6=96=B9=E7=9A=84=E9=A2=84=E8=A7=88=E5=9B=BE=E6=B2=A1=E6=9C=89?= =?UTF-8?q?=E5=8D=B3=E6=97=B6=E7=94=9F=E6=95=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 【问题原因】 没有给NameStyleListPane注册监听器, 导致选中项改变后未能触发预览面板变化 【改动思路】 同上 --- .../src/main/java/com/fr/design/report/ReportStylePane.java | 1 + 1 file changed, 1 insertion(+) diff --git a/designer-realize/src/main/java/com/fr/design/report/ReportStylePane.java b/designer-realize/src/main/java/com/fr/design/report/ReportStylePane.java index ec0f06339b..49df4b41fb 100644 --- a/designer-realize/src/main/java/com/fr/design/report/ReportStylePane.java +++ b/designer-realize/src/main/java/com/fr/design/report/ReportStylePane.java @@ -542,6 +542,7 @@ public class ReportStylePane extends BasicPane { setLayout(FRGUIPaneFactory.createBorderLayout()); nameStyleListPane = new NameStyleListPane(false); + nameStyleListPane.addChangeListener(this); nameStyleListPane.setBorder(BorderFactory.createEmptyBorder()); UIScrollPane scrollPane = new UIScrollPane(nameStyleListPane); scrollPane.setBorder(BorderFactory.createEmptyBorder(10, 5, 5, 0)); From b6d38f7f2eab0689ddcca04ad722bfc40841574c Mon Sep 17 00:00:00 2001 From: Yvan Date: Fri, 10 Dec 2021 16:05:46 +0800 Subject: [PATCH 13/18] =?UTF-8?q?KERNEL-9860=20=E6=8F=92=E4=BB=B6=E4=BF=AE?= =?UTF-8?q?=E6=94=B9xml=E4=B8=ADactive=E6=A0=87=E7=AD=BE=E9=80=BB=E8=BE=91?= =?UTF-8?q?=E9=87=8D=E6=9E=84=20=E8=B7=9Fvito=E8=AE=A8=E8=AE=BA=E4=BA=86?= =?UTF-8?q?=E4=B8=8B=EF=BC=8C=E5=86=B3=E5=AE=9A=E6=A8=A1=E6=9D=BF=E6=8A=A5?= =?UTF-8?q?=E9=94=99=E7=9A=84=E4=B8=80=E9=94=AE=E5=A4=84=E7=90=86=E8=BF=99?= =?UTF-8?q?=E5=84=BF=EF=BC=8C=E4=B9=9F=E6=98=AF=E9=9C=80=E8=A6=81=E4=BF=AE?= =?UTF-8?q?=E6=94=B9xml=E7=9A=84=EF=BC=8C=E5=9B=A0=E4=B8=BA=E4=B9=9F?= =?UTF-8?q?=E6=98=AF=E7=94=A8=E6=88=B7=E8=87=AA=E5=B7=B1=E7=82=B9=E7=9A=84?= =?UTF-8?q?=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/fr/design/mainframe/app/DesignerAppUtils.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/app/DesignerAppUtils.java b/designer-realize/src/main/java/com/fr/design/mainframe/app/DesignerAppUtils.java index 218ee4728a..0075ae0765 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/app/DesignerAppUtils.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/app/DesignerAppUtils.java @@ -220,7 +220,7 @@ public class DesignerAppUtils { Multimap stringPluginMarkerAdapterMultimap = popPluginInfoMap(key); Collection disablePlugins = stringPluginMarkerAdapterMultimap.get(TemplateIOErrorContextHolder.DISABLE_PLUGIN); for (PluginMarkerAdapter disablePlugin : disablePlugins) { - PluginManager.getController().enable(disablePlugin, new ModifyStatusCallback(false)); + PluginManager.getController().enablePersistently(disablePlugin, new ModifyStatusCallback(false)); } Collection uninstallPlugins = stringPluginMarkerAdapterMultimap.get(TemplateIOErrorContextHolder.NOT_INSTALLED_PLUGIN); From 4319065b6207193abdb6c0beb41e05442ecb7629 Mon Sep 17 00:00:00 2001 From: hades Date: Fri, 10 Dec 2021 17:32:41 +0800 Subject: [PATCH 14/18] =?UTF-8?q?=E6=97=A0jira=20=E5=8E=BB=E6=8E=89?= =?UTF-8?q?=E6=97=A0=E7=94=A8=20import?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/fr/design/mainframe/socketio/IOSocketConfig.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/socketio/IOSocketConfig.java b/designer-realize/src/main/java/com/fr/design/mainframe/socketio/IOSocketConfig.java index 46727ffb42..aa7106298e 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/socketio/IOSocketConfig.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/socketio/IOSocketConfig.java @@ -3,8 +3,6 @@ package com.fr.design.mainframe.socketio; import com.fr.web.WebSocketConfig; import com.fr.web.socketio.WebSocketProtocol; import io.socket.client.IO; -import io.socket.engineio.client.transports.Polling; -import io.socket.engineio.client.transports.WebSocket; import java.net.URL; /** From 1b66571feb613f605467f6e734062ddf5288b588 Mon Sep 17 00:00:00 2001 From: "Henry.Wang" Date: Sun, 12 Dec 2021 15:29:47 +0800 Subject: [PATCH 15/18] =?UTF-8?q?REPORT-62440=20=E8=A1=A8=E5=A4=B4?= =?UTF-8?q?=E6=8E=92=E5=BA=8F=E5=86=85=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../design/event/ComponentChangeListener.java | 7 + .../design/event/ComponentChangeObserver.java | 6 + .../gui/frpane/AbstractAttrNoScrollPane.java | 11 + .../cell/AbstractDSCellEditorPane.java | 109 +-------- .../CellDSColumnSortItemPane.java | 10 - .../celldscolumn/CellDSColumnSortPane.java | 4 + .../cellexpand/CellExpandSortItemPane.java | 11 - .../sort/cellexpand/CellExpandSortPane.java | 23 +- .../sort/common/AbstractSortGroupPane.java | 128 +++++----- .../sort/common/AbstractSortItemPane.java | 12 - .../design/sort/common/AbstractSortPane.java | 18 -- .../design/sort/common/SortColumnRowPane.java | 31 ++- .../sort/common/SortUIExpandablePane.java | 5 +- .../CustomSequenceSortExpressionPane.java | 2 + .../FormulaSortExpressionPane.java | 1 - .../fr/design/sort/header/HeaderAreaPane.java | 22 -- .../design/sort/header/HeaderSettingPane.java | 10 - .../sort/header/HeaderSortRulePane.java | 33 +-- .../fr/design/sort/header/SortHeaderPane.java | 11 - .../cellquick/CellDSColumnEditor.java | 223 ++++-------------- 20 files changed, 180 insertions(+), 497 deletions(-) create mode 100644 designer-base/src/main/java/com/fr/design/event/ComponentChangeListener.java create mode 100644 designer-base/src/main/java/com/fr/design/event/ComponentChangeObserver.java diff --git a/designer-base/src/main/java/com/fr/design/event/ComponentChangeListener.java b/designer-base/src/main/java/com/fr/design/event/ComponentChangeListener.java new file mode 100644 index 0000000000..c4087ef112 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/event/ComponentChangeListener.java @@ -0,0 +1,7 @@ +package com.fr.design.event; + +import java.awt.*; + +public interface ComponentChangeListener { + void initListener(Container parentComponent); +} diff --git a/designer-base/src/main/java/com/fr/design/event/ComponentChangeObserver.java b/designer-base/src/main/java/com/fr/design/event/ComponentChangeObserver.java new file mode 100644 index 0000000000..9ef75d514a --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/event/ComponentChangeObserver.java @@ -0,0 +1,6 @@ +package com.fr.design.event; + + +public interface ComponentChangeObserver { + void registerChangeListener(ComponentChangeListener uiChangeableListener); +} diff --git a/designer-base/src/main/java/com/fr/design/gui/frpane/AbstractAttrNoScrollPane.java b/designer-base/src/main/java/com/fr/design/gui/frpane/AbstractAttrNoScrollPane.java index ce09568d6b..0465702965 100644 --- a/designer-base/src/main/java/com/fr/design/gui/frpane/AbstractAttrNoScrollPane.java +++ b/designer-base/src/main/java/com/fr/design/gui/frpane/AbstractAttrNoScrollPane.java @@ -3,6 +3,8 @@ package com.fr.design.gui.frpane; import com.fr.design.dialog.BasicPane; import com.fr.design.event.GlobalNameListener; import com.fr.design.event.GlobalNameObserver; +import com.fr.design.event.ComponentChangeListener; +import com.fr.design.event.ComponentChangeObserver; import com.fr.design.event.UIObserver; import com.fr.design.event.UIObserverListener; import com.fr.stable.StringUtils; @@ -106,6 +108,15 @@ public abstract class AbstractAttrNoScrollPane extends BasicPane { } }); } + if(tmpComp instanceof ComponentChangeObserver){ + ComponentChangeObserver uiChangeableObserver = ((ComponentChangeObserver)tmpComp); + uiChangeableObserver.registerChangeListener(new ComponentChangeListener() { + @Override + public void initListener(Container parentComponent) { + AbstractAttrNoScrollPane.this.initListener(parentComponent); + } + }); + } } } 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 8a3b2ded4d..86b93a210d 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,17 +1,7 @@ package com.fr.design.mainframe.cell; -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; +import com.fr.design.gui.frpane.AttributeChangeListener; +import com.fr.design.mainframe.AbstractAttrPane; /** * 右侧单元格元素面板抽象类 @@ -20,26 +10,8 @@ import java.awt.event.MouseWheelListener; * @version 2017年7月25日 * @since 9.0 */ -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; +public abstract class AbstractDSCellEditorPane extends AbstractAttrPane { - protected abstract JPanel createContentPane(); - - public abstract String getIconPath(); - - public abstract String title4PopupWindow(); /** * 从面板拿数据保存 @@ -51,78 +23,15 @@ public abstract class AbstractDSCellEditorPane extends JPanel { */ public abstract void populate(); - protected void createScrollPane() { - leftContentPane = this.createContentPane(); - this.prepareScrollBar(); - leftContentPane.setBorder(BorderFactory.createMatteBorder(10, 10, 0, 0, this.getBackground())); - - 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); - } - - - 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() { - - @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(); + + protected abstract AttributeChangeListener getAttributeChangeListener(); + + public void addAttributeChangeListener(){ + this.addAttributeChangeListener(getAttributeChangeListener()); + } } diff --git a/designer-realize/src/main/java/com/fr/design/sort/celldscolumn/CellDSColumnSortItemPane.java b/designer-realize/src/main/java/com/fr/design/sort/celldscolumn/CellDSColumnSortItemPane.java index cd7b33ee02..044d284a7f 100644 --- a/designer-realize/src/main/java/com/fr/design/sort/celldscolumn/CellDSColumnSortItemPane.java +++ b/designer-realize/src/main/java/com/fr/design/sort/celldscolumn/CellDSColumnSortItemPane.java @@ -1,6 +1,5 @@ package com.fr.design.sort.celldscolumn; -import com.fr.design.event.UIObserverListener; import com.fr.design.gui.icombobox.UIComboBox; import com.fr.design.sort.common.AbstractSortItemPane; import com.fr.design.sort.common.AbstractSortPane; @@ -38,13 +37,4 @@ public class CellDSColumnSortItemPane extends AbstractSortItemPane { return sortExpression; } - public void addListener(UIObserverListener uiObserverListener) { - super.addListener(uiObserverListener); - sortAreaUiComboBox.registerChangeListener(uiObserverListener); - } - - public void removeListener(UIObserverListener uiObserverListener) { - super.removeListener(uiObserverListener); - sortAreaUiComboBox.removeChangeListener(); - } } \ 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 index c215ab1507..aec9c0bccf 100644 --- 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 @@ -1,16 +1,20 @@ 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 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 index 12be4ec20d..4b14dc6929 100644 --- 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 @@ -1,6 +1,5 @@ package com.fr.design.sort.cellexpand; -import com.fr.design.event.UIObserverListener; import com.fr.design.sort.common.AbstractSortPane; import com.fr.design.sort.common.SortColumnRowPane; import com.fr.design.sort.common.AbstractSortItemPane; @@ -35,14 +34,4 @@ public class CellExpandSortItemPane extends AbstractSortItemPane { } return sortExpression; } - - public void addListener(UIObserverListener uiObserverListener) { - super.addListener(uiObserverListener); - columnRowPane.addListener(uiObserverListener); - } - - public void removeListener(UIObserverListener uiObserverListener) { - super.removeListener(uiObserverListener); - columnRowPane.removeListener(uiObserverListener); - } } 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 index e230d319dd..5bfc20eeae 100644 --- 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 @@ -1,22 +1,14 @@ package com.fr.design.sort.cellexpand; -import com.fr.design.event.UIObserverListener; -import com.fr.design.gui.frpane.AttributeChangeListener; + 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.cell.cellattr.core.group.DSColumn; import com.fr.report.core.sort.common.CellSortAttr; -import com.fr.report.core.sort.sortexpression.FormulaSortExpression; -import com.fr.report.core.sort.sortexpression.SortExpression; -import com.fr.report.core.sort.header.SortHeader; -import com.fr.report.core.sort.common.SortRule; import javax.swing.*; -import java.util.ArrayList; -import java.util.List; public class CellExpandSortPane extends AbstractSortPane { CellExpandAttrPane cellExpandAttrPane; @@ -33,19 +25,6 @@ public class CellExpandSortPane extends AbstractSortPane { this.add(sortGroupPane); } - @Override - protected void initUIObserverListener() { - uiObserverListener = new UIObserverListener() { - @Override - public void doChange() { - AttributeChangeListener attributeChangeListener = cellExpandAttrPane.getListener(); - if (attributeChangeListener != null) { - attributeChangeListener.attributeChange(); - } - } - }; - } - @Override protected CellSortAttr getCellSortAttr(TemplateCellElement cellElement) { CellExpandAttr cellExpandAttr = cellElement.getCellExpandAttr(); 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 index ed1fde2420..85cd58ec94 100644 --- 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 @@ -1,7 +1,8 @@ package com.fr.design.sort.common; import com.fr.base.svg.IconUtils; -import com.fr.design.event.UIObserverListener; +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; @@ -9,98 +10,114 @@ import com.fr.report.core.sort.sortexpression.SortExpression; import javax.swing.*; import java.awt.*; -import java.awt.event.MouseAdapter; -import java.awt.event.MouseEvent; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; import java.util.ArrayList; import java.util.List; -public abstract class AbstractSortGroupPane extends JPanel { +public abstract class AbstractSortGroupPane extends JPanel implements ComponentChangeObserver { protected int sortGroupPaneWidth; protected int sortGroupPaneRightWidth; - UIObserverListener uiObserverListener; List sortExpressions; - List sortItemPanes = new ArrayList<>(); + 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; - refreshBean(); - } - - public void refreshBean() { - removeListener(uiObserverListener); - this.removeAll(); - sortItemPanes = new ArrayList<>(); + this.sortItemPanes = new ArrayList<>(); for (int i = 0; i < sortExpressions.size(); i++) { - int sortItemPaneWidth = sortGroupPaneWidth; - int sortItemPaneRightWidth = sortGroupPaneRightWidth; - if (i != 0) { - sortItemPaneWidth -= 12; - sortItemPaneRightWidth -= 12; - } - AbstractSortItemPane sortItemPane = refreshSortItemPane(sortItemPaneWidth, sortItemPaneRightWidth, sortExpressions.get(i)); - sortItemPanes.add(sortItemPane); - if (i == 0) { - this.add(sortItemPane); - } else { - SortUIExpandablePane sortUIExpandablePane = new SortUIExpandablePane(sortItemPane, this); - this.add(sortUIExpandablePane); - } + addSortItem(sortExpressions.get(i), i == 0); } - initComponents(); - addListener(uiObserverListener); refresh(); } protected abstract AbstractSortItemPane refreshSortItemPane(int sortItemPaneWidth, int sortItemPaneRightWidth, SortExpression sortExpression); public List updateBean() { - updateSortExpressions(); - return sortExpressions; - } - - private void updateSortExpressions() { - sortExpressions = new ArrayList<>(); - for (AbstractSortItemPane sortItemPane : sortItemPanes) { - SortExpression sortExpression = sortItemPane.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) { - updateSortExpressions(); if (no < sortExpressions.size()) { + sortItemListPane.remove(sortItemPanes.get(no)); sortExpressions.remove(no); + sortItemPanes.remove(no); + refresh(); } - refreshBean(); } - public void addSortItem() { - updateSortExpressions(); - sortExpressions.add(new CellSortExpression(selfSortArea)); - refreshBean(); + public void registerChangeListener(ComponentChangeListener componentChangeListener) { + this.componentChangeListener = componentChangeListener; } + public void addSortItem(SortExpression sortExpression, boolean mainSort) { + int sortItemPaneWidth = sortGroupPaneWidth; + int sortItemPaneRightWidth = sortGroupPaneRightWidth; + if (!mainSort) { + sortItemPaneWidth -= 12; + sortItemPaneRightWidth -= 12; + } + 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(); @@ -121,28 +138,11 @@ public abstract class AbstractSortGroupPane extends JPanel { IconUtils.readIcon("/com/fr/design/images/sort/add.png")); uiButton.setPreferredSize(new Dimension(sortGroupPaneWidth - 4, 20)); this.add(uiButton); - uiButton.addMouseListener(new MouseAdapter() { - @Override - public void mouseClicked(MouseEvent e) { - sortGroupPane.addSortItem(); - uiObserverListener.doChange(); + uiButton.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + sortGroupPane.addSortItem(null, false); } }); } } - - - public void addListener(UIObserverListener uiObserverListener) { - this.uiObserverListener = uiObserverListener; - for (AbstractSortItemPane abstractSortItemPane : sortItemPanes) { - abstractSortItemPane.addListener(uiObserverListener); - } - } - - public void removeListener(UIObserverListener uiObserverListener) { - for (AbstractSortItemPane abstractSortItemPane : sortItemPanes) { - abstractSortItemPane.removeListener(uiObserverListener); - } - } - } 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 index 0e58985528..82d14bb7ec 100644 --- 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 @@ -1,6 +1,5 @@ package com.fr.design.sort.common; -import com.fr.design.event.UIObserverListener; import com.fr.design.gui.icombobox.UIComboBox; import com.fr.design.gui.ilable.UILabel; @@ -146,17 +145,6 @@ public abstract class AbstractSortItemPane extends JPanel { return sortExpression; } - public void addListener(UIObserverListener uiObserverListener) { - sortBasisUiComboBox.registerChangeListener(uiObserverListener); - sortRuleUiComboBox.registerChangeListener(uiObserverListener); - } - - - public void removeListener(UIObserverListener uiObserverListener) { - sortBasisUiComboBox.removeChangeListener(); - sortRuleUiComboBox.removeChangeListener(); - } - protected void refresh() { validate(); repaint(); 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 index 24e1f6bac8..7dd539361a 100644 --- 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 @@ -1,6 +1,5 @@ package com.fr.design.sort.common; -import com.fr.design.event.UIObserverListener; import com.fr.design.gui.ilable.UILabel; import com.fr.design.sort.header.SortHeaderPane; import com.fr.report.cell.TemplateCellElement; @@ -22,7 +21,6 @@ public abstract class AbstractSortPane extends JPanel { 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 UIObserverListener uiObserverListener; protected AbstractSortGroupPane sortGroupPane; protected SortHeaderPane sortHeaderPane; protected String selfSortArea; @@ -31,7 +29,6 @@ public abstract class AbstractSortPane extends JPanel { public AbstractSortPane(int sortPaneWidth, int sortPaneRightWidth) { this.sortPaneWidth = sortPaneWidth; this.sortPaneRightWidth = sortPaneRightWidth; - initUIObserverListener(); initComponents(); } @@ -43,8 +40,6 @@ public abstract class AbstractSortPane extends JPanel { protected abstract void initSortGroupPane(); - protected void initUIObserverListener() { - } protected abstract CellSortAttr getCellSortAttr(TemplateCellElement cellElement); @@ -65,7 +60,6 @@ public abstract class AbstractSortPane extends JPanel { sortHeader = cellSortAttr.getSortHeader(); } sortHeaderPane.populateBean(sortHeader, defaultHeaderArea); - addListener(uiObserverListener); refresh(); } @@ -91,18 +85,6 @@ public abstract class AbstractSortPane extends JPanel { cellSortAttr.setSortHeader(sortHeader); } - - public void addListener(UIObserverListener uiObserverListener) { - sortGroupPane.addListener(uiObserverListener); - sortHeaderPane.addListener(uiObserverListener); - } - - - public void removeListener(UIObserverListener uiObserverListener) { - sortGroupPane.removeListener(uiObserverListener); - sortHeaderPane.removeListener(uiObserverListener); - } - protected void refresh() { validate(); repaint(); diff --git a/designer-realize/src/main/java/com/fr/design/sort/common/SortColumnRowPane.java b/designer-realize/src/main/java/com/fr/design/sort/common/SortColumnRowPane.java index 814651063b..e8371b3e1b 100644 --- a/designer-realize/src/main/java/com/fr/design/sort/common/SortColumnRowPane.java +++ b/designer-realize/src/main/java/com/fr/design/sort/common/SortColumnRowPane.java @@ -2,6 +2,7 @@ package com.fr.design.sort.common; 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; @@ -21,7 +22,7 @@ import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; -public class SortColumnRowPane extends JPanel { +public class SortColumnRowPane extends JPanel implements UIObserver { int paneWidth; int paneHeight; int jTextFieldWidth; @@ -89,6 +90,11 @@ public class SortColumnRowPane extends JPanel { 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()); @@ -96,6 +102,16 @@ public class SortColumnRowPane extends JPanel { return null; } + @Override + public void registerChangeListener(UIObserverListener listener) { + this.uiObserverListener = listener; + } + + @Override + public boolean shouldResponseChangeListener() { + return true; + } + class SelectActionListener implements ActionListener { SortColumnRowPane columnRowPane; @@ -122,10 +138,7 @@ public class SortColumnRowPane extends JPanel { CellSelection cellselection = (CellSelection) selection; ColumnRow cr = ColumnRow.valueOf(cellselection.getColumn(), cellselection.getRow()); elementCasePane.setOldSelecton(oldSelection); - columnRowPane.populateBean(cr); - if (columnRowPane.uiObserverListener != null) { - columnRowPane.uiObserverListener.doChange(); - } + columnRowPane.setColumnRow(cr); } elementCasePane.removeSelectionChangeListener(gridSelectionChangeListener); isAlreadyAddListener = false; @@ -152,14 +165,6 @@ public class SortColumnRowPane extends JPanel { return null; } - public void addListener(UIObserverListener uiObserverListener) { - this.uiObserverListener = uiObserverListener; - } - - public void removeListener(UIObserverListener uiObserverListener) { - this.uiObserverListener = null; - } - protected void refresh() { validate(); repaint(); diff --git a/designer-realize/src/main/java/com/fr/design/sort/common/SortUIExpandablePane.java b/designer-realize/src/main/java/com/fr/design/sort/common/SortUIExpandablePane.java index 88e61a4e34..c5537ff533 100644 --- a/designer-realize/src/main/java/com/fr/design/sort/common/SortUIExpandablePane.java +++ b/designer-realize/src/main/java/com/fr/design/sort/common/SortUIExpandablePane.java @@ -48,12 +48,12 @@ public class SortUIExpandablePane extends JPanel { contentPane.setBorder(BorderFactory.createEmptyBorder(0, 5, 0, 5)); wrapPane.add(headerPane, BorderLayout.NORTH); wrapPane.add(contentPane, BorderLayout.CENTER); - setContentPanelShow(false); + setContentPanelShow(true); this.add(wrapPane); } - private void setContentPanelShow(boolean show) { + private void setContentPanelShow(Boolean show) { contentPane.setVisible(show); headerPane.setShow(show); } @@ -67,7 +67,6 @@ public class SortUIExpandablePane extends JPanel { this.sortGroupPane = sortGroupPane; this.setLayout(new FlowLayout(FlowLayout.LEFT, 3, 3)); initComponents(); - } private void initComponents() { 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 index 56ccfc511b..3e20d5de92 100644 --- 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 @@ -4,6 +4,7 @@ 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; @@ -15,6 +16,7 @@ public class CustomSequenceSortExpressionPane extends SortExpressionPane Date: Sun, 12 Dec 2021 15:56:23 +0800 Subject: [PATCH 16/18] =?UTF-8?q?REPORT-62440=20=E8=A1=A8=E5=A4=B4?= =?UTF-8?q?=E6=8E=92=E5=BA=8F=E5=86=85=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/gui/frpane/AbstractAttrNoScrollPane.java | 3 --- .../java/com/fr/extended/chart/AbstractExtendedStylePane.java | 2 +- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/gui/frpane/AbstractAttrNoScrollPane.java b/designer-base/src/main/java/com/fr/design/gui/frpane/AbstractAttrNoScrollPane.java index 0465702965..26cedd79d4 100644 --- a/designer-base/src/main/java/com/fr/design/gui/frpane/AbstractAttrNoScrollPane.java +++ b/designer-base/src/main/java/com/fr/design/gui/frpane/AbstractAttrNoScrollPane.java @@ -78,9 +78,6 @@ public abstract class AbstractAttrNoScrollPane extends BasicPane { hasChangeListener = false; } - public AttributeChangeListener getListener() { - return listener; - } public void initListener(Container parentComponent) { for (int i = 0; i < parentComponent.getComponentCount(); i++) { diff --git a/designer-chart/src/main/java/com/fr/extended/chart/AbstractExtendedStylePane.java b/designer-chart/src/main/java/com/fr/extended/chart/AbstractExtendedStylePane.java index d71f59a07d..3346c03eca 100644 --- a/designer-chart/src/main/java/com/fr/extended/chart/AbstractExtendedStylePane.java +++ b/designer-chart/src/main/java/com/fr/extended/chart/AbstractExtendedStylePane.java @@ -48,7 +48,7 @@ public abstract class AbstractExtendedStylePane extends return this.chart; } - public AttributeChangeListener getListener() { + protected AttributeChangeListener getListener() { return this.listener; } From bd82a9d6949b8793092b28235099a8661e2c75fb Mon Sep 17 00:00:00 2001 From: "Henry.Wang" Date: Sun, 12 Dec 2021 16:51:49 +0800 Subject: [PATCH 17/18] =?UTF-8?q?REPORT-62440=20=E8=A1=A8=E5=A4=B4?= =?UTF-8?q?=E6=8E=92=E5=BA=8F=E5=86=85=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/fr/design/event/ComponentChangeListener.java | 2 +- .../com/fr/design/gui/frpane/AbstractAttrNoScrollPane.java | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/event/ComponentChangeListener.java b/designer-base/src/main/java/com/fr/design/event/ComponentChangeListener.java index c4087ef112..d16d49b6a4 100644 --- a/designer-base/src/main/java/com/fr/design/event/ComponentChangeListener.java +++ b/designer-base/src/main/java/com/fr/design/event/ComponentChangeListener.java @@ -3,5 +3,5 @@ package com.fr.design.event; import java.awt.*; public interface ComponentChangeListener { - void initListener(Container parentComponent); + void initListener(Container changedComponent); } diff --git a/designer-base/src/main/java/com/fr/design/gui/frpane/AbstractAttrNoScrollPane.java b/designer-base/src/main/java/com/fr/design/gui/frpane/AbstractAttrNoScrollPane.java index 26cedd79d4..15d50d00cb 100644 --- a/designer-base/src/main/java/com/fr/design/gui/frpane/AbstractAttrNoScrollPane.java +++ b/designer-base/src/main/java/com/fr/design/gui/frpane/AbstractAttrNoScrollPane.java @@ -109,8 +109,8 @@ public abstract class AbstractAttrNoScrollPane extends BasicPane { ComponentChangeObserver uiChangeableObserver = ((ComponentChangeObserver)tmpComp); uiChangeableObserver.registerChangeListener(new ComponentChangeListener() { @Override - public void initListener(Container parentComponent) { - AbstractAttrNoScrollPane.this.initListener(parentComponent); + public void initListener(Container changedComponent) { + AbstractAttrNoScrollPane.this.initListener(changedComponent); } }); } From 19954cabfd990c5e51821c8716e6e6b61be9ec88 Mon Sep 17 00:00:00 2001 From: Starryi Date: Mon, 13 Dec 2021 16:58:42 +0800 Subject: [PATCH 18/18] =?UTF-8?q?REPORT-63808=20=E3=80=90=E4=B8=BB?= =?UTF-8?q?=E9=A2=98=E4=BC=98=E5=8C=96=E3=80=91=E6=A0=BC=E5=BC=8F=E5=8D=95?= =?UTF-8?q?=E7=8B=AC=E6=8B=BF=E5=87=BA=E6=9D=A5=E4=BB=A5=E5=90=8E=EF=BC=8C?= =?UTF-8?q?=E5=8F=91=E7=8E=B0=E6=95=B0=E6=8D=AE=E5=88=97=E7=9A=84=E5=BC=B9?= =?UTF-8?q?=E7=AA=97=E9=85=8D=E7=BD=AE=E4=B8=AD=E6=B2=A1=E6=9C=89=E6=A0=BC?= =?UTF-8?q?=E5=BC=8F=E9=A1=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 【问题原因】 格式设置项从样式中分离出来后,数据列的弹窗 中需要按照新的设计稿增加格式设置 【改动思路】 同上 --- .../fr/design/gui/style/TextFormatPane.java | 217 ++++++++---------- .../design/dscolumn/DSColumnAdvancedPane.java | 54 ++--- 2 files changed, 115 insertions(+), 156 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/gui/style/TextFormatPane.java b/designer-base/src/main/java/com/fr/design/gui/style/TextFormatPane.java index 8c96c4c862..fbe63218ec 100644 --- a/designer-base/src/main/java/com/fr/design/gui/style/TextFormatPane.java +++ b/designer-base/src/main/java/com/fr/design/gui/style/TextFormatPane.java @@ -7,7 +7,6 @@ import com.fr.base.TextFormat; import com.fr.data.core.FormatField; import com.fr.data.core.FormatField.FormatContents; import com.fr.design.border.UIRoundedBorder; -import com.fr.design.constants.LayoutConstants; import com.fr.design.constants.UIConstants; import com.fr.design.event.GlobalNameListener; import com.fr.design.event.GlobalNameObserver; @@ -18,21 +17,18 @@ import com.fr.design.gui.icombobox.UIComboBox; import com.fr.design.gui.icombobox.UIComboBoxRenderer; import com.fr.design.gui.ilable.UILabel; import com.fr.design.i18n.Toolkit; -import com.fr.design.layout.TableLayout; -import com.fr.design.layout.TableLayoutHelper; import com.fr.general.ComparatorUtils; import com.fr.stable.StringUtils; import javax.swing.BorderFactory; +import javax.swing.JComponent; import javax.swing.JLabel; import javax.swing.JList; import javax.swing.JPanel; -import javax.swing.SwingConstants; import javax.swing.UIManager; import javax.swing.border.Border; import javax.swing.border.TitledBorder; import java.awt.BorderLayout; -import java.awt.CardLayout; import java.awt.Color; import java.awt.Component; import java.awt.Dimension; @@ -43,7 +39,6 @@ import java.awt.event.ItemListener; import java.math.RoundingMode; import java.text.Format; import java.text.SimpleDateFormat; -import java.util.Arrays; /** * @author Starryi @@ -68,69 +63,45 @@ public class TextFormatPane extends AbstractBasicStylePane implements GlobalName private static final Integer[] DATE_TYPES = new Integer[]{FormatContents.NULL, FormatContents.DATE, FormatContents.TIME}; - private Format format; - - private UIComboBox typeComboBox; - private TextFontComboBox textField; - private UILabel sampleLabel; - private JPanel contentPane; - private JPanel txtCenterPane; - private JPanel centerPane; - private JPanel optionPane; - private UICheckBox roundingBox; - private JPanel formatFontPane; + protected UIComboBox typeComboBox; + protected TextFontComboBox textField; + protected UICheckBox roundingBox; + protected UILabel previewLabel; + private boolean isRightFormat; private boolean isDate = false; private GlobalNameListener globalNameListener = null; - /** - * Constructor. - */ public TextFormatPane() { - this.initComponents(TYPES); - } - protected UIComboBox getTypeComboBox() { - return typeComboBox; + initFormatTypesComboBox(); + initTextFontComboBox4GeneralFormats(); + initRoundingCheckBox4PercentFormat(); + initPreviewLabel4GeneralFormat(); + + initLayout(); + + setTextFieldVisible(false); + setRoundingBoxVisible(false); + setPreviewLabelVisible(false); } - protected void initComponents(Integer[] types) { - this.setLayout(new BorderLayout(0, 4)); - initSampleLabel(); - contentPane = new JPanel(new BorderLayout(0, 4)) { - @Override - public Dimension getPreferredSize() { - return new Dimension(super.getPreferredSize().width, 65); - } - }; - typeComboBox = new UIComboBox(types); - UIComboBoxRenderer render = createComBoxRender(); - typeComboBox.setRenderer(render); + private void initFormatTypesComboBox() { + typeComboBox = new UIComboBox(TextFormatPane.TYPES); + typeComboBox.setRenderer(createComBoxRender()); typeComboBox.addItemListener(itemListener); typeComboBox.setGlobalName("typeComboBox"); - contentPane.add(sampleLabel, BorderLayout.NORTH); + typeComboBox.setPreferredSize(new Dimension(155,20)); + } - txtCenterPane = new JPanel(new BorderLayout()); - textField = new TextFontComboBox(); + private void initTextFontComboBox4GeneralFormats() { + textField = new TextFontComboBox<>(); textField.addItemListener(textFieldItemListener); textField.setEditable(true); textField.setGlobalName("textField"); - txtCenterPane.add(textField, BorderLayout.NORTH); - - contentPane.add(txtCenterPane, BorderLayout.CENTER); - - centerPane = new JPanel(new CardLayout()); - centerPane.add(new JPanel(), "hide"); - centerPane.setPreferredSize(new Dimension(0, 0)); - centerPane.add(contentPane, "show"); - - typeComboBox.setPreferredSize(new Dimension(155,20)); - JPanel typePane = new JPanel(new BorderLayout()); - typePane.add(typeComboBox, BorderLayout.CENTER); - typePane.setBorder(BorderFactory.createEmptyBorder(0, 20, 0, 0)); + } - JPanel option = new JPanel(new BorderLayout()); - option.add(new UILabel(Toolkit.i18nText("Fine-Design_Report_Base_Option"), SwingConstants.LEFT), BorderLayout.WEST); + private void initRoundingCheckBox4PercentFormat() { roundingBox = new UICheckBox(Toolkit.i18nText("Fine-Design_Report_Base_Option_Half_Up")); roundingBox.setBorder(BorderFactory.createEmptyBorder(0, 30, 0, 0)); roundingBox.addItemListener(new ItemListener() { @@ -139,54 +110,13 @@ public class TextFormatPane extends AbstractBasicStylePane implements GlobalName } }); roundingBox.setGlobalName("roundingBox"); - option.add(roundingBox, BorderLayout.CENTER); - optionPane = new JPanel(new CardLayout()); - optionPane.add(new JPanel(), "hide"); - optionPane.setPreferredSize(new Dimension(0, 0)); - optionPane.add(option, "show"); - - Component[][] components = getComponent(centerPane, typePane); - this.add(createContentPane(components), BorderLayout.CENTER); } - protected JPanel createContentPane (Component[][] components) { - double f = TableLayout.FILL; - double p = TableLayout.PREFERRED; - double[] rowSize = new double[components.length]; - Arrays.fill(rowSize, p); - double[] columnSize = {p, f}; - int[][] rowCount = new int[components.length][2]; - Arrays.fill(rowCount, new int[] {1, 1}); - return TableLayoutHelper.createGapTableLayoutPane(components, rowSize, columnSize, rowCount, LayoutConstants.VGAP_LARGE, LayoutConstants.VGAP_MEDIUM); - } - - - protected Component[][] getComponent (JPanel centerPane, JPanel typePane) { - return new Component[][]{ - new Component[]{new UILabel(Toolkit.i18nText("Fine-Design_Report_Base_Format"), SwingConstants.LEFT), typePane}, - new Component[]{centerPane, null}, - new Component[]{optionPane, null}, - }; - } - - protected UIComboBoxRenderer createComBoxRender() { - return new UIComboBoxRenderer() { - @Override - public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { - JLabel label = (JLabel) super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); - if (value instanceof Integer) { - label.setText(" " + FormatField.getInstance().getName((Integer) value)); - } - return label; - } - }; - } - - private void initSampleLabel() { + private void initPreviewLabel4GeneralFormat() { Border interBorder = new UIRoundedBorder(UIConstants.LINE_COLOR, 1, 4); String title = Toolkit.i18nText("Fine-Design_Report_Base_StyleFormat_Sample"); Border border = BorderFactory.createTitledBorder(interBorder, title, TitledBorder.LEFT, 0, null, UIConstants.LINE_COLOR); - sampleLabel = new UILabel(FormatField.getInstance().getFormatValue()) { + previewLabel = new UILabel(FormatField.getInstance().getFormatValue()) { @Override public void paint(Graphics g) { @@ -198,12 +128,65 @@ public class TextFormatPane extends AbstractBasicStylePane implements GlobalName g.setColor(UIConstants.LINE_COLOR); FontMetrics cellFM = g.getFontMetrics(); int textWidth = cellFM.stringWidth(getText()); - GraphHelper.drawString(g, getText(), (width - textWidth) / 2, 26); + GraphHelper.drawString(g, getText(), (width - textWidth) / 2F, 26); g.setColor(original); } }; - sampleLabel.setHorizontalAlignment(UILabel.CENTER); - sampleLabel.setBorder(border); + previewLabel.setHorizontalAlignment(UILabel.CENTER); + previewLabel.setBorder(border); + } + + protected void initLayout() { + JPanel labeledFormatTypeComboBoxPane = new JPanel(new BorderLayout(20, 0)); + labeledFormatTypeComboBoxPane.add(new UILabel(Toolkit.i18nText("Fine-Design_Report_Base_Format")), BorderLayout.WEST); + labeledFormatTypeComboBoxPane.add(typeComboBox, BorderLayout.CENTER); + + JPanel labeledRoundingCheckboxPane = new JPanel(new BorderLayout(0, 0)); + labeledRoundingCheckboxPane.add(new UILabel(Toolkit.i18nText("Fine-Design_Report_Base_Option")), BorderLayout.WEST); + labeledRoundingCheckboxPane.add(roundingBox, BorderLayout.CENTER); + + addComponents(4, new JComponent[] { labeledFormatTypeComboBoxPane, textField, labeledRoundingCheckboxPane, previewLabel}); + } + + protected void setTextFieldVisible(boolean visible) { + textField.setVisible(visible); + } + + protected void setRoundingBoxVisible(boolean visible) { + roundingBox.getParent().setVisible(visible); + } + + protected void setPreviewLabelVisible(boolean visible) { + previewLabel.setVisible(visible); + } + + protected void addComponents(int gap, JComponent[] components) { + JPanel container = this; + container.setLayout(new BorderLayout(0, gap)); + for (JComponent component: components) { + if (component != null) { + container.add(component, BorderLayout.NORTH); + JPanel nextContainer = new JPanel(new BorderLayout(0, gap)); + container.add(nextContainer, BorderLayout.CENTER); + container = nextContainer; + } + } + if (container.getComponentCount() == 0) { + container.getParent().remove(container); + } + } + + protected UIComboBoxRenderer createComBoxRender() { + return new UIComboBoxRenderer() { + @Override + public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { + JLabel label = (JLabel) super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); + if (value instanceof Integer) { + label.setText(" " + FormatField.getInstance().getName((Integer) value)); + } + return label; + } + }; } @@ -231,8 +214,6 @@ public class TextFormatPane extends AbstractBasicStylePane implements GlobalName * Populate */ public void populateBean(Format format) { - this.format = format; - if (format == null) { this.typeComboBox.setSelectedIndex(FormatContents.NULL); } else { @@ -325,17 +306,17 @@ public class TextFormatPane extends AbstractBasicStylePane implements GlobalName * Refresh preview label. */ private void refreshPreviewLabel() { - this.sampleLabel.setText(FormatField.getInstance().getFormatValue()); - this.sampleLabel.setForeground(UIManager.getColor("Label.foreground")); + this.previewLabel.setText(FormatField.getInstance().getFormatValue()); + this.previewLabel.setForeground(UIManager.getColor("Label.foreground")); try { isRightFormat = true; if (StringUtils.isEmpty(String.valueOf(textField.getSelectedItem()))) { return; } - this.sampleLabel.setText(FormatField.getInstance().getFormatValue(getFormatContents(), String.valueOf(textField.getSelectedItem()))); + this.previewLabel.setText(FormatField.getInstance().getFormatValue(getFormatContents(), String.valueOf(textField.getSelectedItem()))); } catch (Exception e) { - this.sampleLabel.setForeground(Color.red); - this.sampleLabel.setText(e.getMessage()); + this.previewLabel.setForeground(Color.red); + this.previewLabel.setText(e.getMessage()); isRightFormat = false; } } @@ -354,28 +335,16 @@ public class TextFormatPane extends AbstractBasicStylePane implements GlobalName public void itemStateChanged(ItemEvent e) { if (e.getStateChange() == ItemEvent.SELECTED) { int contents = getFormatContents(); - String[] items = FormatField.getInstance().getFormatArray(contents, false); - CardLayout cardLayout = (CardLayout) centerPane.getLayout(); - if (isTextOrNull()) { - centerPane.setPreferredSize(new Dimension(0, 0)); - cardLayout.show(centerPane, "hide"); - } else { + if (!isTextOrNull()) { textField.removeAllItems(); + String[] items = FormatField.getInstance().getFormatArray(contents, false); textField.setItemArray(items); textField.setSelectedIndex(0); - centerPane.setPreferredSize(new Dimension(270, 65)); - cardLayout.show(centerPane, "show"); - } - CardLayout optionLayout = ((CardLayout) optionPane.getLayout()); - if (getFormatContents() == FormatContents.PERCENT) { - optionPane.setPreferredSize(new Dimension(100, 20)); - optionLayout.show(optionPane, "show"); - } else { - optionPane.setPreferredSize(new Dimension(0, 0)); - optionLayout.show(optionPane, "hide"); - roundingBox.setSelected(false); } + setTextFieldVisible(!isTextOrNull()); + setPreviewLabelVisible(!isTextOrNull()); + setRoundingBoxVisible(getFormatContents() == FormatContents.PERCENT); } } 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 fdc14efa39..1061b63635 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 @@ -2,6 +2,7 @@ package com.fr.design.dscolumn; import com.fr.base.BaseFormula; import com.fr.data.util.SortOrder; +import com.fr.design.border.UITitledBorder; import com.fr.design.data.DesignTableDataManager; import com.fr.design.dialog.BasicPane; import com.fr.design.dialog.DialogActionAdapter; @@ -9,7 +10,6 @@ import com.fr.design.formula.CustomVariableResolver; import com.fr.design.formula.FormulaFactory; import com.fr.design.formula.SortFormulaPane; import com.fr.design.formula.UIFormula; -import com.fr.design.gui.frpane.AbstractAttrNoScrollPane; import com.fr.design.gui.ibutton.UIButton; import com.fr.design.gui.icheckbox.UICheckBox; import com.fr.design.gui.icombobox.UIComboBox; @@ -20,14 +20,12 @@ 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.style.FormatPane; import com.fr.design.utils.gui.GUICoreUtils; import com.fr.report.cell.CellElement; 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.cell.cellattr.core.group.SelectCount; -import com.fr.van.chart.designer.component.format.FormatPaneWithOutFont; import javax.swing.*; import java.awt.*; @@ -59,18 +57,19 @@ public class DSColumnAdvancedPane extends BasicPane { this.setLayout(FRGUIPaneFactory.createBorderLayout()); sortPane = new SortPane(); - sortPane.setBorder(GUICoreUtils.createTitledBorder(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Sort_Sort_Order"), null)); + sortPane.setBorder(UITitledBorder.createBorderWithTitle(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Sort_Sort_Order"))); if (setting > DSColumnPane.SETTING_DSRELATED) { selectCountPane = new SelectCountPane(); - selectCountPane.setBorder(GUICoreUtils.createTitledBorder(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Bind_Column_Results_Filter"), null)); + selectCountPane.setBorder(UITitledBorder.createBorderWithTitle(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Bind_Column_Results_Filter"))); } valuePane = new ValuePane(); - valuePane.setBorder(GUICoreUtils.createTitledBorder(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Bind_Column_Custom_Data_Appearance"), null)); + valuePane.setBorder(UITitledBorder.createBorderWithTitle(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Bind_Column_Custom_Data_Appearance"))); formatAttrPane = new FormatAttrPane(); - + JPanel titleBorderedFormatPane = FRGUIPaneFactory.createTitledBorderPane(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Base_Format")); + titleBorderedFormatPane.add(formatAttrPane, BorderLayout.NORTH); JPanel extendablePane = null; if (setting > DSColumnPane.SETTING_DSRELATED) { @@ -109,7 +108,7 @@ public class DSColumnAdvancedPane extends BasicPane { {sortPane}, {selectCountPane}, {valuePane}, - {formatAttrPane}, + {titleBorderedFormatPane}, {extendablePane}, {multiNumPane} }; @@ -117,7 +116,7 @@ public class DSColumnAdvancedPane extends BasicPane { components = new Component[][]{ {sortPane}, {valuePane}, - {formatAttrPane} + {titleBorderedFormatPane} }; } @@ -538,40 +537,31 @@ public class DSColumnAdvancedPane extends BasicPane { } } - public class FormatAttrPane extends AbstractAttrNoScrollPane { - private TextFormatPane formatPane; + public static class FormatAttrPane extends TextFormatPane { - @Override - protected JPanel createContentPane() { - this.formatPane = new TextFormatPane(); - return this.formatPane; - } + protected void initLayout() { + JPanel settingPane = FRGUIPaneFactory.createBoxFlowInnerContainer_S_Pane(0, 4, 0); + settingPane.add(typeComboBox); + settingPane.add(textField); + settingPane.add(roundingBox); - @Override - public Dimension getPreferredSize() { - if (formatPane == null) { - return super.getPreferredSize(); - } - return formatPane.getPreferredSize(); + addComponents(4, new JComponent[] { settingPane, previewLabel}); } - protected void initContentPane() { - leftContentPane = createContentPane(); - if (leftContentPane != null) { - leftContentPane.setBorder(BorderFactory.createEmptyBorder()); - this.add(leftContentPane, BorderLayout.CENTER); - } + @Override + protected void setRoundingBoxVisible(boolean visible) { + roundingBox.setVisible(visible); } public void populate(CellElement cellElement) { - if (cellElement != null && formatPane != null) { - formatPane.populateBean(cellElement.getStyle()); + if (cellElement != null) { + populateBean(cellElement.getStyle()); } } public void update(CellElement cellElement) { - if (cellElement != null && formatPane != null) { - cellElement.setStyle(formatPane.update(cellElement.getStyle())); + if (cellElement != null) { + cellElement.setStyle(update(cellElement.getStyle())); } } }