From 05ea8e9600dfb2454296263f9dff6dd53637de72 Mon Sep 17 00:00:00 2001 From: hades Date: Fri, 15 May 2020 10:21:09 +0800 Subject: [PATCH 01/19] REPORT-31003 && REPORT-31236 && REPORT-31508 --- .../src/main/java/com/fr/design/DesignerEnvManager.java | 5 ++++- .../com/fr/design/update/ui/dialog/UpdateMainDialog.java | 6 +++++- .../src/main/java/com/fr/design/utils/DesignUtils.java | 4 +--- .../src/main/java/com/fr/design/report/RichTextPane.java | 3 ++- 4 files changed, 12 insertions(+), 6 deletions(-) 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 9cb45918c1..88d2625d02 100644 --- a/designer-base/src/main/java/com/fr/design/DesignerEnvManager.java +++ b/designer-base/src/main/java/com/fr/design/DesignerEnvManager.java @@ -58,6 +58,7 @@ import javax.swing.SwingWorker.StateValue; import java.awt.Color; import java.awt.Rectangle; import java.io.File; +import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.FileReader; import java.io.FileWriter; @@ -206,9 +207,11 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { GeneralContext.setLocale(designerEnvManager.getLanguage()); try { XMLTools.readFileXML(designerEnvManager, designerEnvManager.getDesignerEnvFile()); - } catch (Exception e) { + } catch (FileNotFoundException e) { FineLoggerFactory.getLogger().error(e.getMessage(), e); XmlHandler.Self.handle(e); + } catch (Exception e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); } // james:如果没有env定义,要设置一个默认的 diff --git a/designer-base/src/main/java/com/fr/design/update/ui/dialog/UpdateMainDialog.java b/designer-base/src/main/java/com/fr/design/update/ui/dialog/UpdateMainDialog.java index 78df599c57..d8a4c32a9a 100644 --- a/designer-base/src/main/java/com/fr/design/update/ui/dialog/UpdateMainDialog.java +++ b/designer-base/src/main/java/com/fr/design/update/ui/dialog/UpdateMainDialog.java @@ -30,6 +30,7 @@ import com.fr.general.http.HttpToolbox; import com.fr.json.JSONArray; import com.fr.json.JSONObject; import com.fr.log.FineLoggerFactory; +import com.fr.process.ProcessEventPipe; import com.fr.process.engine.core.FineProcessContext; import com.fr.process.engine.core.FineProcessEngineEvent; import com.fr.stable.*; @@ -600,7 +601,10 @@ public class UpdateMainDialog extends UIDialog { final String installLib = StableUtils.pathJoin(StableUtils.getInstallHome(), ProjectConstants.LOGS_NAME, UpdateConstants.INSTALL_LIB); final JFrame frame = DesignerContext.getDesignerFrame(); final RestartHelper helper = new RestartHelper(); - FineProcessContext.getParentPipe().fire(FineProcessEngineEvent.DESTROY); + ProcessEventPipe pipe = FineProcessContext.getParentPipe(); + if (pipe != null) { + pipe.fire(FineProcessEngineEvent.DESTROY); + } new FileProcess(callBack) { @Override public void onDownloadSuccess() { diff --git a/designer-base/src/main/java/com/fr/design/utils/DesignUtils.java b/designer-base/src/main/java/com/fr/design/utils/DesignUtils.java index 09a5b683dc..2bf64642f2 100644 --- a/designer-base/src/main/java/com/fr/design/utils/DesignUtils.java +++ b/designer-base/src/main/java/com/fr/design/utils/DesignUtils.java @@ -291,10 +291,8 @@ public class DesignUtils { if (isDisplaySimSun(defaultLocale)) { guiFRFont = getNamedFont("SimSun"); - } else if (isDisplayDialog(defaultLocale)) { + } else { guiFRFont = getNamedFont("Dialog"); - } else { - guiFRFont = getNamedFont("Tahoma"); } //先初始化的设计器locale, 后初始化lookandfeel.如果顺序改了, 这边也要调整. diff --git a/designer-realize/src/main/java/com/fr/design/report/RichTextPane.java b/designer-realize/src/main/java/com/fr/design/report/RichTextPane.java index d2cb19e868..fa19c38f82 100644 --- a/designer-realize/src/main/java/com/fr/design/report/RichTextPane.java +++ b/designer-realize/src/main/java/com/fr/design/report/RichTextPane.java @@ -1,6 +1,7 @@ package com.fr.design.report; import com.fr.base.BaseFormula; +import com.fr.base.FRContext; import com.fr.base.Style; import com.fr.design.cell.editor.RichTextToolBar; import com.fr.design.dialog.BasicPane; @@ -36,7 +37,7 @@ public class RichTextPane extends BasicPane { //12号字体有个奇怪的bug, 字体下部分渲染会截断一部分, 换其他字体没问题, 字体改大小也没问题. //直接弄个jtexarea放到jframe里也有同样问题, 不知道是字体渲染bug还是jdk问题 - public static final FRFont DEFAUL_FONT = FRFont.getInstance().applySize(13); + public static final FRFont DEFAUL_FONT = FRContext.getDefaultValues().getFRFont().applySize(13); private RichTextEditingPane textPane; //用于populate时动态更新按钮 From d07bc875271393e699a5a528bed385779b3868f7 Mon Sep 17 00:00:00 2001 From: "Java.Edge" Date: Fri, 15 May 2020 12:13:41 +0800 Subject: [PATCH 02/19] REPORT-27141 bugfix --- .../design/data/datapane/TreeTableDataComboBox.java | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/data/datapane/TreeTableDataComboBox.java b/designer-base/src/main/java/com/fr/design/data/datapane/TreeTableDataComboBox.java index 1e0d2c77e4..8b5c626571 100644 --- a/designer-base/src/main/java/com/fr/design/data/datapane/TreeTableDataComboBox.java +++ b/designer-base/src/main/java/com/fr/design/data/datapane/TreeTableDataComboBox.java @@ -2,6 +2,7 @@ package com.fr.design.data.datapane; import com.fr.data.TableDataSource; import com.fr.data.impl.RecursionTableData; +import com.fr.design.data.DesignTableDataManager; import com.fr.design.data.tabledata.wrapper.ServerTableDataWrapper; import com.fr.design.data.tabledata.wrapper.TableDataWrapper; import com.fr.design.data.tabledata.wrapper.TemplateTableDataWrapper; @@ -70,8 +71,14 @@ public class TreeTableDataComboBox extends UIComboBox { } public void setSelectedTableDataByName(String name) { - TableDataWrapper tableDataWrappe = res_map.get(name); - this.getModel().setSelectedItem(tableDataWrappe); + TableDataWrapper tableDataWrapper; + if (res_map.get(name) != null) { + tableDataWrapper = res_map.get(name); + } else { + String changeName = DesignTableDataManager.getChangedDsNameByOldDsName(name); + tableDataWrapper = res_map.get(changeName); + } + this.getModel().setSelectedItem(tableDataWrapper); } @Override From ced2a315e8ce51d1b46b4a33e612732ba799a904 Mon Sep 17 00:00:00 2001 From: hades Date: Mon, 18 May 2020 12:25:29 +0800 Subject: [PATCH 03/19] fix --- .../src/main/java/com/fr/design/EnvChangeEntrance.java | 5 +---- .../java/com/fr/design/env/DesignerWorkspaceGenerator.java | 5 +---- .../com/fr/design/update/ui/dialog/UpdateMainDialog.java | 5 +---- .../src/main/java/com/fr/design/utils/DesignerPort.java | 5 +---- .../main/java/com/fr/start/LifecycleFatalErrorHandler.java | 5 +---- 5 files changed, 5 insertions(+), 20 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 2e5ea8bf6c..595f812afd 100644 --- a/designer-base/src/main/java/com/fr/design/EnvChangeEntrance.java +++ b/designer-base/src/main/java/com/fr/design/EnvChangeEntrance.java @@ -415,10 +415,7 @@ public class EnvChangeEntrance { @Override public void doOk() { - ProcessEventPipe pipe = FineProcessContext.getParentPipe(); - if (FineProcessContext.getParentPipe() != null) { - pipe.fire(new CarryMessageEvent(ReportState.ACTIVE.getValue())); - } + FineProcessContext.getParentPipe().fire(new CarryMessageEvent(ReportState.ACTIVE.getValue())); if (!envListOkAction(envListPane, PopTipStrategy.NOW)) { DesignerExiter.getInstance().execute(); } diff --git a/designer-base/src/main/java/com/fr/design/env/DesignerWorkspaceGenerator.java b/designer-base/src/main/java/com/fr/design/env/DesignerWorkspaceGenerator.java index 288f6baa30..15b0e191e0 100644 --- a/designer-base/src/main/java/com/fr/design/env/DesignerWorkspaceGenerator.java +++ b/designer-base/src/main/java/com/fr/design/env/DesignerWorkspaceGenerator.java @@ -72,10 +72,7 @@ public class DesignerWorkspaceGenerator { enum RemoteHandler { SELF; public static void handle(DesignerWorkspaceInfo config) { - ProcessEventPipe eventPipe = FineProcessContext.getParentPipe(); - if (eventPipe != null) { - eventPipe.fire(new CarryMessageEvent(ReportState.STOP.getValue())); - } + FineProcessContext.getParentPipe().fire(new CarryMessageEvent(ReportState.STOP.getValue())); StartErrorMessageCollector.getInstance().record(DesignerErrorMessage.REMOTE_DESIGN_NO_RESPONSE.getId(), DesignerErrorMessage.REMOTE_DESIGN_NO_RESPONSE.getMessage(), StringUtils.EMPTY); diff --git a/designer-base/src/main/java/com/fr/design/update/ui/dialog/UpdateMainDialog.java b/designer-base/src/main/java/com/fr/design/update/ui/dialog/UpdateMainDialog.java index d8a4c32a9a..b71805802d 100644 --- a/designer-base/src/main/java/com/fr/design/update/ui/dialog/UpdateMainDialog.java +++ b/designer-base/src/main/java/com/fr/design/update/ui/dialog/UpdateMainDialog.java @@ -601,10 +601,7 @@ public class UpdateMainDialog extends UIDialog { final String installLib = StableUtils.pathJoin(StableUtils.getInstallHome(), ProjectConstants.LOGS_NAME, UpdateConstants.INSTALL_LIB); final JFrame frame = DesignerContext.getDesignerFrame(); final RestartHelper helper = new RestartHelper(); - ProcessEventPipe pipe = FineProcessContext.getParentPipe(); - if (pipe != null) { - pipe.fire(FineProcessEngineEvent.DESTROY); - } + FineProcessContext.getParentPipe().fire(FineProcessEngineEvent.DESTROY); new FileProcess(callBack) { @Override public void onDownloadSuccess() { diff --git a/designer-base/src/main/java/com/fr/design/utils/DesignerPort.java b/designer-base/src/main/java/com/fr/design/utils/DesignerPort.java index 254cc5e911..1ad1948bfa 100644 --- a/designer-base/src/main/java/com/fr/design/utils/DesignerPort.java +++ b/designer-base/src/main/java/com/fr/design/utils/DesignerPort.java @@ -90,10 +90,7 @@ public class DesignerPort implements XMLReadable, XMLWriter { } public void resetPort() { - ProcessEventPipe eventPipe = FineProcessContext.getParentPipe(); - if (eventPipe != null) { - eventPipe.fire(new CarryMessageEvent(ReportState.STOP.getValue())); - } + FineProcessContext.getParentPipe().fire(new CarryMessageEvent(ReportState.STOP.getValue())); TipDialog dialog = new TipDialog(null, StringUtils.EMPTY, Toolkit.i18nText("Fine-Design_Port_Found_Port_Conflict"), diff --git a/designer-realize/src/main/java/com/fr/start/LifecycleFatalErrorHandler.java b/designer-realize/src/main/java/com/fr/start/LifecycleFatalErrorHandler.java index ef416416c9..a59d15faf3 100644 --- a/designer-realize/src/main/java/com/fr/start/LifecycleFatalErrorHandler.java +++ b/designer-realize/src/main/java/com/fr/start/LifecycleFatalErrorHandler.java @@ -49,10 +49,7 @@ public class LifecycleFatalErrorHandler { public void handle(FineLifecycleFatalError fatal) { SplashContext.getInstance().hide(); - ProcessEventPipe eventPipe = FineProcessContext.getParentPipe(); - if (eventPipe != null) { - eventPipe.fire(new CarryMessageEvent(ReportState.STOP.getValue())); - } + FineProcessContext.getParentPipe().fire(new CarryMessageEvent(ReportState.STOP.getValue())); map.get(fatal.getErrorType()).handle(fatal); } From 9da47c5434085f35e00f6eed12824ea612d4828d Mon Sep 17 00:00:00 2001 From: hades Date: Mon, 18 May 2020 12:27:39 +0800 Subject: [PATCH 04/19] fix import --- .../java/com/fr/design/update/ui/dialog/UpdateMainDialog.java | 1 - 1 file changed, 1 deletion(-) diff --git a/designer-base/src/main/java/com/fr/design/update/ui/dialog/UpdateMainDialog.java b/designer-base/src/main/java/com/fr/design/update/ui/dialog/UpdateMainDialog.java index b71805802d..78df599c57 100644 --- a/designer-base/src/main/java/com/fr/design/update/ui/dialog/UpdateMainDialog.java +++ b/designer-base/src/main/java/com/fr/design/update/ui/dialog/UpdateMainDialog.java @@ -30,7 +30,6 @@ import com.fr.general.http.HttpToolbox; import com.fr.json.JSONArray; import com.fr.json.JSONObject; import com.fr.log.FineLoggerFactory; -import com.fr.process.ProcessEventPipe; import com.fr.process.engine.core.FineProcessContext; import com.fr.process.engine.core.FineProcessEngineEvent; import com.fr.stable.*; From f03d6b65fd86e48af75eedfd8a029dfc72ac1476 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=99=BD=E5=B2=B3?= <445798420@qq.com> Date: Mon, 18 May 2020 14:16:31 +0800 Subject: [PATCH 05/19] =?UTF-8?q?CHART-13958=20=E5=9C=B0=E5=9B=BE=E7=82=B9?= =?UTF-8?q?=E5=87=BBgis=E9=80=89=E6=8B=A9=E4=BC=9A=E8=BF=98=E5=8E=9F?= =?UTF-8?q?=E7=BC=A9=E6=94=BE=E5=A4=A7=E5=B0=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../type/VanChartMapSourceChoosePane.java | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/designer-chart/src/main/java/com/fr/van/chart/map/designer/type/VanChartMapSourceChoosePane.java b/designer-chart/src/main/java/com/fr/van/chart/map/designer/type/VanChartMapSourceChoosePane.java index f609debe90..e58797dca3 100644 --- a/designer-chart/src/main/java/com/fr/van/chart/map/designer/type/VanChartMapSourceChoosePane.java +++ b/designer-chart/src/main/java/com/fr/van/chart/map/designer/type/VanChartMapSourceChoosePane.java @@ -42,7 +42,7 @@ import com.fr.van.chart.drillmap.designer.data.comp.MapDataTree; import com.fr.workspace.WorkContext; import javax.swing.BorderFactory; -import javax.swing.JOptionPane; +import javax.swing.DefaultComboBoxModel; import javax.swing.JPanel; import javax.swing.SwingConstants; import javax.swing.SwingWorker; @@ -51,6 +51,8 @@ import javax.swing.event.PopupMenuListener; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.TreeNode; import javax.swing.tree.TreePath; +import java.util.ArrayList; +import java.util.List; import java.awt.BorderLayout; import java.awt.CardLayout; import java.awt.Component; @@ -61,8 +63,6 @@ import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; -import java.util.ArrayList; -import java.util.List; /** * Created by Mitisky on 16/5/11. @@ -280,14 +280,12 @@ public class VanChartMapSourceChoosePane extends JPanel implements UIObserver { public void popupMenuWillBecomeVisible(PopupMenuEvent e) { String selected = Utils.objectToString(gisLayer.getSelectedItem()); + ZoomLevel zoomSelected = (ZoomLevel) zoomLevel.getSelectedItem(); - gisLayer.removeAllItems(); - - for (String item : MapLayerConfigManager.getLayerItems()) { - gisLayer.addItem(item); - } + gisLayer.setModel(new DefaultComboBoxModel(MapLayerConfigManager.getLayerItems())); gisLayer.setSelectedItem(selected); + zoomLevel.setSelectedItem(zoomSelected); } }); @@ -346,10 +344,7 @@ public class VanChartMapSourceChoosePane extends JPanel implements UIObserver { } else { levels = ZOOM_LEVELS; } - zoomLevel.removeAllItems(); - for (int i = 0; i < levels.length; i++) { - zoomLevel.addItem(levels[i]); - } + zoomLevel.setModel(new DefaultComboBoxModel(levels)); } From 6740020f6576e88b62547a58a4e663c2fbcca0d6 Mon Sep 17 00:00:00 2001 From: hades Date: Mon, 18 May 2020 16:26:37 +0800 Subject: [PATCH 06/19] =?UTF-8?q?REPORT-31291=20=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E8=BF=9E=E6=8E=A5=E6=9D=83=E9=99=90=E6=8E=A7=E5=88=B6=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/data/datapane/ChoosePane.java | 34 +++++++++++++------ 1 file changed, 24 insertions(+), 10 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/data/datapane/ChoosePane.java b/designer-base/src/main/java/com/fr/design/data/datapane/ChoosePane.java index eda6414671..52ed6861b1 100644 --- a/designer-base/src/main/java/com/fr/design/data/datapane/ChoosePane.java +++ b/designer-base/src/main/java/com/fr/design/data/datapane/ChoosePane.java @@ -1,12 +1,10 @@ package com.fr.design.data.datapane; -import com.fr.base.BaseUtils; import com.fr.base.TableData; import com.fr.data.core.DataCoreUtils; import com.fr.data.core.db.DBUtils; import com.fr.data.core.db.TableProcedure; import com.fr.data.core.db.dialect.DialectFactory; -import com.fr.data.impl.Connection; import com.fr.data.impl.DBTableData; import com.fr.data.operator.DataOperator; import com.fr.design.DesignerEnvManager; @@ -37,6 +35,7 @@ import com.fr.general.IOUtils; import com.fr.log.FineLoggerFactory; import com.fr.stable.StringUtils; import com.fr.workspace.WorkContext; +import com.fr.workspace.server.connection.DBConnectAuth; import javax.swing.JList; import javax.swing.JOptionPane; @@ -61,9 +60,10 @@ import java.awt.event.FocusEvent; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import java.util.ArrayList; +import java.util.Collection; import java.util.Enumeration; import java.util.List; -import java.util.Map; +import java.util.Set; /** * @author zhou @@ -210,10 +210,7 @@ public class ChoosePane extends BasicBeanPane implements Refresha @SuppressWarnings("unchecked") protected void initDsNameComboBox() { dsNameComboBox.setRefreshingModel(true); - ConnectionConfig connectionConfig = ConnectionConfig.getInstance(); - List dsList = new ArrayList<>(); - dsList.addAll(connectionConfig.getConnections().keySet()); - FilterableComboBoxModel dsNameComboBoxModel = new FilterableComboBoxModel(dsList); + FilterableComboBoxModel dsNameComboBoxModel = new FilterableComboBoxModel(getHasAuthConnections()); dsNameComboBox.setModel(dsNameComboBoxModel); dsNameComboBox.setRefreshingModel(false); } @@ -322,14 +319,31 @@ public class ChoosePane extends BasicBeanPane implements Refresha return null; // peter:选中了当前的零长度的节点,直接返回. } ConnectionConfig connectionConfig = ConnectionConfig.getInstance(); - for (Map.Entry entry : connectionConfig.getConnections().entrySet()) { - if (ComparatorUtils.equals(selectedDSName, entry.getKey())) { - return entry.getValue(); + List authConnections = getHasAuthConnections(); + for (String name : authConnections) { + if (ComparatorUtils.equals(selectedDSName, name)) { + return connectionConfig.getConnection(name); } } return null; } + private List getHasAuthConnections() { + List authConnections = new ArrayList<>(); + Set allConnections = ConnectionConfig.getInstance().getConnections().keySet(); + Collection noAuthConnections = WorkContext.getCurrent().get(DBConnectAuth.class).getNoAuthConnections(); + if (noAuthConnections == null) { + return authConnections; + } + + for (String name : allConnections) { + if (!noAuthConnections.contains(name)) { + authConnections.add(name); + } + } + return authConnections; + } + /** * 刷新没多大用。而且要刷新也不是这儿刷新。 */ From df549e1f6d9ebb9805a3bf8606107e4ceb05d0d4 Mon Sep 17 00:00:00 2001 From: "Java.Edge" Date: Tue, 19 May 2020 09:32:41 +0800 Subject: [PATCH 07/19] =?UTF-8?q?REPORT-31827=20=E8=AE=BE=E8=AE=A1?= =?UTF-8?q?=E5=99=A8=E9=87=8D=E5=81=9A=E6=8C=89=E9=92=AE=E6=97=A0=E6=95=88?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/fr/design/mainframe/ElementCasePaneDelegate.java | 1 + .../fr/design/mainframe/form/FormElementCasePaneDelegate.java | 1 + 2 files changed, 2 insertions(+) diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/ElementCasePaneDelegate.java b/designer-realize/src/main/java/com/fr/design/mainframe/ElementCasePaneDelegate.java index 696c732f32..22ab323443 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/ElementCasePaneDelegate.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/ElementCasePaneDelegate.java @@ -117,6 +117,7 @@ public class ElementCasePaneDelegate extends ElementCasePane { @Override protected void afterPasteAction() { refreshPropertyPanes(); + fireTargetModified(); repaint(); } diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/form/FormElementCasePaneDelegate.java b/designer-realize/src/main/java/com/fr/design/mainframe/form/FormElementCasePaneDelegate.java index 1108c47416..55d11fe7de 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/form/FormElementCasePaneDelegate.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/form/FormElementCasePaneDelegate.java @@ -72,6 +72,7 @@ public class FormElementCasePaneDelegate extends ElementCasePane Date: Tue, 19 May 2020 10:32:13 +0800 Subject: [PATCH 08/19] =?UTF-8?q?REPORT-29409=20=E8=A1=A8=E6=A0=BC?= =?UTF-8?q?=E5=92=8C=E5=9B=BE=E8=A1=A8=E7=99=BE=E5=88=86=E6=AF=94=E6=A0=BC?= =?UTF-8?q?=E5=BC=8F=E5=8C=96=E8=BF=91=E4=BC=BC=E7=BB=93=E6=9E=9C=E4=B8=8D?= =?UTF-8?q?=E5=90=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/gui/style/FormatPane.java | 43 +++++++++++++++++-- 1 file changed, 39 insertions(+), 4 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/gui/style/FormatPane.java b/designer-base/src/main/java/com/fr/design/gui/style/FormatPane.java index cf362f7f5e..22f0a36474 100644 --- a/designer-base/src/main/java/com/fr/design/gui/style/FormatPane.java +++ b/designer-base/src/main/java/com/fr/design/gui/style/FormatPane.java @@ -6,6 +6,7 @@ import com.fr.base.Style; import com.fr.base.TextFormat; import com.fr.data.core.FormatField; import com.fr.data.core.FormatField.FormatContents; +import com.fr.design.gui.icheckbox.UICheckBox; import com.fr.design.i18n.Toolkit; import com.fr.design.border.UIRoundedBorder; import com.fr.design.constants.LayoutConstants; @@ -22,6 +23,8 @@ import com.fr.general.ComparatorUtils; import com.fr.stable.StringUtils; +import java.math.BigDecimal; +import java.math.RoundingMode; import javax.swing.*; import javax.swing.border.Border; import javax.swing.border.TitledBorder; @@ -63,6 +66,8 @@ public class FormatPane extends AbstractBasicStylePane implements GlobalNameObse private JPanel contentPane; private JPanel txtCenterPane; private JPanel centerPane; + private JPanel optionPane; + private UICheckBox roundingBox; private JPanel formatFontPane; private FRFontPane frFontPane; private boolean isRightFormat; @@ -123,7 +128,23 @@ public class FormatPane extends AbstractBasicStylePane implements GlobalNameObse // centerPane.setBorder(LEFT_BORDER); frFontPane.setBorder(LEFT_BORDER); - Component[][] components = getComponent(fontPane, centerPane, typePane); + JPanel option = new JPanel(new BorderLayout()); + option.add(new UILabel(Toolkit.i18nText("Fine-Design_Report_Base_Option"), SwingConstants.LEFT), BorderLayout.WEST); + roundingBox = new UICheckBox(Toolkit.i18nText("Fine-Design_Report_Base_Option_Half_Up")); + roundingBox.setBorder(BorderFactory.createEmptyBorder(0, 40, 0, 0)); + roundingBox.addItemListener(new ItemListener() { + @Override + public void itemStateChanged(ItemEvent e) { + } + }); + roundingBox.setGlobalName("roundingBox"); + option.add(roundingBox, BorderLayout.CENTER); + optionPane = new JPanel(new CardLayout()); + optionPane.add(new JPanel(), "hide"); + optionPane.setPreferredSize(new Dimension(0, 0)); + optionPane.add(option, "show"); + + Component[][] components = getComponent(fontPane, centerPane, typePane, optionPane); this.add(createContentPane(components), BorderLayout.CENTER); } @@ -137,11 +158,12 @@ public class FormatPane extends AbstractBasicStylePane implements GlobalNameObse } - protected Component[][] getComponent (JPanel fontPane, JPanel centerPane, JPanel typePane) { + protected Component[][] getComponent (JPanel fontPane, JPanel centerPane, JPanel typePane, JPanel optionPane) { return new Component[][]{ new Component[]{null, null}, new Component[]{new UILabel(Toolkit.i18nText("Fine-Design_Report_Base_Format"), SwingConstants.LEFT), typePane}, new Component[]{centerPane, null}, + new Component[]{optionPane, null}, new Component[]{fontPane, frFontPane}, }; } @@ -220,6 +242,7 @@ public class FormatPane extends AbstractBasicStylePane implements GlobalNameObse setPatternComboBoxAndList(FormatContents.CURRENCY, pattern); } else if (pattern.indexOf("%") > 0) { setPatternComboBoxAndList(FormatContents.PERCENT, pattern); + this.roundingBox.setSelected(((CoreDecimalFormat) format).getRoundingMode().equals(RoundingMode.HALF_UP)); } else if (pattern.indexOf("E") > 0) { setPatternComboBoxAndList(FormatContents.SCIENTIFIC, pattern); } else { @@ -286,7 +309,8 @@ public class FormatPane extends AbstractBasicStylePane implements GlobalNameObse } if (isRightFormat) { if (StringUtils.isNotEmpty(patternString)) { - return FormatField.getInstance().getFormat(getFormatContents(), patternString); + RoundingMode roundingMode = roundingBox.isSelected() ? RoundingMode.HALF_UP : RoundingMode.HALF_EVEN; + return FormatField.getInstance().getFormat(getFormatContents(), patternString, roundingMode); } } return null; @@ -342,6 +366,15 @@ public class FormatPane extends AbstractBasicStylePane implements GlobalNameObse centerPane.setPreferredSize(new Dimension(270, 65)); cardLayout.show(centerPane, "show"); } + CardLayout optionLayout = ((CardLayout) optionPane.getLayout()); + if (getFormatContents() == FormatContents.PERCENT) { + optionPane.setPreferredSize(new Dimension(100, 20)); + optionLayout.show(optionPane, "show"); + } else { + optionPane.setPreferredSize(new Dimension(0, 0)); + optionLayout.show(optionPane, "hide"); + roundingBox.setSelected(false); + } } } @@ -370,7 +403,9 @@ public class FormatPane extends AbstractBasicStylePane implements GlobalNameObse * update */ public Style update(Style style) { - if (ComparatorUtils.equals(globalNameListener.getGlobalName(), "textField") || ComparatorUtils.equals(globalNameListener.getGlobalName(), "typeComboBox")) { + if (ComparatorUtils.equals(globalNameListener.getGlobalName(), "textField") + || ComparatorUtils.equals(globalNameListener.getGlobalName(), "typeComboBox") + || ComparatorUtils.equals(globalNameListener.getGlobalName(), "roundingBox")) { return style.deriveFormat(this.update()); } else { return style.deriveFRFont(this.frFontPane.update(style.getFRFont())); From 9140d92ab2fd270a06381a14000b13d2c38b1cbc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=99=BD=E5=B2=B3?= <445798420@qq.com> Date: Tue, 19 May 2020 14:50:10 +0800 Subject: [PATCH 09/19] =?UTF-8?q?CHART-13926=20=20FR=E8=AF=AD=E8=A8=80?= =?UTF-8?q?=E7=8E=AF=E5=A2=83=E9=80=82=E9=85=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../design/mainframe/chart/gui/style/ChartTextAttrPane.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/style/ChartTextAttrPane.java b/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/style/ChartTextAttrPane.java index a6be91a248..9a906cc7c0 100644 --- a/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/style/ChartTextAttrPane.java +++ b/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/style/ChartTextAttrPane.java @@ -1,6 +1,7 @@ package com.fr.design.mainframe.chart.gui.style; import com.fr.base.BaseUtils; +import com.fr.base.FRContext; import com.fr.base.Utils; import com.fr.chart.base.TextAttr; import com.fr.design.constants.LayoutConstants; @@ -14,7 +15,6 @@ import com.fr.design.i18n.Toolkit; import com.fr.design.layout.TableLayout; import com.fr.design.utils.gui.GUICoreUtils; import com.fr.general.FRFont; - import com.fr.general.GeneralUtils; import com.fr.van.chart.designer.TableLayout4VanChartHelper; @@ -202,7 +202,7 @@ public class ChartTextAttrPane extends BasicPane { this.setLayout(new BorderLayout()); this.add(getContentPane(buttonPane), BorderLayout.CENTER); - populate(FRFont.getInstance()); + populate(FRContext.getDefaultValues().getFRFont()); } protected JPanel getContentPane(JPanel buttonPane) { From 444d7093f6fb58f41fd5e9fc7526803a46739dd1 Mon Sep 17 00:00:00 2001 From: kerry Date: Tue, 19 May 2020 16:04:36 +0800 Subject: [PATCH 10/19] =?UTF-8?q?REPORT-29815=20&&=20REPORT-29815=20?= =?UTF-8?q?=E4=B9=8B=E5=89=8D=E6=B7=BB=E5=8A=A0=E5=88=B0final=E7=9A=84?= =?UTF-8?q?=E5=90=8C=E6=AD=A5=E5=88=B0release?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/unit/UnitConvertUtil.java | 23 ++++++++++++++++++- .../design/actions/FormMobileAttrAction.java | 2 +- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/unit/UnitConvertUtil.java b/designer-base/src/main/java/com/fr/design/unit/UnitConvertUtil.java index 406ddcfdde..520430d51d 100644 --- a/designer-base/src/main/java/com/fr/design/unit/UnitConvertUtil.java +++ b/designer-base/src/main/java/com/fr/design/unit/UnitConvertUtil.java @@ -6,7 +6,11 @@ import com.fr.design.unit.impl.CMReportLengthUNIT; import com.fr.design.unit.impl.INCHReportLengthUNIT; import com.fr.design.unit.impl.MMReportLengthUNIT; import com.fr.design.unit.impl.PTReportLengthUNIT; - +import com.fr.general.GeneralContext; +import com.fr.plugin.context.PluginContext; +import com.fr.plugin.manage.PluginFilter; +import com.fr.plugin.observer.PluginEvent; +import com.fr.plugin.observer.PluginEventListener; import java.util.ArrayList; import java.util.List; import java.util.Set; @@ -18,6 +22,23 @@ public class UnitConvertUtil { private static List lengthUNITList = new ArrayList(); static { + GeneralContext.listenPluginRunningChanged(new PluginEventListener() { + @Override + public void on(PluginEvent pluginEvent) { + initSupportedReportLengthUNIT(); + } + }, new PluginFilter() { + @Override + public boolean accept(PluginContext pluginContext) { + return pluginContext.contain(ReportLengthUNITProvider.MARK_STRING); + } + }); + + initSupportedReportLengthUNIT(); + } + + private static void initSupportedReportLengthUNIT(){ + lengthUNITList.clear(); lengthUNITList.add(new MMReportLengthUNIT()); lengthUNITList.add(new CMReportLengthUNIT()); lengthUNITList.add(new INCHReportLengthUNIT()); diff --git a/designer-form/src/main/java/com/fr/design/actions/FormMobileAttrAction.java b/designer-form/src/main/java/com/fr/design/actions/FormMobileAttrAction.java index deec25c0b1..6227c169b1 100644 --- a/designer-form/src/main/java/com/fr/design/actions/FormMobileAttrAction.java +++ b/designer-form/src/main/java/com/fr/design/actions/FormMobileAttrAction.java @@ -112,7 +112,7 @@ public class FormMobileAttrAction extends JTemplateAction { private static final MenuKeySet REPORT_APP_ATTR = new MenuKeySet() { @Override public char getMnemonic() { - return 'T'; + return 'P'; } @Override From 5104b8ddaff7dcb34d286342c9c2047fb443358e Mon Sep 17 00:00:00 2001 From: Harrison Date: Wed, 20 May 2020 09:15:19 +0800 Subject: [PATCH 11/19] =?UTF-8?q?REPORT-29912=20=E7=BB=84=E4=BB=B6?= =?UTF-8?q?=E5=8A=A0=E5=AF=86=201=E3=80=81=E5=A4=8D=E5=88=B6=E8=BF=87?= =?UTF-8?q?=E6=BB=A4=E7=9A=84=20support=20=E5=88=A4=E6=96=AD=E6=9D=A1?= =?UTF-8?q?=E4=BB=B6=202=E3=80=81XCreator=20=E7=9A=84=E5=88=9B=E5=BB=BA?= =?UTF-8?q?=E6=9D=A1=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../base/clipboard/ClipboardFilter.java | 23 ++++++------- .../base/clipboard/ClipboardFilterTest.java | 18 +++++----- .../designer/creator/XCreatorUtils.java | 34 ++++++++++++++++--- .../beans/models/SelectionModelTest.java | 24 +++++++------ .../designer/creator/XCreatorUtilsTest.java | 17 ++++++++++ 5 files changed, 78 insertions(+), 38 deletions(-) create mode 100644 designer-form/src/test/java/com/fr/design/designer/creator/XCreatorUtilsTest.java diff --git a/designer-base/src/main/java/com/fr/design/base/clipboard/ClipboardFilter.java b/designer-base/src/main/java/com/fr/design/base/clipboard/ClipboardFilter.java index 377a57e46f..e9b6b3e0f3 100644 --- a/designer-base/src/main/java/com/fr/design/base/clipboard/ClipboardFilter.java +++ b/designer-base/src/main/java/com/fr/design/base/clipboard/ClipboardFilter.java @@ -1,7 +1,7 @@ package com.fr.design.base.clipboard; +import com.fr.design.ExtraDesignClassManager; import com.fr.design.fun.ClipboardHandlerProvider; -import com.fr.form.main.ExtraFormClassManager; import com.fr.plugin.injectable.PluginModule; import java.util.Set; @@ -13,12 +13,11 @@ import java.util.Set; public abstract class ClipboardFilter { public static T cut(T selection) { - - Class clazz = selection.getClass(); - ExtraFormClassManager manager = PluginModule.getAgent(PluginModule.ExtraForm); + + ExtraDesignClassManager manager = PluginModule.getAgent(PluginModule.ExtraDesign); Set providers = manager.getArray(ClipboardHandlerProvider.XML_TAG); for (ClipboardHandlerProvider provider : providers) { - if (provider.support(clazz)) { + if (provider.support(selection)) { selection = ((ClipboardHandlerProvider) provider).cut(selection); } } @@ -26,12 +25,11 @@ public abstract class ClipboardFilter { } public static T copy(T selection) { - - Class clazz = selection.getClass(); - ExtraFormClassManager manager = PluginModule.getAgent(PluginModule.ExtraForm); + + ExtraDesignClassManager manager = PluginModule.getAgent(PluginModule.ExtraDesign); Set providers = manager.getArray(ClipboardHandlerProvider.XML_TAG); for (ClipboardHandlerProvider provider : providers) { - if (provider.support(clazz)) { + if (provider.support(selection)) { selection = ((ClipboardHandlerProvider) provider).copy(selection); } } @@ -39,12 +37,11 @@ public abstract class ClipboardFilter { } public static T paste(T selection) { - - Class clazz = selection.getClass(); - ExtraFormClassManager manager = PluginModule.getAgent(PluginModule.ExtraForm); + + ExtraDesignClassManager manager = PluginModule.getAgent(PluginModule.ExtraDesign); Set providers = manager.getArray(ClipboardHandlerProvider.XML_TAG); for (ClipboardHandlerProvider provider : providers) { - if (provider.support(clazz)) { + if (provider.support(selection)) { selection = ((ClipboardHandlerProvider) provider).paste(selection); } } diff --git a/designer-base/src/test/java/com/fr/design/base/clipboard/ClipboardFilterTest.java b/designer-base/src/test/java/com/fr/design/base/clipboard/ClipboardFilterTest.java index f6b9190eb9..bb254e79c4 100644 --- a/designer-base/src/test/java/com/fr/design/base/clipboard/ClipboardFilterTest.java +++ b/designer-base/src/test/java/com/fr/design/base/clipboard/ClipboardFilterTest.java @@ -1,7 +1,7 @@ package com.fr.design.base.clipboard; +import com.fr.design.ExtraDesignClassManager; import com.fr.design.fun.ClipboardHandlerProvider; -import com.fr.form.main.ExtraFormClassManager; import com.fr.plugin.injectable.PluginModule; import com.fr.stable.fun.mark.Mutable; import org.easymock.EasyMock; @@ -24,19 +24,19 @@ public class ClipboardFilterTest { @Before public void setUp() throws Exception { - + Set providers = new HashSet<>(); providers.add(new TestClipboardHandlerProvider()); - - ExtraFormClassManager formClassManager = EasyMock.mock(ExtraFormClassManager.class); - EasyMock.expect(formClassManager.getArray(ClipboardHandlerProvider.XML_TAG)) + + ExtraDesignClassManager designClassManager = EasyMock.mock(ExtraDesignClassManager.class); + EasyMock.expect(designClassManager.getArray(ClipboardHandlerProvider.XML_TAG)) .andReturn(providers) .anyTimes(); - EasyMock.replay(formClassManager); - + EasyMock.replay(designClassManager); + PowerMock.mockStatic(PluginModule.class); - EasyMock.expect(PluginModule.getAgent(PluginModule.ExtraForm)) - .andReturn(formClassManager) + EasyMock.expect(PluginModule.getAgent(PluginModule.ExtraDesign)) + .andReturn(designClassManager) .anyTimes(); PowerMock.replayAll(); } diff --git a/designer-form/src/main/java/com/fr/design/designer/creator/XCreatorUtils.java b/designer-form/src/main/java/com/fr/design/designer/creator/XCreatorUtils.java index f51f6710bc..d14780054a 100644 --- a/designer-form/src/main/java/com/fr/design/designer/creator/XCreatorUtils.java +++ b/designer-form/src/main/java/com/fr/design/designer/creator/XCreatorUtils.java @@ -67,6 +67,7 @@ import com.fr.plugin.observer.PluginEvent; import com.fr.plugin.observer.PluginEventListener; import com.fr.stable.StringUtils; import com.fr.third.javax.annotation.Nonnull; +import org.jetbrains.annotations.Nullable; import javax.swing.Icon; import java.awt.Container; @@ -164,21 +165,44 @@ public class XCreatorUtils { } private static void reInitExtra() { - + extraObjectMap.clear(); extraObjectMap.putAll(ExtraDesignClassManager.getInstance().getParameterWidgetOptionsMap()); extraObjectMap.putAll(ExtraDesignClassManager.getInstance().getFormWidgetOptionsMap()); } - + private static void putExtraEditor() { if (DesignModuleFactory.getChartEditorClass() != null) { objectMap.put(DesignModuleFactory.getChartEditorClass(), XChartEditor.class); } } - + + /** + * 对于继承的子组件来说,可能并没有对应的 XCreator + * 这个时候,就需要递归的找父类 + * + * @param clazz 组件类 + * @return 创建类 + */ + @SuppressWarnings("unchecked") + @Nullable + private static Class similarXCreatorClass(Class clazz) { + + Class target = clazz; + Class xClazz = null; + //判断条件有两个 + //1.还没找到对应的 xClazz + //2.一直到 终极父类-Widget 都找不到 + while (xClazz == null && Widget.class.isAssignableFrom(target)) { + xClazz = searchXCreatorClass((Class) target); + target = target.getSuperclass(); + } + return xClazz; + } + @SuppressWarnings("unchecked") private static Class searchXCreatorClass(Class clazz) { - + Class xClazz = (Class) objectMap.get(clazz); if (xClazz == null) { xClazz = (Class) extraObjectMap.get(clazz); @@ -214,7 +238,7 @@ public class XCreatorUtils { clazz = NullCreator.class; } else { widgetClass = widget.getClass(); - clazz = XCreatorUtils.searchXCreatorClass(widgetClass); + clazz = XCreatorUtils.similarXCreatorClass(widgetClass); if (clazz == null) { FineLoggerFactory.getLogger().error(widget + "'s" + " xcreator doesn't exsit!"); clazz = NullCreator.class; diff --git a/designer-form/src/test/java/com/fr/design/designer/beans/models/SelectionModelTest.java b/designer-form/src/test/java/com/fr/design/designer/beans/models/SelectionModelTest.java index 921133a215..06f1be65c4 100644 --- a/designer-form/src/test/java/com/fr/design/designer/beans/models/SelectionModelTest.java +++ b/designer-form/src/test/java/com/fr/design/designer/beans/models/SelectionModelTest.java @@ -1,5 +1,6 @@ package com.fr.design.designer.beans.models; +import com.fr.design.ExtraDesignClassManager; import com.fr.design.designer.beans.events.CreatorEventListenerTable; import com.fr.design.designer.creator.XCreator; import com.fr.design.fun.ClipboardHandlerProvider; @@ -50,25 +51,26 @@ public class SelectionModelTest { EasyMock.expect(provider.support(EasyMock.anyObject())).andReturn(true).anyTimes(); EasyMock.expect(provider.paste(EasyMock.anyObject())).andReturn(null).anyTimes(); EasyMock.replay(provider); - + Set providers = new HashSet<>(); providers.add(provider); - - ExtraFormClassManager formClassManager = EasyMock.mock(ExtraFormClassManager.class); - EasyMock.expect(formClassManager.getArray(ClipboardHandlerProvider.XML_TAG)) + + ExtraDesignClassManager designManager = EasyMock.mock(ExtraDesignClassManager.class); + EasyMock.expect(designManager.getArray(ClipboardHandlerProvider.XML_TAG)) .andReturn(providers) .anyTimes(); - EasyMock.expect(formClassManager.getArray("DesignerEditListenerProvider")) + ExtraFormClassManager formManager = EasyMock.mock(ExtraFormClassManager.class); + EasyMock.expect(formManager.getArray("DesignerEditListenerProvider")) .andReturn(new HashSet()) .anyTimes(); - - - EasyMock.replay(formClassManager); - + EasyMock.replay(designManager, formManager); + PowerMock.mockStatic(PluginModule.class); - EasyMock.expect(PluginModule.getAgent(PluginModule.ExtraForm)) - .andReturn(formClassManager) + EasyMock.expect(PluginModule.getAgent(PluginModule.ExtraDesign)) + .andReturn(designManager) .anyTimes(); + EasyMock.expect(PluginModule.getAgent(PluginModule.ExtraForm)) + .andReturn(formManager).anyTimes(); PowerMock.replayAll(); } diff --git a/designer-form/src/test/java/com/fr/design/designer/creator/XCreatorUtilsTest.java b/designer-form/src/test/java/com/fr/design/designer/creator/XCreatorUtilsTest.java new file mode 100644 index 0000000000..1efd752d13 --- /dev/null +++ b/designer-form/src/test/java/com/fr/design/designer/creator/XCreatorUtilsTest.java @@ -0,0 +1,17 @@ +package com.fr.design.designer.creator; + +import com.fr.form.ui.EditorHolder; +import org.junit.Assert; +import org.junit.Test; + +public class XCreatorUtilsTest { + + @Test + public void testCreateXCreator() throws Exception { + + XCreator xCreator = XCreatorUtils.createXCreator(new EditorHolder() { + }); + + Assert.assertFalse(xCreator instanceof NullCreator); + } +} \ No newline at end of file From 16c7a6f4ddb6079424848a24d7301b86ab2c0b2e Mon Sep 17 00:00:00 2001 From: hades Date: Wed, 20 May 2020 09:20:43 +0800 Subject: [PATCH 12/19] REPORT-31836 && REPORT-31874 --- .../java/com/fr/design/os/impl/PMDialogAction.java | 11 ++++++----- .../search/manager/impl/RecommendSearchManager.java | 8 +++++++- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/os/impl/PMDialogAction.java b/designer-base/src/main/java/com/fr/design/os/impl/PMDialogAction.java index 3f2f097283..7e6eccf749 100644 --- a/designer-base/src/main/java/com/fr/design/os/impl/PMDialogAction.java +++ b/designer-base/src/main/java/com/fr/design/os/impl/PMDialogAction.java @@ -21,10 +21,11 @@ public class PMDialogAction implements OSBasedAction { DesignUtils.visitEnvServerByParameters( PLUGIN_MANAGER_ROUTE,null,null); return; } - if (ServerPreferenceConfig.getInstance().isUseOptimizedUPM() && !OperatingSystem.isLinux()) { - UpmFinder.showUPMDialog(); - } else { - WebViewDlgHelper.createPluginDialog(); - } +// if (ServerPreferenceConfig.getInstance().isUseOptimizedUPM() && !OperatingSystem.isLinux()) { +// UpmFinder.showUPMDialog(); +// } else { +// } + // 直接这里屏蔽掉 防止有设置过 导致配置数据库值为true 即使设置界面屏蔽也没用 + WebViewDlgHelper.createPluginDialog(); } } diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/alphafine/search/manager/impl/RecommendSearchManager.java b/designer-realize/src/main/java/com/fr/design/mainframe/alphafine/search/manager/impl/RecommendSearchManager.java index 05267220b6..ce0d987767 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/alphafine/search/manager/impl/RecommendSearchManager.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/alphafine/search/manager/impl/RecommendSearchManager.java @@ -10,6 +10,7 @@ import com.fr.design.mainframe.alphafine.cell.model.AlphaCellModel; import com.fr.design.mainframe.alphafine.cell.model.MoreModel; import com.fr.design.mainframe.alphafine.model.SearchResult; import com.fr.design.mainframe.alphafine.search.manager.fun.AlphaFineSearchProvider; +import com.fr.general.ComparatorUtils; import com.fr.general.http.HttpToolbox; import com.fr.json.JSONArray; import com.fr.json.JSONObject; @@ -67,7 +68,12 @@ public class RecommendSearchManager implements AlphaFineSearchProvider { if (jsonArray != null && jsonArray.length() > 0) { for (int i = 0; i < jsonArray.length(); i++) { AlphaFineHelper.checkCancel(); - AlphaCellModel alphaCellModel = CellModelHelper.getModelFromJson((JSONObject) jsonArray.get(i)); + JSONObject jo = jsonArray.getJSONObject(i); + JSONObject innerJo = jo.getJSONObject("result"); + if (innerJo != null && ComparatorUtils.equals("failed", innerJo.get("state"))) { + continue; + } + AlphaCellModel alphaCellModel = CellModelHelper.getModelFromJson(jo); if (alphaCellModel != null && !alreadyContain(alphaCellModel) && !this.recommendModelList.contains(alphaCellModel)) { this.recommendModelList.add(alphaCellModel); } From 24a569e172025aeb491ffcd33b305f2a51f3facf Mon Sep 17 00:00:00 2001 From: hades Date: Wed, 20 May 2020 13:06:39 +0800 Subject: [PATCH 13/19] REPORT-31236 && REPORT-31801 --- .../actions/server/GlobalTableDataAction.java | 6 ++++-- .../tabledatapane/DBTableDataPane.java | 5 +---- .../tabledatapane/MaxMemRowCountPanel.java | 20 ++++++++++++++++--- .../design/cell/editor/RichTextToolBar.java | 2 +- 4 files changed, 23 insertions(+), 10 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/actions/server/GlobalTableDataAction.java b/designer-base/src/main/java/com/fr/design/actions/server/GlobalTableDataAction.java index 84591579ec..0e9db97c7a 100644 --- a/designer-base/src/main/java/com/fr/design/actions/server/GlobalTableDataAction.java +++ b/designer-base/src/main/java/com/fr/design/actions/server/GlobalTableDataAction.java @@ -27,6 +27,7 @@ import com.fr.transaction.Worker; import com.fr.transaction.WorkerFacade; import javax.swing.KeyStroke; +import java.awt.*; import java.awt.event.ActionEvent; import java.util.HashMap; import java.util.Map; @@ -35,7 +36,8 @@ import java.util.Map; * Global TableData. */ public class GlobalTableDataAction extends UpdateAction implements ResponseDataSourceChange { - //private static TableDataManagerPane globalTableDataPane = new TableDataManagerPane(); + + private static final Dimension DEFAULT_DIMENSION = new Dimension(1000, 600); public GlobalTableDataAction() { this.setMenuKeySet(SERVER_TABLEDATA); @@ -80,7 +82,7 @@ public class GlobalTableDataAction extends UpdateAction implements ResponseDataS tableDataConfig.renameTableData(oldName, newName); } }; - final BasicDialog globalTableDataDialog = globalTableDataPane.showLargeWindow(designerFrame, null); + final BasicDialog globalTableDataDialog = globalTableDataPane.showWindowWithCustomSize(designerFrame, null, DEFAULT_DIMENSION); globalTableDataDialog.addDialogActionListener(new DialogActionAdapter() { diff --git a/designer-base/src/main/java/com/fr/design/data/tabledata/tabledatapane/DBTableDataPane.java b/designer-base/src/main/java/com/fr/design/data/tabledata/tabledatapane/DBTableDataPane.java index 8b5a4e77f9..6ad281e268 100644 --- a/designer-base/src/main/java/com/fr/design/data/tabledata/tabledatapane/DBTableDataPane.java +++ b/designer-base/src/main/java/com/fr/design/data/tabledata/tabledatapane/DBTableDataPane.java @@ -238,13 +238,10 @@ public class DBTableDataPane extends AbstractTableDataPane { isShareCheckBox.setBackground(Color.WHITE); maxPanel = new MaxMemRowCountPanel(); maxPanel.setBorder(null); - JPanel wrapMaxPanel = FRGUIPaneFactory.createBorderLayout_S_Pane(); - wrapMaxPanel.add(maxPanel); - wrapMaxPanel.setPreferredSize(new Dimension(350, 20)); UIToolbar editToolBar = ToolBarDef.createJToolBar(); toolBarDef.updateToolBar(editToolBar); editToolBar.add(isShareCheckBox); - editToolBar.add(wrapMaxPanel); + editToolBar.add(maxPanel); return editToolBar; } diff --git a/designer-base/src/main/java/com/fr/design/data/tabledata/tabledatapane/MaxMemRowCountPanel.java b/designer-base/src/main/java/com/fr/design/data/tabledata/tabledatapane/MaxMemRowCountPanel.java index dc37d14bea..00bbcc995b 100644 --- a/designer-base/src/main/java/com/fr/design/data/tabledata/tabledatapane/MaxMemRowCountPanel.java +++ b/designer-base/src/main/java/com/fr/design/data/tabledata/tabledatapane/MaxMemRowCountPanel.java @@ -4,6 +4,7 @@ import java.awt.Dimension; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; +import com.fr.base.GraphHelper; import com.fr.design.constants.UIConstants; import com.fr.design.gui.ilable.UILabel; @@ -15,6 +16,20 @@ import com.fr.design.gui.itoolbar.UIToolbar; public class MaxMemRowCountPanel extends UIToolbar { private static final int ALL_IN_MEMORY = 0; private static final int MAX_IN_MEMORY = 1; + private static final String[] CACHE_LIST = {com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Save_All_Records_In_Memory"), + com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Max_Mem_Row_Count") }; + private static final int MAX_WIDTH = getMaxComBoBoxWidth() > 200 ? 350 : 250; + + private static int getMaxComBoBoxWidth() { + int maxWidth = GraphHelper.getWidth(CACHE_LIST[0]); + for (int i = 1; i < CACHE_LIST.length; i++) { + int width = GraphHelper.getWidth(CACHE_LIST[i]); + if (width > maxWidth) { + maxWidth = width; + } + } + return maxWidth; + } private UISpinner numberSpinner; private UIComboBox switchCache; @@ -44,7 +59,7 @@ public class MaxMemRowCountPanel extends UIToolbar { @Override public Dimension getPreferredSize() { Dimension dim = super.getPreferredSize(); - dim.width = 340; + dim.width = MAX_WIDTH; return dim; }; @@ -52,8 +67,7 @@ public class MaxMemRowCountPanel extends UIToolbar { this.setFloatable(false); this.setRollover(true); this.setBackground(UIConstants.NORMAL_BACKGROUND); - String[] cacheList = { com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Save_All_Records_In_Memory"), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Max_Mem_Row_Count") }; - switchCache = new UIComboBox(cacheList); + switchCache = new UIComboBox(CACHE_LIST); switchCache.addActionListener(switchStateL); numberSpinner = new UISpinner(0, Integer.MAX_VALUE, 1); } diff --git a/designer-realize/src/main/java/com/fr/design/cell/editor/RichTextToolBar.java b/designer-realize/src/main/java/com/fr/design/cell/editor/RichTextToolBar.java index 37e6cd9dbe..52a33ff12a 100644 --- a/designer-realize/src/main/java/com/fr/design/cell/editor/RichTextToolBar.java +++ b/designer-realize/src/main/java/com/fr/design/cell/editor/RichTextToolBar.java @@ -155,7 +155,7 @@ public class RichTextToolBar extends BasicPane{ private void bindListener(){ FRFont defaultFont = (this.textPane != null) ? FRFont.getInstance(this.textPane.getFont()) : RichTextPane.DEFAUL_FONT; fontNameComboBox.addItemListener(fontNameItemListener); - fontNameComboBox.setSelectedItem(defaultFont.getFontName()); + fontNameComboBox.setSelectedItem(defaultFont.getFamily()); fontSizeComboBox.addItemListener(fontSizeItemListener); fontSizeComboBox.setSelectedItem(scaleDown(defaultFont.getSize())); From 3ea7e6e79b5eaab4ebb59b56a1a61609f27a31c0 Mon Sep 17 00:00:00 2001 From: "Qinghui.Liu" Date: Wed, 20 May 2020 20:04:58 +0800 Subject: [PATCH 14/19] =?UTF-8?q?CHART-13988=20=E6=95=A3=E7=82=B9=E5=9B=BE?= =?UTF-8?q?=E5=A4=A7=E6=95=B0=E6=8D=AE=E6=A8=A1=E5=BC=8F=E4=B8=8B=E6=A0=87?= =?UTF-8?q?=E8=AE=B0=E7=82=B9=E7=89=B9=E6=AE=8A=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../scatter/VanChartScatterConditionPane.java | 4 +-- ...tScatterLargeModelMarkerConditionPane.java | 29 +++++++++++++++++++ 2 files changed, 31 insertions(+), 2 deletions(-) create mode 100644 designer-chart/src/main/java/com/fr/van/chart/scatter/large/VanChartScatterLargeModelMarkerConditionPane.java diff --git a/designer-chart/src/main/java/com/fr/van/chart/scatter/VanChartScatterConditionPane.java b/designer-chart/src/main/java/com/fr/van/chart/scatter/VanChartScatterConditionPane.java index ce91afe7e7..c1e7886c9c 100644 --- a/designer-chart/src/main/java/com/fr/van/chart/scatter/VanChartScatterConditionPane.java +++ b/designer-chart/src/main/java/com/fr/van/chart/scatter/VanChartScatterConditionPane.java @@ -23,7 +23,7 @@ import com.fr.van.chart.scatter.component.VanChartScatterLineTypeConditionPane; import com.fr.van.chart.scatter.component.VanChartScatterMarkerConditionPane; import com.fr.van.chart.scatter.component.label.VanChartScatterLabelConditionPane; import com.fr.van.chart.scatter.component.tooltip.VanChartScatterTooltipConditionPane; -import com.fr.van.chart.scatter.large.VanChartLargeModelMarkerConditionPane; +import com.fr.van.chart.scatter.large.VanChartScatterLargeModelMarkerConditionPane; import java.awt.Dimension; @@ -53,7 +53,7 @@ public class VanChartScatterConditionPane extends DataSeriesConditionPane { classPaneMap.put(VanChartAttrTrendLine.class, new VanChartTrendLineConditionPane(this)); classPaneMap.put(AttrAlpha.class, new LabelAlphaPane(this)); if(PlotFactory.largeDataModel(plot)){ - classPaneMap.put(VanChartAttrMarker.class, new VanChartLargeModelMarkerConditionPane(this)); + classPaneMap.put(VanChartAttrMarker.class, new VanChartScatterLargeModelMarkerConditionPane(this)); } else { classPaneMap.put(VanChartAttrLine.class, new VanChartScatterLineTypeConditionPane(this)); classPaneMap.put(VanChartAttrMarker.class, new VanChartScatterMarkerConditionPane(this)); diff --git a/designer-chart/src/main/java/com/fr/van/chart/scatter/large/VanChartScatterLargeModelMarkerConditionPane.java b/designer-chart/src/main/java/com/fr/van/chart/scatter/large/VanChartScatterLargeModelMarkerConditionPane.java new file mode 100644 index 0000000000..32dc88be14 --- /dev/null +++ b/designer-chart/src/main/java/com/fr/van/chart/scatter/large/VanChartScatterLargeModelMarkerConditionPane.java @@ -0,0 +1,29 @@ +package com.fr.van.chart.scatter.large; + +import com.fr.chart.chartglyph.Marker; +import com.fr.design.condition.ConditionAttributesPane; +import com.fr.plugin.chart.marker.type.MarkerType; +import com.fr.van.chart.designer.component.marker.VanChartCommonMarkerPane; +import com.fr.van.chart.designer.other.condition.item.VanChartMarkerConditionPane; + +public class VanChartScatterLargeModelMarkerConditionPane extends VanChartMarkerConditionPane { + + public VanChartScatterLargeModelMarkerConditionPane(ConditionAttributesPane conditionAttributesPane) { + super(conditionAttributesPane); + } + + protected void initMarkerPane() { + + markerPane = new VanChartLargeModelMarkerPane() { + protected VanChartCommonMarkerPane createCommonMarkerPane() { + + return new VanChartCommonMarkerPane() { + protected Marker[] getMarkers() { + return getNormalMarkersWithCustom(new MarkerType[]{MarkerType.MARKER_AUTO}); + } + }; + } + + }; + } +} From 6b5301b490c10a8963311e5ce3dda72fade67770 Mon Sep 17 00:00:00 2001 From: hades Date: Wed, 20 May 2020 21:41:53 +0800 Subject: [PATCH 15/19] REPORT-31834 && REPORT-31874 --- .../com/fr/design/formula/FormulaPane.java | 34 ++++++++++++++++--- .../design/os/impl/DatabaseDialogAction.java | 12 ++++--- .../com/fr/design/os/impl/PMDialogAction.java | 11 +++--- .../fr/design/formula/FormulaPaneTest.java | 25 ++++++++++++++ 4 files changed, 67 insertions(+), 15 deletions(-) create mode 100644 designer-base/src/test/java/com/fr/design/formula/FormulaPaneTest.java diff --git a/designer-base/src/main/java/com/fr/design/formula/FormulaPane.java b/designer-base/src/main/java/com/fr/design/formula/FormulaPane.java index 32e7030bb6..9259248ac6 100644 --- a/designer-base/src/main/java/com/fr/design/formula/FormulaPane.java +++ b/designer-base/src/main/java/com/fr/design/formula/FormulaPane.java @@ -2,7 +2,6 @@ package com.fr.design.formula; import com.fr.base.BaseFormula; import com.fr.base.BaseUtils; -import com.fr.base.FRContext; import com.fr.design.actions.UpdateAction; import com.fr.design.border.UIRoundedBorder; import com.fr.design.constants.UIConstants; @@ -25,7 +24,6 @@ import com.fr.log.FineLoggerFactory; import com.fr.parser.FRLexer; import com.fr.parser.FRParser; import com.fr.stable.EncodeConstants; -import com.fr.stable.ProductConstants; import com.fr.stable.StringUtils; import com.fr.stable.script.Expression; @@ -54,7 +52,10 @@ import java.io.InputStream; import java.io.InputStreamReader; import java.io.Reader; import java.io.StringReader; -import java.util.Locale; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.List; /** * 公式编辑面板 @@ -413,14 +414,19 @@ public class FormulaPane extends BasicPane implements KeyListener, UIFormula { if (keyWord.length() != 0) { NameAndDescription[] descriptions = FunctionConstants.ALL.getDescriptions(); int lengthOfDes = descriptions.length; + List list = new ArrayList<>(); for (int i = 0; i < lengthOfDes; i++) { NameAndDescription and = descriptions[i]; String functionName = and.searchResult(keyWord, findDescription); if (StringUtils.isNotBlank(functionName)) { - listModel.addElement(functionName); + list.add(functionName); } } + Collections.sort(list, new SimilarComparator(keyWord)); + for (String name : list) { + listModel.addElement(name); + } if (!listModel.isEmpty()) { tipsList.setSelectedIndex(0); @@ -969,6 +975,26 @@ public class FormulaPane extends BasicPane implements KeyListener, UIFormula { } } + public static class SimilarComparator implements Comparator { + + private String searchKey; + + public SimilarComparator(String searchKey) { + this.searchKey = searchKey.toLowerCase(); + } + + @Override + public int compare(String o1, String o2) { + if (o1.toLowerCase().startsWith(searchKey)) { + return -1; + } + if (o2.toLowerCase().startsWith(searchKey)) { + return 1; + } + return o2.compareTo(o1); + } + } + public static class TextFolderUserObject { private String text; diff --git a/designer-base/src/main/java/com/fr/design/os/impl/DatabaseDialogAction.java b/designer-base/src/main/java/com/fr/design/os/impl/DatabaseDialogAction.java index 7db0004937..acd9068974 100644 --- a/designer-base/src/main/java/com/fr/design/os/impl/DatabaseDialogAction.java +++ b/designer-base/src/main/java/com/fr/design/os/impl/DatabaseDialogAction.java @@ -24,11 +24,13 @@ public class DatabaseDialogAction implements OSBasedAction { @Override public void execute(Object... objects) { - if (ServerPreferenceConfig.getInstance().isUseUniverseDBM() && !OperatingSystem.isLinux()) { - UniversalDatabaseOpener.showUniverseDatabaseDialog(); - } else { - openDesignDatabaseManager(); - } +// if (ServerPreferenceConfig.getInstance().isUseUniverseDBM() && !OperatingSystem.isLinux()) { +// UniversalDatabaseOpener.showUniverseDatabaseDialog(); +// } else { +// } + // 直接这里屏蔽掉 防止有设置过 导致配置数据库值为true 即使设置界面屏蔽也没用 + openDesignDatabaseManager(); + } private void openDesignDatabaseManager() { diff --git a/designer-base/src/main/java/com/fr/design/os/impl/PMDialogAction.java b/designer-base/src/main/java/com/fr/design/os/impl/PMDialogAction.java index 7e6eccf749..3f2f097283 100644 --- a/designer-base/src/main/java/com/fr/design/os/impl/PMDialogAction.java +++ b/designer-base/src/main/java/com/fr/design/os/impl/PMDialogAction.java @@ -21,11 +21,10 @@ public class PMDialogAction implements OSBasedAction { DesignUtils.visitEnvServerByParameters( PLUGIN_MANAGER_ROUTE,null,null); return; } -// if (ServerPreferenceConfig.getInstance().isUseOptimizedUPM() && !OperatingSystem.isLinux()) { -// UpmFinder.showUPMDialog(); -// } else { -// } - // 直接这里屏蔽掉 防止有设置过 导致配置数据库值为true 即使设置界面屏蔽也没用 - WebViewDlgHelper.createPluginDialog(); + if (ServerPreferenceConfig.getInstance().isUseOptimizedUPM() && !OperatingSystem.isLinux()) { + UpmFinder.showUPMDialog(); + } else { + WebViewDlgHelper.createPluginDialog(); + } } } diff --git a/designer-base/src/test/java/com/fr/design/formula/FormulaPaneTest.java b/designer-base/src/test/java/com/fr/design/formula/FormulaPaneTest.java new file mode 100644 index 0000000000..c82423daa3 --- /dev/null +++ b/designer-base/src/test/java/com/fr/design/formula/FormulaPaneTest.java @@ -0,0 +1,25 @@ +package com.fr.design.formula; + +import junit.framework.TestCase; +import org.junit.Assert; +import org.junit.Test; + +import java.util.Arrays; + + +/** + * @author hades + * @version 10.0 + * Created by hades on 2020/5/20 + */ +public class FormulaPaneTest extends TestCase { + + @Test + public void testSimilarComparator() { + String[] strs = new String[] {"ScriptEval", "SPLIT", "SUMPRECISE"}; + String[] result = new String[] {"SPLIT", "ScriptEval", "SUMPRECISE"}; + Arrays.sort(strs, new FormulaPane.SimilarComparator("sp")); + Assert.assertArrayEquals(result, strs); + } + +} \ No newline at end of file From 3328cf659495c0b0b1ce9a55d0c6816289512d68 Mon Sep 17 00:00:00 2001 From: "Java.Edge" Date: Thu, 21 May 2020 10:12:48 +0800 Subject: [PATCH 16/19] =?UTF-8?q?REPORT-31784=20=E7=A8=8B=E5=BA=8F?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E9=9B=86=E9=BB=98=E8=AE=A4=E5=91=BD=E5=90=8D?= =?UTF-8?q?=E6=98=BE=E7=A4=BA=E7=BC=A9=E7=95=A5=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/data/datapane/TableDataCreatorProducer.java | 1 + 1 file changed, 1 insertion(+) diff --git a/designer-base/src/main/java/com/fr/design/data/datapane/TableDataCreatorProducer.java b/designer-base/src/main/java/com/fr/design/data/datapane/TableDataCreatorProducer.java index d4e1c61b7c..dcb38c14ee 100644 --- a/designer-base/src/main/java/com/fr/design/data/datapane/TableDataCreatorProducer.java +++ b/designer-base/src/main/java/com/fr/design/data/datapane/TableDataCreatorProducer.java @@ -35,6 +35,7 @@ public class TableDataCreatorProducer { "ds", "/com/fr/design/images/data/database.png", DBTableData.class, DBTableDataPane.class); TableDataNameObjectCreator ds_Class = new TableDataNameObjectCreator(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Tabledata_Type_Class"), + "Class", "/com/fr/design/images/data/source/classTableData.png", ClassTableData.class, ClassTableDataPane.class); TableDataNameObjectCreator table = new TableDataNameObjectCreator(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Tabledata_Type_Embedded"), "Embedded", From e04740e1cfc85be5085daa11059649faa2421a1c Mon Sep 17 00:00:00 2001 From: hades Date: Thu, 21 May 2020 13:35:34 +0800 Subject: [PATCH 17/19] =?UTF-8?q?REPORT-31866=E3=80=90=E5=86=92=E7=83=9F?= =?UTF-8?q?=E6=B5=8B=E8=AF=95=E3=80=91=E5=88=87=E6=8D=A2=E8=BF=9C=E7=A8=8B?= =?UTF-8?q?=E7=9B=AE=E5=BD=95=EF=BC=8C=E6=96=B0=E5=BB=BA=E6=A8=A1=E6=9D=BF?= =?UTF-8?q?=E7=9A=84=E6=95=B0=E6=8D=AE=E9=9B=86=E5=B1=95=E7=A4=BA=E5=BC=82?= =?UTF-8?q?=E5=B8=B8=20&&=20REPORT-28701=20=E5=90=8C=E6=AD=A5release?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../design/file/HistoryTemplateListCache.java | 18 ++- .../gui/ifilechooser/AbstractFileChooser.java | 103 ++++++++++++ .../gui/ifilechooser/UINativeFileChooser.java | 153 ++++++++++++++++++ .../com/fr/design/os/impl/SupportOSImpl.java | 12 ++ .../mainframe/FormWidgetDetailPane.java | 34 +++- 5 files changed, 310 insertions(+), 10 deletions(-) create mode 100644 designer-base/src/main/java/com/fr/design/gui/ifilechooser/AbstractFileChooser.java create mode 100644 designer-base/src/main/java/com/fr/design/gui/ifilechooser/UINativeFileChooser.java diff --git a/designer-base/src/main/java/com/fr/design/file/HistoryTemplateListCache.java b/designer-base/src/main/java/com/fr/design/file/HistoryTemplateListCache.java index f8b089fe6a..cb68bb6e47 100644 --- a/designer-base/src/main/java/com/fr/design/file/HistoryTemplateListCache.java +++ b/designer-base/src/main/java/com/fr/design/file/HistoryTemplateListCache.java @@ -2,6 +2,7 @@ package com.fr.design.file; import com.fr.base.chart.chartdata.CallbackEvent; import com.fr.base.io.BaseBook; +import com.fr.design.DesignModelAdapter; import com.fr.design.DesignerEnvManager; import com.fr.design.base.mode.DesignModeContext; import com.fr.design.data.DesignTableDataManager; @@ -384,9 +385,14 @@ public class HistoryTemplateListCache implements CallbackEvent { historyList.set(i, template); // 替换当前正在编辑的模板,使用添加并激活的方式,以便使用统一的入口来处理监听事件 if (isCurrentEditingFile(template.getPath())) { - DesignerContext.getDesignerFrame().addAndActivateJTemplate(template); - setCurrentEditingTemplate(template); - FineLoggerFactory.getLogger().info("Env Change Current Editing Template."); + loadCurrentTemplate(template); + } + } else { + // 当模板为空时 说明是一个新建的未保存模板 但是内存中保存了该模板 可以从中获取 + JTemplate jt = historyList.get(i); + // 另外如果该模板是正在编辑的模板,需要要激活 + if (jt != null && isCurrentEditingFile(jt.getPath())) { + loadCurrentTemplate(jt); } } } catch (Exception e) { @@ -400,6 +406,12 @@ public class HistoryTemplateListCache implements CallbackEvent { FineLoggerFactory.getLogger().info("Env Change Template Loaded."); } + private void loadCurrentTemplate(JTemplate template) { + DesignerContext.getDesignerFrame().addAndActivateJTemplate(template); + setCurrentEditingTemplate(template); + FineLoggerFactory.getLogger().info("Env Change Current Editing Template " + template.getTemplateName()); + } + /** * 重新载入当前模板,刷新数据/对象 */ diff --git a/designer-base/src/main/java/com/fr/design/gui/ifilechooser/AbstractFileChooser.java b/designer-base/src/main/java/com/fr/design/gui/ifilechooser/AbstractFileChooser.java new file mode 100644 index 0000000000..ee61fd81f5 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/gui/ifilechooser/AbstractFileChooser.java @@ -0,0 +1,103 @@ +package com.fr.design.gui.ifilechooser; + +import javax.swing.filechooser.FileFilter; +import java.awt.*; +import java.io.File; + +/** + * @author hades + * @version 10.0 + * Created by hades on 2020/3/31 + */ +public abstract class AbstractFileChooser { + + /** + * 返回当前目录 + * + */ + public abstract File getCurrentDirectory(); + + /** + * 返回当前的文件选择过滤器 + * + */ + public abstract FileFilter getFileFilter(); + + /** + * 返回选择的文件 + * + */ + public abstract File getSelectedFile(); + + /** + * 多文件选择模式下 返回选择的多个文件 + * + */ + public abstract File[] getSelectedFiles(); + + /** + * 是否可以选择多个文件 + * + */ + public abstract boolean isMultiSelectionEnabled(); + + /** + * 设置当前选择的目录 + * + */ + public abstract void setCurrentDirectory(File dir); + + /** + * 设置左上角标题 + * + */ + public abstract void setDialogTitle(String title); + + /** + * 设置当前的文件过滤器 + * + */ + public abstract void setFileFilter(final FileFilter filter); + + /** + * 设置文件选择器模式 + * + * JFileChooser.FILES_ONLY + * JFileChooser.DIRECTORIES_ONLY + * JFileChooser.FILES_AND_DIRECTORIES + */ + public abstract void setFileSelectionMode(int selectionMode); + + /** + * 设置是否允许选择多个文件 + * + */ + public abstract void setMultiSelectionEnabled(boolean multiple); + + /** + * 设置选择的文件 用于showSaveDialog + * + */ + public abstract void setSelectedFile(File file); + + /** + * 弹出文件选择器 打开文件 + * + */ + public abstract int showOpenDialog(Component parent); + + /** + * 弹出文件选择器 保存文件 + * + */ + public abstract int showSaveDialog(Component parent); + + + /** + * https://bugs.java.com/bugdatabase/view_bug.do?bug_id=4031440 + * + * 设置文件名后缀 起到文件过滤的作用 形如 "*.jpg;*.jpeg" + * + */ + public abstract void setExtensionFilter(String file); +} diff --git a/designer-base/src/main/java/com/fr/design/gui/ifilechooser/UINativeFileChooser.java b/designer-base/src/main/java/com/fr/design/gui/ifilechooser/UINativeFileChooser.java new file mode 100644 index 0000000000..597f733f1e --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/gui/ifilechooser/UINativeFileChooser.java @@ -0,0 +1,153 @@ +package com.fr.design.gui.ifilechooser; + +import com.fr.design.mainframe.DesignerContext; +import com.fr.stable.os.OperatingSystem; + +import javax.swing.*; +import javax.swing.filechooser.FileFilter; +import java.awt.*; +import java.io.File; +import java.io.FilenameFilter; + + +/** + * 系统原生风格的文件选择器 + * + * jdk问题: + * https://bugs.openjdk.java.net/browse/JDK-4811090 不支持文件扩展选择 + * https://stackoverflow.com/questions/40713398/filter-not-working-in-filedialog windows下 setFilenameFilter不work + * + * @author hades + * @version 10.0 + * Created by hades on 2020/3/31 + */ +public class UINativeFileChooser extends AbstractFileChooser { + + private final FileDialog fileDialog; + private FileFilter fileFilter; + private int selectionMode; + + public UINativeFileChooser(File file) { + fileDialog = new FileDialog(DesignerContext.getDesignerFrame()); + if (file != null) { + fileDialog.setDirectory(file.getAbsolutePath()); + fileDialog.setFile(file.toString()); + } + } + + public UINativeFileChooser() { + this(null); + } + + @Override + public File getCurrentDirectory() { + return new File(fileDialog.getDirectory()); + } + + @Override + public FileFilter getFileFilter() { + return fileFilter; + } + + @Override + public File getSelectedFile() { + return new File(fileDialog.getDirectory() + fileDialog.getFile()); + } + + @Override + public File[] getSelectedFiles() { + return fileDialog.getFiles(); + } + + @Override + public boolean isMultiSelectionEnabled() { + return fileDialog.isMultipleMode(); + } + + @Override + public void setCurrentDirectory(File f) { + fileDialog.setDirectory(f.toString()); + } + + @Override + public void setDialogTitle(String title) { + fileDialog.setTitle(title); + } + + @Override + public void setFileFilter(final FileFilter cff) { + FilenameFilter filter = new FilenameFilter() { + @Override + public boolean accept(File Directory, String fileName) { + return cff.accept(new File(Directory.getAbsolutePath() + fileName)); + } + }; + fileDialog.setFilenameFilter(filter); + fileFilter = cff; + } + + @Override + public void setFileSelectionMode(int selectionMode) { + this.selectionMode = selectionMode; + } + + @Override + public void setMultiSelectionEnabled(boolean multiple) { + fileDialog.setMultipleMode(multiple); + } + + @Override + public void setSelectedFile(File file) { + fileDialog.setDirectory(file.getAbsolutePath()); + fileDialog.setFile(file.getName()); + } + + @Override + public int showOpenDialog(Component parent) { + boolean appleProperty = OperatingSystem.isMacos() && selectionMode == JFileChooser.DIRECTORIES_ONLY; + if (appleProperty) { + System.setProperty("apple.awt.fileDialogForDirectories", "true"); + } + try { + fileDialog.setLocale(JComponent.getDefaultLocale()); + fileDialog.setMode(FileDialog.LOAD); + fileDialog.setVisible(true); + return fileDialog.getFile() == null ? JFileChooser.CANCEL_OPTION : JFileChooser.APPROVE_OPTION; + } finally { + if (appleProperty) { + System.setProperty("apple.awt.fileDialogForDirectories", "false"); + } + } + } + + @Override + public int showSaveDialog(Component parent) { + fileDialog.setLocale(JComponent.getDefaultLocale()); + fileDialog.setMode(FileDialog.SAVE); + fileDialog.setVisible(true); + return fileDialog.getFile() == null ? JFileChooser.CANCEL_OPTION : JFileChooser.APPROVE_OPTION; + } + + @Override + public void setExtensionFilter(String file) { + fileDialog.setFile(file); + } + + /** + * 确认本地文件选择器是否支持选择模式 + * @param selectionMode 选择模式 + * @return 是否支持选择模式 + */ + public static boolean supportsSelectionMode(int selectionMode) { + switch (selectionMode) { + case JFileChooser.FILES_AND_DIRECTORIES: + return false; + case JFileChooser.DIRECTORIES_ONLY: + return OperatingSystem.isMacos(); + case JFileChooser.FILES_ONLY: + default: + return true; + } + } + +} diff --git a/designer-base/src/main/java/com/fr/design/os/impl/SupportOSImpl.java b/designer-base/src/main/java/com/fr/design/os/impl/SupportOSImpl.java index d799d00466..366e7d565c 100644 --- a/designer-base/src/main/java/com/fr/design/os/impl/SupportOSImpl.java +++ b/designer-base/src/main/java/com/fr/design/os/impl/SupportOSImpl.java @@ -105,6 +105,18 @@ public enum SupportOSImpl implements SupportOS { public boolean support() { return OperatingSystem.isWindows(); } + }, + + /** + * 原生文件选择器弹窗 + * https://bugs.java.com/bugdatabase/view_bug.do?bug_id=8019464 mac下原生弹窗国际化设置无效,jdk11中有修复 + * + */ + NATIVE_CHOOSER { + @Override + public boolean support() { + return OperatingSystem.isWindows(); + } } } 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 ecb3faa706..311ea4cb76 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 @@ -5,8 +5,10 @@ import com.fr.base.FRContext; import com.fr.design.gui.ibutton.UIButton; import com.fr.design.gui.icombobox.UIComboBox; import com.fr.design.gui.icontainer.UIScrollPane; +import com.fr.design.gui.ifilechooser.UINativeFileChooser; import com.fr.design.gui.ilable.UILabel; import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.design.os.impl.SupportOSImpl; import com.fr.design.widget.FRWidgetFactory; import com.fr.form.share.SharableWidgetProvider; import com.fr.form.share.ShareLoader; @@ -333,13 +335,31 @@ public class FormWidgetDetailPane extends FormDockView{ new ActionListener() { @Override public void actionPerformed(ActionEvent e) { - JFileChooser fileChooser = new JFileChooser(); - fileChooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES); - fileChooser.setFileFilter(new FileNameExtensionFilter(".reu", "reu")); - int returnValue = fileChooser.showDialog(new UILabel(), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Select")); - if (returnValue == JFileChooser.APPROVE_OPTION) { - final File chosenFile = fileChooser.getSelectedFile(); - installFromDiskZipFile(chosenFile); + if (SupportOSImpl.NATIVE_CHOOSER.support()) { + UINativeFileChooser nativeFileChooser = new UINativeFileChooser(); + nativeFileChooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES); + nativeFileChooser.setMultiSelectionEnabled(true); + nativeFileChooser.setExtensionFilter("*.reu"); + nativeFileChooser.setDialogTitle(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Select")); + int returnValue = nativeFileChooser.showOpenDialog(new UILabel()); + if (returnValue == JFileChooser.APPROVE_OPTION) { + final File[] chosenFiles = nativeFileChooser.getSelectedFiles(); + for (File file : chosenFiles) { + installFromDiskZipFile(file); + } + } + } else { + JFileChooser fileChooser = new JFileChooser(); + fileChooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES); + fileChooser.setMultiSelectionEnabled(true); + fileChooser.setFileFilter(new FileNameExtensionFilter(".reu", "reu")); + int returnValue = fileChooser.showDialog(new UILabel(), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Select")); + if (returnValue == JFileChooser.APPROVE_OPTION) { + final File[] chosenFiles = fileChooser.getSelectedFiles(); + for (File file : chosenFiles) { + installFromDiskZipFile(file); + } + } } } } From ba5c403f7ac586d8e8393f7557d559c66dd36d99 Mon Sep 17 00:00:00 2001 From: hades Date: Thu, 21 May 2020 15:48:31 +0800 Subject: [PATCH 18/19] =?UTF-8?q?REPORT-32068=20=E8=AE=BE=E8=AE=A1?= =?UTF-8?q?=E5=99=A8=E5=90=AF=E5=8A=A8=E9=BB=91=E5=B1=8F=EF=BC=8C=E5=87=BA?= =?UTF-8?q?=E7=8E=B0=E4=B8=80=E6=AC=A1=EF=BC=8C=E9=87=8D=E5=90=AF=E5=90=8E?= =?UTF-8?q?=E6=AD=A3=E5=B8=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mainframe/EastRegionContainerPane.java | 35 ++++++++++++------- 1 file changed, 23 insertions(+), 12 deletions(-) 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 a1f88d77ce..622e9a59cb 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 @@ -11,6 +11,7 @@ import com.fr.design.gui.ibutton.UIButtonUI; import com.fr.design.gui.icontainer.UIEastResizableContainer; import com.fr.design.gui.ilable.UILabel; import com.fr.design.layout.VerticalFlowLayout; +import com.fr.design.ui.util.UIUtil; import com.fr.design.utils.gui.GUICoreUtils; import com.fr.design.utils.gui.GUIPaintUtils; import com.fr.general.FRFont; @@ -150,12 +151,18 @@ public class EastRegionContainerPane extends UIEastResizableContainer { public void on(PluginEvent event) { PluginContext context = event.getContext(); PluginRuntime runtime = context.getRuntime(); - Set providers = runtime.get(PropertyItemPaneProvider.XML_TAG); - for (PropertyItemPaneProvider provider : providers) { - addPropertyItem(provider); - } - updateAllPropertyPane(); - } + final Set providers = runtime.get(PropertyItemPaneProvider.XML_TAG); + // UI相关的逻辑 用UI线程执行 不走FinePluginController线程 走FinePluginController线程有几率出问题 + // 容易导致FinePluginController持有Swing内部的java.awt.Component$AWTTreeLock 这个锁不能被UI线程之外的线程持有 否则容易造成UI线程被Blocked住 + UIUtil.invokeLaterIfNeeded(new Runnable() { + @Override + public void run() { + for (PropertyItemPaneProvider provider : providers) { + addPropertyItem(provider); + } + updateAllPropertyPane(); + } + }); } }, filter); PluginListenerRegistration.getInstance().listen( PluginEventType.BeforeStop, @@ -164,12 +171,16 @@ public class EastRegionContainerPane extends UIEastResizableContainer { public void on(PluginEvent event) { PluginContext context = event.getContext(); PluginRuntime runtime = context.getRuntime(); - Set providers = runtime.get(PropertyItemPaneProvider.XML_TAG); - for (PropertyItemPaneProvider provider : providers) { - removePropertyItem(provider); - - } - updateAllPropertyPane(); + final Set providers = runtime.get(PropertyItemPaneProvider.XML_TAG); + UIUtil.invokeLaterIfNeeded(new Runnable() { + @Override + public void run() { + for (PropertyItemPaneProvider provider : providers) { + removePropertyItem(provider); + } + updateAllPropertyPane(); + } + }); } }, filter); } From ae745082ebcd19b4e0a597e9ba1cd19b1f13e915 Mon Sep 17 00:00:00 2001 From: Harrison Date: Thu, 21 May 2020 16:33:33 +0800 Subject: [PATCH 19/19] =?UTF-8?q?REPORT-32088=E3=80=90=E7=BB=84=E4=BB=B6?= =?UTF-8?q?=E5=8A=A0=E5=AF=86=E3=80=91@harrison=E9=9B=86=E7=BE=A4=E5=AE=89?= =?UTF-8?q?=E8=A3=85=E5=87=BA=E7=8E=B0=E5=88=9D=E5=A7=8B=E5=8C=96=E5=A4=B1?= =?UTF-8?q?=E8=B4=A5=20=E6=8F=92=E4=BB=B6=E6=8E=A5=E5=8F=A3=E7=9A=84?= =?UTF-8?q?=E4=BD=8D=E7=BD=AE=E6=9C=89=E7=82=B9=E9=97=AE=E9=A2=98=EF=BC=8C?= =?UTF-8?q?=20=E4=B8=8D=E8=83=BD=E6=94=BE=E5=88=B0=20form=20=E4=B8=8B?= =?UTF-8?q?=EF=BC=8C=20=E8=A6=81=E6=94=BE=E5=88=B0=20design=20=E4=B8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../designer/beans/events/CreatorEventListenerTable.java | 4 ++-- .../design/designer/beans/models/SelectionModelTest.java | 8 ++------ 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/designer-form/src/main/java/com/fr/design/designer/beans/events/CreatorEventListenerTable.java b/designer-form/src/main/java/com/fr/design/designer/beans/events/CreatorEventListenerTable.java index aa0ea1c9ae..d7f1a199ca 100644 --- a/designer-form/src/main/java/com/fr/design/designer/beans/events/CreatorEventListenerTable.java +++ b/designer-form/src/main/java/com/fr/design/designer/beans/events/CreatorEventListenerTable.java @@ -1,8 +1,8 @@ package com.fr.design.designer.beans.events; +import com.fr.design.ExtraDesignClassManager; import com.fr.design.designer.creator.XComponent; import com.fr.design.fun.DesignerEditListenerProvider; -import com.fr.form.main.ExtraFormClassManager; import com.fr.general.ComparatorUtils; import com.fr.plugin.injectable.PluginModule; @@ -44,7 +44,7 @@ public class CreatorEventListenerTable { } //触发插件的事件 - ExtraFormClassManager manager = PluginModule.getAgent(PluginModule.ExtraForm); + ExtraDesignClassManager manager = PluginModule.getAgent(PluginModule.ExtraDesign); Set providers = manager.getArray(DesignerEditListenerProvider.XML_TAG); for (DesignerEditListenerProvider provider : providers) { provider.fireCreatorModified(evt); diff --git a/designer-form/src/test/java/com/fr/design/designer/beans/models/SelectionModelTest.java b/designer-form/src/test/java/com/fr/design/designer/beans/models/SelectionModelTest.java index 06f1be65c4..6ab4dd3088 100644 --- a/designer-form/src/test/java/com/fr/design/designer/beans/models/SelectionModelTest.java +++ b/designer-form/src/test/java/com/fr/design/designer/beans/models/SelectionModelTest.java @@ -6,7 +6,6 @@ import com.fr.design.designer.creator.XCreator; import com.fr.design.fun.ClipboardHandlerProvider; import com.fr.design.fun.impl.AbstractClipboardHandlerProvider; import com.fr.design.mainframe.FormDesigner; -import com.fr.form.main.ExtraFormClassManager; import com.fr.plugin.injectable.PluginModule; import com.fr.stable.fun.mark.Mutable; import org.easymock.EasyMock; @@ -59,18 +58,15 @@ public class SelectionModelTest { EasyMock.expect(designManager.getArray(ClipboardHandlerProvider.XML_TAG)) .andReturn(providers) .anyTimes(); - ExtraFormClassManager formManager = EasyMock.mock(ExtraFormClassManager.class); - EasyMock.expect(formManager.getArray("DesignerEditListenerProvider")) + EasyMock.expect(designManager.getArray("DesignerEditListenerProvider")) .andReturn(new HashSet()) .anyTimes(); - EasyMock.replay(designManager, formManager); + EasyMock.replay(designManager); PowerMock.mockStatic(PluginModule.class); EasyMock.expect(PluginModule.getAgent(PluginModule.ExtraDesign)) .andReturn(designManager) .anyTimes(); - EasyMock.expect(PluginModule.getAgent(PluginModule.ExtraForm)) - .andReturn(formManager).anyTimes(); PowerMock.replayAll(); }