From 2534fffebd90bef2533416b2aaece153fd2355af Mon Sep 17 00:00:00 2001 From: Starryi Date: Fri, 15 Apr 2022 17:01:03 +0800 Subject: [PATCH] =?UTF-8?q?REPORT-69842=20=E4=BF=AE=E6=94=B9=E8=BE=B9?= =?UTF-8?q?=E6=A1=86=E9=A2=9C=E8=89=B2=E5=8D=95=E5=85=83=E6=A0=BC=E8=83=8C?= =?UTF-8?q?=E6=99=AF=E9=A2=9C=E8=89=B2=E4=BC=9A=E5=8F=98=E7=BB=9F=E4=B8=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 【问题原因】 错误的逻辑是 使用单元格样式面板的updateBean方法,获取单元格样式面板的所有配置,并将其设置 到指定单元格上。这个逻辑会导致在选中多个单元格时,用户没有修改的样式配置项也 被覆盖掉.(单元格样式面板的配置项并不可靠,在某些情况下比如单元格多选时,不能 反应实际的单元格样式) 正确的逻辑 用户在编辑自定义单元格样式时,仅修改发生了更改的配置,其余保持不变,也就是将原 有的单元格样式配置,与用户修改的部分配置进行merge,得到新的样式,并设置到指定 单元格上。 注意:这里的样式配置更改存在的情况有三种: 1. 单于昂样式跟随主题切换到自定义样式。样式细节未发生变动,但不再跟随主题了,代码逻辑中对应 switchCellStylesToCustom,样式对象类型从NameStyle变为Style 2. 在跟随主题样式面板,切换主题单元格样式。全量更新,放弃单元格所有原来样式,因此需要使用updateBean. 3. 在自定义样式面板,修改部分配置项。增量更新,保持其他配置项不变,因此需要使用mergeBean. 【改动思路】 同上 【review建议】 --- .../design/mainframe/cell/settingpane/CellStylePane.java | 2 +- .../mainframe/cell/settingpane/style/StylePane.java | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/cell/settingpane/CellStylePane.java b/designer-realize/src/main/java/com/fr/design/mainframe/cell/settingpane/CellStylePane.java index 3bdd034c6..8e57415a7 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/cell/settingpane/CellStylePane.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/cell/settingpane/CellStylePane.java @@ -118,7 +118,7 @@ public class CellStylePane extends AbstractCellAttrPane { elementCase.addCellElement(cellElement); } Format format = cellElement.getStyle().getFormat(); - Style style = stylePane.updateBean(); + Style style = stylePane.mergeBean(cellElement.getStyle()); // 格式不能通过样式面板中的配置项修改,因此需要保留 style = style.deriveFormat(format); cellElement.setStyle(style); diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/cell/settingpane/style/StylePane.java b/designer-realize/src/main/java/com/fr/design/mainframe/cell/settingpane/style/StylePane.java index 7f382ed44..9c9523e13 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/cell/settingpane/style/StylePane.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/cell/settingpane/style/StylePane.java @@ -251,6 +251,14 @@ public class StylePane extends BasicPane implements UIObserver { followingThemePane.setVisible(AdjustWorkBookDefaultStyleUtils.supportTheme()); } + public Style mergeBean(Style style) { + if (isFollowingTheme()) { + return updateBean(); + } else { + return customStylePane.updateStyle(style); + } + } + private void fireStateChanged() { for (UIObserverListener listener: observerListeners) { listener.doChange();