diff --git a/designer-base/src/main/java/com/fr/design/DesignerEnvManager.java b/designer-base/src/main/java/com/fr/design/DesignerEnvManager.java index de83d6d7b4..97b4d0f6ce 100644 --- a/designer-base/src/main/java/com/fr/design/DesignerEnvManager.java +++ b/designer-base/src/main/java/com/fr/design/DesignerEnvManager.java @@ -199,6 +199,8 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { private DesignerLoginConfigManager designerLoginConfigManager = DesignerLoginConfigManager.getInstance(); + private boolean showTemplateMissingPlugin = true; + /** * DesignerEnvManager. */ @@ -315,8 +317,8 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { } LogHandler handler = new LogHandler() { final FileAppender appender = new FileAppender( - new com.fr.third.apache.log4j.PatternLayout("%d{HH:mm:ss} %t %p [%c] %m%n"), - fileName + new com.fr.third.apache.log4j.PatternLayout("%d{HH:mm:ss} %t %p [%c] %m%n"), + fileName ); @Override @@ -621,6 +623,24 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { this.templateTreePaneExpanded = templateTreePaneExpanded; } + /** + * 是否提示模板缺少插件 + * + * @return 提示返回true + */ + public boolean isShowTemplateMissingPlugin() { + return showTemplateMissingPlugin; + } + + /** + * 设置是否提示模板缺少插件 + * + * @param showTemplateMissingPlugin 是否提示 + */ + public void setShowTemplateMissingPlugin(boolean showTemplateMissingPlugin) { + this.showTemplateMissingPlugin = showTemplateMissingPlugin; + } + /** * 知否自动备份 * @@ -1698,7 +1718,7 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { } } - private void readComponentReuseNotificationInfo(XMLableReader reader){ + private void readComponentReuseNotificationInfo(XMLableReader reader) { reader.readXMLObject(this.notificationInfo); } @@ -1792,6 +1812,7 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { this.setRecentSelectedConnection(tmpVal); } this.setEmbedServerLazyStartup(reader.getAttrAsBoolean("embedServerLazyStartup", false)); + this.setShowTemplateMissingPlugin(reader.getAttrAsBoolean("showTemplateMissingPlugin", true)); } private void readReportPaneAttributions(XMLableReader reader) { @@ -2060,6 +2081,9 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { if (this.isEmbedServerLazyStartup()) { writer.attr("embedServerLazyStartup", this.isEmbedServerLazyStartup()); } + if (!this.isShowTemplateMissingPlugin()) { + writer.attr("showTemplateMissingPlugin", this.isShowTemplateMissingPlugin()); + } writer.end(); } @@ -2212,11 +2236,12 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { enum XmlHandler { Self; + public void handle(Throwable throwable) { ErrorDialog dialog = new ErrorDialog(null, - Toolkit.i18nText("Fine-Design_Error_Start_Apology_Message"), - Toolkit.i18nText("Fine-Design_Error_Start_Report"), - throwable.getMessage()) { + Toolkit.i18nText("Fine-Design_Error_Start_Apology_Message"), + Toolkit.i18nText("Fine-Design_Error_Start_Report"), + throwable.getMessage()) { @Override protected void okEvent() { dispose(); @@ -2232,5 +2257,5 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { dialog.setVisible(true); DesignerExiter.getInstance().execute(); } - }; + } } 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 f386437376..14145d1197 100644 --- a/designer-base/src/main/java/com/fr/design/EnvChangeEntrance.java +++ b/designer-base/src/main/java/com/fr/design/EnvChangeEntrance.java @@ -96,8 +96,9 @@ public class EnvChangeEntrance { * @param envName 目标工作目录名称 */ public void switch2Env(final String envName) { - switch2Env(envName, PopTipStrategy.LATER); - VersionCheckUtils.showVersionCheckDialog(envName); + if (switch2Env(envName, PopTipStrategy.LATER)) { + VersionCheckUtils.showVersionCheckDialog(envName); + } } /** @@ -445,9 +446,12 @@ public class EnvChangeEntrance { @Override public void doOk() { - envListOkAction(envListPane, PopTipStrategy.LATER); + boolean changeResult = envListOkAction(envListPane, PopTipStrategy.LATER); // 切换完成后清理密码 updateNotRememberPwdEnv(); + if (changeResult) { + VersionCheckUtils.showVersionCheckDialog(envListPane.updateEnvManager()); + } } @Override @@ -479,6 +483,7 @@ public class EnvChangeEntrance { DesignerExiter.getInstance().execute(); } else { updateNotRememberPwdEnv(); + VersionCheckUtils.showVersionCheckDialog(envListPane.updateEnvManager()); } } diff --git a/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java b/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java index 5afe58ad30..133bbb03f2 100644 --- a/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java +++ b/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java @@ -40,7 +40,6 @@ import com.fr.general.log.Log4jConfig; import com.fr.locale.InterProviderFactory; import com.fr.log.FineLoggerFactory; import com.fr.stable.Constants; -import com.fr.stable.StableUtils; import com.fr.stable.os.OperatingSystem; import com.fr.third.apache.log4j.Level; import com.fr.transaction.Configurations; @@ -141,6 +140,8 @@ public class PreferencePane extends BasicPane { private UIComboBox maxUndoLimit; //是非支持自动计算父格 private UICheckBox supportDefaultParentCalculateCheckBox; + //打开模板是否提示缺少插件 + private UICheckBox showTemplateMissingPlugin; //是否自动转化为公式 private UICheckBox supportStringToFormulaBox; @@ -361,6 +362,11 @@ public class PreferencePane extends BasicPane { supportDefaultParentCalculateCheckBox = new UICheckBox( i18nText("Fine-Design_Basic_Preference_Support_Default_Parent_Calculate")); functionPane.add(supportDefaultParentCalculateCheckBox); + + //添加是否展示打开模板提示缺少插件选择项 + showTemplateMissingPlugin = new UICheckBox( + i18nText("Fine-Design_Basic_Preference_Show-Template-Missing-Plugin")); + functionPane.add(showTemplateMissingPlugin); } private void createEditPane(JPanel generalPane) { @@ -644,6 +650,8 @@ public class PreferencePane extends BasicPane { supportDefaultParentCalculateCheckBox.setSelected(designerEnvManager.isSupportDefaultParentCalculate()); + showTemplateMissingPlugin.setSelected(designerEnvManager.isShowTemplateMissingPlugin()); + supportStringToFormulaBox.setSelected(designerEnvManager.isSupportStringToFormula()); shortCutLabel.setText(getDisplayShortCut(designerEnvManager.getAutoCompleteShortcuts())); @@ -744,6 +752,8 @@ public class PreferencePane extends BasicPane { designerEnvManager.setSupportDefaultParentCalculate(supportDefaultParentCalculateCheckBox.isSelected()); + designerEnvManager.setShowTemplateMissingPlugin(showTemplateMissingPlugin.isSelected()); + designerEnvManager.setSupportStringToFormula(supportStringToFormulaBox.isSelected()); designerEnvManager.setDefaultStringToFormula(defaultStringToFormulaBox.isSelected()); diff --git a/designer-base/src/main/java/com/fr/design/mainframe/ComponentReuseNotifyUtil.java b/designer-base/src/main/java/com/fr/design/mainframe/ComponentReuseNotifyUtil.java index 4ab10194ce..2175804dcf 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/ComponentReuseNotifyUtil.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/ComponentReuseNotifyUtil.java @@ -18,7 +18,7 @@ public class ComponentReuseNotifyUtil { } - public static void enterWidgetLibExtraAction(boolean needValidRead) { + public static void enterWidgetLibExtraAction() { if (ComponentReuseNotificationInfo.getInstance().isClickedWidgetLib()) { return; } @@ -28,7 +28,7 @@ public class ComponentReuseNotifyUtil { return COMPONENT_SNAP_CHAT_KEY; } }); - if (snapChat.hasRead() && needValidRead) { + if (snapChat.hasRead()) { DesignerToastMsgUtil.toastPrompt(Toolkit.i18nText("Fine-Design_Component_Reuse_Merge_Prompt")); } ComponentReuseNotificationInfo.getInstance().setClickedWidgetLib(true); diff --git a/designer-base/src/main/java/com/fr/design/mainframe/EastRegionContainerPane.java b/designer-base/src/main/java/com/fr/design/mainframe/EastRegionContainerPane.java index 3047ca99ca..847a2dcba3 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/EastRegionContainerPane.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/EastRegionContainerPane.java @@ -315,7 +315,7 @@ public class EastRegionContainerPane extends UIEastResizableContainer { @Override public void actionPerformed(ActionEvent e) { ComponentCollector.getInstance().collectCmpBoardClick(); - ComponentReuseNotifyUtil.enterWidgetLibExtraAction(true); + ComponentReuseNotifyUtil.enterWidgetLibExtraAction(); } }); // 权限编辑 diff --git a/designer-form/src/main/java/com/fr/design/mainframe/FormWidgetDetailPane.java b/designer-form/src/main/java/com/fr/design/mainframe/FormWidgetDetailPane.java index f22592ee73..60a63a0cc5 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/FormWidgetDetailPane.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/FormWidgetDetailPane.java @@ -4,17 +4,24 @@ import com.fr.base.BaseUtils; import com.fr.design.dialog.BasicPane; import com.fr.design.file.Releasable; import com.fr.design.gui.ibutton.UIHeadGroup; +import com.fr.design.gui.ilable.UILabel; +import com.fr.design.i18n.Toolkit; import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.mainframe.reuse.ComponentReuseNotificationInfo; import com.fr.design.mainframe.share.collect.ComponentCollector; import com.fr.design.mainframe.share.ui.local.LocalWidgetRepoPane; import com.fr.design.mainframe.share.ui.online.OnlineWidgetRepoPane; +import javax.swing.BorderFactory; import javax.swing.Icon; import javax.swing.JPanel; import javax.swing.JScrollPane; +import javax.swing.SwingConstants; import java.awt.BorderLayout; import java.awt.CardLayout; +import java.awt.Color; +import java.awt.Dimension; +import java.awt.FlowLayout; import java.util.ArrayList; import java.util.List; @@ -31,6 +38,8 @@ public class FormWidgetDetailPane extends FormDockView implements Releasable { private UIHeadGroup headGroup; private List paneList; + private boolean isEmptyPane = false; + public static FormWidgetDetailPane getInstance() { if (HOLDER.singleton == null) { HOLDER.singleton = new FormWidgetDetailPane(); @@ -59,7 +68,7 @@ public class FormWidgetDetailPane extends FormDockView implements Releasable { } public String getViewTitle() { - return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Widget_Tree_And_Table"); + return Toolkit.i18nText("Fine-Design_Form_Widget_Tree_And_Table"); } @Override @@ -71,6 +80,9 @@ public class FormWidgetDetailPane extends FormDockView implements Releasable { * 初始化 */ public void refreshDockingView(){ + if (isEmptyPane) { + return; + } FormDesigner designer = this.getEditingFormDesigner(); removeAll(); if (designer == null) { @@ -101,6 +113,10 @@ public class FormWidgetDetailPane extends FormDockView implements Releasable { this.add(centerPane, BorderLayout.CENTER); } + public void resetEmptyPane(){ + this.isEmptyPane = false; + } + /** * 清除数据 @@ -111,10 +127,34 @@ public class FormWidgetDetailPane extends FormDockView implements Releasable { this.add(psp, BorderLayout.CENTER); } + public void switch2Empty(){ + isEmptyPane = true; + this.removeAll(); + JPanel panel = FRGUIPaneFactory.createVerticalFlowLayout_Pane(true, FlowLayout.LEADING, 0, 5); + UILabel imagePanel = new UILabel(BaseUtils.readIcon("/com/fr/design/form/images/version_not_match.png")); + imagePanel.setPreferredSize(new Dimension(240, 96)); + imagePanel.setHorizontalAlignment(SwingConstants.CENTER); + panel.add(imagePanel); + UILabel uiLabel1 = tipLabel(Toolkit.i18nText("Fine-Design_Share_Version_Not_Match_Tip1")); + UILabel uiLabel2 = tipLabel(Toolkit.i18nText("Fine-Design_Share_Version_Not_Match_Tip2")); + panel.add(uiLabel1); + panel.add(uiLabel2); + panel.setBorder(BorderFactory.createEmptyBorder(240, 0, 0, 0)); + this.add(panel, BorderLayout.CENTER); + } + + private UILabel tipLabel(String text) { + UILabel tipLabel = new UILabel(text); + tipLabel.setHorizontalAlignment(SwingConstants.CENTER); + tipLabel.setPreferredSize(new Dimension(240, 20)); + tipLabel.setForeground(Color.decode("#8F8F92")); + return tipLabel; + } + public void enterWidgetLib() { + ComponentReuseNotifyUtil.enterWidgetLibExtraAction(); EastRegionContainerPane.getInstance().switchTabTo(EastRegionContainerPane.KEY_WIDGET_LIB); - ComponentReuseNotifyUtil.enterWidgetLibExtraAction(false); } /** diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/local/LocalWidgetRepoPane.java b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/local/LocalWidgetRepoPane.java index 487a414e51..fad64627f8 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/local/LocalWidgetRepoPane.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/local/LocalWidgetRepoPane.java @@ -5,6 +5,7 @@ import com.fr.design.gui.icontainer.UIScrollPane; import com.fr.design.i18n.Toolkit; import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.layout.VerticalFlowLayout; +import com.fr.design.mainframe.FormWidgetDetailPane; import com.fr.design.mainframe.share.sort.WidgetSortType; import com.fr.design.mainframe.share.ui.widgetfilter.LocalWidgetFilter; import com.fr.design.mainframe.share.util.InstallComponentHelper; @@ -213,6 +214,7 @@ public class LocalWidgetRepoPane extends BasicPane { Thread.currentThread().interrupt(); } catch (ExecutionException e) { FineLoggerFactory.getLogger().error(e.getMessage(), e); + FormWidgetDetailPane.getInstance().switch2Empty(); } finally { isRefreshing.set(false); } diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/util/InstallComponentHelper.java b/designer-form/src/main/java/com/fr/design/mainframe/share/util/InstallComponentHelper.java index d2846d93cd..8c88de20b1 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/share/util/InstallComponentHelper.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/util/InstallComponentHelper.java @@ -46,9 +46,14 @@ public class InstallComponentHelper { } private static boolean needPreInstallComponent() { - //老用户或者组件库里已有组件,不预装组件 - SnapChat snapChat = SnapChatFactory.createSnapChat(false, SnapChatKeys.COMPONENT); - return !snapChat.hasRead() && !hasComponentInstalled(); + try { + //老用户或者组件库里已有组件,不预装组件 + SnapChat snapChat = SnapChatFactory.createSnapChat(false, SnapChatKeys.COMPONENT); + return !snapChat.hasRead() && !hasComponentInstalled(); + } catch (Throwable e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + } + return false; } /** diff --git a/designer-form/src/main/resources/com/fr/design/form/images/version_not_match.png b/designer-form/src/main/resources/com/fr/design/form/images/version_not_match.png new file mode 100644 index 0000000000..cb3eeffe2e Binary files /dev/null and b/designer-form/src/main/resources/com/fr/design/form/images/version_not_match.png differ diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/app/DesignerAppUtils.java b/designer-realize/src/main/java/com/fr/design/mainframe/app/DesignerAppUtils.java index 7fb16a56b2..4680a8a258 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/app/DesignerAppUtils.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/app/DesignerAppUtils.java @@ -77,6 +77,11 @@ public class DesignerAppUtils { * @return 格式化后的多行插件错误信息详情 */ public static String dealWithErrorDetailMultiLineAndCache(String key) { + if (!DesignerEnvManager.getEnvManager().isShowTemplateMissingPlugin()) { + // 直接清空不提示 + TemplateIOErrorContextHolder.reset(); + return StringUtils.EMPTY; + } Multimap pendingPlugins = TemplateIOErrorContextHolder.getPendingPlugin(); if (pendingPlugins.isEmpty()) { return StringUtils.EMPTY; diff --git a/designer-realize/src/main/java/com/fr/design/share/SharableManager.java b/designer-realize/src/main/java/com/fr/design/share/SharableManager.java index 0e3a1c41e8..b84349be40 100644 --- a/designer-realize/src/main/java/com/fr/design/share/SharableManager.java +++ b/designer-realize/src/main/java/com/fr/design/share/SharableManager.java @@ -3,6 +3,7 @@ package com.fr.design.share; import com.fr.design.base.clipboard.ClipboardFilter; import com.fr.design.designer.creator.XCreator; import com.fr.design.designer.creator.XLayoutContainer; +import com.fr.design.mainframe.FormWidgetDetailPane; import com.fr.design.mainframe.JForm; import com.fr.design.mainframe.JTemplate; import com.fr.design.mainframe.share.collect.ComponentCollector; @@ -55,6 +56,7 @@ public class SharableManager { GeneralContext.addEnvChangedListenerToLast(new EnvChangedListener() { @Override public void envChanged() { + FormWidgetDetailPane.getInstance().resetEmptyPane(); LocalWidgetRepoPane.getInstance().refreshPane(); } });