From 3b701870da3f35c0defe1a1e283b51816e30ca1b Mon Sep 17 00:00:00 2001 From: Starryi Date: Fri, 9 Sep 2022 11:42:02 +0800 Subject: [PATCH] =?UTF-8?q?REPORT-79934=20=E6=96=B0=E5=BB=BA=E6=A8=A1?= =?UTF-8?q?=E6=9D=BF=E7=9A=84A0=E5=8D=95=E5=85=83=E6=A0=BC=E6=A0=B7?= =?UTF-8?q?=E5=BC=8F=E4=B8=8E=E6=A8=A1=E6=9D=BF=E4=B8=BB=E9=A2=98=E7=9A=84?= =?UTF-8?q?=E9=BB=98=E8=AE=A4=E5=8D=95=E5=85=83=E6=A0=BC=E6=A0=B7=E5=BC=8F?= =?UTF-8?q?=E4=B8=8D=E4=B8=80=E8=87=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 【问题原因】 在模板A打开时,新建模板B,模板B新建过程中,使用 HistoryTemplateListCache.getInstance().getCurrentEditingTemplate() 来获取当前正在编辑的模板,从而获取正在编辑模板的主题,从而获取主题内的默认单元格样式, 以初始化[0,0]单元格样式. 但由于B还在创建过程中,currentEditingTemplate没有更新,currentEditingTemplate 依然是模板A,所以最终使用了模板A的主题的默认单元格样式,来初始化B的[0,0]单元格 【改动思路】 B在初始化单元格[0,0]前,已经设置好自己的主题了,只需要要某种方式,从里面取出来就可以了, 不过因为currentEditingTemplate不可靠了,所以需要在HistoryTemplateListCache中引入 新的属性openingOrEditingTemplate 在正在打开的模板或切换模板时,更新openingOrEditingTemplate. --- .../fr/design/file/HistoryTemplateListCache.java | 14 ++++++++++++-- .../java/com/fr/design/mainframe/JTemplate.java | 1 + .../DefaultThemedTemplateCellElementCase.java | 2 +- 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/file/HistoryTemplateListCache.java b/designer-base/src/main/java/com/fr/design/file/HistoryTemplateListCache.java index 0b093e4ef1..d7f46ea76b 100644 --- a/designer-base/src/main/java/com/fr/design/file/HistoryTemplateListCache.java +++ b/designer-base/src/main/java/com/fr/design/file/HistoryTemplateListCache.java @@ -41,6 +41,8 @@ public class HistoryTemplateListCache implements CallbackEvent { private List> 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; diff --git a/designer-base/src/main/java/com/fr/design/mainframe/JTemplate.java b/designer-base/src/main/java/com/fr/design/mainframe/JTemplate.java index a445621146..fe0e4ee4ff 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/JTemplate.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/JTemplate.java @@ -190,6 +190,7 @@ public abstract class JTemplate> public JTemplate(T t, FILE file, boolean isNewFile, Parameter[] parameters) { super(t); + HistoryTemplateListCache.getInstance().setCurrentOpeningTemplate(this); if (isNewFile) { // REPORT-58486: 必须在初始的UndoState创建前设置主题,使得初始的UndoState就包含了主题效果 setUpTheme4NewTemplate(); diff --git a/designer-base/src/main/java/com/fr/design/mainframe/theme/utils/DefaultThemedTemplateCellElementCase.java b/designer-base/src/main/java/com/fr/design/mainframe/theme/utils/DefaultThemedTemplateCellElementCase.java index 123875eefc..8b1abe71b4 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/theme/utils/DefaultThemedTemplateCellElementCase.java +++ b/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();