Browse Source

REPORT-79934 新建模板的A0单元格样式与模板主题的默认单元格样式不一致

【问题原因】

在模板A打开时,新建模板B,模板B新建过程中,使用
HistoryTemplateListCache.getInstance().getCurrentEditingTemplate()
来获取当前正在编辑的模板,从而获取正在编辑模板的主题,从而获取主题内的默认单元格样式,
以初始化[0,0]单元格样式.

但由于B还在创建过程中,currentEditingTemplate没有更新,currentEditingTemplate
依然是模板A,所以最终使用了模板A的主题的默认单元格样式,来初始化B的[0,0]单元格

【改动思路】
B在初始化单元格[0,0]前,已经设置好自己的主题了,只需要要某种方式,从里面取出来就可以了,
不过因为currentEditingTemplate不可靠了,所以需要在HistoryTemplateListCache中引入
新的属性openingOrEditingTemplate

在正在打开的模板或切换模板时,更新openingOrEditingTemplate.
release/11.0
Starryi 2 years ago
parent
commit
3b701870da
  1. 14
      designer-base/src/main/java/com/fr/design/file/HistoryTemplateListCache.java
  2. 1
      designer-base/src/main/java/com/fr/design/mainframe/JTemplate.java
  3. 2
      designer-base/src/main/java/com/fr/design/mainframe/theme/utils/DefaultThemedTemplateCellElementCase.java

14
designer-base/src/main/java/com/fr/design/file/HistoryTemplateListCache.java

@ -41,6 +41,8 @@ public class HistoryTemplateListCache implements CallbackEvent {
private List<JTemplate<?, ?>> historyList;
private JTemplate<?, ?> editingTemplate;
private JTemplate<?, ?> openingOrEditingTemplate;
public static HistoryTemplateListCache getInstance() {
return Holder.INSTANCE;
}
@ -98,8 +100,15 @@ public class HistoryTemplateListCache implements CallbackEvent {
FineLoggerFactory.getLogger().error(e.getMessage(), e);
}
}
public void setCurrentOpeningTemplate(JTemplate<?, ?> jt) {
this.openingOrEditingTemplate = jt;
}
public JTemplate<?, ?> getCurrentOpeningOrEditingTemplate() {
return openingOrEditingTemplate;
}
/**
* 需要使用 {@link JTemplate#isValid(JTemplate)} 来判断空
*
@ -116,6 +125,7 @@ public class HistoryTemplateListCache implements CallbackEvent {
*/
public void setCurrentEditingTemplate(JTemplate<?, ?> jt) {
this.editingTemplate = jt;
this.openingOrEditingTemplate = jt;
if (!JTemplate.isValid(jt)) {
return;

1
designer-base/src/main/java/com/fr/design/mainframe/JTemplate.java

@ -190,6 +190,7 @@ public abstract class JTemplate<T extends BaseBook, U extends BaseUndoState<?>>
public JTemplate(T t, FILE file, boolean isNewFile, Parameter[] parameters) {
super(t);
HistoryTemplateListCache.getInstance().setCurrentOpeningTemplate(this);
if (isNewFile) {
// REPORT-58486: 必须在初始的UndoState创建前设置主题,使得初始的UndoState就包含了主题效果
setUpTheme4NewTemplate();

2
designer-base/src/main/java/com/fr/design/mainframe/theme/utils/DefaultThemedTemplateCellElementCase.java

@ -32,7 +32,7 @@ public class DefaultThemedTemplateCellElementCase {
}
private static DefaultTemplateCellElement themingCellElement(DefaultTemplateCellElement cellElement) {
JTemplate<?,?> template = HistoryTemplateListCache.getInstance().getCurrentEditingTemplate();
JTemplate<?,?> template = HistoryTemplateListCache.getInstance().getCurrentOpeningOrEditingTemplate();
if (JTemplate.isValid(template)) {
TemplateTheme theme = template.getTemplateTheme();
ThemedCellStyle themedCellStyle = theme.getCellStyleList().getUse4Default();

Loading…
Cancel
Save