From bcb00232b1c8fb9a926c7ce910a709839ca2e21e Mon Sep 17 00:00:00 2001 From: Starryi Date: Thu, 30 Sep 2021 16:09:00 +0800 Subject: [PATCH] =?UTF-8?q?REPORT-60437=20=E3=80=90=E4=B8=BB=E9=A2=98?= =?UTF-8?q?=E8=8E=B7=E5=8F=96=E3=80=91=E8=8E=B7=E5=8F=96=E4=B8=BB=E9=A2=98?= =?UTF-8?q?=E6=97=B6=EF=BC=8C=E6=B2=A1=E6=9C=89=E5=BC=B9=E5=87=BA=E6=A8=A1?= =?UTF-8?q?=E6=9D=BF=E4=B8=BB=E9=A2=98=E5=88=97=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 【问题原因】 主题获取交互优化 【改动思路】 同上 --- .../actions/DownloadSuitableThemeAction.java | 118 +++++++++++------- 1 file changed, 76 insertions(+), 42 deletions(-) diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/actions/DownloadSuitableThemeAction.java b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/actions/DownloadSuitableThemeAction.java index d1a175b94..be05db9d6 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/actions/DownloadSuitableThemeAction.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/actions/DownloadSuitableThemeAction.java @@ -14,6 +14,7 @@ import com.fr.design.login.DesignerLoginSource; import com.fr.design.mainframe.DesignerContext; import com.fr.design.mainframe.JTemplate; import com.fr.design.mainframe.share.util.DownloadUtils; +import com.fr.design.mainframe.theme.dialog.TemplateThemeUsingDialog; import com.fr.stable.StringUtils; import com.fr.transaction.CallBackAdaptor; import com.fr.workspace.WorkContext; @@ -21,7 +22,11 @@ import com.fr.workspace.WorkContext; import javax.swing.Action; import javax.swing.JOptionPane; import javax.swing.SwingWorker; +import java.awt.Window; import java.awt.event.ActionEvent; +import java.awt.event.WindowAdapter; +import java.awt.event.WindowEvent; +import java.util.concurrent.ExecutionException; /** * @author Starryi @@ -31,6 +36,7 @@ import java.awt.event.ActionEvent; public class DownloadSuitableThemeAction extends UpdateAction { private final String themePath; private boolean downloading = false; + private JTemplate currentTemplate; public DownloadSuitableThemeAction(String themePath) { this.themePath = themePath; @@ -40,9 +46,8 @@ public class DownloadSuitableThemeAction extends UpdateAction { @Override public void actionPerformed(ActionEvent e) { - if (checkAuthority()) { - saveTheme(); - } + currentTemplate = HistoryTemplateListCache.getInstance().getCurrentEditingTemplate(); + fetchTheme(); } private boolean checkAuthority() { @@ -63,43 +68,43 @@ public class DownloadSuitableThemeAction extends UpdateAction { return true; } - private void saveTheme() { + private void fetchTheme() { + if (!checkAuthority()) { + onThemeFetched(null); + return; + } if (downloading) { return; } downloading = true; - final JTemplate template = HistoryTemplateListCache.getInstance().getCurrentEditingTemplate(); - new SwingWorker() { + new SwingWorker() { @Override - protected Boolean doInBackground() { - FormTheme theme = fetchRemoteTheme(); - if (theme == null) { - return false; - } - - theme = ensureThemeHasUniqueName(theme, theme.getName()); - if (theme == null) { - return false; - } - - String themeName = theme.getName(); - saveThemeToConfig(theme, new SaveToThemeConfigCallback(template, themeName)); - - return true; - + protected FormTheme doInBackground() { + return DownloadUtils.downloadThemeFile(themePath); } @Override protected void done() { + FormTheme theme = null; + try { + theme = get(); + } catch (InterruptedException | ExecutionException e) { + e.printStackTrace(); + } + + onThemeFetched(theme); downloading = false; } }.execute(); } - private FormTheme fetchRemoteTheme() { - return DownloadUtils.downloadThemeFile(themePath); + public void onThemeFetched(FormTheme theme) { + if (theme == null) { + return; + } + saveTheme(theme); } private FormTheme ensureThemeHasUniqueName(FormTheme theme, String expectedName) { @@ -118,36 +123,65 @@ public class DownloadSuitableThemeAction extends UpdateAction { } } - private void saveThemeToConfig(final FormTheme theme, CallBackAdaptor callback) { - FormThemeConfig.getInstance().addTheme(theme, true, callback); + private void saveTheme(FormTheme theme) { + final FormTheme uniqueNamedTheme = ensureThemeHasUniqueName(theme, theme.getName()); + if (uniqueNamedTheme != null) { + FormThemeConfig.getInstance().addTheme(theme, true, new CallBackAdaptor() { + @Override + public void afterCommit() { + super.afterCommit(); + onThemeSaved(uniqueNamedTheme); + } + + @Override + public void afterRollback() { + super.afterRollback(); + onThemeSaved(null); + } + }); + } else { + onThemeSaved(null); + } + } + + public void onThemeSaved(FormTheme theme) { + if (theme == null) { + return; + } + + Window designerFrame = DesignerContext.getDesignerFrame(); + TemplateThemeUsingDialog dialog = new TemplateThemeUsingDialog<>(designerFrame, currentTemplate, FormThemeConfig.getInstance()); + dialog.addWindowListener(new UsingDialogAdapter(theme)); + dialog.setVisible(true); + } + + public void applyTheme(JTemplate template, final String name, Window dialog) { + TemplateThemeConfig config = template.getUsingTemplateThemeConfig(); + TemplateTheme theme = config.cachedFetch(name); + template.setTemplateTheme(theme); + dialog.repaint(); } - public static class SaveToThemeConfigCallback extends CallBackAdaptor { - private final JTemplate template; - private final String themeName; + private class UsingDialogAdapter extends WindowAdapter { + private final FormTheme theme; - public SaveToThemeConfigCallback(JTemplate template, String themeName) { - this.template = template; - this.themeName = themeName; + public UsingDialogAdapter(FormTheme theme) { + this.theme = theme; } @Override - public void afterCommit() { - super.afterCommit(); + public void windowOpened(WindowEvent e) { + super.windowOpened(e); + Window window = e.getWindow(); int returnVal = FineJOptionPane.showConfirmDialog( - DesignerContext.getDesignerFrame(), + window, Toolkit.i18nText("Fine-Design_Share_Apply_Suitable_Theme_Tip"), Toolkit.i18nText("Fine-Design_Basic_Confirm"), FineJOptionPane.OK_CANCEL_OPTION); if (returnVal == JOptionPane.YES_OPTION) { - applyTheme(template, themeName); + applyTheme(currentTemplate, theme.getName(), window); } - } - - private void applyTheme(JTemplate template, final String name) { - TemplateThemeConfig config = template.getUsingTemplateThemeConfig(); - TemplateTheme theme = config.cachedFetch(name); - template.setTemplateTheme(theme); + window.removeWindowListener(this); } } }