Browse Source

Pull request #6111: REPORT-60431 & REPORT-60437 & REPORT-60403

Merge in DESIGN/design from ~STARRYI/design:REPORT-57806 to feature/x

* commit 'b06cfadd2becfe64cd7e2d211f31d54418408bb4':
  REPORT-60403 【主题获取】兼容主题下生成的组件,目前还是存了主题信息
  REPORT-60437 【主题获取】获取主题时,没有弹出模板主题列表
  REPORT-60431 【主题获取】组件右键时,下载按钮依旧存在
research/11.0
starryi 3 years ago
parent
commit
2352e6a4ae
  1. 11
      designer-form/src/main/java/com/fr/design/mainframe/share/generate/task/ComponentCreator.java
  2. 118
      designer-form/src/main/java/com/fr/design/mainframe/share/ui/actions/DownloadSuitableThemeAction.java
  3. 35
      designer-form/src/main/java/com/fr/design/mainframe/share/ui/block/OnlineWidgetBlock.java
  4. 5
      designer-form/src/main/java/com/fr/design/mainframe/share/util/ShareComponentUtils.java

11
designer-form/src/main/java/com/fr/design/mainframe/share/generate/task/ComponentCreator.java

@ -4,6 +4,7 @@ import com.fr.base.TableData;
import com.fr.base.iofile.attr.ExtendSharableAttrMark; import com.fr.base.iofile.attr.ExtendSharableAttrMark;
import com.fr.base.iofile.attr.SharableAttrMark; import com.fr.base.iofile.attr.SharableAttrMark;
import com.fr.base.theme.TemplateTheme; import com.fr.base.theme.TemplateTheme;
import com.fr.base.theme.TemplateThemeConfig;
import com.fr.design.i18n.Toolkit; import com.fr.design.i18n.Toolkit;
import com.fr.design.mainframe.JTemplate; import com.fr.design.mainframe.JTemplate;
import com.fr.design.mainframe.share.generate.impl.AbstractComponentCreatorProcessor; import com.fr.design.mainframe.share.generate.impl.AbstractComponentCreatorProcessor;
@ -18,6 +19,7 @@ import com.fr.form.share.utils.ShareUtils;
import com.fr.form.ui.AbstractBorderStyleWidget; import com.fr.form.ui.AbstractBorderStyleWidget;
import com.fr.form.ui.Widget; import com.fr.form.ui.Widget;
import com.fr.log.FineLoggerFactory; import com.fr.log.FineLoggerFactory;
import com.fr.stable.StringUtils;
import com.fr.stable.fun.IOFileAttrMark; import com.fr.stable.fun.IOFileAttrMark;
import com.fr.workspace.WorkContext; import com.fr.workspace.WorkContext;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
@ -61,8 +63,13 @@ public class ComponentCreator extends AbstractComponentCreatorProcessor {
private void setSuitableTemplateThemeName(JTemplate<?, ?> jt, DefaultSharableWidget info) { private void setSuitableTemplateThemeName(JTemplate<?, ?> jt, DefaultSharableWidget info) {
TemplateTheme theme = jt.getTemplateTheme(); TemplateTheme theme = jt.getTemplateTheme();
if (theme != null) { if (theme != null ) {
info.setSuitableTemplateThemeName(theme.getName()); String name = theme.getName();
TemplateThemeConfig<? extends TemplateTheme> config = jt.getUsingTemplateThemeConfig();
String name4LegacyTemplate = config.getThemeName4LegacyTemplate();
if (!StringUtils.equals(name, name4LegacyTemplate)) {
info.setSuitableTemplateThemeName(name);
}
} }
} }

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.DesignerContext;
import com.fr.design.mainframe.JTemplate; import com.fr.design.mainframe.JTemplate;
import com.fr.design.mainframe.share.util.DownloadUtils; import com.fr.design.mainframe.share.util.DownloadUtils;
import com.fr.design.mainframe.theme.dialog.TemplateThemeUsingDialog;
import com.fr.stable.StringUtils; import com.fr.stable.StringUtils;
import com.fr.transaction.CallBackAdaptor; import com.fr.transaction.CallBackAdaptor;
import com.fr.workspace.WorkContext; import com.fr.workspace.WorkContext;
@ -21,7 +22,11 @@ import com.fr.workspace.WorkContext;
import javax.swing.Action; import javax.swing.Action;
import javax.swing.JOptionPane; import javax.swing.JOptionPane;
import javax.swing.SwingWorker; import javax.swing.SwingWorker;
import java.awt.Window;
import java.awt.event.ActionEvent; import java.awt.event.ActionEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.concurrent.ExecutionException;
/** /**
* @author Starryi * @author Starryi
@ -31,6 +36,7 @@ import java.awt.event.ActionEvent;
public class DownloadSuitableThemeAction extends UpdateAction { public class DownloadSuitableThemeAction extends UpdateAction {
private final String themePath; private final String themePath;
private boolean downloading = false; private boolean downloading = false;
private JTemplate<?, ?> currentTemplate;
public DownloadSuitableThemeAction(String themePath) { public DownloadSuitableThemeAction(String themePath) {
this.themePath = themePath; this.themePath = themePath;
@ -40,9 +46,8 @@ public class DownloadSuitableThemeAction extends UpdateAction {
@Override @Override
public void actionPerformed(ActionEvent e) { public void actionPerformed(ActionEvent e) {
if (checkAuthority()) { currentTemplate = HistoryTemplateListCache.getInstance().getCurrentEditingTemplate();
saveTheme(); fetchTheme();
}
} }
private boolean checkAuthority() { private boolean checkAuthority() {
@ -63,43 +68,43 @@ public class DownloadSuitableThemeAction extends UpdateAction {
return true; return true;
} }
private void saveTheme() { private void fetchTheme() {
if (!checkAuthority()) {
onThemeFetched(null);
return;
}
if (downloading) { if (downloading) {
return; return;
} }
downloading = true; downloading = true;
final JTemplate<?,?> template = HistoryTemplateListCache.getInstance().getCurrentEditingTemplate(); new SwingWorker<FormTheme, Void>() {
new SwingWorker<Boolean, Void>() {
@Override @Override
protected Boolean doInBackground() { protected FormTheme doInBackground() {
FormTheme theme = fetchRemoteTheme(); return DownloadUtils.downloadThemeFile(themePath);
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;
} }
@Override @Override
protected void done() { protected void done() {
FormTheme theme = null;
try {
theme = get();
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
onThemeFetched(theme);
downloading = false; downloading = false;
} }
}.execute(); }.execute();
} }
private FormTheme fetchRemoteTheme() { public void onThemeFetched(FormTheme theme) {
return DownloadUtils.downloadThemeFile(themePath); if (theme == null) {
return;
}
saveTheme(theme);
} }
private FormTheme ensureThemeHasUniqueName(FormTheme theme, String expectedName) { private FormTheme ensureThemeHasUniqueName(FormTheme theme, String expectedName) {
@ -118,36 +123,65 @@ public class DownloadSuitableThemeAction extends UpdateAction {
} }
} }
private void saveThemeToConfig(final FormTheme theme, CallBackAdaptor callback) { private void saveTheme(FormTheme theme) {
FormThemeConfig.getInstance().addTheme(theme, true, callback); 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 class UsingDialogAdapter extends WindowAdapter {
private final JTemplate<?,?> template; private final FormTheme theme;
private final String themeName;
public SaveToThemeConfigCallback(JTemplate<?, ?> template, String themeName) { public UsingDialogAdapter(FormTheme theme) {
this.template = template; this.theme = theme;
this.themeName = themeName;
} }
@Override @Override
public void afterCommit() { public void windowOpened(WindowEvent e) {
super.afterCommit(); super.windowOpened(e);
Window window = e.getWindow();
int returnVal = FineJOptionPane.showConfirmDialog( int returnVal = FineJOptionPane.showConfirmDialog(
DesignerContext.getDesignerFrame(), window,
Toolkit.i18nText("Fine-Design_Share_Apply_Suitable_Theme_Tip"), Toolkit.i18nText("Fine-Design_Share_Apply_Suitable_Theme_Tip"),
Toolkit.i18nText("Fine-Design_Basic_Confirm"), Toolkit.i18nText("Fine-Design_Basic_Confirm"),
FineJOptionPane.OK_CANCEL_OPTION); FineJOptionPane.OK_CANCEL_OPTION);
if (returnVal == JOptionPane.YES_OPTION) { if (returnVal == JOptionPane.YES_OPTION) {
applyTheme(template, themeName); applyTheme(currentTemplate, theme.getName(), window);
} }
} window.removeWindowListener(this);
private void applyTheme(JTemplate<?,?> template, final String name) {
TemplateThemeConfig<? extends TemplateTheme> config = template.getUsingTemplateThemeConfig();
TemplateTheme theme = config.cachedFetch(name);
template.setTemplateTheme(theme);
} }
} }
} }

35
designer-form/src/main/java/com/fr/design/mainframe/share/ui/block/OnlineWidgetBlock.java

@ -35,8 +35,11 @@ import com.fr.stable.StableUtils;
import com.fr.stable.StringUtils; import com.fr.stable.StringUtils;
import javax.swing.JPanel; import javax.swing.JPanel;
import javax.swing.JPopupMenu;
import javax.swing.SwingConstants; import javax.swing.SwingConstants;
import javax.swing.SwingWorker; import javax.swing.SwingWorker;
import javax.swing.event.PopupMenuEvent;
import javax.swing.event.PopupMenuListener;
import java.awt.AlphaComposite; import java.awt.AlphaComposite;
import java.awt.BorderLayout; import java.awt.BorderLayout;
import java.awt.Color; import java.awt.Color;
@ -60,9 +63,10 @@ import java.util.concurrent.ExecutionException;
* Created by kerry on 2020-10-19 * Created by kerry on 2020-10-19
* 商城组件块 * 商城组件块
*/ */
public class OnlineWidgetBlock extends AbstractOnlineWidgetBlock { public class OnlineWidgetBlock extends AbstractOnlineWidgetBlock implements PopupMenuListener {
private boolean isMouseEnter = false; private boolean isMouseEnter = false;
private boolean downloading = false; private boolean downloading = false;
private boolean popupMenuVisible = false;
private static final Color COVER_COLOR = Color.decode("#333334"); private static final Color COVER_COLOR = Color.decode("#333334");
protected MouseEvent lastPressEvent; protected MouseEvent lastPressEvent;
private double process = 0D; private double process = 0D;
@ -89,6 +93,13 @@ public class OnlineWidgetBlock extends AbstractOnlineWidgetBlock {
return southPane; return southPane;
} }
@Override
public JPopupMenu createRightClickPopupMenu() {
JPopupMenu popupMenu = super.createRightClickPopupMenu();
popupMenu.addPopupMenuListener(this);
return popupMenu;
}
@Override @Override
public void mouseEntered(MouseEvent e) { public void mouseEntered(MouseEvent e) {
super.mouseEntered(e); super.mouseEntered(e);
@ -113,7 +124,7 @@ public class OnlineWidgetBlock extends AbstractOnlineWidgetBlock {
public void mouseClicked(MouseEvent e) { public void mouseClicked(MouseEvent e) {
super.mouseClicked(e); super.mouseClicked(e);
boolean isLeftClickDownloadIcon = e.getButton() != MouseEvent.BUTTON3 && getDownloadIconRec().contains(e.getX(), e.getY()); boolean isLeftClickDownloadIcon = e.getButton() != MouseEvent.BUTTON3 && getDownloadIconRec().contains(e.getX(), e.getY());
if (isLeftClickDownloadIcon && !checkWidgetInstalled()) { if (!popupMenuVisible && isLeftClickDownloadIcon && !checkWidgetInstalled()) {
downLoadWidget(); downLoadWidget();
} }
} }
@ -270,7 +281,7 @@ public class OnlineWidgetBlock extends AbstractOnlineWidgetBlock {
return; return;
} }
//如果鼠标移动到布局内且布局不可编辑,画出编辑蒙层 //如果鼠标移动到布局内且布局不可编辑,画出编辑蒙层
if (isMouseEnter || downloading) { if (!popupMenuVisible && (isMouseEnter || downloading)) {
Graphics2D g2d = (Graphics2D) g; Graphics2D g2d = (Graphics2D) g;
Composite oldComposite = g2d.getComposite(); Composite oldComposite = g2d.getComposite();
//画白色的编辑层 //画白色的编辑层
@ -299,6 +310,24 @@ public class OnlineWidgetBlock extends AbstractOnlineWidgetBlock {
} }
} }
@Override
public void popupMenuWillBecomeVisible(PopupMenuEvent e) {
this.popupMenuVisible = true;
repaint();
}
@Override
public void popupMenuWillBecomeInvisible(PopupMenuEvent e) {
this.popupMenuVisible = false;
repaint();
}
@Override
public void popupMenuCanceled(PopupMenuEvent e) {
this.popupMenuVisible = false;
repaint();
}
class WidgetDownloadProcess implements com.fr.design.extra.Process<Double> { class WidgetDownloadProcess implements com.fr.design.extra.Process<Double> {

5
designer-form/src/main/java/com/fr/design/mainframe/share/util/ShareComponentUtils.java

@ -3,6 +3,7 @@ package com.fr.design.mainframe.share.util;
import com.fr.base.io.IOFile; import com.fr.base.io.IOFile;
import com.fr.base.iofile.attr.ExtendSharableAttrMark; import com.fr.base.iofile.attr.ExtendSharableAttrMark;
import com.fr.base.theme.FormTheme; import com.fr.base.theme.FormTheme;
import com.fr.base.theme.FormThemeConfig;
import com.fr.base.theme.TemplateTheme; import com.fr.base.theme.TemplateTheme;
import com.fr.base.theme.TemplateThemeCompatible; import com.fr.base.theme.TemplateThemeCompatible;
import com.fr.design.designer.creator.XCreator; import com.fr.design.designer.creator.XCreator;
@ -58,9 +59,11 @@ public class ShareComponentUtils {
JTemplate<?,?> template = HistoryTemplateListCache.getInstance().getCurrentEditingTemplate(); JTemplate<?,?> template = HistoryTemplateListCache.getInstance().getCurrentEditingTemplate();
TemplateTheme theme = template.getTemplateTheme(); TemplateTheme theme = template.getTemplateTheme();
if (theme instanceof FormTheme) { if (theme instanceof FormTheme) {
String themeName4LegacyTemplate = FormThemeConfig.getInstance().getThemeName4LegacyTemplate();
boolean isCurrentUsingThemeSuitSharedComponent = StringUtils.isNotEmpty(theme.getName()) && boolean isCurrentUsingThemeSuitSharedComponent = StringUtils.isNotEmpty(theme.getName()) &&
StringUtils.isNotEmpty(suitableTemplateThemeName) && StringUtils.isNotEmpty(suitableTemplateThemeName) &&
StringUtils.equals(theme.getName(), suitableTemplateThemeName); StringUtils.equals(theme.getName(), suitableTemplateThemeName) &&
!StringUtils.equals(theme.getName(), themeName4LegacyTemplate);
XCreatorUtils.setupTemplateTheme(creator, false, (FormTheme) theme, isCurrentUsingThemeSuitSharedComponent ? TemplateThemeCompatible.NONE : TemplateThemeCompatible.ABSENT); XCreatorUtils.setupTemplateTheme(creator, false, (FormTheme) theme, isCurrentUsingThemeSuitSharedComponent ? TemplateThemeCompatible.NONE : TemplateThemeCompatible.ABSENT);
} }
return creator; return creator;

Loading…
Cancel
Save