Browse Source

REPORT-60437 【主题获取】获取主题时,没有弹出模板主题列表

【问题原因】
主题获取交互优化

【改动思路】
同上
research/11.0
Starryi 3 years ago
parent
commit
bcb00232b1
  1. 118
      designer-form/src/main/java/com/fr/design/mainframe/share/ui/actions/DownloadSuitableThemeAction.java

118
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<Boolean, Void>() {
new SwingWorker<FormTheme, Void>() {
@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<FormTheme> 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<? extends TemplateTheme> 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<? extends TemplateTheme> config = template.getUsingTemplateThemeConfig();
TemplateTheme theme = config.cachedFetch(name);
template.setTemplateTheme(theme);
window.removeWindowListener(this);
}
}
}

Loading…
Cancel
Save