From 9378404421920b4878a245d982d464cdda779a0b Mon Sep 17 00:00:00 2001 From: kerry Date: Fri, 28 Apr 2023 12:00:11 +0800 Subject: [PATCH 1/3] =?UTF-8?q?REPORT-95197=20&&=20REPORT-95194=20?= =?UTF-8?q?=E6=89=93=E5=BC=80=E8=BF=9C=E7=A8=8B=E5=B7=A5=E4=BD=9C=E7=9B=AE?= =?UTF-8?q?=E5=BD=95=E9=9D=A2=E6=9D=BF=EF=BC=8C=E9=80=89=E6=8B=A9=E8=BF=9C?= =?UTF-8?q?=E7=A8=8B=E7=9B=AE=E5=BD=95=E7=82=B9=E7=A1=AE=E5=AE=9A=EF=BC=8C?= =?UTF-8?q?=E6=B2=A1=E6=9C=89=E5=BC=BA=E5=88=B6=E8=A6=81=E6=B1=82=E4=BF=9D?= =?UTF-8?q?=E5=AD=98fvs=E6=A8=A1=E6=9D=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/fr/design/EnvChangeEntrance.java | 2 +- .../fr/design/file/MultiTemplateTabPane.java | 32 ++++++++++++++++--- .../fr/design/file/SaveSomeTemplatePane.java | 6 ++-- 3 files changed, 31 insertions(+), 9 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/EnvChangeEntrance.java b/designer-base/src/main/java/com/fr/design/EnvChangeEntrance.java index 0a464aa6d9..16c1a7e8a4 100644 --- a/designer-base/src/main/java/com/fr/design/EnvChangeEntrance.java +++ b/designer-base/src/main/java/com/fr/design/EnvChangeEntrance.java @@ -413,7 +413,7 @@ public class EnvChangeEntrance { @Override public void doOk() { SaveSomeTemplatePane saveSomeTemplatePane = new SaveSomeTemplatePane(true, SwingUtilities.getWindowAncestor(envListPane)); - if (!saveSomeTemplatePane.showSavePane()) { + if (!saveSomeTemplatePane.showSavePane(true)) { // 用户取消保存时,取消切换目录操作 return; } diff --git a/designer-base/src/main/java/com/fr/design/file/MultiTemplateTabPane.java b/designer-base/src/main/java/com/fr/design/file/MultiTemplateTabPane.java index c2b340dff2..a686699e1a 100644 --- a/designer-base/src/main/java/com/fr/design/file/MultiTemplateTabPane.java +++ b/designer-base/src/main/java/com/fr/design/file/MultiTemplateTabPane.java @@ -212,6 +212,28 @@ public class MultiTemplateTabPane extends JComponent { }); } + + /** + * 模板可以关闭的条件 + */ + class CloseCondition { + private CloseOption closeOption; + + public CloseCondition(CloseOption closeOption) { + this.closeOption = closeOption; + } + + public boolean shouldClose(JTemplate closeJTemplate, int tplIndex, int i) { + boolean matchOption = this.closeOption.shouldClose(tplIndex, i); + JTemplate currentTemplate = HistoryTemplateListCache.getInstance().getCurrentEditingTemplate(); + if (currentTemplate == null) { + return matchOption; + } + return matchOption && ComparatorUtils.equals(closeJTemplate.getTemplateTabOperatorType(), + currentTemplate.getTemplateTabOperatorType()); + } + } + enum CloseOption { Left(Toolkit.i18nText("Fine-Design_Close_templates_To_The_Left")) { @Override @@ -324,14 +346,15 @@ public class MultiTemplateTabPane extends JComponent { public void actionPerformed(ActionEvent e) { //只有关闭所有模板才需要判断当前模板,关闭左侧、右侧、其他都不需要 SaveSomeTemplatePane saveSomeTemplatePane = new SaveSomeTemplatePane(option == CloseOption.All); - if (saveSomeTemplatePane.showSavePane(option, false)) { + CloseCondition closeCondition = new CloseCondition(option); + if (saveSomeTemplatePane.showSavePane(closeCondition, false)) { JTemplate[] templates = new JTemplate[openedTemplate.size()]; for (int i = 0; i < openedTemplate.size(); i++) { templates[i] = openedTemplate.get(i); } JTemplate currentTemplate = HistoryTemplateListCache.getInstance().getCurrentEditingTemplate(); - closeTemplate(templates, currentTemplate); + closeTemplate(closeCondition, templates, currentTemplate); if (openedTemplate.size() == 0) { DesignerContext.getDesignerFrame().addAndActivateJTemplate(); @@ -346,10 +369,9 @@ public class MultiTemplateTabPane extends JComponent { } } - private void closeTemplate(JTemplate[] templates, JTemplate currentTemplate) { - String operator = currentTemplate.getTemplateTabOperatorType(); + private void closeTemplate(CloseCondition closeCondition, JTemplate[] templates, JTemplate currentTemplate) { for (int i = 0; i < templates.length; i++) { - if (option.shouldClose(tplIndex, i) && ComparatorUtils.equals(operator, templates[i].getTemplateTabOperatorType())) { + if (closeCondition.shouldClose(templates[i], tplIndex, i)) { JTemplate jTemplate = templates[i]; if (jTemplate == currentTemplate) { currentTemplate = option == CloseOption.All ? null : templates[tplIndex]; diff --git a/designer-base/src/main/java/com/fr/design/file/SaveSomeTemplatePane.java b/designer-base/src/main/java/com/fr/design/file/SaveSomeTemplatePane.java index e371f6ce2b..18c34e808c 100644 --- a/designer-base/src/main/java/com/fr/design/file/SaveSomeTemplatePane.java +++ b/designer-base/src/main/java/com/fr/design/file/SaveSomeTemplatePane.java @@ -180,7 +180,7 @@ public class SaveSomeTemplatePane extends BasicPane { * @param judgeJTemplateMustSave 模板是否必须保存 * @return */ - public boolean showSavePane(@Nullable MultiTemplateTabPane.CloseOption option, boolean judgeJTemplateMustSave) { + public boolean showSavePane(@Nullable MultiTemplateTabPane.CloseCondition option, boolean judgeJTemplateMustSave) { initAndPopulate(option, judgeJTemplateMustSave); //如果有未保存的文件 ,则跳出保存对话框,选择要存储的项目 if (!unSavedTemplate.isEmpty()) { @@ -195,13 +195,13 @@ public class SaveSomeTemplatePane extends BasicPane { return HistoryTemplateListPane.getInstance().getHistoryList(); } - private void initAndPopulate(@Nullable MultiTemplateTabPane.CloseOption option, boolean judgeJTemplateMustSave) { + private void initAndPopulate(@Nullable MultiTemplateTabPane.CloseCondition option, boolean judgeJTemplateMustSave) { java.util.List> opendedTemplate = getOpenedTemplatesToProcess(); JTemplate currentTemplate = HistoryTemplateListPane.getInstance().getCurrentEditingTemplate(); int currentIndex = opendedTemplate.indexOf(currentTemplate); for (int i = 0; i < opendedTemplate.size(); i++) { //满足关闭条件的才继续判断文件是否发生了改动 - boolean needClose = option == null || option.shouldClose(currentIndex, i); + boolean needClose = option == null || option.shouldClose(opendedTemplate.get(i), currentIndex, i); if (needClose && isneedToAdd(opendedTemplate.get(i), currentTemplate)) { unSavedTemplate.add(opendedTemplate.get(i)); } From 91f3f3cd0bcc42a2453c329863fb7de7953210ca Mon Sep 17 00:00:00 2001 From: kerry Date: Fri, 28 Apr 2023 14:02:03 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/fr/design/file/MultiTemplateTabPane.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/designer-base/src/main/java/com/fr/design/file/MultiTemplateTabPane.java b/designer-base/src/main/java/com/fr/design/file/MultiTemplateTabPane.java index a686699e1a..4352bab179 100644 --- a/designer-base/src/main/java/com/fr/design/file/MultiTemplateTabPane.java +++ b/designer-base/src/main/java/com/fr/design/file/MultiTemplateTabPane.java @@ -226,7 +226,7 @@ public class MultiTemplateTabPane extends JComponent { public boolean shouldClose(JTemplate closeJTemplate, int tplIndex, int i) { boolean matchOption = this.closeOption.shouldClose(tplIndex, i); JTemplate currentTemplate = HistoryTemplateListCache.getInstance().getCurrentEditingTemplate(); - if (currentTemplate == null) { + if (!JTemplate.isValid(currentTemplate)) { return matchOption; } return matchOption && ComparatorUtils.equals(closeJTemplate.getTemplateTabOperatorType(), From c9cf01170c4177dc82c3b6be50f025e6328610ce Mon Sep 17 00:00:00 2001 From: kerry Date: Fri, 28 Apr 2023 14:07:48 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/fr/design/file/MultiTemplateTabPane.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/designer-base/src/main/java/com/fr/design/file/MultiTemplateTabPane.java b/designer-base/src/main/java/com/fr/design/file/MultiTemplateTabPane.java index 4352bab179..aa64244dee 100644 --- a/designer-base/src/main/java/com/fr/design/file/MultiTemplateTabPane.java +++ b/designer-base/src/main/java/com/fr/design/file/MultiTemplateTabPane.java @@ -223,6 +223,13 @@ public class MultiTemplateTabPane extends JComponent { this.closeOption = closeOption; } + /** + * 判断模板是否可以关闭,两个条件:1、是否满足CloseOption里面的条件(在左侧、在右侧等)2、是否和当前正在编辑模板属于同一种模板tab操作类型 + * @param closeJTemplate + * @param tplIndex + * @param i + * @return + */ public boolean shouldClose(JTemplate closeJTemplate, int tplIndex, int i) { boolean matchOption = this.closeOption.shouldClose(tplIndex, i); JTemplate currentTemplate = HistoryTemplateListCache.getInstance().getCurrentEditingTemplate();