From ba4b28c641e6f15f7ace65a798bdf9302f511d2b Mon Sep 17 00:00:00 2001 From: Starryi Date: Fri, 10 Dec 2021 10:54:31 +0800 Subject: [PATCH] =?UTF-8?q?REPORT-64075=20=E3=80=90=E4=B8=BB=E9=A2=98?= =?UTF-8?q?=E8=BE=B9=E6=A1=86=E3=80=91=E6=A1=86=E9=80=89=E8=AE=BE=E7=BD=AE?= =?UTF-8?q?=E4=B8=BB=E9=A2=98=E6=A0=B7=E5=BC=8F=EF=BC=8C=E5=85=B3=E9=97=AD?= =?UTF-8?q?=E6=A8=A1=E6=9D=BF=EF=BC=8C=E5=88=A0=E9=99=A4=E6=A8=A1=E6=9D=BF?= =?UTF-8?q?=E4=B8=BB=E9=A2=98=EF=BC=8C=E9=87=8D=E6=96=B0=E6=89=93=E5=BC=80?= =?UTF-8?q?=E6=A8=A1=E6=9D=BF=E8=BE=B9=E6=A1=86=E4=B8=A2=E5=A4=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 【问题原因】 如果将格子四边框的来源标记保存到单元格中,那么会导致实际边框样式 不同单元格使用同一个NameStyle,从而在主题丢失,读取模版XML恢复 自定义样式时,使用相同的NameStyle作为最终样式,从而丢弃各自格子 原本不同的边框样式。 只有将四边框的来源标记保存到NameStyle中,才能避免这个问题, 使用不同标记的NameStyle才持久化时会分别存储. 【改动思路】 1. 删除之前在CellElement中添加的borderSourceFlags相关的接口 2. 将borderSourceFlags转移到NameStyle中 --- .../cell/CellRectangleStylePreviewPane.java | 18 ++++++++++-------- .../fr/design/actions/cell/BorderAction.java | 2 -- .../java/com/fr/design/style/BorderUtils.java | 15 ++++++++++----- 3 files changed, 20 insertions(+), 15 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 bde6b1371..da80b6c6e 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 @@ -1,6 +1,6 @@ package com.fr.design.cell; -import com.fr.report.cell.CellElementBorderSourceFlag; +import com.fr.base.CellBorderSourceFlag; import com.fr.base.CellBorderStyle; import com.fr.base.Style; import com.fr.design.mainframe.theme.utils.DefaultThemedTemplateCellElementCase; @@ -20,6 +20,7 @@ public class CellRectangleStylePreviewPane extends JPanel { private static final int COLUMN_COUNT = 2; private final TemplateCellElement[][] cellElementGrid = new TemplateCellElement[ROW_COUNT][COLUMN_COUNT]; + private final int[][] borderSourceFlags = new int[ROW_COUNT][COLUMN_COUNT]; private final CellStylePreviewPane[][] cellStylePreviewPaneGrid = new CellStylePreviewPane[ROW_COUNT][COLUMN_COUNT]; public CellRectangleStylePreviewPane() { @@ -29,25 +30,25 @@ public class CellRectangleStylePreviewPane extends JPanel { for (int c = 0; c < COLUMN_COUNT; c++) { CellStylePreviewPane pane = new CellStylePreviewPane(); TemplateCellElement cellElement = DefaultThemedTemplateCellElementCase.createInstance(c, r); - int flags = CellElementBorderSourceFlag.ALL_BORDER_SOURCE_OUTER; + int flags = CellBorderSourceFlag.ALL_BORDER_SOURCE_OUTER; if (r != 0) { - flags |= CellElementBorderSourceFlag.TOP_BORDER_SOURCE_INNER; + flags |= CellBorderSourceFlag.TOP_BORDER_SOURCE_INNER; } if (r != ROW_COUNT - 1) { - flags |= CellElementBorderSourceFlag.BOTTOM_BORDER_SOURCE_INNER; + flags |= CellBorderSourceFlag.BOTTOM_BORDER_SOURCE_INNER; } if (c != 0) { - flags |= CellElementBorderSourceFlag.LEFT_BORDER_SOURCE_INNER; + flags |= CellBorderSourceFlag.LEFT_BORDER_SOURCE_INNER; } if (c != COLUMN_COUNT - 1) { - flags |= CellElementBorderSourceFlag.RIGHT_BORDER_SOURCE_INNER; + flags |= CellBorderSourceFlag.RIGHT_BORDER_SOURCE_INNER; } - cellElement.setBorderSourceFlags(flags); pane.setStyle(cellElement.getStyle()); add(pane); cellElementGrid[r][c] = cellElement; + borderSourceFlags[r][c] = flags; cellStylePreviewPaneGrid[r][c] = pane; } } @@ -64,7 +65,8 @@ public class CellRectangleStylePreviewPane extends JPanel { for (int j = 0; j < COLUMN_COUNT; j++) { CellStylePreviewPane pane = cellStylePreviewPaneGrid[i][j]; TemplateCellElement cellElement = cellElementGrid[i][j]; - cellElement.setStyle(style, borderStyle); + int flag = borderSourceFlags[i][j]; + cellElement.setStyle(CellBorderSourceFlag.deriveBorderedStyle(style, borderStyle, flag)); pane.setStyle(cellElement.getStyle()); } diff --git a/designer-realize/src/main/java/com/fr/design/actions/cell/BorderAction.java b/designer-realize/src/main/java/com/fr/design/actions/cell/BorderAction.java index 596b61157..844e4f70b 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/cell/BorderAction.java +++ b/designer-realize/src/main/java/com/fr/design/actions/cell/BorderAction.java @@ -14,7 +14,6 @@ import com.fr.design.style.BorderUtils; import com.fr.grid.selection.CellSelection; import com.fr.grid.selection.FloatSelection; import com.fr.grid.selection.Selection; -import com.fr.report.cell.CellElementBorderSourceFlag; import com.fr.report.cell.FloatElement; import com.fr.report.cell.StyleProvider; import com.fr.report.cell.TemplateCellElement; @@ -102,7 +101,6 @@ public class BorderAction extends ElementCaseAction implements ChangeListener { TemplateCellElement cellElement = elementCase.getTemplateCellElement(column, row); if (cellElement != null) { resetElementStyleToCustom(cellElement); - cellElement.setBorderSourceFlags(CellElementBorderSourceFlag.INVALID_BORDER_SOURCE); }; } } diff --git a/designer-realize/src/main/java/com/fr/design/style/BorderUtils.java b/designer-realize/src/main/java/com/fr/design/style/BorderUtils.java index 53145b882..57f4440d0 100644 --- a/designer-realize/src/main/java/com/fr/design/style/BorderUtils.java +++ b/designer-realize/src/main/java/com/fr/design/style/BorderUtils.java @@ -6,7 +6,7 @@ import java.util.ArrayList; import java.util.Hashtable; import java.util.List; -import com.fr.report.cell.CellElementBorderSourceFlag; +import com.fr.base.CellBorderSourceFlag; import com.fr.base.CellBorderStyle; import com.fr.base.NameStyle; import com.fr.base.Style; @@ -527,15 +527,20 @@ public abstract class BorderUtils { int cellColumnSpan = tmpCellElement.getColumnSpan(); int cellRow = tmpCellElement.getRow(); int cellRowSpan = tmpCellElement.getRowSpan(); - int borderSourceFlags = CellElementBorderSourceFlag.inspectBorderSourceFlag( + int borderSourceFlags = CellBorderSourceFlag.inspectBorderSourceFlag( column, row, column + columnSpan, row + rowSpan, cellColumn, cellRow, cellColumn + cellColumnSpan, cellRow + cellRowSpan ); - tmpCellElement.setBorderSourceFlags(borderSourceFlags); if (style instanceof NameStyle && !ThemedFeatureController.isCellStyleSupportInnerBorder()) { - tmpCellElement.setBorderSourceFlags(CellElementBorderSourceFlag.INVALID_BORDER_SOURCE); + borderSourceFlags = CellBorderSourceFlag.INVALID_BORDER_SOURCE; } - tmpCellElement.setStyle(style, newCellBorderStyle); + if (style instanceof NameStyle) { + ((NameStyle) style).refreshPassiveBorderStyle(newCellBorderStyle, borderSourceFlags); + } else { + style = CellBorderSourceFlag.deriveBorderedStyle(style, newCellBorderStyle, borderSourceFlags); + } + + tmpCellElement.setStyle(style); } } }