From 9e4e433234b185932487255788895a4d37c91038 Mon Sep 17 00:00:00 2001 From: zheng Date: Thu, 28 Jun 2018 19:47:05 +0800 Subject: [PATCH 01/13] CHART-1824 910 --- .../com/fr/van/chart/map/images/marker-icon.png | Bin 1466 -> 0 bytes .../fr/van/chart/map/images/marker-iconx2.png | Bin 1845 -> 0 bytes 2 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 designer-chart/src/com/fr/van/chart/map/images/marker-icon.png delete mode 100644 designer-chart/src/com/fr/van/chart/map/images/marker-iconx2.png diff --git a/designer-chart/src/com/fr/van/chart/map/images/marker-icon.png b/designer-chart/src/com/fr/van/chart/map/images/marker-icon.png deleted file mode 100644 index 950edf24677ded147df13b26f91baa2b0fa70513..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1466 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 From e0f14ee61800b334db8d59a78ad85239c21cf752 Mon Sep 17 00:00:00 2001 From: zheng Date: Fri, 29 Jun 2018 15:45:40 +0800 Subject: [PATCH 02/13] CHART-2105 910 --- .../style/background/AlertLineListControlPane.java | 10 +++++----- .../style/background/BackgroundListControlPane.java | 10 +++++----- .../series/VanChartStackedAndAxisListControlPane.java | 6 ++---- 3 files changed, 12 insertions(+), 14 deletions(-) diff --git a/designer-chart/src/com/fr/van/chart/designer/style/background/AlertLineListControlPane.java b/designer-chart/src/com/fr/van/chart/designer/style/background/AlertLineListControlPane.java index 659b53fdae..2d09b5d898 100644 --- a/designer-chart/src/com/fr/van/chart/designer/style/background/AlertLineListControlPane.java +++ b/designer-chart/src/com/fr/van/chart/designer/style/background/AlertLineListControlPane.java @@ -51,7 +51,7 @@ public class AlertLineListControlPane extends VanChartUIListControlPane { VanChartRectanglePlot rectanglePlot = (VanChartRectanglePlot) plot; List xAxisList = rectanglePlot.getXAxisList(); List yAxisList = rectanglePlot.getYAxisList(); - String[] axisNames = DefaultAxisHelper.getAllAxisNames(xAxisList, yAxisList); + String[] axisNames = DefaultAxisHelper.getAllAxisNames(rectanglePlot); ChartNameObjectCreator[] creators = {new ChartNameObjectCreator(getAlertAxisName(axisNames), Inter.getLocText("Plugin-ChartF_AlertLine"), VanChartAlertValue.class, getAlertPaneClass())}; @@ -63,7 +63,7 @@ public class AlertLineListControlPane extends VanChartUIListControlPane { List values = axis.getAlertValues(); for (VanChartAlertValue alertValue : values) { alertValue.setAxisNamesArray(axisNames); - alertValue.setAxisName(axis.getAxisName()); + alertValue.setAxisName(rectanglePlot.getXAxisName(axis)); nameObjects.add(new NameObject(alertValue.getAlertPaneSelectName(), alertValue)); } } @@ -72,7 +72,7 @@ public class AlertLineListControlPane extends VanChartUIListControlPane { List values = axis.getAlertValues(); for (VanChartAlertValue alertValue : values) { alertValue.setAxisNamesArray(axisNames); - alertValue.setAxisName(axis.getAxisName()); + alertValue.setAxisName(rectanglePlot.getYAxisName(axis)); nameObjects.add(new NameObject(alertValue.getAlertPaneSelectName(), alertValue)); } } @@ -93,7 +93,7 @@ public class AlertLineListControlPane extends VanChartUIListControlPane { List axisAlerts = new ArrayList(); for (int i = 0; i < nameables.length; i++) { VanChartAlertValue value = (VanChartAlertValue) ((NameObject) nameables[i]).getObject(); - if (ComparatorUtils.equals(value.getAxisName(), axis.getAxisName())) { + if (ComparatorUtils.equals(value.getAxisName(), rectanglePlot.getXAxisName(axis))) { value.setAlertPaneSelectName(nameables[i].getName()); axisAlerts.add(value); } @@ -104,7 +104,7 @@ public class AlertLineListControlPane extends VanChartUIListControlPane { List axisAlerts = new ArrayList(); for (int i = 0; i < nameables.length; i++) { VanChartAlertValue value = (VanChartAlertValue) ((NameObject) nameables[i]).getObject(); - if (ComparatorUtils.equals(value.getAxisName(), axis.getAxisName())) { + if (ComparatorUtils.equals(value.getAxisName(), rectanglePlot.getYAxisName(axis))) { value.setAlertPaneSelectName(nameables[i].getName()); axisAlerts.add(value); } diff --git a/designer-chart/src/com/fr/van/chart/designer/style/background/BackgroundListControlPane.java b/designer-chart/src/com/fr/van/chart/designer/style/background/BackgroundListControlPane.java index 9c33672bae..31c020a05a 100644 --- a/designer-chart/src/com/fr/van/chart/designer/style/background/BackgroundListControlPane.java +++ b/designer-chart/src/com/fr/van/chart/designer/style/background/BackgroundListControlPane.java @@ -53,7 +53,7 @@ public class BackgroundListControlPane extends VanChartUIListControlPane { VanChartRectanglePlot rectanglePlot = (VanChartRectanglePlot) plot; List xAxisList = rectanglePlot.getXAxisList(); List yAxisList = rectanglePlot.getYAxisList(); - String[] axisNames = DefaultAxisHelper.getAllAxisNames(xAxisList, yAxisList); + String[] axisNames = DefaultAxisHelper.getAllAxisNames(rectanglePlot); BackgroundNameObjectCreator[] creators = {new BackgroundNameObjectCreator(getCustomIntervalBackgroundAxisName(axisNames), Inter.getLocText("Plugin-ChartF_CustomIntervalBackground"), VanChartCustomIntervalBackground.class, getIntervalPaneClass())}; @@ -66,7 +66,7 @@ public class BackgroundListControlPane extends VanChartUIListControlPane { List customIntervalBackgrounds = axis.getCustomIntervalBackgroundArray(); for (VanChartCustomIntervalBackground background : customIntervalBackgrounds) { background.setAxisNamesArray(axisNames); - background.setAxisName(axis.getAxisName()); + background.setAxisName(rectanglePlot.getXAxisName(axis)); nameObjects.add(new NameObject(background.getCustomIntervalBackgroundSelectName(), background)); } @@ -75,7 +75,7 @@ public class BackgroundListControlPane extends VanChartUIListControlPane { List customIntervalBackgrounds = axis.getCustomIntervalBackgroundArray(); for (VanChartCustomIntervalBackground background : customIntervalBackgrounds) { background.setAxisNamesArray(axisNames); - background.setAxisName(axis.getAxisName()); + background.setAxisName(rectanglePlot.getYAxisName(axis)); nameObjects.add(new NameObject(background.getCustomIntervalBackgroundSelectName(), background)); } } @@ -102,7 +102,7 @@ public class BackgroundListControlPane extends VanChartUIListControlPane { if (!isDefaultIntervalBackground) { for (int i = 0; i < nameables.length; i++) { VanChartCustomIntervalBackground value = (VanChartCustomIntervalBackground) ((NameObject) nameables[i]).getObject(); - if (ComparatorUtils.equals(value.getAxisName(), axis.getAxisName())) { + if (ComparatorUtils.equals(value.getAxisName(), rectanglePlot.getXAxisName(axis))) { value.setCustomIntervalBackgroundSelectName(nameables[i].getName()); axisCustomBackground.add(value); } @@ -115,7 +115,7 @@ public class BackgroundListControlPane extends VanChartUIListControlPane { if (!isDefaultIntervalBackground) { for (int i = 0; i < nameables.length; i++) { VanChartCustomIntervalBackground value = (VanChartCustomIntervalBackground) ((NameObject) nameables[i]).getObject(); - if (ComparatorUtils.equals(value.getAxisName(), axis.getAxisName())) { + if (ComparatorUtils.equals(value.getAxisName(), rectanglePlot.getYAxisName(axis))) { value.setCustomIntervalBackgroundSelectName(nameables[i].getName()); axisCustomBackground.add(value); } diff --git a/designer-chart/src/com/fr/van/chart/designer/style/series/VanChartStackedAndAxisListControlPane.java b/designer-chart/src/com/fr/van/chart/designer/style/series/VanChartStackedAndAxisListControlPane.java index 7714a7a270..520a71782b 100644 --- a/designer-chart/src/com/fr/van/chart/designer/style/series/VanChartStackedAndAxisListControlPane.java +++ b/designer-chart/src/com/fr/van/chart/designer/style/series/VanChartStackedAndAxisListControlPane.java @@ -49,10 +49,8 @@ public class VanChartStackedAndAxisListControlPane extends VanChartUIListControl public void populate(VanChartRectanglePlot plot) { this.plot = plot; - java.util.List xAxisList = plot.getXAxisList(); - java.util.List yAxisList = plot.getYAxisList(); - String[] axisXNames = DefaultAxisHelper.getAxisNames(xAxisList); - String[] axisYNames = DefaultAxisHelper.getAxisNames(yAxisList); + String[] axisXNames = DefaultAxisHelper.getXAxisNames(plot); + String[] axisYNames = DefaultAxisHelper.getYAxisNames(plot); java.util.List menuList = new ArrayList(); AttrSeriesStackAndAxis seriesStackAndAxis = new AttrSeriesStackAndAxis(); From 37af1c934b53e72a30f26a9b44a2469e23219999 Mon Sep 17 00:00:00 2001 From: kerry Date: Fri, 29 Jun 2018 16:25:50 +0800 Subject: [PATCH 03/13] =?UTF-8?q?REPORT-9232=20=E3=80=9010.0=E4=B8=80?= =?UTF-8?q?=E8=BD=AE=E5=9B=9E=E5=BD=92=E3=80=91=E6=8C=89=E9=92=AE=E6=8E=A7?= =?UTF-8?q?=E4=BB=B6=E8=87=AA=E5=AE=9A=E4=B9=89=E8=83=8C=E6=99=AF=E8=AE=BE?= =?UTF-8?q?=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../style/background/BackgroundCardSwitchButtonPane.java | 4 ++-- .../com/fr/design/style/background/BackgroundFactory.java | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/designer-base/src/com/fr/design/style/background/BackgroundCardSwitchButtonPane.java b/designer-base/src/com/fr/design/style/background/BackgroundCardSwitchButtonPane.java index b5a2aeffad..21128fa77e 100644 --- a/designer-base/src/com/fr/design/style/background/BackgroundCardSwitchButtonPane.java +++ b/designer-base/src/com/fr/design/style/background/BackgroundCardSwitchButtonPane.java @@ -2,7 +2,7 @@ package com.fr.design.style.background; import com.fr.base.background.ColorBackground; import com.fr.base.background.GradientBackground; -import com.fr.base.background.ImageBackground; +import com.fr.base.background.ImageFileBackground; import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.style.background.gradient.GradientBackgroundPane; import com.fr.design.style.background.impl.ColorBackgroundPane; @@ -30,7 +30,7 @@ public class BackgroundCardSwitchButtonPane extends BackgroundButtonPane { private static void registerCardSwitchBtnBackground(Map, BackgroundUIWrapper> map) { map.put(ColorBackground.class, BackgroundUIWrapper.create() .setType(ColorBackgroundPane.class).setTitle(Inter.getLocText("FR-Designer_Background_Color"))); - map.put(ImageBackground.class, BackgroundUIWrapper.create() + map.put(ImageFileBackground.class, BackgroundUIWrapper.create() .setType(ImageBackgroundPane.class).setTitle(Inter.getLocText("FR-Designer_Background_Image"))); map.put(GradientBackground.class, BackgroundUIWrapper.create() .setType(GradientBackgroundPane.class).setTitle(Inter.getLocText("FR-Designer_Background_Gradient_Color"))); diff --git a/designer-base/src/com/fr/design/style/background/BackgroundFactory.java b/designer-base/src/com/fr/design/style/background/BackgroundFactory.java index 8489f7d889..2348f99aca 100644 --- a/designer-base/src/com/fr/design/style/background/BackgroundFactory.java +++ b/designer-base/src/com/fr/design/style/background/BackgroundFactory.java @@ -3,7 +3,7 @@ package com.fr.design.style.background; import com.fr.base.background.ColorBackground; import com.fr.base.background.GradientBackground; -import com.fr.base.background.ImageBackground; +import com.fr.base.background.ImageFileBackground; import com.fr.base.background.PatternBackground; import com.fr.base.background.TextureBackground; import com.fr.design.ExtraDesignClassManager; @@ -104,19 +104,19 @@ public class BackgroundFactory { } private static void registerImageBackground(Map, BackgroundUIWrapper> map) { - map.put(ImageBackground.class, BackgroundUIWrapper.create() + map.put(ImageFileBackground.class, BackgroundUIWrapper.create() .setType(ImageBackgroundPane.class).setTitle(Inter.getLocText("FR-Designer_Background_Image"))); } private static void registerBrowserImageBackground(Map, BackgroundUIWrapper> map) { - map.put(ImageBackground.class, BackgroundUIWrapper.create() + map.put(ImageFileBackground.class, BackgroundUIWrapper.create() .setType(ImageBackgroundPane4Browser.class).setTitle(Inter.getLocText("FR-Designer_Background_Image"))); } private static void registerButtonBackground(Map, BackgroundUIWrapper> map){ map.put(ColorBackground.class, BackgroundUIWrapper.create() .setType(ColorBackgroundPane.class).setTitle(Inter.getLocText("FR-Designer_Background_Color"))); - map.put(ImageBackground.class, BackgroundUIWrapper.create() + map.put(ImageFileBackground.class, BackgroundUIWrapper.create() .setType(ImageButtonBackgroundPane.class).setTitle(Inter.getLocText("FR-Designer_Background_Image"))); } From bf17d9f018d850a4b0e7f3726bf2e9c408fa7f7e Mon Sep 17 00:00:00 2001 From: ju Date: Fri, 29 Jun 2018 17:11:51 +0800 Subject: [PATCH 04/13] =?UTF-8?q?REPORT-9314=20=E3=80=9010.0=E4=B8=80?= =?UTF-8?q?=E8=BD=AE=E5=9B=9E=E5=BD=92=E3=80=91=E6=A8=A1=E6=9D=BF=E7=9B=AE?= =?UTF-8?q?=E5=BD=95=E6=97=A0=E6=B3=95=E6=98=BE=E7=A4=BAexcel=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E4=B9=9F=E6=97=A0=E6=B3=95=E6=89=93=E5=BC=80=EF=BC=8C?= =?UTF-8?q?9.0=E5=8F=AF=E4=BB=A5=20=E5=90=8E=E9=9D=A2=E6=9C=89=E8=BF=87?= =?UTF-8?q?=E6=BB=A4=E7=9A=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../gui/itree/filetree/TemplateFileTree.java | 87 ++++++++++--------- 1 file changed, 47 insertions(+), 40 deletions(-) diff --git a/designer-base/src/com/fr/design/gui/itree/filetree/TemplateFileTree.java b/designer-base/src/com/fr/design/gui/itree/filetree/TemplateFileTree.java index aeb3756e60..aaf57a90ae 100644 --- a/designer-base/src/com/fr/design/gui/itree/filetree/TemplateFileTree.java +++ b/designer-base/src/com/fr/design/gui/itree/filetree/TemplateFileTree.java @@ -20,36 +20,40 @@ import java.util.List; * 显示Env下的reportlets目录下面的所有cpt文件 */ public class TemplateFileTree extends EnvFileTree { - - + + public TemplateFileTree() { + super(ProjectConstants.REPORTLETS_NAME, null, null); } - + /* * 选中reportPath */ public void setSelectedTemplatePath(String templatePath) { + this.selectPath(templatePath); } - + /** * 返回选中的Template的路径 */ public String getSelectedTemplatePath() { + FileNode fn = this.getSelectedFileNode(); if (fn != null && !fn.isDirectory()) { String envPath = fn.getEnvPath(); - + if (envPath.startsWith(ProjectConstants.REPORTLETS_NAME)) { return envPath.substring(ProjectConstants.REPORTLETS_NAME.length()); } } - + return null; } - + public String[] getSelectedTemplatePaths() { + TreePath[] selectedTreePaths = this.getSelectionPaths(); if (ArrayUtils.isEmpty(selectedTreePaths)) { return ArrayUtils.EMPTY_STRING_ARRAY; @@ -68,13 +72,13 @@ public class TemplateFileTree extends EnvFileTree { } } } - - + + return selectedPathList.toArray(new String[0]); } - + public TreePath getNextMatch(String prefix, int startingRow, Position.Bias bias) { - + int max = getRowCount(); if (prefix == null) { throw new IllegalArgumentException(); @@ -89,9 +93,9 @@ public class TemplateFileTree extends EnvFileTree { do { TreePath path = getPathForRow(row); String text = convertValueToText( - path.getLastPathComponent(), isRowSelected(row), - isExpanded(row), true, row, false); - + path.getLastPathComponent(), isRowSelected(row), + isExpanded(row), true, row, false); + if (text.toUpperCase().startsWith(prefix)) { return path; } @@ -99,24 +103,23 @@ public class TemplateFileTree extends EnvFileTree { } while (row != startingRow); return null; } - + public FileNode[] listFile(String path) throws Exception { - return FRContext.getFileNodes().list( - path, - new FileExtension[]{FileExtension.CPT, FileExtension.FRM, FileExtension.CPTX, FileExtension.FRMX}); + + return FRContext.getFileNodes().list(path); } - + /* * 改变Env后,根据构造函数时设置的RootPaths,重新加载 */ public void refreshEnv() { - + DefaultTreeModel defaultTreeModel = (DefaultTreeModel) this.getModel(); ExpandMutableTreeNode rootTreeNode = (ExpandMutableTreeNode) defaultTreeModel.getRoot(); rootTreeNode.removeAllChildren(); - + FileNode[] fns; - + // 如果rootPaths是null的话列出所有文件 if (subPathes == null) { fns = listFileNodes(this.treeRootPath); @@ -127,26 +130,28 @@ public class TemplateFileTree extends EnvFileTree { fns[i] = new FileNode(StableUtils.pathJoin(this.treeRootPath, subPathes[i]), true); } } - + ExpandMutableTreeNode[] subTreeNodes = fileNodeArray2TreeNodeArray(fns); - + for (ExpandMutableTreeNode node : subTreeNodes) { rootTreeNode.add(node); } - + defaultTreeModel.reload(rootTreeNode); } - + protected ExpandMutableTreeNode[] loadChildTreeNodes(ExpandMutableTreeNode treeNode) { + FileNode[] fn_array = listFileNodes(treeNode); - + return fileNodeArray2TreeNodeArray(fn_array); } - + /* * 把FileNode[]转成ExpandMutableTreeNode[] */ private ExpandMutableTreeNode[] fileNodeArray2TreeNodeArray(FileNode[] fileNodes) { + ExpandMutableTreeNode[] res = new ExpandMutableTreeNode[fileNodes.length]; for (int i = 0; i < res.length; i++) { FileNode fn = fileNodes[i]; @@ -155,12 +160,13 @@ public class TemplateFileTree extends EnvFileTree { res[i].add(new ExpandMutableTreeNode()); } } - + return res; } - - + + private FileNode[] listFileNodes(String filePath) { + FileNode[] fileNodes = null; try { fileNodes = listFile(filePath); @@ -178,31 +184,32 @@ public class TemplateFileTree extends EnvFileTree { list.add(fileNode); } } - + fileNodes = list.toArray(new FileNode[list.size()]); } - + Arrays.sort(fileNodes, new FileNodeComparator()); - + return fileNodes; } - + /* * 求当前TreeNode下所有的FileNode. */ private FileNode[] listFileNodes(ExpandMutableTreeNode currentTreeNode) { + if (currentTreeNode == null) { return new FileNode[0]; } - + Object object = currentTreeNode.getUserObject(); - + if (object instanceof FileNode) { return this.listFileNodes(((FileNode) object).getEnvPath()); } - + return new FileNode[0]; } - - + + } \ No newline at end of file From bd3b69d0ed7466fa2f41a7a1a4c0e3e72d19f65d Mon Sep 17 00:00:00 2001 From: kerry Date: Fri, 29 Jun 2018 17:13:39 +0800 Subject: [PATCH 05/13] =?UTF-8?q?REPORT-7947=20=E3=80=9010.0=E3=80=91?= =?UTF-8?q?=E5=9C=A8=E8=AE=BE=E8=AE=A1=E5=99=A8=E4=B8=8A=E7=99=BB=E5=BD=95?= =?UTF-8?q?bbs=E7=9A=84=E7=94=A8=E6=88=B7=E6=97=B6=EF=BC=8C=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E5=BA=93=E6=97=A0=E6=B3=95=E7=94=9F=E6=88=90=E5=AF=B9?= =?UTF-8?q?=E5=BA=94=E7=9A=84=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/com/fr/design/bbs/BBSLoginUtils.java | 33 +++++++++++-------- 1 file changed, 20 insertions(+), 13 deletions(-) diff --git a/designer-base/src/com/fr/design/bbs/BBSLoginUtils.java b/designer-base/src/com/fr/design/bbs/BBSLoginUtils.java index 9a8eef094f..5b46b7c68e 100644 --- a/designer-base/src/com/fr/design/bbs/BBSLoginUtils.java +++ b/designer-base/src/com/fr/design/bbs/BBSLoginUtils.java @@ -1,5 +1,6 @@ package com.fr.design.bbs; +import com.fr.config.BBSAttr; import com.fr.config.Configuration; import com.fr.config.MarketConfig; import com.fr.log.FineLoggerFactory; @@ -15,12 +16,14 @@ import java.util.List; public class BBSLoginUtils { public static void bbsLogin(final String username, final String password) { + final BBSAttr bbsAttr = new BBSAttr(); + bbsAttr.setBbsUsername(username); + bbsAttr.setBbsPassword(password); try { Configurations.update(new Worker() { @Override public void run() { - MarketConfig.getInstance().setBbsUsername(username); - MarketConfig.getInstance().setBbsPassword(password); + MarketConfig.getInstance().setBBsAttr(bbsAttr); } @Override public Class[] targets() { @@ -35,16 +38,18 @@ public class BBSLoginUtils { public static void bbsLogin(List list) { try { - final String uid = list.get(0); - final String username = list.get(1); - final String password = list.get(2); + String uid = list.get(0); + String username = list.get(1); + String password = list.get(2); + final BBSAttr bbsAttr = new BBSAttr(); + bbsAttr.setBbsUsername(username); + bbsAttr.setBbsPassword(password); + bbsAttr.setBbsUid(Integer.parseInt(uid)); + bbsAttr.setInShowBBsName(username); Configurations.update(new Worker() { @Override public void run() { - MarketConfig.getInstance().setBbsUsername(username); - MarketConfig.getInstance().setBbsPassword(password); - MarketConfig.getInstance().setBbsUid(Integer.parseInt(uid)); - MarketConfig.getInstance().setInShowBBsName(username); + MarketConfig.getInstance().setBBsAttr(bbsAttr); } @Override public Class[] targets() { @@ -58,11 +63,13 @@ public class BBSLoginUtils { } public static void bbsLogout() { + final BBSAttr bbsAttr = new BBSAttr(); + bbsAttr.setBbsUsername(StringUtils.EMPTY); + bbsAttr.setBbsPassword(StringUtils.EMPTY); + bbsAttr.setBbsUid(0); + bbsAttr.setInShowBBsName(StringUtils.EMPTY); try { - MarketConfig.getInstance().setBbsUsername(StringUtils.EMPTY); - MarketConfig.getInstance().setBbsPassword(StringUtils.EMPTY); - MarketConfig.getInstance().setBbsUid(0); - MarketConfig.getInstance().setInShowBBsName(StringUtils.EMPTY); + MarketConfig.getInstance().setBBsAttr(bbsAttr); } catch (Exception e) { FineLoggerFactory.getLogger().error(e.getMessage()); } From 3113f41292ec293a73e6a3980c60444901ae24f1 Mon Sep 17 00:00:00 2001 From: ju Date: Fri, 29 Jun 2018 17:20:13 +0800 Subject: [PATCH 06/13] =?UTF-8?q?REPORT-8926=20=E3=80=9010.0=E4=B8=80?= =?UTF-8?q?=E8=BD=AE=E5=9B=9E=E5=BD=92=E3=80=91=E8=AE=BE=E8=AE=A1=E5=99=A8?= =?UTF-8?q?=E9=BB=98=E8=AE=A4=E7=9A=84=E5=B7=A5=E4=BD=9C=E7=9B=AE=E5=BD=95?= =?UTF-8?q?=E5=90=8D=E7=A7=B0=E6=9C=89=E9=97=AE=E9=A2=98=20=E6=A3=80?= =?UTF-8?q?=E6=9F=A5=E6=94=BE=E5=88=B0basic=E5=90=AF=E5=8A=A8=E5=AE=8C?= =?UTF-8?q?=E6=88=90=EF=BC=8C=E5=88=87=E7=8E=AF=E5=A2=83=E4=B9=8B=E5=89=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/com/fr/start/module/DesignerWorkspaceProvider.java | 4 +++- .../src/com/fr/start/module/PreStartActivator.java | 1 - 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/designer-realize/src/com/fr/start/module/DesignerWorkspaceProvider.java b/designer-realize/src/com/fr/start/module/DesignerWorkspaceProvider.java index beb45fe984..3a22292293 100644 --- a/designer-realize/src/com/fr/start/module/DesignerWorkspaceProvider.java +++ b/designer-realize/src/com/fr/start/module/DesignerWorkspaceProvider.java @@ -14,7 +14,9 @@ public class DesignerWorkspaceProvider extends Activator { @Override public void start() { - + //检查环境 + DesignerEnvManager.checkNameEnvMap(); + String[] args = getModule().upFindSingleton(StartupArgs.class).get(); if (args != null) { for (String arg : args) { diff --git a/designer-realize/src/com/fr/start/module/PreStartActivator.java b/designer-realize/src/com/fr/start/module/PreStartActivator.java index 36a993bff5..38f8c1c202 100644 --- a/designer-realize/src/com/fr/start/module/PreStartActivator.java +++ b/designer-realize/src/com/fr/start/module/PreStartActivator.java @@ -65,7 +65,6 @@ public class PreStartActivator extends Activator { private void initLanguage() { //这两句的位置不能随便调换,因为会影响语言切换的问题 FRContext.setLanguage(DesignerEnvManager.getEnvManager(false).getLanguage()); - DesignerEnvManager.checkNameEnvMap(); } @Override From 4741f1d0509d239b6654099e301a526623eaf573 Mon Sep 17 00:00:00 2001 From: ju Date: Fri, 29 Jun 2018 17:36:38 +0800 Subject: [PATCH 07/13] =?UTF-8?q?REPORT-8926=20=E3=80=9010.0=E4=B8=80?= =?UTF-8?q?=E8=BD=AE=E5=9B=9E=E5=BD=92=E3=80=91=E8=AE=BE=E8=AE=A1=E5=99=A8?= =?UTF-8?q?=E9=BB=98=E8=AE=A4=E7=9A=84=E5=B7=A5=E4=BD=9C=E7=9B=AE=E5=BD=95?= =?UTF-8?q?=E5=90=8D=E7=A7=B0=E6=9C=89=E9=97=AE=E9=A2=98=20=E6=A3=80?= =?UTF-8?q?=E6=9F=A5=E6=94=BE=E5=88=B0basic=E5=90=AF=E5=8A=A8=E5=AE=8C?= =?UTF-8?q?=E6=88=90=EF=BC=8C=E5=88=87=E7=8E=AF=E5=A2=83=E4=B9=8B=E5=89=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../gui/itree/filetree/TemplateFileTree.java | 18 +----------------- 1 file changed, 1 insertion(+), 17 deletions(-) diff --git a/designer-base/src/com/fr/design/gui/itree/filetree/TemplateFileTree.java b/designer-base/src/com/fr/design/gui/itree/filetree/TemplateFileTree.java index aaf57a90ae..bef992fd4b 100644 --- a/designer-base/src/com/fr/design/gui/itree/filetree/TemplateFileTree.java +++ b/designer-base/src/com/fr/design/gui/itree/filetree/TemplateFileTree.java @@ -1,7 +1,6 @@ package com.fr.design.gui.itree.filetree; import com.fr.base.FRContext; -import com.fr.base.extension.FileExtension; import com.fr.design.gui.itree.refreshabletree.ExpandMutableTreeNode; import com.fr.file.filetree.FileNode; import com.fr.log.FineLoggerFactory; @@ -104,10 +103,6 @@ public class TemplateFileTree extends EnvFileTree { return null; } - public FileNode[] listFile(String path) throws Exception { - - return FRContext.getFileNodes().list(path); - } /* * 改变Env后,根据构造函数时设置的RootPaths,重新加载 @@ -169,24 +164,13 @@ public class TemplateFileTree extends EnvFileTree { FileNode[] fileNodes = null; try { - fileNodes = listFile(filePath); + fileNodes = FRContext.getFileNodes().list(filePath, filter); } catch (Exception e) { FineLoggerFactory.getLogger().error(e.getMessage(), e); } if (fileNodes == null) { fileNodes = new FileNode[0]; } - // 用FileNodeFilter过滤一下 - if (filter != null) { - List list = new ArrayList(); - for (FileNode fileNode : fileNodes) { - if (filter.accept(fileNode)) { - list.add(fileNode); - } - } - - fileNodes = list.toArray(new FileNode[list.size()]); - } Arrays.sort(fileNodes, new FileNodeComparator()); From 7af4028dff646edd312033f9635f4705efec52e5 Mon Sep 17 00:00:00 2001 From: ju Date: Fri, 29 Jun 2018 19:35:27 +0800 Subject: [PATCH 08/13] =?UTF-8?q?REPORT-8926=20=E3=80=9010.0=E4=B8=80?= =?UTF-8?q?=E8=BD=AE=E5=9B=9E=E5=BD=92=E3=80=91=E8=AE=BE=E8=AE=A1=E5=99=A8?= =?UTF-8?q?=E9=BB=98=E8=AE=A4=E7=9A=84=E5=B7=A5=E4=BD=9C=E7=9B=AE=E5=BD=95?= =?UTF-8?q?=E5=90=8D=E7=A7=B0=E6=9C=89=E9=97=AE=E9=A2=98=20fix?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../gui/itree/filetree/TemplateFileTree.java | 99 ++++++++++--------- .../src/com/fr/file/FILEChooserPane.java | 7 +- 2 files changed, 58 insertions(+), 48 deletions(-) diff --git a/designer-base/src/com/fr/design/gui/itree/filetree/TemplateFileTree.java b/designer-base/src/com/fr/design/gui/itree/filetree/TemplateFileTree.java index bef992fd4b..0f61f40c35 100644 --- a/designer-base/src/com/fr/design/gui/itree/filetree/TemplateFileTree.java +++ b/designer-base/src/com/fr/design/gui/itree/filetree/TemplateFileTree.java @@ -1,6 +1,7 @@ package com.fr.design.gui.itree.filetree; import com.fr.base.FRContext; +import com.fr.base.extension.FileExtension; import com.fr.design.gui.itree.refreshabletree.ExpandMutableTreeNode; import com.fr.file.filetree.FileNode; import com.fr.log.FineLoggerFactory; @@ -19,40 +20,36 @@ import java.util.List; * 显示Env下的reportlets目录下面的所有cpt文件 */ public class TemplateFileTree extends EnvFileTree { - - + + public TemplateFileTree() { - super(ProjectConstants.REPORTLETS_NAME, null, null); } - + /* * 选中reportPath */ public void setSelectedTemplatePath(String templatePath) { - this.selectPath(templatePath); } - + /** * 返回选中的Template的路径 */ public String getSelectedTemplatePath() { - FileNode fn = this.getSelectedFileNode(); if (fn != null && !fn.isDirectory()) { String envPath = fn.getEnvPath(); - + if (envPath.startsWith(ProjectConstants.REPORTLETS_NAME)) { return envPath.substring(ProjectConstants.REPORTLETS_NAME.length()); } } - + return null; } - + public String[] getSelectedTemplatePaths() { - TreePath[] selectedTreePaths = this.getSelectionPaths(); if (ArrayUtils.isEmpty(selectedTreePaths)) { return ArrayUtils.EMPTY_STRING_ARRAY; @@ -71,13 +68,13 @@ public class TemplateFileTree extends EnvFileTree { } } } - - + + return selectedPathList.toArray(new String[0]); } - + public TreePath getNextMatch(String prefix, int startingRow, Position.Bias bias) { - + int max = getRowCount(); if (prefix == null) { throw new IllegalArgumentException(); @@ -92,9 +89,9 @@ public class TemplateFileTree extends EnvFileTree { do { TreePath path = getPathForRow(row); String text = convertValueToText( - path.getLastPathComponent(), isRowSelected(row), - isExpanded(row), true, row, false); - + path.getLastPathComponent(), isRowSelected(row), + isExpanded(row), true, row, false); + if (text.toUpperCase().startsWith(prefix)) { return path; } @@ -102,19 +99,24 @@ public class TemplateFileTree extends EnvFileTree { } while (row != startingRow); return null; } - - + + public FileNode[] listFile(String path) throws Exception { + return FRContext.getFileNodes().list( + path, + new FileExtension[]{FileExtension.CPT, FileExtension.FRM, FileExtension.CHT,FileExtension.XLS,FileExtension.XLSX}); + } + /* * 改变Env后,根据构造函数时设置的RootPaths,重新加载 */ public void refreshEnv() { - + DefaultTreeModel defaultTreeModel = (DefaultTreeModel) this.getModel(); ExpandMutableTreeNode rootTreeNode = (ExpandMutableTreeNode) defaultTreeModel.getRoot(); rootTreeNode.removeAllChildren(); - + FileNode[] fns; - + // 如果rootPaths是null的话列出所有文件 if (subPathes == null) { fns = listFileNodes(this.treeRootPath); @@ -125,28 +127,26 @@ public class TemplateFileTree extends EnvFileTree { fns[i] = new FileNode(StableUtils.pathJoin(this.treeRootPath, subPathes[i]), true); } } - + ExpandMutableTreeNode[] subTreeNodes = fileNodeArray2TreeNodeArray(fns); - + for (ExpandMutableTreeNode node : subTreeNodes) { rootTreeNode.add(node); } - + defaultTreeModel.reload(rootTreeNode); } - + protected ExpandMutableTreeNode[] loadChildTreeNodes(ExpandMutableTreeNode treeNode) { - FileNode[] fn_array = listFileNodes(treeNode); - + return fileNodeArray2TreeNodeArray(fn_array); } - + /* * 把FileNode[]转成ExpandMutableTreeNode[] */ private ExpandMutableTreeNode[] fileNodeArray2TreeNodeArray(FileNode[] fileNodes) { - ExpandMutableTreeNode[] res = new ExpandMutableTreeNode[fileNodes.length]; for (int i = 0; i < res.length; i++) { FileNode fn = fileNodes[i]; @@ -155,45 +155,54 @@ public class TemplateFileTree extends EnvFileTree { res[i].add(new ExpandMutableTreeNode()); } } - + return res; } - - + + private FileNode[] listFileNodes(String filePath) { - FileNode[] fileNodes = null; try { - fileNodes = FRContext.getFileNodes().list(filePath, filter); + fileNodes = listFile(filePath); } catch (Exception e) { FineLoggerFactory.getLogger().error(e.getMessage(), e); } if (fileNodes == null) { fileNodes = new FileNode[0]; } - + // 用FileNodeFilter过滤一下 + if (filter != null) { + List list = new ArrayList(); + for (FileNode fileNode : fileNodes) { + if (filter.accept(fileNode)) { + list.add(fileNode); + } + } + + fileNodes = list.toArray(new FileNode[list.size()]); + } + Arrays.sort(fileNodes, new FileNodeComparator()); - + return fileNodes; } - + /* * 求当前TreeNode下所有的FileNode. */ private FileNode[] listFileNodes(ExpandMutableTreeNode currentTreeNode) { - if (currentTreeNode == null) { return new FileNode[0]; } - + Object object = currentTreeNode.getUserObject(); - + if (object instanceof FileNode) { return this.listFileNodes(((FileNode) object).getEnvPath()); } - + return new FileNode[0]; } - - + + } \ No newline at end of file diff --git a/designer-base/src/com/fr/file/FILEChooserPane.java b/designer-base/src/com/fr/file/FILEChooserPane.java index 3d350c27d0..9754596539 100644 --- a/designer-base/src/com/fr/file/FILEChooserPane.java +++ b/designer-base/src/com/fr/file/FILEChooserPane.java @@ -33,6 +33,7 @@ import com.fr.stable.ProductConstants; import com.fr.stable.StableUtils; import com.fr.stable.StringUtils; import com.fr.stable.project.ProjectConstants; +import com.fr.workspace.WorkContext; import javax.swing.*; import javax.swing.event.ListSelectionEvent; @@ -548,7 +549,7 @@ public class FILEChooserPane extends BasicPane { String[] fileSuffix_local = LocalFileNodes.FILE_TYPE; EnumSet fileExtensions = EnumSet.of(FileExtension.CPT, FileExtension.CPTX, FileExtension.FRM, FileExtension.FRMX, FileExtension.CHT); if (type == JFileChooser.OPEN_DIALOG) { - if (FRContext.getFileNodes().isSupportLocalFileOperate()) { //本地连接 + if (WorkContext.getCurrent().isLocal()) { //本地连接 this.addChooseFILEFilter(new ChooseFileFilter(fileSuffix_local, appName + Inter.getLocText(new String[]{"FR-App-Report_Template", "FR-App-All_File"}))); } else { this.addChooseFILEFilter(new ChooseFileFilter(fileExtensions, appName + Inter.getLocText(new String[]{"FR-App-Report_Template", "FR-App-All_File"}))); @@ -569,7 +570,7 @@ public class FILEChooserPane extends BasicPane { } // 添加 xls 文件类型过滤 kt - if (FRContext.getFileNodes().isSupportLocalFileOperate()) { //本地连接 + if (WorkContext.getCurrent().isLocal()) { //本地连接 this.addChooseFILEFilter(new ChooseFileFilter(FileExtension.XLS, Inter.getLocText("Import-Excel_Source"))); this.addChooseFILEFilter(new ChooseFileFilter(FileExtension.XLSX, Inter.getLocText("Import-Excel2007_Source"))); } @@ -592,7 +593,7 @@ public class FILEChooserPane extends BasicPane { for (FILEFilter aFilterList : filterList) { defaultComboBoxModel.addElement(aFilterList); } - if (FRContext.getFileNodes().isSupportLocalFileOperate()) { //本地连接 + if (WorkContext.getCurrent().isLocal()) { //本地连接 if (!showWebReport) { defaultComboBoxModel.addElement(Inter.getLocText("FR-Utils-App_AllFiles") + "(*.*)"); } From cb18b1b97a22be0ab075699cdcf3aa8b16f79dbb Mon Sep 17 00:00:00 2001 From: zheng Date: Sat, 30 Jun 2018 10:54:56 +0800 Subject: [PATCH 09/13] CHART-1748 910 --- .../fr/design/actions/core/ActionFactory.java | 19 ++ .../design/chart/ChartDesignerActivator.java | 2 + .../src/com/fr/design/images/EmptyChart.png | Bin 0 -> 274 bytes .../src/com/fr/design/images/us_emptydata.png | Bin 0 -> 13785 bytes .../src/com/fr/design/images/zh_emptydata.png | Bin 0 -> 15346 bytes .../module/ChartEmptyDataStyleAction.java | 46 ++++ .../module/ChartEmptyDataStylePane.java | 242 ++++++++++++++++++ .../src/com/fr/start/Designer.java | 6 +- 8 files changed, 312 insertions(+), 3 deletions(-) create mode 100644 designer-chart/src/com/fr/design/images/EmptyChart.png create mode 100644 designer-chart/src/com/fr/design/images/us_emptydata.png create mode 100644 designer-chart/src/com/fr/design/images/zh_emptydata.png create mode 100644 designer-chart/src/com/fr/design/module/ChartEmptyDataStyleAction.java create mode 100644 designer-chart/src/com/fr/design/module/ChartEmptyDataStylePane.java diff --git a/designer-base/src/com/fr/design/actions/core/ActionFactory.java b/designer-base/src/com/fr/design/actions/core/ActionFactory.java index 036b82a32c..d50d4dc1b6 100644 --- a/designer-base/src/com/fr/design/actions/core/ActionFactory.java +++ b/designer-base/src/com/fr/design/actions/core/ActionFactory.java @@ -50,6 +50,7 @@ public class ActionFactory { private static ConcurrentMap> cellEditorClass = new ConcurrentHashMap<>(); private static UpdateAction chartPreStyleAction = null; + private static UpdateAction chartEmptyDataStyleAction = null; private static UpdateAction chartMapEditorAction = null; private ActionFactory() { @@ -159,6 +160,24 @@ public class ActionFactory { return chartMapEditorAction; } + /** + * 注册图表的 空数据提示样式. + * + * @param action 注册的图表空数据提示样式action + */ + public static void registerChartEmptyDataStyleAction(UpdateAction action) { + chartEmptyDataStyleAction = action; + } + + /** + * 图表空数据提示样式Action + * + * @return 图表空数据提示样式Action + */ + public static UpdateAction getChartEmptyDataStyleAction() { + return chartEmptyDataStyleAction; + } + /** * 获取图表集合类 diff --git a/designer-chart/src/com/fr/design/chart/ChartDesignerActivator.java b/designer-chart/src/com/fr/design/chart/ChartDesignerActivator.java index 23262652ac..87ace0b0b6 100644 --- a/designer-chart/src/com/fr/design/chart/ChartDesignerActivator.java +++ b/designer-chart/src/com/fr/design/chart/ChartDesignerActivator.java @@ -6,6 +6,7 @@ import com.fr.design.actions.core.ActionFactory; import com.fr.design.chart.gui.ChartComponent; import com.fr.design.file.HistoryTemplateListPane; import com.fr.design.mainframe.ChartPropertyPane; +import com.fr.design.module.ChartEmptyDataStyleAction; import com.fr.design.module.ChartHyperlinkGroup; import com.fr.design.module.ChartPreStyleAction; import com.fr.design.module.DesignModuleFactory; @@ -38,6 +39,7 @@ public class ChartDesignerActivator extends Activator { DesignModuleFactory.registerChartPropertyPaneClass(ChartPropertyPane.class); ActionFactory.registerChartPreStyleAction(new ChartPreStyleAction()); + ActionFactory.registerChartEmptyDataStyleAction(new ChartEmptyDataStyleAction()); ActionFactory.registerChartMapEditorAction(new ChartMapEditorAction()); ActionFactory.registerChartCollection(ChartCollection.class); diff --git a/designer-chart/src/com/fr/design/images/EmptyChart.png b/designer-chart/src/com/fr/design/images/EmptyChart.png new file mode 100644 index 0000000000000000000000000000000000000000..1613f98b2094ec2095381a19223e701506cf5b5d GIT binary patch literal 274 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9GGLLkg|>2BR0px_Zt z7sn8b(@Q5G2KD7k;yrV8>Y|_pf%{XA z{_CpGIhuE-$JT;@Wg@#l$g@6A(`|A*2Tt=QeA)bDngl~s*`t6T%a{IY`mH-5WcIA- z%^kJ5iXBH3E{PV3yFA)2<|Wg(QebAo?^{Q&a!q@b>e z_r9KhOWuK{CeO{nCp2aUo%J+j4u5W!m^SD4y)!*hvx}eQ%RE20B2uj(?Y-50#>jVB VPVG}ULxKKb@O1TaS?83{1OVCAZo~ip literal 0 HcmV?d00001 diff --git a/designer-chart/src/com/fr/design/images/us_emptydata.png b/designer-chart/src/com/fr/design/images/us_emptydata.png new file mode 100644 index 0000000000000000000000000000000000000000..d3ab9923e459922234f509ddb95d9a98ea9ab1bd GIT binary patch literal 13785 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 literal 0 HcmV?d00001 diff --git a/designer-chart/src/com/fr/design/images/zh_emptydata.png b/designer-chart/src/com/fr/design/images/zh_emptydata.png new file mode 100644 index 0000000000000000000000000000000000000000..0ffd8e1239f49976c2f24504558353c16a852b25 GIT binary patch literal 15346 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 p4de0uKO_7386VKiU8Q literal 0 HcmV?d00001 diff --git a/designer-chart/src/com/fr/design/module/ChartEmptyDataStyleAction.java b/designer-chart/src/com/fr/design/module/ChartEmptyDataStyleAction.java new file mode 100644 index 0000000000..00e1dbc7dc --- /dev/null +++ b/designer-chart/src/com/fr/design/module/ChartEmptyDataStyleAction.java @@ -0,0 +1,46 @@ +package com.fr.design.module; + +import com.fr.design.actions.UpdateAction; +import com.fr.design.dialog.BasicDialog; +import com.fr.design.dialog.DialogActionAdapter; +import com.fr.design.mainframe.DesignerContext; +import com.fr.design.mainframe.DesignerFrame; +import com.fr.general.IOUtils; +import com.fr.general.Inter; + +import java.awt.event.ActionEvent; + +/** + * Created by mengao on 2017/11/23. + * 空数据配置action + */ +public class ChartEmptyDataStyleAction extends UpdateAction { + + public ChartEmptyDataStyleAction() { + this.setSmallIcon(IOUtils.readIcon("com/fr/design/images/EmptyChart.png")); + this.setName(Inter.getLocText("FR-Designer_Chart_Empty_Data")); + } + + @Override + public void actionPerformed(ActionEvent e) { + DesignerFrame designerFrame = DesignerContext.getDesignerFrame(); + final ChartEmptyDataStylePane pane = new ChartEmptyDataStylePane(); + BasicDialog dialog = pane.showWindow(designerFrame); + dialog.addDialogActionListener(new DialogActionAdapter() { + @Override + public void doOk() { + pane.updateBean(); + + } + + @Override + public void doCancel() { + //直接关闭弹出框 + } + }); + + pane.populateBean(); + dialog.setVisible(true); + } + +} diff --git a/designer-chart/src/com/fr/design/module/ChartEmptyDataStylePane.java b/designer-chart/src/com/fr/design/module/ChartEmptyDataStylePane.java new file mode 100644 index 0000000000..b4c56afc32 --- /dev/null +++ b/designer-chart/src/com/fr/design/module/ChartEmptyDataStylePane.java @@ -0,0 +1,242 @@ +package com.fr.design.module; + +import com.fr.base.BaseUtils; +import com.fr.base.ChartEmptyDataStyleConf; +import com.fr.design.gui.frpane.AbstractAttrNoScrollPane; +import com.fr.design.gui.ibutton.UIButton; +import com.fr.design.gui.ibutton.UIButtonGroup; +import com.fr.design.gui.ibutton.UIRadioButton; +import com.fr.design.gui.ilable.UILabel; +import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.design.mainframe.DesignerContext; +import com.fr.design.mainframe.DesignerFrame; +import com.fr.design.style.background.image.ImageFileChooser; +import com.fr.design.style.background.image.ImagePreviewPane; +import com.fr.design.utils.ImageUtils; +import com.fr.design.utils.gui.GUICoreUtils; +import com.fr.general.GeneralContext; +import com.fr.general.IOUtils; +import com.fr.general.Inter; +import com.fr.stable.CoreGraphHelper; +import com.fr.stable.StringUtils; + +import javax.swing.BorderFactory; +import javax.swing.ButtonGroup; +import javax.swing.JFileChooser; +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.SwingWorker; +import java.awt.BorderLayout; +import java.awt.Component; +import java.awt.Dimension; +import java.awt.FlowLayout; +import java.awt.GridLayout; +import java.awt.Image; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.io.File; + +/** + * Created by mengao on 2017/11/23. + */ +public class ChartEmptyDataStylePane extends AbstractAttrNoScrollPane { + private static final int WIDTH = 150; + private static final int HEIGHT = 20; + private static final int FIVE = 5; + private static final int TEN = 10; + private static final int THIRTY = 30; + private static Image DEFAULT_EMPTY_DATA_IMAGE; + + + private UIButtonGroup emptyData; + private UIRadioButton defaultRadioButton; + private UIRadioButton customRadioButton; + private UIButton selectPictureButton; + + private ImagePreviewPane previewPane; + private ImageFileChooser imageFileChooser; + + private Image emptyDataImage = DEFAULT_EMPTY_DATA_IMAGE; + private SwingWorker imageWorker; + + + static { + DEFAULT_EMPTY_DATA_IMAGE = GeneralContext.isChineseEnv() ? IOUtils.readImage("com/fr/design/images/zh_emptydata.png") + : IOUtils.readImage("com/fr/design/images/us_emptydata.png"); + } + + @Override + protected JPanel createContentPane() { + JPanel content = new JPanel(new BorderLayout()); + content.add(creatNorthPane(), BorderLayout.NORTH); + content.add(creatCenterPane(), BorderLayout.CENTER); + return content; + } + + private JPanel creatNorthPane() { + emptyData = new UIButtonGroup(new String[]{Inter.getLocText("Plugin-ChartF_Open"), Inter.getLocText("Plugin-ChartF_Close")}); + emptyData.setSelectedIndex(0); + emptyData.setPreferredSize(new Dimension(WIDTH, HEIGHT)); + emptyData.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + checkEmptyDataStyle(); + repaintPreviewPane(); + } + }); + + UILabel promptContent = new UILabel(Inter.getLocText("FR-Designer_Tip_Content")); + JPanel northPane = GUICoreUtils.createFlowPane(new Component[]{promptContent, emptyData}, FlowLayout.LEFT, TEN, 0); + northPane.setBorder(BorderFactory.createEmptyBorder(0, FIVE, 0, 0)); + return northPane; + } + + private JPanel creatCenterPane() { + JPanel centerPane = new JPanel(FRGUIPaneFactory.createBorderLayout()); + + // preview pane + JPanel previewContainerPane = FRGUIPaneFactory.createBorderLayout_L_Pane(); + centerPane.add(previewContainerPane, BorderLayout.CENTER); + + JPanel previewOwnerPane = FRGUIPaneFactory.createTitledBorderPane(Inter.getLocText("FR-Designer_Preview")); + previewOwnerPane.setLayout(new BorderLayout()); + previewContainerPane.add(previewOwnerPane, BorderLayout.CENTER); + previewContainerPane.add(initSelectFilePane(), BorderLayout.EAST); + previewPane = new ImagePreviewPane(); + previewOwnerPane.add(new JScrollPane(previewPane)); + + + // init image file chooser. + imageFileChooser = new ImageFileChooser(); + imageFileChooser.setMultiSelectionEnabled(false); + return centerPane; + } + + public JPanel initSelectFilePane() { + + JPanel selectFilePane = FRGUIPaneFactory.createBorderLayout_L_Pane(); + + selectFilePane.setBorder(BorderFactory.createEmptyBorder(TEN, FIVE, 0, THIRTY)); + + defaultRadioButton = new UIRadioButton(Inter.getLocText("FR-Designer_DEFAULT")); + customRadioButton = new UIRadioButton(Inter.getLocText("FR-Designer-Widget-Style_Custom")); + ButtonGroup buttonGroup = new ButtonGroup(); + defaultRadioButton.setSelected(true); + buttonGroup.add(defaultRadioButton); + buttonGroup.add(customRadioButton); + + defaultRadioButton.addActionListener(getLayoutActionListener()); + customRadioButton.addActionListener(getLayoutActionListener()); + + JPanel jp = new JPanel(new GridLayout(3, 1, 0, TEN)); + jp.add(defaultRadioButton); + jp.add(customRadioButton); + + selectPictureButton = new UIButton( + Inter.getLocText("FR-Designer_Background_Image_Select")); + selectPictureButton.addActionListener(getSelectPictureActionListener()); + jp.add(selectPictureButton); + + + selectFilePane.add(jp, BorderLayout.NORTH); + return selectFilePane; + } + + private ActionListener getLayoutActionListener() { + return new ActionListener() { + + public void actionPerformed(ActionEvent evt) { + emptyDataImage = null; + checkCustomImage(); + repaintPreviewPane(); + } + }; + } + + /** + * Select picture. + */ + private ActionListener getSelectPictureActionListener() { + return new ActionListener() { + + public void actionPerformed(ActionEvent evt) { + int returnVal = imageFileChooser.showOpenDialog(ChartEmptyDataStylePane.this); + if (returnVal != JFileChooser.CANCEL_OPTION) { + final File selectedFile = imageFileChooser.getSelectedFile(); + + if (selectedFile != null && selectedFile.isFile()) { + previewPane.showLoading(); + if (imageWorker != null && !imageWorker.isDone()) { + imageWorker = null; + } + imageWorker = new SwingWorker() { + @Override + protected Void doInBackground() throws Exception { + emptyDataImage = imageFileChooser.isCheckSelected() ? ImageUtils.defaultImageCompress(selectedFile) : BaseUtils.readImage(selectedFile.getPath()); + CoreGraphHelper.waitForImage(emptyDataImage); + repaintPreviewPane(); + return null; + } + }; + imageWorker.execute(); + } else { + previewPane.setImage(null); + } + } + + } + }; + } + + private void checkEmptyDataStyle() { + boolean b = emptyData.getSelectedIndex() == 0; + defaultRadioButton.setEnabled(b); + customRadioButton.setEnabled(b); + selectPictureButton.setEnabled(b); + } + + private void checkCustomImage() { + selectPictureButton.setVisible(customRadioButton.isSelected()); + } + + private void repaintPreviewPane() { + emptyDataImage = customRadioButton.isSelected() ? emptyDataImage : DEFAULT_EMPTY_DATA_IMAGE; + previewPane.setImage(emptyData.getSelectedIndex() == 0 ? emptyDataImage : null); + previewPane.repaint(); + } + + @Override + public String getIconPath() { + return StringUtils.EMPTY; + } + + @Override + public String title4PopupWindow() { + return Inter.getLocText("FR-Designer_Chart_Empty_Data"); + } + + public void populateBean() { + ChartEmptyDataStyleConf manager = ChartEmptyDataStyleConf.getInstance(); + emptyData.setSelectedIndex(manager.isOpenEmptyDataStyle() == true ? 0 : 1); + customRadioButton.setSelected(manager.isCustomEmptyDataStyle()); + emptyDataImage = manager.getEmptyDataImage(); + + checkEmptyDataStyle(); + checkCustomImage(); + repaintPreviewPane(); + } + + public void updateBean() { + ChartEmptyDataStyleConf manager = ChartEmptyDataStyleConf.getInstance(); + + manager.setOpenEmptyDataStyle(emptyData.getSelectedIndex() == 0); + manager.setCustomEmptyDataStyle(customRadioButton.isSelected()); + manager.setEmptyDataImage(emptyDataImage); + + // 通知报表整个刷新. + DesignerFrame frame = DesignerContext.getDesignerFrame(); + if (frame != null) { + frame.repaint(); + } + } +} diff --git a/designer-realize/src/com/fr/start/Designer.java b/designer-realize/src/com/fr/start/Designer.java index aad3991ab1..25c92abd4b 100644 --- a/designer-realize/src/com/fr/start/Designer.java +++ b/designer-realize/src/com/fr/start/Designer.java @@ -7,7 +7,6 @@ import com.fr.design.actions.core.ActionFactory; import com.fr.design.actions.file.WebPreviewUtils; import com.fr.design.actions.file.newReport.NewPolyReportAction; import com.fr.design.actions.file.newReport.NewWorkBookAction; -import com.fr.design.actions.file.newReport.NewWorkBookXAction; import com.fr.design.actions.server.ServerConfigManagerAction; import com.fr.design.actions.server.StyleListAction; import com.fr.design.actions.server.WidgetManagerAction; @@ -35,9 +34,7 @@ import com.fr.design.menu.MenuDef; import com.fr.design.menu.SeparatorDef; import com.fr.design.menu.ShortCut; import com.fr.design.module.DesignModuleFactory; - import com.fr.design.utils.DesignUtils; - import com.fr.design.utils.concurrent.ThreadFactoryBuilder; import com.fr.design.utils.gui.GUICoreUtils; import com.fr.general.CloudCenter; @@ -197,6 +194,9 @@ public class Designer extends BaseDesigner { if (ActionFactory.getChartPreStyleAction() != null) { menuDef.addShortCut(ActionFactory.getChartPreStyleAction()); } + if (ActionFactory.getChartEmptyDataStyleAction() != null) { + menuDef.addShortCut(ActionFactory.getChartEmptyDataStyleAction()); + } if (ActionFactory.getChartMapEditorAction() != null) { menuDef.addShortCut(ActionFactory.getChartMapEditorAction()); } From ede0e3f4e1a64ef587daffd61ef22689f0dac03c Mon Sep 17 00:00:00 2001 From: zheng Date: Sat, 30 Jun 2018 10:57:00 +0800 Subject: [PATCH 10/13] CHART-1922 910 --- .../map/designer/type/VanChartMapSourceChoosePane.java | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/designer-chart/src/com/fr/van/chart/map/designer/type/VanChartMapSourceChoosePane.java b/designer-chart/src/com/fr/van/chart/map/designer/type/VanChartMapSourceChoosePane.java index 1d58ee7480..b53628f6fe 100644 --- a/designer-chart/src/com/fr/van/chart/map/designer/type/VanChartMapSourceChoosePane.java +++ b/designer-chart/src/com/fr/van/chart/map/designer/type/VanChartMapSourceChoosePane.java @@ -1,7 +1,6 @@ package com.fr.van.chart.map.designer.type; import com.fr.base.Parameter; -import com.fr.base.ParameterHolder; import com.fr.base.Utils; import com.fr.design.event.UIObserver; import com.fr.design.event.UIObserverListener; @@ -599,12 +598,8 @@ public class VanChartMapSourceChoosePane extends JPanel implements UIObserver { if (jTemplate == null){ return new String[0]; } - String[] params = new String[0]; - if(jTemplate.getTarget() instanceof ParameterHolder){ - params = getParamsName(((ParameterHolder)jTemplate.getTarget()).getParameters()); - } - return params; + return getParamsName((jTemplate.getJTemplateParameters())); } private String[] getParamsName(Parameter[] parameters) { From 1f4f2dd8173d19b59e45b33c1b240534e4a75e1f Mon Sep 17 00:00:00 2001 From: zheng Date: Sat, 30 Jun 2018 11:07:34 +0800 Subject: [PATCH 11/13] CHART-1844 910 --- .../src/com/fr/design/condition/ConditionAttributesPane.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/designer-base/src/com/fr/design/condition/ConditionAttributesPane.java b/designer-base/src/com/fr/design/condition/ConditionAttributesPane.java index 347347408d..d176b8627b 100644 --- a/designer-base/src/com/fr/design/condition/ConditionAttributesPane.java +++ b/designer-base/src/com/fr/design/condition/ConditionAttributesPane.java @@ -11,10 +11,12 @@ import com.fr.design.utils.gui.GUICoreUtils; import com.fr.general.Inter; import javax.swing.*; +import java.awt.Dimension; import java.util.HashMap; import java.util.Iterator; public abstract class ConditionAttributesPane extends BasicBeanPane { + private static final int MIN_HEIGHT = 60; protected CellHighlightAddMenuDef menuDef; protected JPanel selectedItemPane; @@ -61,6 +63,7 @@ public abstract class ConditionAttributesPane extends BasicBeanPane { JScrollPane selectedItemScrollPane = new JScrollPane(); selectedItemScrollPane.setViewportView(selectedItemPane); selectedItemScrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); + selectedItemScrollPane.setMinimumSize(new Dimension((int) selectedItemScrollPane.getPreferredSize().getWidth(), MIN_HEIGHT)); propertyChangePane.add(selectedItemScrollPane); } From d4ff4b8bd3df2889056f60ef06ea3e819fd03416 Mon Sep 17 00:00:00 2001 From: zheng Date: Sat, 30 Jun 2018 11:11:44 +0800 Subject: [PATCH 12/13] CHART-1882 910 --- .../column/VanChartCustomStackAndAxisConditionPane.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/designer-chart/src/com/fr/van/chart/column/VanChartCustomStackAndAxisConditionPane.java b/designer-chart/src/com/fr/van/chart/column/VanChartCustomStackAndAxisConditionPane.java index 5804824f46..cd80447dd7 100644 --- a/designer-chart/src/com/fr/van/chart/column/VanChartCustomStackAndAxisConditionPane.java +++ b/designer-chart/src/com/fr/van/chart/column/VanChartCustomStackAndAxisConditionPane.java @@ -34,6 +34,8 @@ public class VanChartCustomStackAndAxisConditionPane extends BasicBeanPane isStacked; protected UIButtonGroup isPercentStacked; + private ConditionAttr conditionAttr; + private LiteConditionPane liteConditionPane; public VanChartCustomStackAndAxisConditionPane() { @@ -97,6 +99,7 @@ public class VanChartCustomStackAndAxisConditionPane extends BasicBeanPane(seriesStackAndAxis.getXAxisNamesArray()); YAxis = new UIButtonGroup(seriesStackAndAxis.getYAxisNameArray()); @@ -126,9 +129,7 @@ public class VanChartCustomStackAndAxisConditionPane extends BasicBeanPane Date: Sat, 30 Jun 2018 11:17:20 +0800 Subject: [PATCH 13/13] CHART-2144 910 --- .../other/VanChartInteractivePane.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/designer-chart/src/com/fr/van/chart/designer/other/VanChartInteractivePane.java b/designer-chart/src/com/fr/van/chart/designer/other/VanChartInteractivePane.java index 30af94591d..d23eea9103 100644 --- a/designer-chart/src/com/fr/van/chart/designer/other/VanChartInteractivePane.java +++ b/designer-chart/src/com/fr/van/chart/designer/other/VanChartInteractivePane.java @@ -29,6 +29,8 @@ import com.fr.van.chart.designer.TableLayout4VanChartHelper; import javax.swing.BorderFactory; import javax.swing.JPanel; +import javax.swing.event.ChangeEvent; +import javax.swing.event.ChangeListener; import java.awt.BorderLayout; import java.awt.Component; import java.awt.event.ActionEvent; @@ -165,6 +167,12 @@ public class VanChartInteractivePane extends AbstractVanChartScrollPane { } axisRotation = new UIButtonGroup(new String[]{Inter.getLocText("Plugin-ChartF_Open"), Inter.getLocText("Plugin-ChartF_Close")}); + axisRotation.addChangeListener(new ChangeListener() { + @Override + public void stateChanged(ChangeEvent e) { + checkZoomEnabled(); + } + }); Component[][] components = new Component[][]{ new Component[]{null,null}, new Component[]{new UILabel(Inter.getLocText("Plugin-ChartF_Reversal")),axisRotation} @@ -173,6 +181,15 @@ public class VanChartInteractivePane extends AbstractVanChartScrollPane { return TableLayout4VanChartHelper.createExpandablePaneWithTitle(Inter.getLocText("Plugin-ChartF_Axis"), panel); } + private void checkZoomEnabled() { + if (zoomWidget != null && axisRotation != null) { + zoomWidget.setSelectedIndex(1); + checkZoomPane(); + zoomWidget.setEnabled(axisRotation.getSelectedIndex() == 1); + } + } + + protected String[] getNameArray() { return new String[]{Inter.getLocText("ChartF-X_Axis"), Inter.getLocText("ChartF-Y_Axis") ,Inter.getLocText("Plugin-ChartF_XYAxis"),Inter.getLocText("Chart-Use_None")}; @@ -275,6 +292,8 @@ public class VanChartInteractivePane extends AbstractVanChartScrollPane { populateAutoRefresh((VanChart)chart); populateHyperlink(plot); + + checkZoomEnabled(); }