Browse Source

Merge pull request #1979 in DESIGN/design from release/10.0 to bugfix/10.0

* commit '153a93cd6ad810a64b3fc5e083e55b4908ee471d':
  REPORT-35569 参数面板,添加一个参数控件,撤销之后,再次添加的控件会空一个位置添加
  CHART-11708 插入图表国际化
  CHART-9760  系列默认为空
  CHART-14744 结果数据使用可编辑标签
  回退代码
  解决冲突
  CHART-14744 箱型图单元格数据集
bugfix/10.0
superman 4 years ago
parent
commit
a27006cd88
  1. 66
      designer-chart/src/main/java/com/fr/design/chart/AutoChartIcon.java
  2. 89
      designer-chart/src/main/java/com/fr/design/chart/ChartIcon.java
  3. 22
      designer-chart/src/main/java/com/fr/design/chart/ChartTypePane.java
  4. 25
      designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/data/report/CategoryPlotReportDataContentPane.java
  5. 1
      designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/data/table/SeriesNameUseFieldValuePane.java
  6. 4
      designer-chart/src/main/java/com/fr/van/chart/box/BoxIndependentVanChartInterface.java
  7. 11
      designer-chart/src/main/java/com/fr/van/chart/box/data/BoxPlotReportDataContentPane.java
  8. 4
      designer-chart/src/main/java/com/fr/van/chart/box/data/BoxPlotReportResultDataSeriesPane.java
  9. 137
      designer-chart/src/main/java/com/fr/van/chart/box/data/report/BoxPlotReportDataContentPane.java
  10. 38
      designer-chart/src/main/java/com/fr/van/chart/box/data/report/BoxPlotReportDetailedDataSeriesPane.java
  11. 168
      designer-chart/src/main/java/com/fr/van/chart/box/data/report/BoxPlotReportResultDataSeriesPane.java
  12. 58
      designer-chart/src/main/java/com/fr/van/chart/box/data/report/BoxReportDefinitionHelper.java
  13. 71
      designer-chart/src/main/java/com/fr/van/chart/box/data/report/TinyFormulaWithEditLabel.java
  14. 19
      designer-chart/src/main/java/com/fr/van/chart/box/data/table/BoxPlotTableDataContentPane.java
  15. 155
      designer-chart/src/main/java/com/fr/van/chart/box/data/table/BoxPlotTableResultDataSeriesPane.java
  16. 86
      designer-chart/src/main/java/com/fr/van/chart/box/data/table/UIComboBoxWithEditLabel.java
  17. 39
      designer-form/src/main/java/com/fr/design/form/parameter/FormParaDesigner.java
  18. 10
      designer-realize/src/main/java/com/fr/design/parameter/ParameterDefinitePane.java

66
designer-chart/src/main/java/com/fr/design/chart/AutoChartIcon.java

@ -1,85 +1,29 @@
package com.fr.design.chart; package com.fr.design.chart;
import com.fr.base.chart.BaseChartPainter; import com.fr.base.chart.BaseChartPainter;
import com.fr.base.chart.chartdata.CallbackEvent;
import com.fr.base.chart.result.WebChartIDInfo; import com.fr.base.chart.result.WebChartIDInfo;
import com.fr.chart.chartattr.Chart;
import com.fr.chart.chartattr.ChartCollection; import com.fr.chart.chartattr.ChartCollection;
import com.fr.design.ChartTypeInterfaceManager;
import com.fr.design.file.HistoryTemplateListCache;
import com.fr.script.Calculator; import com.fr.script.Calculator;
import javax.swing.Icon;
import java.awt.Color;
import java.awt.Component;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Paint;
/** /**
* @author Bjorn * @author Bjorn
* @version 10.0 * @version 10.0
* Created by Bjorn on 2020-05-29 * Created by Bjorn on 2020-05-29
*/ */
public class AutoChartIcon implements Icon { public class AutoChartIcon extends ChartIcon {
private static final int WIDTH = 500; private static final int WIDTH = 500;
private static final int HEIGHT = 281; private static final int HEIGHT = 281;
private ChartCollection chartCollection;
private CallbackEvent callbackEvent;
private String chartName;
public AutoChartIcon(ChartCollection chartCollection) { public AutoChartIcon(ChartCollection chartCollection) {
this.chartCollection = chartCollection; super(chartCollection);
initChartName();
}
public ChartCollection getChartCollection() {
return chartCollection;
} }
public String getChartName() {
return chartName;
}
private void initChartName() {
Chart chart = chartCollection.getSelectedChart(Chart.class);
String[] subName = ChartTypeInterfaceManager.getInstance().getSubName(chart.getPlot().getPlotID());
chartName = subName[0];
}
public void registerCallBackEvent(CallbackEvent callbackEvent) {
this.callbackEvent = callbackEvent;
}
/**
* 画出缩略图Icon
*
* @param g 图形的上下文
* @param c 所在的Component
* @param x 缩略图的起始坐标x
* @param y 缩略图的起始坐标y
*/
@Override @Override
public void paintIcon(Component c, Graphics g, int x, int y) { protected BaseChartPainter getChartPainter() {
BaseChartPainter painter = getChartCollection().createResultChartPainterWithOutDealFormula(Calculator.createCalculator(),
BaseChartPainter painter = chartCollection.createResultChartPainterWithOutDealFormula(Calculator.createCalculator(),
WebChartIDInfo.createAutoTypeInfo(), getIconWidth(), getIconHeight()); WebChartIDInfo.createAutoTypeInfo(), getIconWidth(), getIconHeight());
return painter;
int resolution = HistoryTemplateListCache.getInstance().getCurrentEditingTemplate().getJTemplateResolution();
Graphics2D g2d = (Graphics2D) g;
Paint oldPaint = g2d.getPaint();
g.translate(x, y);
g2d.setPaint(Color.white);
g2d.fillRect(0, 0, getIconWidth(), getIconHeight());
painter.paint(g2d, getIconWidth(), getIconHeight(), resolution, null, callbackEvent);
g.translate(-x, -y);
g2d.setPaint(oldPaint);
} }
/** /**

89
designer-chart/src/main/java/com/fr/design/chart/ChartIcon.java

@ -1,8 +1,13 @@
package com.fr.design.chart; package com.fr.design.chart;
import com.fr.base.GraphHelper; import com.fr.base.chart.BaseChartPainter;
import com.fr.general.IOUtils; import com.fr.base.chart.chartdata.CallbackEvent;
import com.fr.stable.Constants; import com.fr.base.chart.result.WebChartIDInfo;
import com.fr.chart.chartattr.Chart;
import com.fr.chart.chartattr.ChartCollection;
import com.fr.design.ChartTypeInterfaceManager;
import com.fr.design.file.HistoryTemplateListCache;
import com.fr.script.Calculator;
import com.fr.stable.xml.XMLPrintWriter; import com.fr.stable.xml.XMLPrintWriter;
import com.fr.stable.xml.XMLable; import com.fr.stable.xml.XMLable;
import com.fr.stable.xml.XMLableReader; import com.fr.stable.xml.XMLableReader;
@ -13,7 +18,6 @@ import java.awt.Component;
import java.awt.Graphics; import java.awt.Graphics;
import java.awt.Graphics2D; import java.awt.Graphics2D;
import java.awt.Paint; import java.awt.Paint;
import java.awt.image.BufferedImage;
/** /**
* 图表的缩略图Icon, 在选择图表类型界面 用到. * 图表的缩略图Icon, 在选择图表类型界面 用到.
@ -21,21 +25,47 @@ import java.awt.image.BufferedImage;
public class ChartIcon implements Icon, XMLable { public class ChartIcon implements Icon, XMLable {
private static final int WIDTH = 400; private static final int WIDTH = 400;
private static final int HEIGHT = 225; private static final int HEIGHT = 225;
/**
* 缩略图中的图片路径
*/ private ChartCollection chartCollection;
private String imagePath; private CallbackEvent callbackEvent;
private String chartName; private String chartName;
/** /**
* 构造Chart的缩略图Icon * 构造Chart的缩略图Icon
*/ */
public ChartIcon(String imagePath, String chartName) { public ChartIcon(ChartCollection chartCollection) {
this.imagePath = imagePath; this.chartCollection = chartCollection;
initChartName();
}
public ChartCollection getChartCollection() {
return chartCollection;
}
public String getChartName() {
return chartName;
}
public void setChartCollection(ChartCollection chartCollection) {
this.chartCollection = chartCollection;
}
public void setChartName(String chartName) {
this.chartName = chartName; this.chartName = chartName;
} }
private void initChartName() {
Chart chart = chartCollection.getSelectedChart(Chart.class);
String[] subName = ChartTypeInterfaceManager.getInstance().getSubName(chart.getPlot().getPlotID());
chartName = subName[0];
}
public void registerCallBackEvent(CallbackEvent callbackEvent) {
this.callbackEvent = callbackEvent;
}
/** /**
* 画出缩略图Icon * 画出缩略图Icon
* *
@ -47,21 +77,29 @@ public class ChartIcon implements Icon, XMLable {
@Override @Override
public void paintIcon(Component c, Graphics g, int x, int y) { public void paintIcon(Component c, Graphics g, int x, int y) {
Graphics2D g2d = (Graphics2D) g; BaseChartPainter chartPainter = getChartPainter();
Paint oldPaint = g2d.getPaint(); int resolution = HistoryTemplateListCache.getInstance().getCurrentEditingTemplate().getJTemplateResolution();
Graphics2D g2d = (Graphics2D) g;
Paint oldPaint = g2d.getPaint();
g.translate(x, y); g.translate(x, y);
g2d.setPaint(Color.white); g2d.setPaint(Color.white);
g2d.fillRect(0, 0, getIconWidth(), getIconHeight()); g2d.fillRect(0, 0, getIconWidth(), getIconHeight());
BufferedImage demoImage = IOUtils.readImageWithCache(imagePath);
GraphHelper.paintImage(g, getIconWidth(), getIconHeight(), demoImage, Constants.IMAGE_ADJUST, Constants.NULL, Constants.NULL, -1, -1); chartPainter.paint(g2d, getIconWidth(), getIconHeight(), resolution, null, callbackEvent);
g.translate(-x, -y); g.translate(-x, -y);
g2d.setPaint(oldPaint); g2d.setPaint(oldPaint);
} }
protected BaseChartPainter getChartPainter() {
BaseChartPainter painter = chartCollection.createResultChartPainterWithOutDealFormula(Calculator.createCalculator(),
WebChartIDInfo.createEmptyDesignerInfo(), getIconWidth(), getIconHeight());
return painter;
}
/** /**
* 返回缩略图的宽度 * 返回缩略图的宽度
* *
@ -83,20 +121,6 @@ public class ChartIcon implements Icon, XMLable {
} }
/**
* 返回缩略图中的图片路径
*
* @return 缩略图中的图片路径
*/
public String getImagePath() {
return imagePath;
}
public String getChartName() {
return chartName;
}
@Override @Override
public void readXML(XMLableReader reader) { public void readXML(XMLableReader reader) {
//do nothing //do nothing
@ -114,8 +138,11 @@ public class ChartIcon implements Icon, XMLable {
@Override @Override
public Object clone() throws CloneNotSupportedException { public Object clone() throws CloneNotSupportedException {
ChartIcon cloned = (ChartIcon) super.clone(); ChartIcon cloned = (ChartIcon) super.clone();
cloned.imagePath = this.imagePath; if (getChartCollection() != null) {
cloned.chartName = this.chartName; cloned.setChartCollection(this.getChartCollection());
}
cloned.setChartName(this.getChartName());
;
return cloned; return cloned;
} }

22
designer-chart/src/main/java/com/fr/design/chart/ChartTypePane.java

@ -3,6 +3,7 @@ package com.fr.design.chart;
* the Pane of the Chart * the Pane of the Chart
*/ */
import com.fr.base.chart.chartdata.CallbackEvent;
import com.fr.chart.chartattr.ChartCollection; import com.fr.chart.chartattr.ChartCollection;
import com.fr.chart.charttypes.ChartTypeManager; import com.fr.chart.charttypes.ChartTypeManager;
import com.fr.chartx.attr.ChartProvider; import com.fr.chartx.attr.ChartProvider;
@ -12,7 +13,6 @@ import com.fr.design.layout.FRGUIPaneFactory;
import com.fr.design.mainframe.chart.info.ChartInfoCollector; import com.fr.design.mainframe.chart.info.ChartInfoCollector;
import com.fr.design.utils.gui.GUICoreUtils; import com.fr.design.utils.gui.GUICoreUtils;
import com.fr.log.FineLoggerFactory; import com.fr.log.FineLoggerFactory;
import com.fr.stable.StringUtils;
import javax.swing.BorderFactory; import javax.swing.BorderFactory;
import javax.swing.DefaultListCellRenderer; import javax.swing.DefaultListCellRenderer;
@ -26,7 +26,7 @@ import javax.swing.event.ListSelectionListener;
import java.awt.Color; import java.awt.Color;
import java.awt.Component; import java.awt.Component;
public class ChartTypePane extends ChartCommonWizardPane { public class ChartTypePane extends ChartCommonWizardPane implements CallbackEvent {
private static final long serialVersionUID = -1175602484968520546L; private static final long serialVersionUID = -1175602484968520546L;
private String[] chartIDs = ChartTypeManager.getInstanceWithCheck().getAllChartIDs(); private String[] chartIDs = ChartTypeManager.getInstanceWithCheck().getAllChartIDs();
@ -96,14 +96,17 @@ public class ChartTypePane extends ChartCommonWizardPane {
int main_index = mainTypeList.getSelectedIndex(); int main_index = mainTypeList.getSelectedIndex();
String id = ChartTypePane.this.chartIDs[main_index]; String id = ChartTypePane.this.chartIDs[main_index];
String[] demoImagePath = ChartTypeInterfaceManager.getInstance().getDemoImagePath(id); ChartProvider[] charts = ChartTypeManager.getInstance().getCharts(id);
String[] subName = ChartTypeInterfaceManager.getInstance().getSubName(id); String[] subName = ChartTypeInterfaceManager.getInstance().getSubName(id);
ChartTypePane.this.iconListModel.clear(); ChartTypePane.this.iconListModel.clear();
for (int i = 0, len = subName.length; i < len; i++) { for (int i = 0, len = charts.length; i < len; i++) {
String ImagePath = demoImagePath.length > i ? demoImagePath[i] : StringUtils.EMPTY; ChartProvider chart = charts[i];
String chartName = subName[i]; ChartCollection chartCollection = new ChartCollection(chart);
ChartTypePane.this.iconListModel.addElement(new ChartIcon(ImagePath, chartName)); ChartIcon chartIcon = new ChartIcon(chartCollection);
chartIcon.setChartName(subName[i]);
chartIcon.registerCallBackEvent(ChartTypePane.this);
ChartTypePane.this.iconListModel.addElement(chartIcon);
} }
iconViewList.setSelectedIndex(0); iconViewList.setSelectedIndex(0);
} }
@ -144,4 +147,9 @@ public class ChartTypePane extends ChartCommonWizardPane {
update(chart4Update); update(chart4Update);
} }
@Override
public void callback() {
this.repaint();
}
} }

25
designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/data/report/CategoryPlotReportDataContentPane.java

@ -8,6 +8,7 @@ import com.fr.chart.chartdata.NormalReportDataDefinition;
import com.fr.chart.chartdata.SeriesDefinition; import com.fr.chart.chartdata.SeriesDefinition;
import com.fr.design.formula.TinyFormulaPane; import com.fr.design.formula.TinyFormulaPane;
import com.fr.design.gui.ilable.UILabel; import com.fr.design.gui.ilable.UILabel;
import com.fr.design.i18n.Toolkit;
import com.fr.design.mainframe.chart.gui.ChartDataPane; import com.fr.design.mainframe.chart.gui.ChartDataPane;
import com.fr.design.mainframe.chart.gui.data.ChartDataFilterPane; import com.fr.design.mainframe.chart.gui.data.ChartDataFilterPane;
import com.fr.stable.StringUtils; import com.fr.stable.StringUtils;
@ -33,12 +34,12 @@ public class CategoryPlotReportDataContentPane extends AbstractReportDataContent
public CategoryPlotReportDataContentPane(ChartDataPane parent) { public CategoryPlotReportDataContentPane(ChartDataPane parent) {
initEveryPane(); initEveryPane();
categoryName = initCategoryBox(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Category_Name")); categoryName = initCategoryBox(Toolkit.i18nText("Fine-Design_Chart_Category_Name"));
categoryName.setPreferredSize(new Dimension(236,30)); categoryName.setPreferredSize(new Dimension(236,30));
categoryName.setBorder(BorderFactory.createEmptyBorder(0,24,0,20)); categoryName.setBorder(BorderFactory.createEmptyBorder(0,24,0,20));
this.add(categoryName, "0,0,1,0"); this.add(categoryName, "0,0,1,0");
filterPane = new ChartDataFilterPane(new Bar2DPlot(), parent); filterPane = new ChartDataFilterPane(new Bar2DPlot(), parent);
JPanel panel = TableLayout4VanChartHelper.createExpandablePaneWithTitle(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Data_Filter"),filterPane); JPanel panel = TableLayout4VanChartHelper.createExpandablePaneWithTitle(Toolkit.i18nText("Fine-Design_Chart_Data_Filter"),filterPane);
panel.setBorder(getSidesBorder()); panel.setBorder(getSidesBorder());
filterPane.setBorder(getFilterPaneBorder()); filterPane.setBorder(getFilterPaneBorder());
this.add(panel, "0,6,1,4"); } this.add(panel, "0,6,1,4"); }
@ -50,7 +51,7 @@ public class CategoryPlotReportDataContentPane extends AbstractReportDataContent
this.setLayout(new BorderLayout(4, 0)); this.setLayout(new BorderLayout(4, 0));
if(StringUtils.isNotEmpty(leftLabel)) { if(StringUtils.isNotEmpty(leftLabel)) {
UILabel label1 = new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Category_Name")); UILabel label1 = new UILabel(Toolkit.i18nText("Fine-Design_Chart_Category_Name"));
label1.setPreferredSize(new Dimension(75, 20)); label1.setPreferredSize(new Dimension(75, 20));
this.add(label1, BorderLayout.WEST); this.add(label1, BorderLayout.WEST);
} }
@ -90,8 +91,8 @@ public class CategoryPlotReportDataContentPane extends AbstractReportDataContent
@Override @Override
protected String[] columnNames() { protected String[] columnNames() {
return new String[]{ return new String[]{
com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Series_Name"), Toolkit.i18nText("Fine-Design_Chart_Series_Name"),
com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Series_Value") Toolkit.i18nText("Fine-Design_Chart_Series_Value")
}; };
} }
@ -99,6 +100,10 @@ public class CategoryPlotReportDataContentPane extends AbstractReportDataContent
checkBoxUse(); checkBoxUse();
TopDefinitionProvider definition = collection.getSelectedChart().getFilterDefinition(); TopDefinitionProvider definition = collection.getSelectedChart().getFilterDefinition();
populateDefinition(definition);
}
public void populateDefinition(TopDefinitionProvider definition) {
if (definition instanceof NormalReportDataDefinition) { if (definition instanceof NormalReportDataDefinition) {
NormalReportDataDefinition reportDefinition = (NormalReportDataDefinition) definition; NormalReportDataDefinition reportDefinition = (NormalReportDataDefinition) definition;
if (reportDefinition.getCategoryName() != null) { if (reportDefinition.getCategoryName() != null) {
@ -113,13 +118,18 @@ public class CategoryPlotReportDataContentPane extends AbstractReportDataContent
seriesPane.doLayout(); seriesPane.doLayout();
} }
filterPane.populateBean(collection); filterPane.populateDefinition(definition, true);
} }
public void updateBean(ChartCollection collection) { public void updateBean(ChartCollection collection) {
collection.getSelectedChart().setFilterDefinition(new NormalReportDataDefinition()); collection.getSelectedChart().setFilterDefinition(new NormalReportDataDefinition());
TopDefinitionProvider definition = collection.getSelectedChart().getFilterDefinition(); TopDefinitionProvider definition = collection.getSelectedChart().getFilterDefinition();
updateDefinition(definition);
}
public void updateDefinition(TopDefinitionProvider definition) {
if (definition instanceof NormalReportDataDefinition) { if (definition instanceof NormalReportDataDefinition) {
NormalReportDataDefinition reportDefinition = (NormalReportDataDefinition) definition; NormalReportDataDefinition reportDefinition = (NormalReportDataDefinition) definition;
@ -135,6 +145,7 @@ public class CategoryPlotReportDataContentPane extends AbstractReportDataContent
reportDefinition.add(sd); reportDefinition.add(sd);
} }
} }
filterPane.updateBean(collection);
filterPane.updateDefinition(definition);
} }
} }

1
designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/data/table/SeriesNameUseFieldValuePane.java

@ -40,6 +40,7 @@ public class SeriesNameUseFieldValuePane extends FurtherBasicBeanPane<ChartColle
public SeriesNameUseFieldValuePane() { public SeriesNameUseFieldValuePane() {
seriesName = new UIComboBoxWithNone(); seriesName = new UIComboBoxWithNone();
seriesName.getModel().setSelectedItem(null);
seriesValue = new UIComboBox(); seriesValue = new UIComboBox();
calculateCombox = new CalculateComboBox(); calculateCombox = new CalculateComboBox();
calculateCombox.reset(); calculateCombox.reset();

4
designer-chart/src/main/java/com/fr/van/chart/box/BoxIndependentVanChartInterface.java

@ -13,7 +13,7 @@ import com.fr.design.mainframe.chart.gui.ChartStylePane;
import com.fr.design.mainframe.chart.gui.data.report.AbstractReportDataContentPane; import com.fr.design.mainframe.chart.gui.data.report.AbstractReportDataContentPane;
import com.fr.design.mainframe.chart.gui.data.table.AbstractTableDataContentPane; import com.fr.design.mainframe.chart.gui.data.table.AbstractTableDataContentPane;
import com.fr.design.mainframe.chart.gui.type.AbstractChartTypePane; import com.fr.design.mainframe.chart.gui.type.AbstractChartTypePane;
import com.fr.van.chart.box.data.BoxPlotReportDataContentPane; import com.fr.van.chart.box.data.report.BoxPlotReportDataContentPane;
import com.fr.van.chart.box.data.table.BoxPlotTableDataContentPane; import com.fr.van.chart.box.data.table.BoxPlotTableDataContentPane;
import com.fr.van.chart.designer.other.VanChartInteractivePane; import com.fr.van.chart.designer.other.VanChartInteractivePane;
import com.fr.van.chart.designer.other.VanChartOtherPane; import com.fr.van.chart.designer.other.VanChartOtherPane;
@ -50,7 +50,7 @@ public class BoxIndependentVanChartInterface extends AbstractIndependentVanChart
} }
public AbstractReportDataContentPane getReportDataSourcePane(Plot plot, ChartDataPane parent) { public AbstractReportDataContentPane getReportDataSourcePane(Plot plot, ChartDataPane parent) {
return new BoxPlotReportDataContentPane(parent); return new BoxPlotReportDataContentPane(plot, parent);
} }
public AbstractChartTypePane getPlotTypePane() { public AbstractChartTypePane getPlotTypePane() {

11
designer-chart/src/main/java/com/fr/van/chart/box/data/BoxPlotReportDataContentPane.java

@ -1,11 +0,0 @@
package com.fr.van.chart.box.data;
import com.fr.design.mainframe.chart.gui.ChartDataPane;
import com.fr.design.mainframe.chart.gui.data.report.CategoryPlotReportDataContentPane;
public class BoxPlotReportDataContentPane extends CategoryPlotReportDataContentPane {
public BoxPlotReportDataContentPane(ChartDataPane parent) {
super(parent);
}
}

4
designer-chart/src/main/java/com/fr/van/chart/box/data/BoxPlotReportResultDataSeriesPane.java

@ -1,4 +0,0 @@
package com.fr.van.chart.box.data;
public class BoxPlotReportResultDataSeriesPane {
}

137
designer-chart/src/main/java/com/fr/van/chart/box/data/report/BoxPlotReportDataContentPane.java

@ -0,0 +1,137 @@
package com.fr.van.chart.box.data.report;
import com.fr.chart.chartattr.ChartCollection;
import com.fr.chart.chartattr.Plot;
import com.fr.design.gui.ibutton.UIButtonGroup;
import com.fr.design.gui.ilable.UILabel;
import com.fr.design.i18n.Toolkit;
import com.fr.design.mainframe.chart.gui.ChartDataPane;
import com.fr.design.mainframe.chart.gui.data.report.AbstractReportDataContentPane;
import com.fr.design.utils.gui.GUICoreUtils;
import com.fr.plugin.chart.box.VanChartBoxPlot;
import com.fr.plugin.chart.box.data.VanBoxReportDefinition;
import javax.swing.BorderFactory;
import javax.swing.JPanel;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class BoxPlotReportDataContentPane extends AbstractReportDataContentPane {
private UIButtonGroup dataType;
private BoxPlotReportDetailedDataSeriesPane detailedDataSeriesPane;
private BoxPlotReportResultDataSeriesPane resultDataSeriesPane;
private Plot initplot;
public BoxPlotReportDataContentPane(Plot plot, ChartDataPane parent) {
this.initplot = plot;
this.setLayout(new BorderLayout());
this.add(createDataTypePane(), BorderLayout.NORTH);
this.add(createSeriesPane(parent), BorderLayout.CENTER);
initDataTypeListener();
}
private JPanel createDataTypePane() {
JPanel pane = new JPanel(new BorderLayout(4, 0));
pane.setBorder(BorderFactory.createMatteBorder(0, 0, 6, 1, getBackground()));
UILabel label = new UILabel(Toolkit.i18nText("Fine-Design_Chart_Data_Type"));
label.setPreferredSize(new Dimension(ChartDataPane.LABEL_WIDTH, ChartDataPane.LABEL_HEIGHT));
String[] names = new String[]{
Toolkit.i18nText("Fine-Design_Chart_Detailed_Data"),
Toolkit.i18nText("Fine-Design_Chart_Result_Data")
};
dataType = new UIButtonGroup(names);
dataType.setPreferredSize(new Dimension(100, 20));
pane.add(GUICoreUtils.createBorderLayoutPane(new Component[]{dataType, null, null, label, null}));
pane.setPreferredSize(new Dimension(246, 30));
pane.setBorder(BorderFactory.createEmptyBorder(0, 24, 10, 15));
return pane;
}
private JPanel createSeriesPane(ChartDataPane parent) {
detailedDataSeriesPane = new BoxPlotReportDetailedDataSeriesPane(parent);
resultDataSeriesPane = new BoxPlotReportResultDataSeriesPane();
JPanel pane = new JPanel(new BorderLayout(4, 0));
pane.add(resultDataSeriesPane, BorderLayout.NORTH);
pane.add(detailedDataSeriesPane, BorderLayout.CENTER);
return pane;
}
private void initDataTypeListener() {
dataType.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
checkDataPaneVisible();
}
});
}
private void checkDataPaneVisible() {
if (detailedDataSeriesPane != null) {
detailedDataSeriesPane.setVisible(dataType.getSelectedIndex() == 0);
}
if (resultDataSeriesPane != null) {
resultDataSeriesPane.setVisible(dataType.getSelectedIndex() == 1);
}
}
public void updateBean(ChartCollection collection) {
collection.getSelectedChart().setFilterDefinition(new VanBoxReportDefinition());
VanBoxReportDefinition report = BoxReportDefinitionHelper.getBoxReportDefinition(collection);
if (report != null) {
boolean isDetailed = dataType.getSelectedIndex() == 0;
report.setDetailed(isDetailed);
((VanChartBoxPlot) initplot).setDetailed(isDetailed);
}
if (detailedDataSeriesPane != null) {
detailedDataSeriesPane.updateBean(collection);
}
if (resultDataSeriesPane != null) {
resultDataSeriesPane.updateBean(collection);
}
}
public void populateBean(ChartCollection collection) {
VanBoxReportDefinition report = BoxReportDefinitionHelper.getBoxReportDefinition(collection);
if (report == null) {
dataType.setSelectedIndex(0);
checkDataPaneVisible();
return;
}
if (dataType != null) {
dataType.setSelectedIndex(BoxReportDefinitionHelper.isDetailedReportDataType(collection) ? 0 : 1);
}
if (detailedDataSeriesPane != null) {
detailedDataSeriesPane.populateBean(collection);
}
if (resultDataSeriesPane != null) {
resultDataSeriesPane.populateBean(collection);
}
checkDataPaneVisible();
}
protected String[] columnNames() {
return new String[0];
}
}

38
designer-chart/src/main/java/com/fr/van/chart/box/data/report/BoxPlotReportDetailedDataSeriesPane.java

@ -0,0 +1,38 @@
package com.fr.van.chart.box.data.report;
import com.fr.chart.chartattr.ChartCollection;
import com.fr.design.mainframe.chart.gui.ChartDataPane;
import com.fr.design.mainframe.chart.gui.data.report.CategoryPlotReportDataContentPane;
import com.fr.plugin.chart.box.data.VanBoxReportDefinition;
import com.fr.plugin.chart.box.data.VanBoxReportDetailedDefinition;
public class BoxPlotReportDetailedDataSeriesPane extends CategoryPlotReportDataContentPane {
public BoxPlotReportDetailedDataSeriesPane(ChartDataPane parent) {
super(parent);
}
public void populateBean(ChartCollection ob) {
VanBoxReportDetailedDefinition definition = BoxReportDefinitionHelper.getBoxReportDetailedDefinition(ob);
if (definition == null) {
return;
}
this.populateDefinition(definition);
}
public void updateBean(ChartCollection ob) {
VanBoxReportDefinition report = BoxReportDefinitionHelper.getBoxReportDefinition(ob);
if (report == null) {
return;
}
VanBoxReportDetailedDefinition detailedDefinition = new VanBoxReportDetailedDefinition();
this.updateDefinition(detailedDefinition);
report.setDetailedDefinition(detailedDefinition);
}
}

168
designer-chart/src/main/java/com/fr/van/chart/box/data/report/BoxPlotReportResultDataSeriesPane.java

@ -0,0 +1,168 @@
package com.fr.van.chart.box.data.report;
import com.fr.chart.chartattr.ChartCollection;
import com.fr.design.formula.TinyFormulaPane;
import com.fr.design.gui.ilable.UILabel;
import com.fr.design.i18n.Toolkit;
import com.fr.design.layout.TableLayout;
import com.fr.design.layout.TableLayoutHelper;
import com.fr.design.mainframe.chart.gui.data.report.AbstractReportDataContentPane;
import com.fr.plugin.chart.box.data.VanBoxReportDefinition;
import com.fr.plugin.chart.box.data.VanBoxReportResultDefinition;
import javax.swing.BorderFactory;
import javax.swing.JPanel;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Dimension;
public class BoxPlotReportResultDataSeriesPane extends AbstractReportDataContentPane {
private TinyFormulaPane category;
private TinyFormulaPane seriesName;
private TinyFormulaWithEditLabel max;
private TinyFormulaWithEditLabel q3;
private TinyFormulaWithEditLabel median;
private TinyFormulaWithEditLabel q1;
private TinyFormulaWithEditLabel min;
public BoxPlotReportResultDataSeriesPane() {
this.setLayout(new BorderLayout());
initContentComponents();
JPanel panel = createContentPane();
panel.setBorder(BorderFactory.createEmptyBorder(0, 24, 0, 15));
this.add(panel, BorderLayout.CENTER);
}
private void initContentComponents() {
category = createTinyFormulaPaneWithTitle(Toolkit.i18nText("Fine-Design_Chart_Category"));
seriesName = createTinyFormulaPaneWithTitle(Toolkit.i18nText("Fine-Design_Chart_Series_Name"));
max = createTinyFormulaWithEditLabel(Toolkit.i18nText("Fine-Design_Chart_Data_Max"));
q3 = createTinyFormulaWithEditLabel(Toolkit.i18nText("Fine-Design_Chart_Data_Q3"));
median = createTinyFormulaWithEditLabel(Toolkit.i18nText("Fine-Design_Chart_Data_Median"));
q1 = createTinyFormulaWithEditLabel(Toolkit.i18nText("Fine-Design_Chart_Data_Q1"));
min = createTinyFormulaWithEditLabel(Toolkit.i18nText("Fine-Design_Chart_Data_Min"));
}
private JPanel createContentPane() {
double p = TableLayout.PREFERRED;
double f = TableLayout.FILL;
double[] row = {p, p, p, p, p, p, p};
double[] col = {f};
Component[][] components = new Component[][]{
new Component[]{category},
new Component[]{seriesName},
new Component[]{max},
new Component[]{q3},
new Component[]{median},
new Component[]{q1},
new Component[]{min}
};
return TableLayoutHelper.createTableLayoutPane(components, row, col);
}
private TinyFormulaPane createTinyFormulaPaneWithTitle(final String title) {
return new TinyFormulaPane() {
protected void initLayout() {
this.setLayout(new BorderLayout(4, 0));
UILabel label = new UILabel(title);
label.setPreferredSize(new Dimension(75, 20));
this.add(label, BorderLayout.WEST);
formulaTextField.setPreferredSize(new Dimension(100, 20));
this.add(formulaTextField, BorderLayout.CENTER);
this.add(formulaTextFieldButton, BorderLayout.EAST);
}
};
}
private TinyFormulaWithEditLabel createTinyFormulaWithEditLabel(String title) {
return new TinyFormulaWithEditLabel(title) {
protected void clearAllBackground() {
clearAllLabelBackground();
}
};
}
private void clearAllLabelBackground() {
TinyFormulaWithEditLabel[] editLabels = new TinyFormulaWithEditLabel[]{max, q3, median, q1, min};
for (TinyFormulaWithEditLabel label : editLabels) {
if (label != null) {
label.clearBackGround();
}
}
}
public void populateBean(ChartCollection ob) {
VanBoxReportResultDefinition detailedDefinition = BoxReportDefinitionHelper.getBoxReportResultDefinition(ob);
if (detailedDefinition == null) {
return;
}
populateFormulaPane(category, detailedDefinition.getCategoryName());
populateFormulaPane(seriesName, detailedDefinition.getSeriesName());
max.setHeaderName(detailedDefinition.getMaxLabel());
q3.setHeaderName(detailedDefinition.getQ3Label());
median.setHeaderName(detailedDefinition.getMedianLabel());
q1.setHeaderName(detailedDefinition.getQ1Label());
min.setHeaderName(detailedDefinition.getMinLabel());
max.populateFormula(detailedDefinition.getMax());
q3.populateFormula(detailedDefinition.getQ3());
median.populateFormula(detailedDefinition.getMedian());
q1.populateFormula(detailedDefinition.getQ1());
min.populateFormula(detailedDefinition.getMin());
}
private void populateFormulaPane(TinyFormulaPane pane, Object ob) {
if (ob != null) {
pane.populateBean(ob.toString());
}
}
public void updateBean(ChartCollection ob) {
VanBoxReportDefinition report = BoxReportDefinitionHelper.getBoxReportDefinition(ob);
if (report == null) {
return;
}
VanBoxReportResultDefinition resultDefinition = new VanBoxReportResultDefinition();
resultDefinition.setCategoryName(canBeFormula(category.getUITextField().getText()));
resultDefinition.setSeriesName(canBeFormula(seriesName.getUITextField().getText()));
resultDefinition.setMaxLabel(max.getHeaderName());
resultDefinition.setQ3Label(q3.getHeaderName());
resultDefinition.setMedianLabel(median.getHeaderName());
resultDefinition.setQ1Label(q1.getHeaderName());
resultDefinition.setMinLabel(min.getHeaderName());
resultDefinition.setMax(canBeFormula(max.updateFormula()));
resultDefinition.setQ3(canBeFormula(q3.updateFormula()));
resultDefinition.setMedian(canBeFormula(median.updateFormula()));
resultDefinition.setQ1(canBeFormula(q1.updateFormula()));
resultDefinition.setMin(canBeFormula(min.updateFormula()));
report.setResultDefinition(resultDefinition);
}
protected String[] columnNames() {
return new String[0];
}
}

58
designer-chart/src/main/java/com/fr/van/chart/box/data/report/BoxReportDefinitionHelper.java

@ -0,0 +1,58 @@
package com.fr.van.chart.box.data.report;
import com.fr.base.chart.chartdata.TopDefinitionProvider;
import com.fr.chart.chartattr.Chart;
import com.fr.chart.chartattr.ChartCollection;
import com.fr.plugin.chart.box.data.VanBoxReportDefinition;
import com.fr.plugin.chart.box.data.VanBoxReportDetailedDefinition;
import com.fr.plugin.chart.box.data.VanBoxReportResultDefinition;
public class BoxReportDefinitionHelper {
public static VanBoxReportDefinition getBoxReportDefinition(ChartCollection collection) {
if (collection != null) {
Chart chart = collection.getSelectedChart();
if (chart != null) {
TopDefinitionProvider definitionProvider = chart.getFilterDefinition();
if (definitionProvider instanceof VanBoxReportDefinition) {
return (VanBoxReportDefinition) definitionProvider;
}
}
}
return null;
}
public static VanBoxReportResultDefinition getBoxReportResultDefinition(ChartCollection collection) {
VanBoxReportDefinition report = getBoxReportDefinition(collection);
if (report != null) {
return report.getResultDefinition();
}
return null;
}
public static VanBoxReportDetailedDefinition getBoxReportDetailedDefinition(ChartCollection collection) {
VanBoxReportDefinition report = getBoxReportDefinition(collection);
if (report != null) {
return report.getDetailedDefinition();
}
return null;
}
public static boolean isDetailedReportDataType(ChartCollection collection) {
VanBoxReportDefinition report = getBoxReportDefinition(collection);
if (report != null) {
return report.isDetailed();
}
return true;
}
}

71
designer-chart/src/main/java/com/fr/van/chart/box/data/report/TinyFormulaWithEditLabel.java

@ -0,0 +1,71 @@
package com.fr.van.chart.box.data.report;
import com.fr.design.event.UIObserver;
import com.fr.design.event.UIObserverListener;
import com.fr.design.formula.TinyFormulaPane;
import com.fr.design.mainframe.chart.gui.UIEditLabel;
import javax.swing.JPanel;
import javax.swing.SwingConstants;
import java.awt.BorderLayout;
import java.awt.Dimension;
public abstract class TinyFormulaWithEditLabel extends JPanel implements UIObserver {
private UIEditLabel editLabel;
private TinyFormulaPane tinyFormulaPane;
protected UIObserverListener listener;
public TinyFormulaWithEditLabel(String text) {
editLabel = new UIEditLabel(text, SwingConstants.LEFT) {
protected void doAfterMousePress() {
clearAllBackground();
}
protected boolean appendOriginalLabel() {
return false;
}
};
editLabel.setPreferredSize(new Dimension(75, 20));
tinyFormulaPane = new TinyFormulaPane();
this.setLayout(new BorderLayout(4, 0));
this.add(editLabel, BorderLayout.WEST);
this.add(tinyFormulaPane, BorderLayout.CENTER);
}
protected abstract void clearAllBackground();
public void clearBackGround() {
editLabel.resetNomalrBackground();
}
public boolean shouldResponseChangeListener() {
return true;
}
public void registerChangeListener(UIObserverListener listener) {
this.listener = listener;
editLabel.registerChangeListener(listener);
}
public void populateFormula(Object ob) {
if (ob != null) {
tinyFormulaPane.populateBean(ob.toString());
}
}
public Object updateFormula() {
return tinyFormulaPane.getUITextField().getText();
}
public String getHeaderName() {
return editLabel.getText();
}
public void setHeaderName(String text) {
editLabel.setText(text);
}
}

19
designer-chart/src/main/java/com/fr/van/chart/box/data/table/BoxPlotTableDataContentPane.java

@ -146,8 +146,7 @@ public class BoxPlotTableDataContentPane extends AbstractTableDataContentPane {
} }
public void updateBean(ChartCollection collection) { public void updateBean(ChartCollection collection) {
checkChartCollection(collection); collection.getSelectedChart().setFilterDefinition(new VanBoxTableDefinition());
VanBoxTableDefinition table = BoxTableDefinitionHelper.getBoxTableDefinition(collection); VanBoxTableDefinition table = BoxTableDefinitionHelper.getBoxTableDefinition(collection);
if (table != null) { if (table != null) {
@ -168,7 +167,13 @@ public class BoxPlotTableDataContentPane extends AbstractTableDataContentPane {
} }
public void populateBean(ChartCollection collection) { public void populateBean(ChartCollection collection) {
checkChartCollection(collection); VanBoxTableDefinition table = BoxTableDefinitionHelper.getBoxTableDefinition(collection);
if (table == null) {
dataType.setSelectedIndex(0);
checkDataPaneVisible();
return;
}
if (dataType != null) { if (dataType != null) {
dataType.setSelectedIndex(BoxTableDefinitionHelper.isDetailedTableDataType(collection) ? 0 : 1); dataType.setSelectedIndex(BoxTableDefinitionHelper.isDetailedTableDataType(collection) ? 0 : 1);
@ -186,14 +191,6 @@ public class BoxPlotTableDataContentPane extends AbstractTableDataContentPane {
checkDataPaneVisible(); checkDataPaneVisible();
} }
private void checkChartCollection(ChartCollection collection) {
VanBoxTableDefinition table = BoxTableDefinitionHelper.getBoxTableDefinition(collection);
if (table == null) {
collection.getSelectedChart().setFilterDefinition(new VanBoxTableDefinition());
}
}
private void populateDataScreeningPane(ChartDataFilterPane dataScreeningPane, ChartCollection collection) { private void populateDataScreeningPane(ChartDataFilterPane dataScreeningPane, ChartCollection collection) {
NormalTableDataDefinition detailedDefinition = BoxTableDefinitionHelper.getBoxTableDetailedDefinition(collection); NormalTableDataDefinition detailedDefinition = BoxTableDefinitionHelper.getBoxTableDetailedDefinition(collection);

155
designer-chart/src/main/java/com/fr/van/chart/box/data/table/BoxPlotTableResultDataSeriesPane.java

@ -6,12 +6,12 @@ import com.fr.design.gui.icombobox.UIComboBox;
import com.fr.design.gui.ilable.UILabel; import com.fr.design.gui.ilable.UILabel;
import com.fr.design.i18n.Toolkit; import com.fr.design.i18n.Toolkit;
import com.fr.design.layout.TableLayout; import com.fr.design.layout.TableLayout;
import com.fr.design.layout.TableLayoutHelper;
import com.fr.design.mainframe.chart.gui.data.table.AbstractTableDataContentPane; import com.fr.design.mainframe.chart.gui.data.table.AbstractTableDataContentPane;
import com.fr.plugin.chart.box.data.VanBoxTableDefinition; import com.fr.plugin.chart.box.data.VanBoxTableDefinition;
import com.fr.plugin.chart.box.data.VanBoxTableResultDefinition; import com.fr.plugin.chart.box.data.VanBoxTableResultDefinition;
import com.fr.stable.ArrayUtils; import com.fr.stable.ArrayUtils;
import com.fr.stable.StringUtils; import com.fr.stable.StringUtils;
import com.fr.van.chart.designer.TableLayout4VanChartHelper;
import javax.swing.BorderFactory; import javax.swing.BorderFactory;
import javax.swing.JPanel; import javax.swing.JPanel;
@ -24,11 +24,15 @@ public class BoxPlotTableResultDataSeriesPane extends AbstractTableDataContentPa
private UIComboBox category; private UIComboBox category;
private UIComboBox seriesName; private UIComboBox seriesName;
private UIComboBox max;
private UIComboBox q3; private JPanel categoryPane;
private UIComboBox median; private JPanel seriesNamePane;
private UIComboBox q1;
private UIComboBox min; private UIComboBoxWithEditLabel max;
private UIComboBoxWithEditLabel q3;
private UIComboBoxWithEditLabel median;
private UIComboBoxWithEditLabel q1;
private UIComboBoxWithEditLabel min;
public BoxPlotTableResultDataSeriesPane() { public BoxPlotTableResultDataSeriesPane() {
@ -41,23 +45,49 @@ public class BoxPlotTableResultDataSeriesPane extends AbstractTableDataContentPa
} }
private void initComboxSize() { private void initComboxSize() {
Dimension preferredSize = new Dimension(100, 20);
category = new UIComboBox(); category = new UIComboBox();
seriesName = new UIComboBox(); seriesName = new UIComboBox();
max = new UIComboBox();
q3 = new UIComboBox(); categoryPane = createUIComboBoxPane(category, Toolkit.i18nText("Fine-Design_Chart_Category"));
median = new UIComboBox(); seriesNamePane = createUIComboBoxPane(seriesName, Toolkit.i18nText("Fine-Design_Chart_Series_Name"));
q1 = new UIComboBox();
min = new UIComboBox(); max = createUIComboBoxWithEditLabel(Toolkit.i18nText("Fine-Design_Chart_Data_Max"));
q3 = createUIComboBoxWithEditLabel(Toolkit.i18nText("Fine-Design_Chart_Data_Q3"));
category.setPreferredSize(preferredSize); median = createUIComboBoxWithEditLabel(Toolkit.i18nText("Fine-Design_Chart_Data_Median"));
seriesName.setPreferredSize(preferredSize); q1 = createUIComboBoxWithEditLabel(Toolkit.i18nText("Fine-Design_Chart_Data_Q1"));
max.setPreferredSize(preferredSize); min = createUIComboBoxWithEditLabel(Toolkit.i18nText("Fine-Design_Chart_Data_Min"));
q3.setPreferredSize(preferredSize); }
median.setPreferredSize(preferredSize);
q1.setPreferredSize(preferredSize); private JPanel createUIComboBoxPane(UIComboBox comboBox, String title) {
min.setPreferredSize(preferredSize); UILabel label = new UILabel(title);
label.setPreferredSize(new Dimension(75, 20));
JPanel panel = new JPanel();
panel.setLayout(new BorderLayout(4, 0));
panel.add(label, BorderLayout.WEST);
panel.add(comboBox, BorderLayout.CENTER);
return panel;
}
private UIComboBoxWithEditLabel createUIComboBoxWithEditLabel(String title) {
return new UIComboBoxWithEditLabel(title) {
protected void clearAllBackground() {
clearAllLabelBackground();
}
};
}
private void clearAllLabelBackground() {
UIComboBoxWithEditLabel[] editLabels = new UIComboBoxWithEditLabel[]{max, q3, median, q1, min};
for (UIComboBoxWithEditLabel label : editLabels) {
if (label != null) {
label.clearBackGround();
}
}
} }
private void addItemListener() { private void addItemListener() {
@ -73,24 +103,23 @@ public class BoxPlotTableResultDataSeriesPane extends AbstractTableDataContentPa
private JPanel createDataSeriesPane() { private JPanel createDataSeriesPane() {
double p = TableLayout.PREFERRED; double p = TableLayout.PREFERRED;
double f = TableLayout.FILL; double f = TableLayout.FILL;
double[] column = {f, COMPONENT_WIDTH};
double[] row = {p, p, p, p, p, p, p}; double[] row = {p, p, p, p, p, p, p};
double[] col = {f};
Component[][] components_north = new Component[][]{
new Component[]{new UILabel(Toolkit.i18nText("Fine-Design_Chart_Category")), category}, Component[][] components = new Component[][]{
new Component[]{new UILabel(Toolkit.i18nText("Fine-Design_Chart_Series_Name")), seriesName}, new Component[]{categoryPane},
new Component[]{new UILabel(Toolkit.i18nText("Fine-Design_Chart_Data_Max")), max}, new Component[]{seriesNamePane},
new Component[]{new UILabel(Toolkit.i18nText("Fine-Design_Chart_Data_Q3")), q3}, new Component[]{max},
new Component[]{new UILabel(Toolkit.i18nText("Fine-Design_Chart_Data_Median")), median}, new Component[]{q3},
new Component[]{new UILabel(Toolkit.i18nText("Fine-Design_Chart_Data_Q1")), q1}, new Component[]{median},
new Component[]{new UILabel(Toolkit.i18nText("Fine-Design_Chart_Data_Min")), min}, new Component[]{q1},
new Component[]{min}
}; };
JPanel center = TableLayout4VanChartHelper.createGapTableLayoutPane(components_north, row, column); JPanel panel = TableLayoutHelper.createTableLayoutPane(components, row, col);
center.setBorder(BorderFactory.createEmptyBorder(10, 24, 10, 15)); panel.setBorder(BorderFactory.createEmptyBorder(0, 24, 0, 15));
return center; return panel;
} }
public void checkBoxUse(boolean hasUse) { public void checkBoxUse(boolean hasUse) {
@ -99,21 +128,23 @@ public class BoxPlotTableResultDataSeriesPane extends AbstractTableDataContentPa
protected void refreshBoxListWithSelectTableData(List list) { protected void refreshBoxListWithSelectTableData(List list) {
refreshBoxItems(category, list); refreshBoxItems(category, list);
refreshBoxItems(seriesName, list); refreshBoxItems(seriesName, list);
refreshBoxItems(max, list);
refreshBoxItems(q3, list); refreshBoxItems(max.getComboBox(), list);
refreshBoxItems(median, list); refreshBoxItems(q3.getComboBox(), list);
refreshBoxItems(q1, list); refreshBoxItems(median.getComboBox(), list);
refreshBoxItems(min, list); refreshBoxItems(q1.getComboBox(), list);
refreshBoxItems(min.getComboBox(), list);
} }
public void clearAllBoxList() { public void clearAllBoxList() {
clearBoxItems(category); clearBoxItems(category);
clearBoxItems(seriesName); clearBoxItems(seriesName);
clearBoxItems(max);
clearBoxItems(q3); clearBoxItems(max.getComboBox());
clearBoxItems(median); clearBoxItems(q3.getComboBox());
clearBoxItems(q1); clearBoxItems(median.getComboBox());
clearBoxItems(min); clearBoxItems(q1.getComboBox());
clearBoxItems(min.getComboBox());
} }
public void populateBean(ChartCollection collection) { public void populateBean(ChartCollection collection) {
@ -127,11 +158,18 @@ public class BoxPlotTableResultDataSeriesPane extends AbstractTableDataContentPa
combineCustomEditValue(category, definition.getCategoryName()); combineCustomEditValue(category, definition.getCategoryName());
combineCustomEditValue(seriesName, definition.getSeriesName()); combineCustomEditValue(seriesName, definition.getSeriesName());
combineCustomEditValue(max, definition.getMax());
combineCustomEditValue(q3, definition.getQ3()); max.populateComboBox(definition.getMax());
combineCustomEditValue(median, definition.getMedian()); q3.populateComboBox(definition.getQ3());
combineCustomEditValue(q1, definition.getQ1()); median.populateComboBox(definition.getMedian());
combineCustomEditValue(min, definition.getMin()); q1.populateComboBox(definition.getQ1());
min.populateComboBox(definition.getMin());
max.setHeaderName(definition.getMaxLabel());
q3.setHeaderName(definition.getQ3Label());
median.setHeaderName(definition.getMedianLabel());
q1.setHeaderName(definition.getQ1Label());
min.setHeaderName(definition.getMinLabel());
} }
public void updateBean(ChartCollection collection) { public void updateBean(ChartCollection collection) {
@ -141,11 +179,12 @@ public class BoxPlotTableResultDataSeriesPane extends AbstractTableDataContentPa
Object resultCategory = category.getSelectedItem(); Object resultCategory = category.getSelectedItem();
Object resultSeries = seriesName.getSelectedItem(); Object resultSeries = seriesName.getSelectedItem();
Object resultMax = max.getSelectedItem();
Object resultQ3 = q3.getSelectedItem(); Object resultMax = max.updateComboBox();
Object resultMedian = median.getSelectedItem(); Object resultQ3 = q3.updateComboBox();
Object resultQ1 = q1.getSelectedItem(); Object resultMedian = median.updateComboBox();
Object resultMin = min.getSelectedItem(); Object resultQ1 = q1.updateComboBox();
Object resultMin = min.updateComboBox();
if (resultCategory == null || ArrayUtils.contains(ChartConstants.getNoneKeys(), resultCategory)) { if (resultCategory == null || ArrayUtils.contains(ChartConstants.getNoneKeys(), resultCategory)) {
definition.setCategoryName(StringUtils.EMPTY); definition.setCategoryName(StringUtils.EMPTY);
@ -173,6 +212,12 @@ public class BoxPlotTableResultDataSeriesPane extends AbstractTableDataContentPa
definition.setMin(resultMin.toString()); definition.setMin(resultMin.toString());
} }
definition.setMaxLabel(max.getHeaderName());
definition.setQ3Label(q3.getHeaderName());
definition.setMedianLabel(median.getHeaderName());
definition.setQ1Label(q1.getHeaderName());
definition.setMinLabel(min.getHeaderName());
table.setResultDefinition(definition); table.setResultDefinition(definition);
} }
} }

86
designer-chart/src/main/java/com/fr/van/chart/box/data/table/UIComboBoxWithEditLabel.java

@ -0,0 +1,86 @@
package com.fr.van.chart.box.data.table;
import com.fr.design.event.UIObserver;
import com.fr.design.event.UIObserverListener;
import com.fr.design.gui.icombobox.UIComboBox;
import com.fr.design.mainframe.chart.gui.UIEditLabel;
import javax.swing.JPanel;
import javax.swing.SwingConstants;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.ItemListener;
public abstract class UIComboBoxWithEditLabel extends JPanel implements UIObserver {
private UIEditLabel editLabel;
private UIComboBox comboBox;
protected UIObserverListener listener;
public UIComboBoxWithEditLabel(String text) {
editLabel = new UIEditLabel(text, SwingConstants.LEFT) {
protected void doAfterMousePress() {
clearAllBackground();
}
protected boolean appendOriginalLabel() {
return false;
}
};
editLabel.setPreferredSize(new Dimension(75, 20));
comboBox = new UIComboBox();
this.setLayout(new BorderLayout(4, 0));
this.add(editLabel, BorderLayout.WEST);
this.add(comboBox, BorderLayout.CENTER);
}
public UIComboBox getComboBox() {
return comboBox;
}
public void setComboBox(UIComboBox comboBox) {
this.comboBox = comboBox;
}
protected void addItemListener(ItemListener aListener) {
comboBox.addItemListener(aListener);
}
protected abstract void clearAllBackground();
public void clearBackGround() {
editLabel.resetNomalrBackground();
}
public boolean shouldResponseChangeListener() {
return true;
}
public void registerChangeListener(UIObserverListener listener) {
this.listener = listener;
editLabel.registerChangeListener(listener);
}
public void populateComboBox(String value) {
if (comboBox != null) {
comboBox.setEditable(true);
comboBox.setSelectedItem(value);
comboBox.setEditable(false);
}
}
public Object updateComboBox() {
return comboBox.getSelectedItem();
}
public String getHeaderName() {
return editLabel.getText();
}
public void setHeaderName(String text) {
editLabel.setText(text);
}
}

39
designer-form/src/main/java/com/fr/design/form/parameter/FormParaDesigner.java

@ -83,7 +83,6 @@ public class FormParaDesigner extends FormDesigner implements ParameterDesignerP
private static final int SUBMIT_BUTTON_H_LOCATION = 270; private static final int SUBMIT_BUTTON_H_LOCATION = 270;
private static final int PARA_IMAGE_SHIFT_X = -4; private static final int PARA_IMAGE_SHIFT_X = -4;
private static final int FORM_AREA_PADDING_LEFT = 13; private static final int FORM_AREA_PADDING_LEFT = 13;
private int addableRegionY;
private static Image paraImage = BaseUtils.readImage("/com/fr/design/images/form/parameter.png"); private static Image paraImage = BaseUtils.readImage("/com/fr/design/images/form/parameter.png");
@ -413,30 +412,10 @@ public class FormParaDesigner extends FormDesigner implements ParameterDesignerP
if (layoutContainer == null) { if (layoutContainer == null) {
layoutContainer = new XWParameterLayout(); layoutContainer = new XWParameterLayout();
} }
refreshAddableRegion(layoutContainer);
layoutContainer.setSize(LARGE_PREFERRED_SIZE); layoutContainer.setSize(LARGE_PREFERRED_SIZE);
setRootComponent(layoutContainer); setRootComponent(layoutContainer);
} }
/**
* @param layoutContainer
* @Description: 为了不覆盖以前的组件所以要计算可以添加组件的区域
* @return:
* @Author: Henry.Wang
* @date: 2020/7/15 15:12
*/
public void refreshAddableRegion(XLayoutContainer layoutContainer) {
addableRegionY = 0;
for (int i = 0; i < layoutContainer.getComponentCount(); i++) {
Rectangle rectangle = layoutContainer.getComponent(i).getBounds();
if (addableRegionY < rectangle.y + rectangle.height) {
addableRegionY = rectangle.y + rectangle.height;
}
}
int vGap = V_COMPONENT_GAP - (int) XCreator.SMALL_PREFERRED_SIZE.getHeight();
addableRegionY = Math.max(0, addableRegionY - FIRST_V_LOCATION + (int) (XCreator.SMALL_PREFERRED_SIZE.getHeight() / 2) + vGap);
}
/** /**
* 是否是报表的参数面板 * 是否是报表的参数面板
* *
@ -604,15 +583,14 @@ public class FormParaDesigner extends FormDesigner implements ParameterDesignerP
label.setWidgetName("Label" + name); label.setWidgetName("Label" + name);
label.setWidgetValue(new WidgetValue(name + ":")); label.setWidgetValue(new WidgetValue(name + ":"));
XCreator xCreator = XCreatorUtils.createXCreator(label); XCreator xCreator = XCreatorUtils.createXCreator(label);
int x = H_COMPONENT_GAP * (currentIndex % NUM_IN_A_LINE) + FIRST_H_LOCATION; if (!(this.autoAddComponent(xCreator, H_COMPONENT_GAP * (currentIndex % NUM_IN_A_LINE)
int y = addableRegionY + FIRST_V_LOCATION + V_COMPONENT_GAP * (currentIndex / NUM_IN_A_LINE); + FIRST_H_LOCATION, FIRST_V_LOCATION + V_COMPONENT_GAP * (currentIndex / NUM_IN_A_LINE)))) {
if (!(this.autoAddComponent(xCreator, x, y))) {
return false; return false;
} }
EditorHolder editor = new EditorHolder(parameter); EditorHolder editor = new EditorHolder(parameter);
xCreator = XCreatorUtils.createXCreator(editor); xCreator = XCreatorUtils.createXCreator(editor);
x = H_COMPONENT_GAP * (currentIndex % NUM_IN_A_LINE) + SECOND_H_LOCATION; if (!(this.autoAddComponent(xCreator, H_COMPONENT_GAP * (currentIndex % NUM_IN_A_LINE)
if (!(this.autoAddComponent(xCreator, x, y))) { + SECOND_H_LOCATION, FIRST_V_LOCATION + V_COMPONENT_GAP * (currentIndex / NUM_IN_A_LINE)))) {
return false; return false;
} }
return true; return true;
@ -668,17 +646,16 @@ public class FormParaDesigner extends FormDesigner implements ParameterDesignerP
label.setWidgetValue(new WidgetValue(parameterArray[i].getName() + ":")); label.setWidgetValue(new WidgetValue(parameterArray[i].getName() + ":"));
XCreator xCreator = XCreatorUtils.createXCreator(label); XCreator xCreator = XCreatorUtils.createXCreator(label);
int x = H_COMPONENT_GAP * (currentIndex % NUM_IN_A_LINE) + FIRST_H_LOCATION; if (!(this.autoAddComponent(xCreator, H_COMPONENT_GAP * (currentIndex % NUM_IN_A_LINE)
int y = addableRegionY + FIRST_V_LOCATION + V_COMPONENT_GAP * (currentIndex / NUM_IN_A_LINE); + FIRST_H_LOCATION, FIRST_V_LOCATION + V_COMPONENT_GAP * (currentIndex / NUM_IN_A_LINE)))) {
if (!(this.autoAddComponent(xCreator, x, y))) {
break; break;
} }
// 每行显示5组 // 每行显示5组
EditorHolder editor = new EditorHolder(parameterArray[i]); EditorHolder editor = new EditorHolder(parameterArray[i]);
editor.setWidgetName(parameterArray[i].getName()); editor.setWidgetName(parameterArray[i].getName());
xCreator = XCreatorUtils.createXCreator(editor); xCreator = XCreatorUtils.createXCreator(editor);
x = H_COMPONENT_GAP * (currentIndex % NUM_IN_A_LINE) + SECOND_H_LOCATION; if (!(this.autoAddComponent(xCreator, H_COMPONENT_GAP * (currentIndex % NUM_IN_A_LINE)
if (!(this.autoAddComponent(xCreator, x, y))) { + SECOND_H_LOCATION, FIRST_V_LOCATION + V_COMPONENT_GAP * (currentIndex / NUM_IN_A_LINE)))) {
break; break;
} }
currentIndex++; currentIndex++;

10
designer-realize/src/main/java/com/fr/design/parameter/ParameterDefinitePane.java

@ -212,12 +212,13 @@ public class ParameterDefinitePane extends JPanel implements ToolBarMenuDockPlus
return parameterArray; return parameterArray;
} }
public int getToolBarHeight(){ public int getToolBarHeight() {
return TOOLBARPANEDIMHEIGHT; return TOOLBARPANEDIMHEIGHT;
} }
/** /**
* 导出菜单项用于图表设计器 * 导出菜单项用于图表设计器
*
* @return 菜单项 * @return 菜单项
*/ */
public ShortCut[] shortcut4ExportMenu() { public ShortCut[] shortcut4ExportMenu() {
@ -267,6 +268,8 @@ public class ParameterDefinitePane extends JPanel implements ToolBarMenuDockPlus
bridge.setBackground(reportParameterAttr.getBackground()); bridge.setBackground(reportParameterAttr.getBackground());
bridge.setUseParamsTemplate(reportParameterAttr.isUseParamsTemplate()); bridge.setUseParamsTemplate(reportParameterAttr.isUseParamsTemplate());
} }
currentIndex = reportParameterAttr.getCurrentIndex();
} }
@ -376,8 +379,9 @@ public class ParameterDefinitePane extends JPanel implements ToolBarMenuDockPlus
} }
//这里不用 parameterUI 的原因是考虑到没有控件的时候设置宽度有效果但不保存,只有含有控件才保存属性 //这里不用 parameterUI 的原因是考虑到没有控件的时候设置宽度有效果但不保存,只有含有控件才保存属性
paraDesignEditor.getParaTarget().setDesignSize(new Dimension(bridge.getDesignWidth(), paraDesignEditor.getParaTarget().setDesignSize(new Dimension(bridge.getDesignWidth(),
(int)paraDesignEditor.getParaTarget().getDesignSize().getHeight())); (int) paraDesignEditor.getParaTarget().getDesignSize().getHeight()));
reportParameterAttr.setParameterUI(parameterUI); reportParameterAttr.setParameterUI(parameterUI);
reportParameterAttr.setCurrentIndex(currentIndex);
return reportParameterAttr; return reportParameterAttr;
} }
@ -489,7 +493,7 @@ public class ParameterDefinitePane extends JPanel implements ToolBarMenuDockPlus
* @return 模板菜单 * @return 模板菜单
*/ */
public MenuDef[] menus4Target() { public MenuDef[] menus4Target() {
MenuDef tplMenu = new MenuDef(KeySetUtils.TEMPLATE.getMenuKeySetName(),KeySetUtils.TEMPLATE.getMnemonic()); MenuDef tplMenu = new MenuDef(KeySetUtils.TEMPLATE.getMenuKeySetName(), KeySetUtils.TEMPLATE.getMnemonic());
if (!DesignerMode.isAuthorityEditing()) { if (!DesignerMode.isAuthorityEditing()) {
tplMenu.addShortCut(new NameSeparator(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Utils_WorkBook"))); tplMenu.addShortCut(new NameSeparator(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Utils_WorkBook")));
tplMenu.addShortCut(new ReportParameterAction(workBook)); tplMenu.addShortCut(new ReportParameterAction(workBook));

Loading…
Cancel
Save