Browse Source

REPORT-69842 修改边框颜色单元格背景颜色会变统一

【问题原因】
错误的逻辑是
使用单元格样式面板的updateBean方法,获取单元格样式面板的所有配置,并将其设置
到指定单元格上。这个逻辑会导致在选中多个单元格时,用户没有修改的样式配置项也
被覆盖掉.(单元格样式面板的配置项并不可靠,在某些情况下比如单元格多选时,不能
反应实际的单元格样式)

正确的逻辑
用户在编辑自定义单元格样式时,仅修改发生了更改的配置,其余保持不变,也就是将原
有的单元格样式配置,与用户修改的部分配置进行merge,得到新的样式,并设置到指定
单元格上。

注意:这里的样式配置更改存在的情况有三种:
1. 单于昂样式跟随主题切换到自定义样式。样式细节未发生变动,但不再跟随主题了,代码逻辑中对应
switchCellStylesToCustom,样式对象类型从NameStyle变为Style
2. 在跟随主题样式面板,切换主题单元格样式。全量更新,放弃单元格所有原来样式,因此需要使用updateBean.
3. 在自定义样式面板,修改部分配置项。增量更新,保持其他配置项不变,因此需要使用mergeBean.

【改动思路】
同上

【review建议】
new-design
Starryi 2 years ago
parent
commit
2534fffebd
  1. 2
      designer-realize/src/main/java/com/fr/design/mainframe/cell/settingpane/CellStylePane.java
  2. 8
      designer-realize/src/main/java/com/fr/design/mainframe/cell/settingpane/style/StylePane.java

2
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);

8
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();

Loading…
Cancel
Save