svnadmin
8 years ago
530 changed files with 45226 additions and 0 deletions
@ -1 +1,529 @@ |
|||||||
* text=auto !eol |
* text=auto !eol |
||||||
|
designer_chart/.classpath -text |
||||||
|
designer_chart/.project -text |
||||||
|
designer_chart/designer_chart.iml -text |
||||||
|
designer_chart/src/com/fr/design/ChartEnvManager.java -text |
||||||
|
designer_chart/src/com/fr/design/ChartTypeInterfaceManager.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/ChartAxisFactory.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/ChartCommonWizardPane.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/ChartComponentPane.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/ChartControlPane.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/ChartDialog.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/ChartPlotFactory.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/ChartSwingUtils.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/ChartTypePane.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/ChartWizardPane.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/FactoryObject.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/axis/AxisStyleObject.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/axis/AxisStylePane.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/axis/BinaryChartStyleAxisPane.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/axis/ChartAlertLinePane.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/axis/ChartAlertValueInTopBottomPane.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/axis/ChartAlertValuePane.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/axis/ChartStyleAxisPane.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/axis/CustomChartStyleAxisPane.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/axis/GanntChartStyleAxisPane.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/axis/MinMaxValuePane.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/axis/RadarChartStyleAxisPane.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/axis/TernaryChartStyleAxisPane.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/axis/ValueChartStyleAxisPane.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/axis/XYChartStyleAxisPane.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/comp/BorderAttriPane.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/demo/GlyphDemo.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/fun/IndependentChartUIProvider.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/fun/impl/AbstractIndependentChartUI.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/fun/impl/AbstractIndependentChartUIWithAPILevel.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/gui/ActiveGlyphFactory.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/gui/ChartComponent.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/gui/ChartWidgetOption.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/gui/active/ActiveGlyph.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/gui/active/AlertValueActiveGlyph.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/gui/active/AxisActiveGlyph.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/gui/active/CategoryAxisActiveGlyph.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/gui/active/ChartActiveGlyph.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/gui/active/DataLabelActiveGlyph.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/gui/active/DataSeriesActiveGlyph.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/gui/active/DataSheetActiveGlyph.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/gui/active/DateAxisActiveGlyph.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/gui/active/LegendActiveGlyph.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/gui/active/PlotActiveGlyph.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/gui/active/RadarAxisActiveGlyph.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/gui/active/RangeAxisActiveGlyph.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/gui/active/TextActiveGlyph.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/gui/active/TrendLineActiveGlyph.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/gui/active/ValueAxisActiveGlyph.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/gui/active/action/ChartComponentAction.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/gui/active/action/SetAnalysisLineStyleAction.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/gui/active/action/SetAxisStyleAction.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/gui/active/action/SetChartStyleAciton.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/gui/active/action/SetDataLabelStyleAction.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/gui/active/action/SetDataSeriesAttrAction.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/gui/active/action/SetDataSheetAction.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/gui/active/action/SetLegendStyleAction.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/gui/active/action/SetPlotStyleAction.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/gui/active/action/SetTitleStyleAction.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/javascript/ChartEmailPane.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/report/GisMapDataPane.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/report/GisMapDataPane4Chart.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/report/GisMapReportDataContentPane.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/report/GisMapTableDataContentPane.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/report/GisMapTableDataContentPane4Chart.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/report/MapCubeDataPane.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/report/MapCubeDataPane4Chart.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/report/MapCubeLayerPane.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/report/MapCubeSetDataPane.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/report/MapDataPane.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/report/MapDataPane4Chart.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/report/MapMoreCubeLayerPane.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/report/MapMoreCubeLayerPane4Chart.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/report/MapMoreReportIndexPane.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/report/MapMoreTableIndexPane.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/report/MapReportCubeDataPane.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/report/MapReportDataSinglePane.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/report/MapReportEditor.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/report/MapReportRenderer.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/report/MapSinglePane.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/report/MapSinglePane4Chart.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/report/MapTableCubeDataPane.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/report/MapTableCubeDataPane4Chart.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/report/MapTableDataSinglePane.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/report/MapTableDataSinglePane4Chart.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/series/PlotSeries/AbstrctMapAttrEditPane.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/series/PlotSeries/MapCustomPane.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/series/PlotSeries/MapDefiAreaNamePane.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/series/PlotSeries/MapGroupExtensionPane.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/series/PlotSeries/MapImageEditPane.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/series/PlotSeries/MapSelectShape.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/series/PlotSeries/UIGroupExtensionPane.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/series/PlotStyle/ChartSelectDemoPane.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/series/SeriesCondition/BubblePlotChartConditionPane.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/series/SeriesCondition/ChartConditionPane.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/series/SeriesCondition/ChartConditionPaneFactory.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/series/SeriesCondition/ConditionTrendLinePane.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/series/SeriesCondition/DataLabelContentsPane.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/series/SeriesCondition/DataLabelStylePane.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/series/SeriesCondition/DataSeriesAttrCustomPane.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/series/SeriesCondition/DataSeriesAttrPane.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/series/SeriesCondition/DataSeriesConditionPane.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/series/SeriesCondition/DataSeriesCustomConditionPane.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/series/SeriesCondition/GanttPlotChartConditionPane.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/series/SeriesCondition/LabelAlphaPane.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/series/SeriesCondition/LabelAxisPositionPane.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/series/SeriesCondition/LabelBackgroundPane.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/series/SeriesCondition/LabelBorderAttrPane.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/series/SeriesCondition/LabelBorderPane.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/series/SeriesCondition/LabelColorPane.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/series/SeriesCondition/LabelContentsPane.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/series/SeriesCondition/LabelLineStylePane.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/series/SeriesCondition/LineMarkerTypePane.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/series/SeriesCondition/MapPlotChartConditionPane.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/series/SeriesCondition/PiePlotChartConditionPane.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/series/SeriesCondition/TooltipContentsPane.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/series/SeriesCondition/TrendLineControlPane.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/series/SeriesCondition/TrendLinePane.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/series/SeriesCondition/XYPlotChartConditionPane.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/series/SeriesCondition/dlp/AreaDataLabelPane.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/series/SeriesCondition/dlp/Bar2DDataLabelPane.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/series/SeriesCondition/dlp/Bar3DDataLabelPane.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/series/SeriesCondition/dlp/BubbleDataLabelPane.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/series/SeriesCondition/dlp/DataLabelPane.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/series/SeriesCondition/dlp/GanttDataLabelPane.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/series/SeriesCondition/dlp/LineDataLabelPane.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/series/SeriesCondition/dlp/MapDataLabelPane.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/series/SeriesCondition/dlp/MeterDataLabelPane.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/series/SeriesCondition/dlp/PieDataLabelPane.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/series/SeriesCondition/dlp/RadarDataLabelPane.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/series/SeriesCondition/dlp/RangeDataLabelPane.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/series/SeriesCondition/dlp/StockDataLabelPane.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/series/SeriesCondition/dlp/XYDataLabelPane.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/series/SeriesCondition/impl/Area3DPlotDataSeriesConditionPane.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/series/SeriesCondition/impl/AreaPlotDataSeriesCondtionPane.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/series/SeriesCondition/impl/Bar2DTrendLineDSConditionPane.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/series/SeriesCondition/impl/Bar3DPlotDataSeriesConditionPane.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/series/SeriesCondition/impl/BarPlotDataSeriesConditionPane.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/series/SeriesCondition/impl/BubblePlotDataSeriesConditionPane.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/series/SeriesCondition/impl/ChartHyperPopAttrPane.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/series/SeriesCondition/impl/ChartHyperPoplinkPane.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/series/SeriesCondition/impl/ChartHyperRelateCellLinkPane.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/series/SeriesCondition/impl/ChartHyperRelateFloatLinkPane.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/series/SeriesCondition/impl/CustomPlot4AreaConditionPane.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/series/SeriesCondition/impl/CustomPlot4BarNoTrendLineConditionPane.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/series/SeriesCondition/impl/CustomPlot4BarTrendLineConditionPane.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/series/SeriesCondition/impl/CustomPlot4LineConditionPane.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/series/SeriesCondition/impl/CustomPlotDataSeriesConditionPane.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/series/SeriesCondition/impl/DataSeriesConditionPaneFactory.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/series/SeriesCondition/impl/Donut2DPlotDataSeriesConditionPane.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/series/SeriesCondition/impl/FormHyperlinkNorthPane.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/series/SeriesCondition/impl/FormHyperlinkPane.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/series/SeriesCondition/impl/GanttPlotDataSeriesConditionPane.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/series/SeriesCondition/impl/LinePlotDataSeriesConditionPane.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/series/SeriesCondition/impl/MapPlotDataSeriesConditionPane.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/series/SeriesCondition/impl/MeterPlotDataSeriesConditionPane.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/series/SeriesCondition/impl/Pie3DPlotDataSeriesConditionPane.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/series/SeriesCondition/impl/PiePlotDataSeriesConditionPane.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/series/SeriesCondition/impl/RadarPlotDataSeriesConditionPane.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/series/SeriesCondition/impl/StockPlotDataSeriesConditionPane.java -text |
||||||
|
designer_chart/src/com/fr/design/chart/series/SeriesCondition/impl/XYScatterPlotDataSeriesConditionPane.java -text |
||||||
|
designer_chart/src/com/fr/design/chartinterface/AreaIndependentChartInterface.java -text |
||||||
|
designer_chart/src/com/fr/design/chartinterface/BarIndependentChartInterface.java -text |
||||||
|
designer_chart/src/com/fr/design/chartinterface/BubbleIndependentChartInterface.java -text |
||||||
|
designer_chart/src/com/fr/design/chartinterface/ColumnIndependentChartInterface.java -text |
||||||
|
designer_chart/src/com/fr/design/chartinterface/CustomIndependentChartInterface.java -text |
||||||
|
designer_chart/src/com/fr/design/chartinterface/DonutIndependentChartInterface.java -text |
||||||
|
designer_chart/src/com/fr/design/chartinterface/FunnelIndependentChartInterface.java -text |
||||||
|
designer_chart/src/com/fr/design/chartinterface/GanttIndependentChartInterface.java -text |
||||||
|
designer_chart/src/com/fr/design/chartinterface/GisMapIndependentChartInterface.java -text |
||||||
|
designer_chart/src/com/fr/design/chartinterface/LineIndependentChartInterface.java -text |
||||||
|
designer_chart/src/com/fr/design/chartinterface/MapIndependentChartInterface.java -text |
||||||
|
designer_chart/src/com/fr/design/chartinterface/MeterIndependentChartInterface.java -text |
||||||
|
designer_chart/src/com/fr/design/chartinterface/PieIndependentChartInterface.java -text |
||||||
|
designer_chart/src/com/fr/design/chartinterface/RadarIndependentChartInterface.java -text |
||||||
|
designer_chart/src/com/fr/design/chartinterface/RangeIndependentChartInterface.java -text |
||||||
|
designer_chart/src/com/fr/design/chartinterface/StockIndependentChartInterface.java -text |
||||||
|
designer_chart/src/com/fr/design/chartinterface/XYScatterIndependentChartInterface.java -text |
||||||
|
designer_chart/src/com/fr/design/gui/xcombox/ComboBoxUseEditor.java -text |
||||||
|
designer_chart/src/com/fr/design/gui/xcombox/MarkerComboBox.java -text |
||||||
|
designer_chart/src/com/fr/design/images/add.png -text |
||||||
|
designer_chart/src/com/fr/design/images/chart.png -text |
||||||
|
designer_chart/src/com/fr/design/images/copyjs.png -text |
||||||
|
designer_chart/src/com/fr/design/images/del.png -text |
||||||
|
designer_chart/src/com/fr/design/images/exportimg.png -text |
||||||
|
designer_chart/src/com/fr/design/images/newchart_normal.png -text |
||||||
|
designer_chart/src/com/fr/design/images/newchart_over.png -text |
||||||
|
designer_chart/src/com/fr/design/images/newchart_press.png -text |
||||||
|
designer_chart/src/com/fr/design/images/splash4Chart.png -text |
||||||
|
designer_chart/src/com/fr/design/images/toolbar/area/0_gray.png -text |
||||||
|
designer_chart/src/com/fr/design/images/toolbar/area/0_normal.png -text |
||||||
|
designer_chart/src/com/fr/design/images/toolbar/area/0_over.png -text |
||||||
|
designer_chart/src/com/fr/design/images/toolbar/area/1_gray.png -text |
||||||
|
designer_chart/src/com/fr/design/images/toolbar/area/1_normal.png -text |
||||||
|
designer_chart/src/com/fr/design/images/toolbar/area/1_over.png -text |
||||||
|
designer_chart/src/com/fr/design/images/toolbar/area/2_gray.png -text |
||||||
|
designer_chart/src/com/fr/design/images/toolbar/area/2_normal.png -text |
||||||
|
designer_chart/src/com/fr/design/images/toolbar/area/2_over.png -text |
||||||
|
designer_chart/src/com/fr/design/images/toolbar/area/3_gray.png -text |
||||||
|
designer_chart/src/com/fr/design/images/toolbar/area/3_normal.png -text |
||||||
|
designer_chart/src/com/fr/design/images/toolbar/area/3_over.png -text |
||||||
|
designer_chart/src/com/fr/design/images/toolbar/bar/0_gray.png -text |
||||||
|
designer_chart/src/com/fr/design/images/toolbar/bar/0_normal.png -text |
||||||
|
designer_chart/src/com/fr/design/images/toolbar/bar/0_over.png -text |
||||||
|
designer_chart/src/com/fr/design/images/toolbar/bar/1_gray.png -text |
||||||
|
designer_chart/src/com/fr/design/images/toolbar/bar/1_normal.png -text |
||||||
|
designer_chart/src/com/fr/design/images/toolbar/bar/1_over.png -text |
||||||
|
designer_chart/src/com/fr/design/images/toolbar/bar/2_gray.png -text |
||||||
|
designer_chart/src/com/fr/design/images/toolbar/bar/2_normal.png -text |
||||||
|
designer_chart/src/com/fr/design/images/toolbar/bar/2_over.png -text |
||||||
|
designer_chart/src/com/fr/design/images/toolbar/bar/3_gary.png -text |
||||||
|
designer_chart/src/com/fr/design/images/toolbar/bar/3_gray.png -text |
||||||
|
designer_chart/src/com/fr/design/images/toolbar/bar/3_normal.png -text |
||||||
|
designer_chart/src/com/fr/design/images/toolbar/bar/3_over.png -text |
||||||
|
designer_chart/src/com/fr/design/images/toolbar/bar/4_gray.png -text |
||||||
|
designer_chart/src/com/fr/design/images/toolbar/bar/4_normal.png -text |
||||||
|
designer_chart/src/com/fr/design/images/toolbar/bar/4_over.png -text |
||||||
|
designer_chart/src/com/fr/design/images/toolbar/bar/5_gray.png -text |
||||||
|
designer_chart/src/com/fr/design/images/toolbar/bar/5_normal.png -text |
||||||
|
designer_chart/src/com/fr/design/images/toolbar/bar/5_over.png -text |
||||||
|
designer_chart/src/com/fr/design/images/toolbar/bar/6_gray.png -text |
||||||
|
designer_chart/src/com/fr/design/images/toolbar/bar/6_normal.png -text |
||||||
|
designer_chart/src/com/fr/design/images/toolbar/bar/6_over.png -text |
||||||
|
designer_chart/src/com/fr/design/images/toolbar/border.png -text |
||||||
|
designer_chart/src/com/fr/design/images/toolbar/bubble/0_gray.png -text |
||||||
|
designer_chart/src/com/fr/design/images/toolbar/bubble/0_normal.png -text |
||||||
|
designer_chart/src/com/fr/design/images/toolbar/bubble/0_over.png -text |
||||||
|
designer_chart/src/com/fr/design/images/toolbar/column/0_gray.png -text |
||||||
|
designer_chart/src/com/fr/design/images/toolbar/column/0_normal.png -text |
||||||
|
designer_chart/src/com/fr/design/images/toolbar/column/0_over.png -text |
||||||
|
designer_chart/src/com/fr/design/images/toolbar/column/1_gray.png -text |
||||||
|
designer_chart/src/com/fr/design/images/toolbar/column/1_normal.png -text |
||||||
|
designer_chart/src/com/fr/design/images/toolbar/column/1_over.png -text |
||||||
|
designer_chart/src/com/fr/design/images/toolbar/column/2_gray.png -text |
||||||
|
designer_chart/src/com/fr/design/images/toolbar/column/2_normal.png -text |
||||||
|
designer_chart/src/com/fr/design/images/toolbar/column/2_over.png -text |
||||||
|
designer_chart/src/com/fr/design/images/toolbar/column/3_gray.png -text |
||||||
|
designer_chart/src/com/fr/design/images/toolbar/column/3_normal.png -text |
||||||
|
designer_chart/src/com/fr/design/images/toolbar/column/3_over.png -text |
||||||
|
designer_chart/src/com/fr/design/images/toolbar/column/4_gray.png -text |
||||||
|
designer_chart/src/com/fr/design/images/toolbar/column/4_normal.png -text |
||||||
|
designer_chart/src/com/fr/design/images/toolbar/column/4_over.png -text |
||||||
|
designer_chart/src/com/fr/design/images/toolbar/column/5_gray.png -text |
||||||
|
designer_chart/src/com/fr/design/images/toolbar/column/5_normal.png -text |
||||||
|
designer_chart/src/com/fr/design/images/toolbar/column/5_over.png -text |
||||||
|
designer_chart/src/com/fr/design/images/toolbar/column/6_gray.png -text |
||||||
|
designer_chart/src/com/fr/design/images/toolbar/column/6_normal.png -text |
||||||
|
designer_chart/src/com/fr/design/images/toolbar/column/6_over.png -text |
||||||
|
designer_chart/src/com/fr/design/images/toolbar/custom/0_gray.png -text |
||||||
|
designer_chart/src/com/fr/design/images/toolbar/custom/0_normal.png -text |
||||||
|
designer_chart/src/com/fr/design/images/toolbar/custom/0_over.png -text |
||||||
|
designer_chart/src/com/fr/design/images/toolbar/donut/0_gray.png -text |
||||||
|
designer_chart/src/com/fr/design/images/toolbar/donut/0_normal.png -text |
||||||
|
designer_chart/src/com/fr/design/images/toolbar/donut/0_over.png -text |
||||||
|
designer_chart/src/com/fr/design/images/toolbar/donut/1_gray.png -text |
||||||
|
designer_chart/src/com/fr/design/images/toolbar/donut/1_normal.png -text |
||||||
|
designer_chart/src/com/fr/design/images/toolbar/donut/1_over.png -text |
||||||
|
designer_chart/src/com/fr/design/images/toolbar/funnel/0_gray.png -text |
||||||
|
designer_chart/src/com/fr/design/images/toolbar/funnel/0_normal.png -text |
||||||
|
designer_chart/src/com/fr/design/images/toolbar/funnel/0_over.png -text |
||||||
|
designer_chart/src/com/fr/design/images/toolbar/gantt/0_gray.png -text |
||||||
|
designer_chart/src/com/fr/design/images/toolbar/gantt/0_normal.png -text |
||||||
|
designer_chart/src/com/fr/design/images/toolbar/gantt/0_over.png -text |
||||||
|
designer_chart/src/com/fr/design/images/toolbar/gis/0_gray.png -text |
||||||
|
designer_chart/src/com/fr/design/images/toolbar/gis/0_normal.png -text |
||||||
|
designer_chart/src/com/fr/design/images/toolbar/gis/0_over.png -text |
||||||
|
designer_chart/src/com/fr/design/images/toolbar/gis/1_gray.png -text |
||||||
|
designer_chart/src/com/fr/design/images/toolbar/gis/1_normal.png -text |
||||||
|
designer_chart/src/com/fr/design/images/toolbar/gis/1_over.png -text |
||||||
|
designer_chart/src/com/fr/design/images/toolbar/line/0_gray.png -text |
||||||
|
designer_chart/src/com/fr/design/images/toolbar/line/0_normal.png -text |
||||||
|
designer_chart/src/com/fr/design/images/toolbar/line/0_over.png -text |
||||||
|
designer_chart/src/com/fr/design/images/toolbar/map/0_gray.png -text |
||||||
|
designer_chart/src/com/fr/design/images/toolbar/map/0_normal.png -text |
||||||
|
designer_chart/src/com/fr/design/images/toolbar/map/0_over.png -text |
||||||
|
designer_chart/src/com/fr/design/images/toolbar/meter/0_gray.png -text |
||||||
|
designer_chart/src/com/fr/design/images/toolbar/meter/0_normal.png -text |
||||||
|
designer_chart/src/com/fr/design/images/toolbar/meter/0_over.png -text |
||||||
|
designer_chart/src/com/fr/design/images/toolbar/meter/1_gray.png -text |
||||||
|
designer_chart/src/com/fr/design/images/toolbar/meter/1_normal.png -text |
||||||
|
designer_chart/src/com/fr/design/images/toolbar/meter/1_over.png -text |
||||||
|
designer_chart/src/com/fr/design/images/toolbar/meter/2_gray.png -text |
||||||
|
designer_chart/src/com/fr/design/images/toolbar/meter/2_normal.png -text |
||||||
|
designer_chart/src/com/fr/design/images/toolbar/meter/2_over.png -text |
||||||
|
designer_chart/src/com/fr/design/images/toolbar/pie/0_gray.png -text |
||||||
|
designer_chart/src/com/fr/design/images/toolbar/pie/0_normal.png -text |
||||||
|
designer_chart/src/com/fr/design/images/toolbar/pie/0_over.png -text |
||||||
|
designer_chart/src/com/fr/design/images/toolbar/pie/1_gray.png -text |
||||||
|
designer_chart/src/com/fr/design/images/toolbar/pie/1_normal.png -text |
||||||
|
designer_chart/src/com/fr/design/images/toolbar/pie/1_over.png -text |
||||||
|
designer_chart/src/com/fr/design/images/toolbar/radar/0_gray.png -text |
||||||
|
designer_chart/src/com/fr/design/images/toolbar/radar/0_normal.png -text |
||||||
|
designer_chart/src/com/fr/design/images/toolbar/radar/0_over.png -text |
||||||
|
designer_chart/src/com/fr/design/images/toolbar/range/0_gray.png -text |
||||||
|
designer_chart/src/com/fr/design/images/toolbar/range/0_normal.png -text |
||||||
|
designer_chart/src/com/fr/design/images/toolbar/range/0_over.png -text |
||||||
|
designer_chart/src/com/fr/design/images/toolbar/stock/0_gray.png -text |
||||||
|
designer_chart/src/com/fr/design/images/toolbar/stock/0_normal.png -text |
||||||
|
designer_chart/src/com/fr/design/images/toolbar/stock/0_over.png -text |
||||||
|
designer_chart/src/com/fr/design/images/toolbar/xyscatter/0_gray.png -text |
||||||
|
designer_chart/src/com/fr/design/images/toolbar/xyscatter/0_normal.png -text |
||||||
|
designer_chart/src/com/fr/design/images/toolbar/xyscatter/0_over.png -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/AbstractChartDataPane4Chart.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/AbstractMapPlotPane4ToolBar.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/ChartAndWidgetPropertyPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/ChartArea.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/ChartDesigner.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/ChartDesignerPropertyPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/ChartDesignerUI.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/ChartPropertyPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/ChartToolBarPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/ChartUndoState.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/DesignerFrame4Chart.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/GisMapPlotPane4ToolBar.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/JChart.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/MapArrayPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/MapEditPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/MapPlotPane4ToolBar.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/MiddleChartPropertyPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/PlotToolBarFactory.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/TargetComponentContainer.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/ToolTip4Chart.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/actions/AbstractExportAction4JChart.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/actions/ChartDownLoadWorker.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/actions/ChartFeedBackAciton.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/actions/ChartUpdateAction.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/actions/ChartWebAction.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/actions/ExcelExportAction4Chart.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/actions/JChartAction.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/actions/NewChartAction.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/actions/OpenChartAction.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/actions/PDFExportAction4Chart.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/actions/PNGExportAction4Chart.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/actions/UpdateOnlineAction.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/actions/UpdateVersion.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/AbstractChartAttrPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/AttributeChange.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/ChartDesignEditPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/ChartEditPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/ChartHyperEditPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/PaneTitleConstants.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/UpdateOnLinePane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/ChartDataPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/ChartDesignerDataPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/ChartDesignerOtherPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/ChartOtherPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/ChartStylePane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/ChartTypeButtonPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/ChartTypePane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/StylePane4Chart.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/UIEditLabel.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/data/CalculateComboBox.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/data/ChartDataFilterPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/data/ChartDesignDataLoadPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/data/DataContentsPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/data/DatabaseTableDataPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/data/EmbbeddDataPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/data/ExcelDataPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/data/ImportSetChartDataPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/data/JSONDataPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/data/NormalChartDataPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/data/PresentComboBox.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/data/ReportDataPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/data/TableDataPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/data/report/AbstractReportDataContentPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/data/report/BubblePlotReportDataContentPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/data/report/CategoryPlotMoreCateReportDataContentPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/data/report/CategoryPlotReportDataContentPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/data/report/GanttPlotReportDataContentPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/data/report/MeterPlotReportDataContentPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/data/report/PiePlotReportDataContentPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/data/report/StockPlotReportDataContentPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/data/report/XYScatterPlotReportDataContentPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/data/table/AbstractTableDataContentPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/data/table/BubblePlotTableDataContentPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/data/table/CategoryPlotMoreCateTableDataContentPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/data/table/CategoryPlotTableDataContentPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/data/table/Factory4TableDataContentPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/data/table/GanttPlotTableDataContentPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/data/table/MeterPlotTableDataContentPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/data/table/PiePlotTableDataContentPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/data/table/SeriesNameUseFieldNamePane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/data/table/SeriesNameUseFieldValuePane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/data/table/SeriesTypeUseComboxPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/data/table/StockPlotTableDataContentPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/data/table/XYScatterPlotTableDataContentPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/other/ChartConditionAttrPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/other/ChartDesignerConditionAttrPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/other/ChartDesignerInteractivePane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/other/ChartInteractivePane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/other/ChartSwitchPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/other/TimeSwitchPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/style/AbstractChartTabPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/style/ChartAccColorPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/style/ChartAxisLabelPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/style/ChartAxisLineStylePane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/style/ChartAxisTitleNoFormulaPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/style/ChartAxisTitlePane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/style/ChartAxisValueTypePane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/style/ChartBackgroundNoImagePane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/style/ChartBackgroundPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/style/ChartBeautyPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/style/ChartBorderPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/style/ChartDataPointLabel4GisPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/style/ChartDataPointLabel4MapPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/style/ChartDatapointLabelPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/style/ChartFillStylePane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/style/ChartPreFillStylePane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/style/ChartTextAttrNoColorPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/style/ChartTextAttrNoFontSizePane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/style/ChartTextAttrPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/style/DateAxisValuePane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/style/ThirdTabPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/style/analysisline/ChartAnalysisLinePane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/style/area/ChartAreaPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/style/area/ChartAxisAreaPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/style/area/ChartPlotAreaPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/style/area/ChartWholeAreaPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/style/area/DefaultAxisAreaPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/style/area/Plot3DAxisAreaPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/style/area/RadarAxisAreaPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/style/axis/ChartAxisNoFormulaPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/style/axis/ChartAxisPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/style/axis/ChartAxisUsePane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/style/axis/ChartCategoryNoFormulaPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/style/axis/ChartCategoryPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/style/axis/ChartPercentValueNoFormulaPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/style/axis/ChartPercentValuePane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/style/axis/ChartRadarPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/style/axis/ChartSecondValueNoFormulaPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/style/axis/ChartSecondValuePane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/style/axis/ChartValueNoFormulaPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/style/axis/ChartValuePane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/style/datalabel/ChartDataLabelPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/style/datalabel/ChartLabelFontPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/style/datasheet/ChartDatasheetPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/style/legend/AutoSelectedPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/style/legend/ChartLegendPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/style/series/AbstractPlotSeriesPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/style/series/Area3DSeriesPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/style/series/AreaSeriesPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/style/series/Bar2DSeriesPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/style/series/Bar3DSeriesPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/style/series/BubbleSeriesPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/style/series/ChartSeriesPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/style/series/ColorPickerPaneNumFiled.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/style/series/ColorPickerPaneWithFormula.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/style/series/CombinedBar2DSeriesPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/style/series/CombinedBubbleSeriesPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/style/series/CombinedPie2DSeriesPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/style/series/CustomDefaultSeriesPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/style/series/CustomSeriesPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/style/series/CustomTypeConditionSeriesPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/style/series/Donut2DSeriesPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/style/series/FunnelSeriesPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/style/series/LineSeriesPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/style/series/MapColorPickerPaneWithFormula.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/style/series/MapSeriesPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/style/series/MapSeriesPane4ChartDesigner.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/style/series/MeterSeriesPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/style/series/MeterSeriesPane4ChartDesigner.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/style/series/Pie2DSeriesPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/style/series/Pie3DSeriesPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/style/series/RadarSeriesPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/style/series/RangeSeriesPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/style/series/SeriesPane4ChartDesigner.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/style/series/StockSeriesPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/style/series/UIColorPickerPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/style/series/UIColorPickerPane4Map.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/style/series/XYScatterSeriesPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/style/title/ChartTitlePane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/style/title/ChartTitlePaneNoFormula.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/type/AbstractBarPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/type/AbstractChartTypePane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/type/AreaPlotPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/type/AreaPlotPane4ToolBar.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/type/BarPlotPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/type/BarPlotPane4ToolBar.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/type/BubblePlotPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/type/BubblePlotPane4ToolBar.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/type/ChartDesignerImagePane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/type/ChartImagePane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/type/ChartTabPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/type/ColumnPlotPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/type/ColumnPlotPane4ToolBar.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/type/CustomPlotPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/type/CustomPlotPane4ToolBar.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/type/DonutPlotPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/type/DonutPlotPane4ToolBar.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/type/FunnelPlotPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/type/GanttPlotPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/type/GanttPlotPane4ToolBar.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/type/GisMapPlotPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/type/LinePlotPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/type/LinePlotPane4ToolBar.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/type/MapPlotPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/type/MeterPlotPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/type/MeterPlotPane4ToolBar.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/type/PiePlotPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/type/PiePlotPane4ToolBar.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/type/PlotPane4ToolBar.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/type/RadarPlotPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/type/RadarPlotPane4ToolBar.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/type/RangePlotPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/type/RangePlotPane4ToolBar.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/type/StockPlotPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/type/StockPlotPane4ToolBar.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/type/UserDefinedChartTypePane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/type/XYSCatterPlotPane4ToolBar.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/chart/gui/type/XYScatterPlotPane.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/exporter/ExcelExporter4Chart.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/exporter/Exporter4Chart.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/exporter/ImageExporter4Chart.java -text |
||||||
|
designer_chart/src/com/fr/design/mainframe/exporter/PdfExporter4Chart.java -text |
||||||
|
designer_chart/src/com/fr/design/module/ChartDesignerModule.java -text |
||||||
|
designer_chart/src/com/fr/design/module/ChartHyperlinkGroup.java -text |
||||||
|
designer_chart/src/com/fr/design/module/ChartPreStyleAction.java -text |
||||||
|
designer_chart/src/com/fr/design/module/ChartPreStyleManagerPane.java -text |
||||||
|
designer_chart/src/com/fr/design/module/ChartPreStylePane.java -text |
||||||
|
designer_chart/src/com/fr/design/module/ChartStartModule.java -text |
||||||
|
designer_chart/src/com/fr/design/module/FormHyperlinkGroup.java -text |
||||||
|
designer_chart/src/com/fr/file/FILEChooserPane4Chart.java -text |
||||||
|
designer_chart/src/com/fr/start/ChartSplashPane.java -text |
||||||
|
designer_chart/src/com/fr/start/Designer4Chart.java -text |
||||||
|
@ -0,0 +1,20 @@ |
|||||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||||
|
<classpath> |
||||||
|
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/jdk1.6u35"/> |
||||||
|
<classpathentry kind="src" path="src"/> |
||||||
|
<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/lib"/> |
||||||
|
<classpathentry combineaccessrules="false" exported="true" kind="src" path="/base"/> |
||||||
|
<classpathentry combineaccessrules="false" exported="true" kind="src" path="/designer_base"/> |
||||||
|
<classpathentry combineaccessrules="false" kind="src" path="/base-stable"/> |
||||||
|
<classpathentry combineaccessrules="false" kind="src" path="/base-basic"/> |
||||||
|
<classpathentry combineaccessrules="false" kind="src" path="/base-calculate"/> |
||||||
|
<classpathentry combineaccessrules="false" kind="src" path="/chart-base"/> |
||||||
|
<classpathentry combineaccessrules="false" kind="src" path="/chart-chartattr"/> |
||||||
|
<classpathentry combineaccessrules="false" kind="src" path="/chart-chartglyph"/> |
||||||
|
<classpathentry combineaccessrules="false" kind="src" path="/chart-web"/> |
||||||
|
<classpathentry combineaccessrules="false" kind="src" path="/chart-chartdata"/> |
||||||
|
<classpathentry kind="lib" path="/lib/3rd.jar" sourcepath="/lookandfeel"/> |
||||||
|
<classpathentry combineaccessrules="false" kind="src" path="/base-data"/> |
||||||
|
<classpathentry kind="lib" path="/lib/poi2007_fat.jar"/> |
||||||
|
<classpathentry kind="output" path="bin"/> |
||||||
|
</classpath> |
@ -0,0 +1 @@ |
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>designer_chart</name>
<comment/>
<projects/>
<buildSpec>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments/>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.jdt.core.javanature</nature>
</natures>
</projectDescription> |
@ -0,0 +1,25 @@ |
|||||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||||
|
<module type="JAVA_MODULE" version="4"> |
||||||
|
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_7" inherit-compiler-output="false"> |
||||||
|
<output url="file://$MODULE_DIR$/../../env/WebReport/WEB-INF/classes" /> |
||||||
|
<content url="file://$MODULE_DIR$"> |
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" /> |
||||||
|
</content> |
||||||
|
<orderEntry type="jdk" jdkName="jdk1.8" jdkType="JavaSDK" /> |
||||||
|
<orderEntry type="sourceFolder" forTests="false" /> |
||||||
|
<orderEntry type="module" module-name="base" /> |
||||||
|
<orderEntry type="module" module-name="base-basic" /> |
||||||
|
<orderEntry type="module" module-name="base-calculate" /> |
||||||
|
<orderEntry type="module" module-name="base-data" /> |
||||||
|
<orderEntry type="module" module-name="base-file" /> |
||||||
|
<orderEntry type="module" module-name="base-performance" /> |
||||||
|
<orderEntry type="module" module-name="base-stable" /> |
||||||
|
<orderEntry type="module" module-name="chart-base" /> |
||||||
|
<orderEntry type="module" module-name="chart-chartattr" /> |
||||||
|
<orderEntry type="module" module-name="chart-chartdata" /> |
||||||
|
<orderEntry type="module" module-name="chart-chartglyph" /> |
||||||
|
<orderEntry type="module" module-name="chart-web" /> |
||||||
|
<orderEntry type="module" module-name="designer_base" /> |
||||||
|
<orderEntry type="library" name="lib" level="project" /> |
||||||
|
</component> |
||||||
|
</module> |
@ -0,0 +1,188 @@ |
|||||||
|
package com.fr.design; |
||||||
|
|
||||||
|
import com.fr.base.FRContext; |
||||||
|
import com.fr.base.Utils; |
||||||
|
import com.fr.general.ComparatorUtils; |
||||||
|
import com.fr.general.DateUtils; |
||||||
|
import com.fr.general.IOUtils; |
||||||
|
import com.fr.stable.ProductConstants; |
||||||
|
import com.fr.stable.StableUtils; |
||||||
|
import com.fr.stable.StringUtils; |
||||||
|
import com.fr.stable.project.ProjectConstants; |
||||||
|
import com.fr.stable.xml.*; |
||||||
|
|
||||||
|
import java.io.*; |
||||||
|
import java.util.Date; |
||||||
|
|
||||||
|
/** |
||||||
|
* Created by IntelliJ IDEA. |
||||||
|
* Author : daisy |
||||||
|
* Version: 7.1.1 |
||||||
|
*/ |
||||||
|
public class ChartEnvManager implements XMLReadable, XMLWriter { |
||||||
|
public static final String ACTIVE_KEY = "RXWY-A25421-K58F47757-7373"; |
||||||
|
private static final int ONE_MONTH_SECOND = 30*24*60*60;//30天,以秒为单位
|
||||||
|
private static final int MS =1000; |
||||||
|
|
||||||
|
boolean isPushUpdateAuto = true; //是否自动推送更新
|
||||||
|
|
||||||
|
private String activationKey = null; |
||||||
|
|
||||||
|
private static ChartEnvManager chartEnvManager; |
||||||
|
|
||||||
|
private Date lastCheckDate; |
||||||
|
|
||||||
|
private long checkTimeSpan =ONE_MONTH_SECOND; |
||||||
|
|
||||||
|
/** |
||||||
|
* DesignerEnvManager. |
||||||
|
*/ |
||||||
|
public static ChartEnvManager getEnvManager() { |
||||||
|
if(chartEnvManager == null){ |
||||||
|
chartEnvManager = new ChartEnvManager(); |
||||||
|
try { |
||||||
|
XMLTools.readFileXML(chartEnvManager, chartEnvManager.getDesignerEnvFile()); |
||||||
|
}catch (Exception exp){ |
||||||
|
FRContext.getLogger().error(exp.getMessage(), exp); |
||||||
|
} |
||||||
|
} |
||||||
|
return chartEnvManager; |
||||||
|
} |
||||||
|
|
||||||
|
private static File envFile = new File(ProductConstants.getEnvHome() + File.separator + ProductConstants.APP_NAME + "ChartEnv.xml"); |
||||||
|
|
||||||
|
private File getEnvFile() { |
||||||
|
return envFile; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
private File getDesignerEnvFile() { |
||||||
|
File envFile = getEnvFile(); |
||||||
|
if (!envFile.exists()) { |
||||||
|
createEnvFile(envFile); |
||||||
|
} |
||||||
|
|
||||||
|
return envFile; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
private void createEnvFile(File envFile) { |
||||||
|
try { |
||||||
|
FileWriter fileWriter = new FileWriter(envFile); |
||||||
|
StringReader stringReader = new StringReader("<?xml version=\"1.0\" encoding=\"UTF-8\" ?><Env></Env>"); |
||||||
|
Utils.copyCharTo(stringReader, fileWriter); |
||||||
|
stringReader.close(); |
||||||
|
fileWriter.close(); |
||||||
|
} catch (IOException e) { |
||||||
|
FRContext.getLogger().error(e.getMessage(), e); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 返回激活码 |
||||||
|
*/ |
||||||
|
public String getActivationKey() { |
||||||
|
return activationKey; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 设置激活码 |
||||||
|
*/ |
||||||
|
public void setActivationKey(String activationKey) { |
||||||
|
this.activationKey = activationKey; |
||||||
|
} |
||||||
|
|
||||||
|
public void setPushUpdateAuto(boolean isPushUpdateAuto){ |
||||||
|
this.isPushUpdateAuto = isPushUpdateAuto; |
||||||
|
if(!this.isPushUpdateAuto){ |
||||||
|
lastCheckDate = new Date(); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 是否设置了自动推送图表设计器在线更行 |
||||||
|
* @return 是则返回true |
||||||
|
*/ |
||||||
|
public boolean isPushUpdateAuto(){ |
||||||
|
return isPushUpdateAuto; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
*在设置不自动推送在线更新的情况下,每30天自动检测一次 |
||||||
|
* @return 是否需要检测 |
||||||
|
*/ |
||||||
|
public boolean isOverOneMonth(){ |
||||||
|
return !isPushUpdateAuto && ((new Date().getTime()-lastCheckDate.getTime())/MS>=checkTimeSpan); |
||||||
|
} |
||||||
|
|
||||||
|
/*** |
||||||
|
* 重新设置最新检查的日期 |
||||||
|
*/ |
||||||
|
public void resetCheckDate(){ |
||||||
|
this.lastCheckDate = new Date(); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void readXML(XMLableReader reader) { |
||||||
|
if (reader.isChildNode()) { |
||||||
|
String name = reader.getTagName(); |
||||||
|
if(ComparatorUtils.equals(name,"ChartAttributes")){ |
||||||
|
activationKey = reader.getAttrAsString("activationKey",null); |
||||||
|
isPushUpdateAuto = reader.getAttrAsBoolean("isPushUpdateAuto",true); |
||||||
|
checkTimeSpan = reader.getAttrAsLong("checkTimeSpan",ONE_MONTH_SECOND); |
||||||
|
String date = reader.getAttrAsString("lastCheckDate", null); |
||||||
|
if(!StringUtils.isEmpty(date)){ |
||||||
|
lastCheckDate = DateUtils.string2Date(date,true); |
||||||
|
} else { |
||||||
|
lastCheckDate = new Date(); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void writeXML(XMLPrintWriter writer) { |
||||||
|
writer.startTAG("ChartDesigner"); |
||||||
|
writer.startTAG("ChartAttributes").attr("activationKey",activationKey) |
||||||
|
.attr("isPushUpdateAuto",isPushUpdateAuto) |
||||||
|
.attr("checkTimeSpan",checkTimeSpan) |
||||||
|
.attr("lastCheckDate", DateUtils.getDate2LStr(lastCheckDate)) |
||||||
|
.end(); |
||||||
|
writer.end(); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 保存设计器的配置文件, 该文件不在env的resource目录下 |
||||||
|
* 而是在Consts.getEnvHome() + File.separator + Consts.APP_NAME |
||||||
|
* |
||||||
|
* |
||||||
|
* @date 2014-9-29-上午11:04:23 |
||||||
|
*/ |
||||||
|
public void saveXMLFile() { |
||||||
|
File xmlFile = this.getDesignerEnvFile(); |
||||||
|
if (xmlFile == null) { |
||||||
|
return; |
||||||
|
} |
||||||
|
if (!xmlFile.getParentFile().exists()) {//建立目录.
|
||||||
|
StableUtils.mkdirs(xmlFile.getParentFile()); |
||||||
|
} |
||||||
|
|
||||||
|
String tempName = xmlFile.getName() + ProjectConstants.TEMP_SUFFIX; |
||||||
|
File tempFile = new File(xmlFile.getParentFile(), tempName); |
||||||
|
|
||||||
|
writeTempFile(tempFile); |
||||||
|
IOUtils.renameTo(tempFile, xmlFile); |
||||||
|
} |
||||||
|
|
||||||
|
private void writeTempFile(File tempFile){ |
||||||
|
try{ |
||||||
|
OutputStream fout = new FileOutputStream(tempFile); |
||||||
|
XMLTools.writeOutputStreamXML(this, fout); |
||||||
|
fout.flush(); |
||||||
|
fout.close(); |
||||||
|
}catch (Exception e) { |
||||||
|
FRContext.getLogger().error(e.getMessage()); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,211 @@ |
|||||||
|
package com.fr.design; |
||||||
|
|
||||||
|
import com.fr.chart.base.ChartConstants; |
||||||
|
import com.fr.chart.chartattr.Chart; |
||||||
|
import com.fr.chart.chartattr.Plot; |
||||||
|
import com.fr.chart.charttypes.ChartTypeManager; |
||||||
|
import com.fr.design.beans.BasicBeanPane; |
||||||
|
import com.fr.design.beans.FurtherBasicBeanPane; |
||||||
|
import com.fr.design.chart.fun.IndependentChartUIProvider; |
||||||
|
import com.fr.design.chartinterface.*; |
||||||
|
import com.fr.design.condition.ConditionAttributesPane; |
||||||
|
import com.fr.design.gui.frpane.AttributeChangeListener; |
||||||
|
import com.fr.design.mainframe.chart.AbstractChartAttrPane; |
||||||
|
import com.fr.design.mainframe.chart.gui.ChartDataPane; |
||||||
|
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.table.AbstractTableDataContentPane; |
||||||
|
import com.fr.file.XMLFileManager; |
||||||
|
import com.fr.general.FRLogger; |
||||||
|
import com.fr.general.GeneralContext; |
||||||
|
import com.fr.plugin.PluginCollector; |
||||||
|
import com.fr.plugin.PluginLicenseManager; |
||||||
|
import com.fr.plugin.PluginMessage; |
||||||
|
import com.fr.stable.EnvChangedListener; |
||||||
|
import com.fr.stable.StringUtils; |
||||||
|
import com.fr.stable.fun.Authorize; |
||||||
|
import com.fr.stable.plugin.ExtraChartDesignClassManagerProvider; |
||||||
|
import com.fr.stable.plugin.PluginSimplify; |
||||||
|
import com.fr.stable.xml.XMLPrintWriter; |
||||||
|
import com.fr.stable.xml.XMLableReader; |
||||||
|
|
||||||
|
import java.util.Iterator; |
||||||
|
import java.util.LinkedHashMap; |
||||||
|
import java.util.List; |
||||||
|
import java.util.Map; |
||||||
|
|
||||||
|
/** |
||||||
|
* Created by eason on 14/12/29. |
||||||
|
*/ |
||||||
|
public class ChartTypeInterfaceManager extends XMLFileManager implements ExtraChartDesignClassManagerProvider { |
||||||
|
|
||||||
|
private static ClassLoader loader = Thread.currentThread().getContextClassLoader(); |
||||||
|
|
||||||
|
private static ChartTypeInterfaceManager classManager = null; |
||||||
|
|
||||||
|
private static LinkedHashMap<String, IndependentChartUIProvider> chartTypeInterfaces = new LinkedHashMap<String, IndependentChartUIProvider>(); |
||||||
|
|
||||||
|
public synchronized static ChartTypeInterfaceManager getInstance() { |
||||||
|
if (classManager == null) { |
||||||
|
classManager = new ChartTypeInterfaceManager(); |
||||||
|
chartTypeInterfaces.clear(); |
||||||
|
classManager.readDefault(); |
||||||
|
classManager.readXMLFile(); |
||||||
|
} |
||||||
|
return classManager; |
||||||
|
} |
||||||
|
|
||||||
|
static { |
||||||
|
GeneralContext.addEnvChangedListener(new EnvChangedListener() { |
||||||
|
public void envChanged() { |
||||||
|
ChartTypeInterfaceManager.envChanged(); |
||||||
|
} |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
private synchronized static void envChanged() { |
||||||
|
classManager = null; |
||||||
|
} |
||||||
|
|
||||||
|
private static void readDefault() { |
||||||
|
|
||||||
|
chartTypeInterfaces.put(ChartConstants.COLUMN_CHART, new ColumnIndependentChartInterface()); |
||||||
|
chartTypeInterfaces.put(ChartConstants.LINE_CHART, new LineIndependentChartInterface()); |
||||||
|
chartTypeInterfaces.put(ChartConstants.BAR_CHART, new BarIndependentChartInterface()); |
||||||
|
chartTypeInterfaces.put(ChartConstants.PIE_CHART, new PieIndependentChartInterface()); |
||||||
|
chartTypeInterfaces.put(ChartConstants.AREA_CHART, new AreaIndependentChartInterface()); |
||||||
|
chartTypeInterfaces.put(ChartConstants.SCATTER_CHART, new XYScatterIndependentChartInterface()); |
||||||
|
chartTypeInterfaces.put(ChartConstants.BUBBLE_CHART, new BubbleIndependentChartInterface()); |
||||||
|
chartTypeInterfaces.put(ChartConstants.RADAR_CHART, new RadarIndependentChartInterface()); |
||||||
|
chartTypeInterfaces.put(ChartConstants.STOCK_CHART, new StockIndependentChartInterface()); |
||||||
|
chartTypeInterfaces.put(ChartConstants.METER_CHART, new MeterIndependentChartInterface()); |
||||||
|
chartTypeInterfaces.put(ChartConstants.RANGE_CHART, new RangeIndependentChartInterface()); |
||||||
|
chartTypeInterfaces.put(ChartConstants.CUSTOM_CHART, new CustomIndependentChartInterface()); |
||||||
|
chartTypeInterfaces.put(ChartConstants.GANTT_CHART, new GanttIndependentChartInterface()); |
||||||
|
chartTypeInterfaces.put(ChartConstants.DONUT_CHART, new DonutIndependentChartInterface()); |
||||||
|
chartTypeInterfaces.put(ChartConstants.MAP_CHART, new MapIndependentChartInterface()); |
||||||
|
chartTypeInterfaces.put(ChartConstants.GIS_CHAER, new GisMapIndependentChartInterface()); |
||||||
|
chartTypeInterfaces.put(ChartConstants.FUNNEL_CHART, new FunnelIndependentChartInterface()); |
||||||
|
|
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
public String getIconPath(String plotID) { |
||||||
|
return chartTypeInterfaces.get(plotID).getIconPath(); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 增加界面接口定义 |
||||||
|
* |
||||||
|
* @param className 类名 |
||||||
|
* @param plotID 标志ID |
||||||
|
*/ |
||||||
|
public void addChartInterface(String className, String plotID, PluginSimplify simplify) { |
||||||
|
if (StringUtils.isNotBlank(className)) { |
||||||
|
try { |
||||||
|
Class<?> clazz = loader.loadClass(className); |
||||||
|
Authorize authorize = clazz.getAnnotation(Authorize.class); |
||||||
|
if (authorize != null) { |
||||||
|
PluginLicenseManager.getInstance().registerPaid(authorize, simplify); |
||||||
|
} |
||||||
|
IndependentChartUIProvider provider = (IndependentChartUIProvider) clazz.newInstance(); |
||||||
|
if (PluginCollector.getCollector().isError(provider, IndependentChartUIProvider.CURRENT_API_LEVEL, simplify.getPluginName()) || !containsChart(plotID)) { |
||||||
|
PluginMessage.remindUpdate(className); |
||||||
|
} else if (!chartTypeInterfaces.containsKey(plotID)) { |
||||||
|
chartTypeInterfaces.put(plotID, provider); |
||||||
|
} |
||||||
|
} catch (ClassNotFoundException e) { |
||||||
|
FRLogger.getLogger().error("class not found:" + e.getMessage()); |
||||||
|
} catch (IllegalAccessException | InstantiationException e) { |
||||||
|
FRLogger.getLogger().error("object create error:" + e.getMessage()); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
//UI对应的chart如果没有加载,UI也不必加进去了
|
||||||
|
private boolean containsChart(String plotID) { |
||||||
|
return ChartTypeManager.getInstance().containsPlot(plotID); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 把所有的pane加到list里 |
||||||
|
* |
||||||
|
* @param paneList pane容器 |
||||||
|
*/ |
||||||
|
public void addPlotTypePaneList(List<FurtherBasicBeanPane<? extends Chart>> paneList) { |
||||||
|
|
||||||
|
Iterator iterator = chartTypeInterfaces.entrySet().iterator(); |
||||||
|
while (iterator.hasNext()) { |
||||||
|
Map.Entry entry = (Map.Entry) iterator.next(); |
||||||
|
IndependentChartUIProvider creator = (IndependentChartUIProvider) entry.getValue(); |
||||||
|
paneList.add(creator.getPlotTypePane()); |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
public AbstractChartAttrPane[] getAttrPaneArray(String plotID, AttributeChangeListener listener) { |
||||||
|
return chartTypeInterfaces.get(plotID).getAttrPaneArray(listener); |
||||||
|
} |
||||||
|
|
||||||
|
public AbstractTableDataContentPane getTableDataSourcePane(Plot plot, ChartDataPane parent) { |
||||||
|
return chartTypeInterfaces.get(plot.getPlotID()).getTableDataSourcePane(plot, parent); |
||||||
|
} |
||||||
|
|
||||||
|
public AbstractReportDataContentPane getReportDataSourcePane(Plot plot, ChartDataPane parent) { |
||||||
|
return chartTypeInterfaces.get(plot.getPlotID()).getReportDataSourcePane(plot, parent); |
||||||
|
} |
||||||
|
|
||||||
|
public ConditionAttributesPane getPlotConditionPane(Plot plot) { |
||||||
|
return chartTypeInterfaces.get(plot.getPlotID()).getPlotConditionPane(plot); |
||||||
|
} |
||||||
|
|
||||||
|
public BasicBeanPane<Plot> getPlotSeriesPane(ChartStylePane parent, Plot plot) { |
||||||
|
return chartTypeInterfaces.get(plot.getPlotID()).getPlotSeriesPane(parent, plot); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 是否使用默认的界面,为了避免界面来回切换 |
||||||
|
* |
||||||
|
* @param plotID 序号 |
||||||
|
* @return 是否使用默认的界面 |
||||||
|
*/ |
||||||
|
public boolean isUseDefaultPane(String plotID) { |
||||||
|
|
||||||
|
if (chartTypeInterfaces.containsKey(plotID)) { |
||||||
|
return chartTypeInterfaces.get(plotID).isUseDefaultPane(); |
||||||
|
} |
||||||
|
|
||||||
|
return true; |
||||||
|
} |
||||||
|
|
||||||
|
public void readXML(XMLableReader reader) { |
||||||
|
readXML(reader, null, PluginSimplify.NULL); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void readXML(XMLableReader reader, List<String> extraChartDesignInterfaceList, PluginSimplify simplify) { |
||||||
|
if (reader.isChildNode()) { |
||||||
|
String tagName = reader.getTagName(); |
||||||
|
if (extraChartDesignInterfaceList != null) { |
||||||
|
extraChartDesignInterfaceList.add(tagName); |
||||||
|
} |
||||||
|
if (IndependentChartUIProvider.XML_TAG.equals(tagName)) { |
||||||
|
addChartInterface(reader.getAttrAsString("class", ""), reader.getAttrAsString("plotID", ""), simplify); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 文件名 |
||||||
|
* |
||||||
|
* @return 文件名 |
||||||
|
*/ |
||||||
|
public String fileName() { |
||||||
|
return "chart.xml"; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void writeXML(XMLPrintWriter writer) { |
||||||
|
|
||||||
|
} |
||||||
|
} |
@ -0,0 +1,55 @@ |
|||||||
|
package com.fr.design.chart; |
||||||
|
|
||||||
|
import com.fr.base.FRContext; |
||||||
|
import com.fr.chart.chartattr.Axis; |
||||||
|
import com.fr.chart.chartattr.CategoryAxis; |
||||||
|
import com.fr.chart.chartattr.RadarAxis; |
||||||
|
import com.fr.chart.chartattr.ValueAxis; |
||||||
|
import com.fr.design.mainframe.chart.gui.style.axis.*; |
||||||
|
import com.fr.general.ComparatorUtils; |
||||||
|
|
||||||
|
import java.util.HashMap; |
||||||
|
import java.util.Map; |
||||||
|
|
||||||
|
/** |
||||||
|
* Created by IntelliJ IDEA. |
||||||
|
* Author : Richer |
||||||
|
* Version: 6.5.6 |
||||||
|
* Date : 11-12-6 |
||||||
|
* Time : 上午11:19 |
||||||
|
*/ |
||||||
|
public class ChartAxisFactory { |
||||||
|
private static final String PERCENT = "Percent"; |
||||||
|
private static final String SECOND = "Second"; |
||||||
|
|
||||||
|
private static Map<String, Class<? extends ChartAxisUsePane>> map = new HashMap<String, Class<? extends ChartAxisUsePane>>(); |
||||||
|
|
||||||
|
static { |
||||||
|
map.put(ValueAxis.class.getName(), ChartValuePane.class); |
||||||
|
map.put(RadarAxis.class.getName(), ChartRadarPane.class); |
||||||
|
map.put(CategoryAxis.class.getName(), ChartCategoryPane.class); |
||||||
|
map.put(ValueAxis.class.getName() + PERCENT, ChartPercentValuePane.class); |
||||||
|
map.put(ValueAxis.class.getName() + SECOND, ChartSecondValuePane.class); |
||||||
|
} |
||||||
|
private ChartAxisFactory() { |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
public static ChartAxisUsePane createAxisStylePane(Axis axis, String axisType) { |
||||||
|
String clsName = axis.getClass().getName(); |
||||||
|
if (axis.isPercentage()) { |
||||||
|
clsName += PERCENT; |
||||||
|
} else if(ComparatorUtils.equals(axisType, "secondAxis")) { |
||||||
|
clsName += SECOND; |
||||||
|
} |
||||||
|
Class<? extends ChartAxisUsePane> cls = map.get(clsName); |
||||||
|
try { |
||||||
|
return cls.newInstance(); |
||||||
|
} catch (InstantiationException e) { |
||||||
|
FRContext.getLogger().error(e.getMessage(), e); |
||||||
|
} catch (IllegalAccessException e) { |
||||||
|
FRContext.getLogger().error(e.getMessage(), e); |
||||||
|
} |
||||||
|
return new ChartCategoryPane(); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,22 @@ |
|||||||
|
package com.fr.design.chart; |
||||||
|
|
||||||
|
import com.fr.chart.chartattr.Chart; |
||||||
|
import com.fr.chart.chartattr.ChartCollection; |
||||||
|
|
||||||
|
public abstract class ChartCommonWizardPane extends ChartWizardPane { |
||||||
|
private static final long serialVersionUID = 2467967841657570498L; |
||||||
|
|
||||||
|
@Override |
||||||
|
public void populate(ChartCollection cc) { |
||||||
|
if (cc == null) { |
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
populate(cc.getSelectedChart()); |
||||||
|
} |
||||||
|
|
||||||
|
public abstract void populate(Chart chart); |
||||||
|
|
||||||
|
public abstract void update(Chart oldChart); |
||||||
|
|
||||||
|
} |
@ -0,0 +1,170 @@ |
|||||||
|
package com.fr.design.chart; |
||||||
|
|
||||||
|
import java.awt.Color; |
||||||
|
import java.awt.Component; |
||||||
|
import java.awt.Cursor; |
||||||
|
import java.awt.Dimension; |
||||||
|
import java.awt.Graphics; |
||||||
|
import java.awt.Insets; |
||||||
|
import java.awt.Rectangle; |
||||||
|
import java.awt.event.MouseEvent; |
||||||
|
import java.awt.event.MouseListener; |
||||||
|
import java.awt.event.MouseMotionListener; |
||||||
|
import java.util.ArrayList; |
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
import javax.swing.JPanel; |
||||||
|
import javax.swing.border.AbstractBorder; |
||||||
|
import javax.swing.border.Border; |
||||||
|
|
||||||
|
import com.fr.stable.core.PropertyChangeAdapter; |
||||||
|
import com.fr.design.chart.gui.ChartComponent; |
||||||
|
import com.fr.design.layout.FRGUIPaneFactory; |
||||||
|
|
||||||
|
/** |
||||||
|
* 存放ChartComponent, 可调整大小的Pane. |
||||||
|
*/ |
||||||
|
public class ChartComponentPane extends JPanel implements MouseMotionListener, MouseListener { |
||||||
|
private static final long serialVersionUID = -77093070905580457L; |
||||||
|
|
||||||
|
// 给设计界面加一个边框,方便拖拽
|
||||||
|
private static final int BORDER_STYLE = 10; |
||||||
|
|
||||||
|
private List<PropertyChangeAdapter> listeners = new ArrayList<PropertyChangeAdapter>(); |
||||||
|
private List<PropertyChangeAdapter> slisteners = new ArrayList<PropertyChangeAdapter>(); |
||||||
|
|
||||||
|
private ChartComponent chartComponent; |
||||||
|
|
||||||
|
private boolean select = false; |
||||||
|
|
||||||
|
public ChartComponentPane(ChartComponent chartComponent) { |
||||||
|
initComponents(chartComponent); |
||||||
|
} |
||||||
|
|
||||||
|
private void initComponents(ChartComponent chartComponent) { |
||||||
|
this.chartComponent = chartComponent; |
||||||
|
this.chartComponent.setLocation(this.getLocation()); |
||||||
|
|
||||||
|
this.setBorder(designBorder); |
||||||
|
this.setLayout(FRGUIPaneFactory.createBorderLayout()); |
||||||
|
this.chartComponent.addStopEditingListener(new PropertyChangeAdapter() { |
||||||
|
@Override |
||||||
|
public void propertyChange() { |
||||||
|
stopEditing(); |
||||||
|
} |
||||||
|
}); |
||||||
|
this.add(chartComponent); |
||||||
|
|
||||||
|
this.addMouseListener(this); |
||||||
|
this.addMouseMotionListener(this); |
||||||
|
} |
||||||
|
|
||||||
|
public void addSizeChangedListener(PropertyChangeAdapter l) { |
||||||
|
slisteners.add(l); |
||||||
|
} |
||||||
|
|
||||||
|
public void addStopListener(PropertyChangeAdapter l) { |
||||||
|
listeners.add(l); |
||||||
|
} |
||||||
|
|
||||||
|
private void stopEditing() { |
||||||
|
fireChanged(listeners); |
||||||
|
} |
||||||
|
|
||||||
|
private Border designBorder = new AbstractBorder() { |
||||||
|
private static final long serialVersionUID = 1802897702350872754L; |
||||||
|
|
||||||
|
@Override |
||||||
|
public void paintBorder(Component c, Graphics g, int x, int y, int width, int height) { |
||||||
|
Color oldColor = g.getColor(); |
||||||
|
g.setColor(new Color(157, 228, 245)); |
||||||
|
for (int i = 0; i < BORDER_STYLE; i++) { |
||||||
|
g.drawRect(x + i, y + i, width - i - i - 1, height - i - i - 1); |
||||||
|
} |
||||||
|
g.setColor(oldColor); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public Insets getBorderInsets(Component c) { |
||||||
|
return new Insets(0, 0, BORDER_STYLE, BORDER_STYLE); |
||||||
|
} |
||||||
|
}; |
||||||
|
|
||||||
|
@Override |
||||||
|
public void mouseDragged(MouseEvent e) { |
||||||
|
if (select) { |
||||||
|
if (this.getCursor() == Cursor.getPredefinedCursor(Cursor.W_RESIZE_CURSOR)) { |
||||||
|
this.setSize(e.getX(), getSize().height); |
||||||
|
this.setPreferredSize(new Dimension(e.getX(), getSize().height)); |
||||||
|
} else if (this.getCursor() == Cursor.getPredefinedCursor(Cursor.S_RESIZE_CURSOR)) { |
||||||
|
this.setSize(getSize().width, e.getY()); |
||||||
|
this.setPreferredSize(new Dimension(getSize().width, e.getY())); |
||||||
|
} else if (this.getCursor() == Cursor.getPredefinedCursor(Cursor.SE_RESIZE_CURSOR)) { |
||||||
|
this.setSize(e.getX(), e.getY()); |
||||||
|
this.setPreferredSize(new Dimension(e.getX(), e.getY())); |
||||||
|
} |
||||||
|
} |
||||||
|
fireSizeChanged(); |
||||||
|
super.repaint(); |
||||||
|
} |
||||||
|
|
||||||
|
public void mouseMoved(MouseEvent e) { |
||||||
|
Rectangle rect = this.getBounds(); |
||||||
|
if (atCorner(e, rect)) { |
||||||
|
setCursor(Cursor.getPredefinedCursor(Cursor.SE_RESIZE_CURSOR)); |
||||||
|
} else if (atBottomLine(e, rect)) { |
||||||
|
setCursor(Cursor.getPredefinedCursor(Cursor.S_RESIZE_CURSOR)); |
||||||
|
} else if (atRightLine(e, rect)) { |
||||||
|
setCursor(Cursor.getPredefinedCursor(Cursor.W_RESIZE_CURSOR)); |
||||||
|
} else { |
||||||
|
setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
private boolean atBottomLine(MouseEvent e, Rectangle rect) { |
||||||
|
return e.getY() < rect.height && e.getY() > rect.height - BORDER_STYLE; |
||||||
|
} |
||||||
|
|
||||||
|
private boolean atRightLine(MouseEvent e, Rectangle rect) { |
||||||
|
return e.getX() < rect.width && e.getX() > rect.width - BORDER_STYLE; |
||||||
|
} |
||||||
|
|
||||||
|
private boolean atCorner(MouseEvent e, Rectangle rect) { |
||||||
|
return atBottomLine(e, rect) && atRightLine(e, rect); |
||||||
|
} |
||||||
|
|
||||||
|
public void mouseClicked(MouseEvent e) { |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
public void mouseEntered(MouseEvent e) { |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
public void mouseExited(MouseEvent e) { |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
public void mousePressed(MouseEvent e) { |
||||||
|
if (this.getCursor() == Cursor.getPredefinedCursor(Cursor.W_RESIZE_CURSOR) |
||||||
|
|| this.getCursor() == Cursor.getPredefinedCursor(Cursor.S_RESIZE_CURSOR) |
||||||
|
|| this.getCursor() == Cursor.getPredefinedCursor(Cursor.SE_RESIZE_CURSOR)) { |
||||||
|
this.select = true; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public void mouseReleased(MouseEvent e) { |
||||||
|
this.select = false; |
||||||
|
this.repaint(); |
||||||
|
} |
||||||
|
|
||||||
|
private void fireSizeChanged() { |
||||||
|
fireChanged(slisteners); |
||||||
|
} |
||||||
|
|
||||||
|
private void fireChanged(List<PropertyChangeAdapter> ls) { |
||||||
|
for (int len = ls.size(), i = len; i > 0; i--) { |
||||||
|
ls.get(i - 1).propertyChange(); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,128 @@ |
|||||||
|
package com.fr.design.chart; |
||||||
|
|
||||||
|
import com.fr.chart.chartattr.Chart; |
||||||
|
import com.fr.chart.chartattr.ChartCollection; |
||||||
|
import com.fr.design.beans.BasicBeanPane; |
||||||
|
import com.fr.design.gui.controlpane.JControlPane; |
||||||
|
import com.fr.design.gui.controlpane.NameObjectCreator; |
||||||
|
import com.fr.design.gui.controlpane.NameableCreator; |
||||||
|
import com.fr.design.layout.FRGUIPaneFactory; |
||||||
|
import com.fr.general.Inter; |
||||||
|
import com.fr.general.NameObject; |
||||||
|
import com.fr.stable.Nameable; |
||||||
|
|
||||||
|
import java.awt.*; |
||||||
|
import java.util.HashMap; |
||||||
|
|
||||||
|
/** |
||||||
|
* 管理图表类型Pane |
||||||
|
* @author kunsnat: ChartComponent移出. |
||||||
|
*/ |
||||||
|
public class ChartControlPane extends JControlPane { |
||||||
|
private static final long serialVersionUID = 7336270815128413184L; |
||||||
|
|
||||||
|
public ChartControlPane() { |
||||||
|
super(); |
||||||
|
// 重新设定大小. 因为JControlPane默认的(450,450) 不适合图表这边 @ChartSize
|
||||||
|
// this.setPreferredSize(new Dimension(770, 520));
|
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public NameableCreator[] createNameableCreators() { |
||||||
|
return new NameableCreator[] { |
||||||
|
new NameObjectCreator(Inter.getLocText("Chart"), Chart.class, ChartTypeUpdatePane.class) |
||||||
|
}; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected String title4PopupWindow() { |
||||||
|
return Inter.getLocText("Chart-Manage_Chart_Type"); |
||||||
|
} |
||||||
|
|
||||||
|
public void populate(ChartCollection cc) { |
||||||
|
if(cc == null)return; |
||||||
|
|
||||||
|
NameObject[] nameObjects = new NameObject[cc.getChartCount()]; |
||||||
|
for (int i = 0; i < nameObjects.length; i++) { |
||||||
|
nameObjects[i] = new NameObject(cc.getChartName(i), cc.getChart(i)); |
||||||
|
} |
||||||
|
|
||||||
|
populate(nameObjects); |
||||||
|
// kunsnat: 选中当前图表选中的name
|
||||||
|
String chartSelectedName = cc.getChartName(cc.getSelectedIndex() < cc.getChartCount() ? cc.getSelectedIndex() : 0); |
||||||
|
setSelectedName(chartSelectedName); |
||||||
|
} |
||||||
|
|
||||||
|
public void update(ChartCollection cc) { |
||||||
|
HashMap namesChart = new HashMap();// 暂存判断是否有必要更新
|
||||||
|
for(int i = 0; i < cc.getChartCount(); i++) { |
||||||
|
try { |
||||||
|
namesChart.put(cc.getChartName(i), cc.getChart(i).clone()); |
||||||
|
} catch (CloneNotSupportedException e) { |
||||||
|
|
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
Nameable[] nameables = update(); |
||||||
|
if (nameables.length == 0 || cc == null) { |
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
cc.removeAllNameObject(); |
||||||
|
String select = getSelectedName(); |
||||||
|
for (int i = 0; i < nameables.length; i++) { |
||||||
|
if (nameables[i] instanceof NameObject && ((NameObject)nameables[i]).getObject() instanceof Chart) { |
||||||
|
NameObject no = (NameObject)nameables[i]; |
||||||
|
|
||||||
|
String name = no.getName(); |
||||||
|
Chart chart = (Chart)no.getObject(); |
||||||
|
if(namesChart.containsKey(name)) { |
||||||
|
Chart tmpChart = (Chart)namesChart.get(name); |
||||||
|
if(chart.getPlot() != null && tmpChart.getPlot() != null |
||||||
|
&& chart.getPlot().match4GUI(tmpChart.getPlot())) { |
||||||
|
chart = tmpChart;// 代替之前做过编辑的Chart
|
||||||
|
} |
||||||
|
} |
||||||
|
cc.addNamedChart(name, chart); |
||||||
|
if(no.getName().equals(select)) { |
||||||
|
cc.setSelectedIndex(i); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
/* |
||||||
|
* alex:继承UpdatePane的ChartTypePane |
||||||
|
*/ |
||||||
|
public static class ChartTypeUpdatePane extends BasicBeanPane<Chart> { |
||||||
|
private static final long serialVersionUID = -7058348930816218415L; |
||||||
|
private Chart editing; |
||||||
|
|
||||||
|
private ChartTypePane typePane; |
||||||
|
|
||||||
|
public ChartTypeUpdatePane() { |
||||||
|
this.setLayout(FRGUIPaneFactory.createBorderLayout()); |
||||||
|
|
||||||
|
typePane = new ChartTypePane(); |
||||||
|
this.add(typePane, BorderLayout.CENTER); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected String title4PopupWindow() { |
||||||
|
return "Chart Type"; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void populateBean(Chart ob) { |
||||||
|
editing = ob; |
||||||
|
typePane.populate(ob); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public Chart updateBean() { |
||||||
|
typePane.update(editing); |
||||||
|
|
||||||
|
return editing; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,102 @@ |
|||||||
|
package com.fr.design.chart; |
||||||
|
|
||||||
|
import java.awt.BorderLayout; |
||||||
|
import java.awt.Dialog; |
||||||
|
import java.awt.FlowLayout; |
||||||
|
import java.awt.Frame; |
||||||
|
import java.awt.event.ActionEvent; |
||||||
|
import java.awt.event.ActionListener; |
||||||
|
|
||||||
|
import javax.swing.JPanel; |
||||||
|
|
||||||
|
import com.fr.base.chart.BaseChartCollection; |
||||||
|
import com.fr.chart.chartattr.ChartCollection; |
||||||
|
import com.fr.design.gui.chart.MiddleChartDialog; |
||||||
|
import com.fr.design.gui.ibutton.UIButton; |
||||||
|
import com.fr.design.dialog.BasicDialog; |
||||||
|
import com.fr.general.Inter; |
||||||
|
import com.fr.design.utils.gui.GUICoreUtils; |
||||||
|
|
||||||
|
/** |
||||||
|
* 封装一层 图表新建的对话框, 配合属性表确定: 先单独只要一种图表类型的对话框. |
||||||
|
* @author kunsnat E-mail:kunsnat@gmail.com |
||||||
|
* @version 创建时间:2013-1-7 下午07:29:15 |
||||||
|
*/ |
||||||
|
public class ChartDialog extends MiddleChartDialog { |
||||||
|
|
||||||
|
private BaseChartCollection cc; |
||||||
|
|
||||||
|
private UIButton ok; |
||||||
|
private UIButton cancel; |
||||||
|
|
||||||
|
public ChartDialog(Frame owner) { |
||||||
|
super(owner); |
||||||
|
initComponent(); |
||||||
|
} |
||||||
|
|
||||||
|
public ChartDialog(Dialog owner) { |
||||||
|
super(owner); |
||||||
|
initComponent(); |
||||||
|
} |
||||||
|
|
||||||
|
private void initComponent() { |
||||||
|
this.setLayout(new BorderLayout()); |
||||||
|
final ChartTypePane chartTypePane = new ChartTypePane(); |
||||||
|
setTitle(Inter.getLocText("M-Popup_ChartType")); |
||||||
|
|
||||||
|
this.applyClosingAction(); |
||||||
|
this.applyEscapeAction(); |
||||||
|
this.setBasicDialogSize(BasicDialog.DEFAULT); |
||||||
|
this.add(chartTypePane, BorderLayout.CENTER); |
||||||
|
|
||||||
|
JPanel buttonPane = new JPanel(); |
||||||
|
buttonPane.setLayout(new FlowLayout(FlowLayout.RIGHT)); |
||||||
|
|
||||||
|
this.add(buttonPane, BorderLayout.SOUTH); |
||||||
|
|
||||||
|
ok = new UIButton(Inter.getLocText("OK")); |
||||||
|
cancel = new UIButton(Inter.getLocText("Cancel")); |
||||||
|
|
||||||
|
buttonPane.add(ok); |
||||||
|
buttonPane.add(cancel); |
||||||
|
|
||||||
|
ok.addActionListener(new ActionListener() { |
||||||
|
public void actionPerformed(ActionEvent e) { |
||||||
|
chartTypePane.update((ChartCollection)cc); |
||||||
|
doOK(); |
||||||
|
} |
||||||
|
}); |
||||||
|
|
||||||
|
cancel.addActionListener(new ActionListener() { |
||||||
|
public void actionPerformed(ActionEvent e) { |
||||||
|
doCancel(); |
||||||
|
} |
||||||
|
}); |
||||||
|
|
||||||
|
GUICoreUtils.setWindowCenter(getOwner(), this); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 不处理 |
||||||
|
*/ |
||||||
|
public void checkValid() throws Exception { |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 更新新建的图表 ChartCollection |
||||||
|
*/ |
||||||
|
public void populate(BaseChartCollection cc) { |
||||||
|
if (cc == null) { |
||||||
|
return; |
||||||
|
} |
||||||
|
this.cc = cc; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 返回当前正在编辑的图表ChartCollection |
||||||
|
*/ |
||||||
|
public BaseChartCollection getChartCollection() { |
||||||
|
return this.cc; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,132 @@ |
|||||||
|
package com.fr.design.chart; |
||||||
|
|
||||||
|
import com.fr.base.FRContext; |
||||||
|
import com.fr.chart.chartattr.*; |
||||||
|
import com.fr.design.chart.axis.*; |
||||||
|
import com.fr.design.chart.series.SeriesCondition.dlp.*; |
||||||
|
import com.fr.design.mainframe.chart.gui.style.axis.*; |
||||||
|
|
||||||
|
import java.lang.reflect.Constructor; |
||||||
|
import java.util.HashMap; |
||||||
|
import java.util.Map; |
||||||
|
|
||||||
|
/** |
||||||
|
* Created by IntelliJ IDEA. |
||||||
|
* Author : Richer |
||||||
|
* Version: 6.5.6 |
||||||
|
* Date : 11-12-2 |
||||||
|
* Time : 上午11:27 |
||||||
|
*/ |
||||||
|
public class ChartPlotFactory { |
||||||
|
|
||||||
|
private static Map<String, FactoryObject> map = new HashMap<String, FactoryObject>(); |
||||||
|
|
||||||
|
private static Map<String, Class> axisPane = new HashMap<String, Class>(){ |
||||||
|
{ |
||||||
|
put(ChartValuePane.class.getName(), ChartValueNoFormulaPane.class); |
||||||
|
put(ChartSecondValuePane.class.getName(), ChartSecondValueNoFormulaPane.class); |
||||||
|
put(ChartPercentValuePane.class.getName(), ChartPercentValueNoFormulaPane.class); |
||||||
|
put(ChartCategoryPane.class.getName(), ChartCategoryNoFormulaPane.class); |
||||||
|
} |
||||||
|
}; |
||||||
|
|
||||||
|
static { |
||||||
|
map.put(AreaPlot.class.getName(), new FactoryObject() |
||||||
|
.setDataLabelPaneClass(AreaDataLabelPane.class)); |
||||||
|
map.put(Area3DPlot.class.getName(), new FactoryObject() |
||||||
|
.setDataLabelPaneClass(AreaDataLabelPane.class)); |
||||||
|
map.put(Bar2DPlot.class.getName(), new FactoryObject() |
||||||
|
.setDataLabelPaneClass(Bar2DDataLabelPane.class)); |
||||||
|
map.put(Bar3DPlot.class.getName(), new FactoryObject() |
||||||
|
.setDataLabelPaneClass(Bar2DDataLabelPane.class)); |
||||||
|
map.put(BubblePlot.class.getName(), new FactoryObject() |
||||||
|
.setAxisPaneCls(XYChartStyleAxisPane.class) |
||||||
|
.setDataLabelPaneClass(BubbleDataLabelPane.class)); |
||||||
|
map.put(CustomPlot.class.getName(), new FactoryObject() |
||||||
|
.setAxisPaneCls(CustomChartStyleAxisPane.class) |
||||||
|
.setDataLabelPaneClass(Bar2DDataLabelPane.class)); |
||||||
|
map.put(GanttPlot.class.getName(), new FactoryObject() |
||||||
|
.setAxisPaneCls(GanntChartStyleAxisPane.class)); |
||||||
|
map.put(LinePlot.class.getName(), new FactoryObject() |
||||||
|
.setDataLabelPaneClass(LineDataLabelPane.class)); |
||||||
|
map.put(MapPlot.class.getName(), new FactoryObject() |
||||||
|
.setDataLabelPaneClass(MapDataLabelPane.class)); |
||||||
|
map.put(MeterBluePlot.class.getName(), new FactoryObject() |
||||||
|
.setDataLabelPaneClass(MeterDataLabelPane.class)); |
||||||
|
map.put(MeterPlot.class.getName(), new FactoryObject() |
||||||
|
.setDataLabelPaneClass(MeterDataLabelPane.class)); |
||||||
|
map.put(PiePlot.class.getName(), new FactoryObject() |
||||||
|
.setDataLabelPaneClass(PieDataLabelPane.class)); |
||||||
|
map.put(Pie3DPlot.class.getName(), new FactoryObject() |
||||||
|
.setDataLabelPaneClass(PieDataLabelPane.class)); |
||||||
|
map.put(RadarPlot.class.getName(), new FactoryObject() |
||||||
|
.setAxisPaneCls(RadarChartStyleAxisPane.class) |
||||||
|
.setDataLabelPaneClass(RadarDataLabelPane.class)); |
||||||
|
map.put(StockPlot.class.getName(), new FactoryObject() |
||||||
|
.setAxisPaneCls(TernaryChartStyleAxisPane.class) |
||||||
|
.setDataLabelPaneClass(StockDataLabelPane.class)); |
||||||
|
map.put(RangePlot.class.getName(), new FactoryObject() |
||||||
|
.setDataLabelPaneClass(RangeDataLabelPane.class) |
||||||
|
.setAxisPaneCls(ValueChartStyleAxisPane.class)); |
||||||
|
map.put(XYScatterPlot.class.getName(), new FactoryObject() |
||||||
|
.setAxisPaneCls(XYChartStyleAxisPane.class) |
||||||
|
.setDataLabelPaneClass(XYDataLabelPane.class)); |
||||||
|
map.put(FunnelPlot.class.getName(), new FactoryObject() |
||||||
|
.setDataLabelPaneClass(PieDataLabelPane.class)); |
||||||
|
} |
||||||
|
|
||||||
|
private ChartPlotFactory() { |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 创建对应的坐标轴界面 |
||||||
|
* @param plot plot类型 |
||||||
|
* @return 返回坐标轴界面 |
||||||
|
*/ |
||||||
|
public static ChartStyleAxisPane createChartStyleAxisPaneByPlot(Plot plot) { |
||||||
|
FactoryObject factoryObject = map.get(plot.getClass().getName()); |
||||||
|
if (factoryObject != null && factoryObject.getAxisPaneClass() != null) { |
||||||
|
try { |
||||||
|
Constructor<? extends ChartStyleAxisPane> c = factoryObject.getAxisPaneClass().getConstructor(Plot.class); |
||||||
|
return c.newInstance(plot); |
||||||
|
} catch (Exception e) { |
||||||
|
FRContext.getLogger().error(e.getMessage(), e); |
||||||
|
} |
||||||
|
} |
||||||
|
return new BinaryChartStyleAxisPane(plot); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 创建对应的标签Plot |
||||||
|
* @param plotClass plot的类 |
||||||
|
* @return 对应的标签界面 |
||||||
|
*/ |
||||||
|
public static DataLabelPane createDataLabelPane4Plot(Class plotClass) { |
||||||
|
FactoryObject factoryObject = map.get(plotClass.getName()); |
||||||
|
if (factoryObject != null && factoryObject.getDataLabelPaneClass() != null) { |
||||||
|
try { |
||||||
|
Constructor c = factoryObject.getDataLabelPaneClass().getConstructor(); |
||||||
|
return (DataLabelPane) c.newInstance(); |
||||||
|
} catch (Exception e) { |
||||||
|
FRContext.getLogger().error(e.getMessage(), e); |
||||||
|
} |
||||||
|
} |
||||||
|
return new DataLabelPane(); |
||||||
|
} |
||||||
|
|
||||||
|
public static ChartAxisUsePane getNoFormulaPane(ChartAxisUsePane pane){ |
||||||
|
Class aClass = axisPane.get(pane.getClass().getName()); |
||||||
|
if(aClass != null){ |
||||||
|
try { |
||||||
|
Constructor c = aClass.getConstructor(); |
||||||
|
return (ChartAxisUsePane) c.newInstance(); |
||||||
|
}catch (Exception e){ |
||||||
|
FRContext.getLogger().error(e.getMessage(), e); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
return pane; |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,76 @@ |
|||||||
|
package com.fr.design.chart; |
||||||
|
|
||||||
|
import com.fr.base.Formula; |
||||||
|
import com.fr.base.Utils; |
||||||
|
import com.fr.design.dialog.DialogActionAdapter; |
||||||
|
import com.fr.design.formula.FormulaFactory; |
||||||
|
import com.fr.design.formula.UIFormula; |
||||||
|
import com.fr.design.gui.icheckbox.UICheckBox; |
||||||
|
import com.fr.design.gui.itextfield.UITextField; |
||||||
|
import com.fr.design.layout.FRGUIPaneFactory; |
||||||
|
|
||||||
|
import javax.swing.*; |
||||||
|
import java.awt.event.KeyAdapter; |
||||||
|
import java.awt.event.KeyEvent; |
||||||
|
import java.awt.event.MouseAdapter; |
||||||
|
import java.awt.event.MouseEvent; |
||||||
|
|
||||||
|
/** |
||||||
|
* 这里打算是放一些图表用的界面控件的. |
||||||
|
*/ |
||||||
|
public class ChartSwingUtils { |
||||||
|
|
||||||
|
|
||||||
|
public static void addListener(final UICheckBox box, final UITextField textField) { |
||||||
|
textField.addMouseListener(new MouseAdapter() { |
||||||
|
public void mousePressed(MouseEvent e) { |
||||||
|
if (box.isSelected()) { |
||||||
|
showFormulaPane(textField, null); |
||||||
|
} |
||||||
|
} |
||||||
|
}); |
||||||
|
textField.addKeyListener(new KeyAdapter() { |
||||||
|
public void keyTyped(KeyEvent e) { |
||||||
|
if(box.isSelected()) { |
||||||
|
e.consume(); |
||||||
|
showFormulaPane(textField, null); |
||||||
|
} |
||||||
|
} |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
public static UITextField createFormulaUITextField(final OKListener l) { |
||||||
|
final UITextField textField = new UITextField(); |
||||||
|
textField.addMouseListener(new MouseAdapter() { |
||||||
|
public void mousePressed(MouseEvent e) { |
||||||
|
showFormulaPane(textField, l); |
||||||
|
} |
||||||
|
}); |
||||||
|
textField.addKeyListener(new KeyAdapter() { |
||||||
|
public void keyTyped(KeyEvent e) { |
||||||
|
e.consume(); |
||||||
|
showFormulaPane(textField, l); |
||||||
|
} |
||||||
|
}); |
||||||
|
|
||||||
|
return textField; |
||||||
|
} |
||||||
|
|
||||||
|
private static void showFormulaPane(final UITextField jTextField, final OKListener l) { |
||||||
|
final UIFormula formulaPane = FormulaFactory.createFormulaPane(); |
||||||
|
formulaPane.populate(new Formula(jTextField.getText())); |
||||||
|
formulaPane.showLargeWindow(SwingUtilities.getWindowAncestor(FRGUIPaneFactory.createNormalFlowInnerContainer_S_Pane()), new DialogActionAdapter(){ |
||||||
|
public void doOk() { |
||||||
|
Formula formula = formulaPane.update(); |
||||||
|
jTextField.setText(Utils.objectToString(formula)); |
||||||
|
if (l != null) { |
||||||
|
l.action(); |
||||||
|
} |
||||||
|
} |
||||||
|
}).setVisible(true); |
||||||
|
} |
||||||
|
|
||||||
|
public interface OKListener { |
||||||
|
public void action(); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,186 @@ |
|||||||
|
package com.fr.design.chart; |
||||||
|
/** |
||||||
|
* the Pane of the Chart |
||||||
|
* |
||||||
|
*/ |
||||||
|
|
||||||
|
import com.fr.base.FRContext; |
||||||
|
import com.fr.chart.base.ChartInternationalNameContentBean; |
||||||
|
import com.fr.chart.chartattr.*; |
||||||
|
import com.fr.chart.charttypes.ChartTypeManager; |
||||||
|
import com.fr.design.gui.ilable.UILabel; |
||||||
|
import com.fr.design.layout.FRGUIPaneFactory; |
||||||
|
import com.fr.design.utils.gui.GUICoreUtils; |
||||||
|
import com.fr.general.Inter; |
||||||
|
import com.fr.general.RegistEditionException; |
||||||
|
import com.fr.general.VT4FR; |
||||||
|
import com.fr.stable.StableUtils; |
||||||
|
|
||||||
|
import javax.swing.*; |
||||||
|
import javax.swing.event.ListSelectionEvent; |
||||||
|
import javax.swing.event.ListSelectionListener; |
||||||
|
import java.awt.*; |
||||||
|
|
||||||
|
public class ChartTypePane extends ChartCommonWizardPane { |
||||||
|
private static final long serialVersionUID = -1175602484968520546L; |
||||||
|
|
||||||
|
private ChartInternationalNameContentBean[] typeName = ChartTypeManager.getInstance().getAllChartBaseNames(); |
||||||
|
private Chart[][] charts4Icon = null; |
||||||
|
|
||||||
|
{ |
||||||
|
charts4Icon = new Chart[this.typeName.length][]; |
||||||
|
for (int i = 0; i < this.typeName.length; i++) { |
||||||
|
Chart[] rowCharts = ChartTypeManager.getInstance().getChartTypes(this.typeName[i].getPlotID()); |
||||||
|
charts4Icon[i] = new Chart[1]; |
||||||
|
for (int j = 0; j < 1; j++) { |
||||||
|
try { |
||||||
|
charts4Icon[i][j] = (Chart) rowCharts[j].clone(); |
||||||
|
charts4Icon[i][j].setTitle(null); |
||||||
|
if(charts4Icon[i][j].getPlot() != null){ |
||||||
|
charts4Icon[i][j].getPlot().setLegend(null); |
||||||
|
} |
||||||
|
} catch (CloneNotSupportedException e) { |
||||||
|
FRContext.getLogger().error(e.getMessage(), e); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
private JList mainTypeList = null; |
||||||
|
private JList iconViewList = null; |
||||||
|
private DefaultListModel iconListModel = null; |
||||||
|
|
||||||
|
public ChartTypePane() { |
||||||
|
this.setLayout(FRGUIPaneFactory.createBorderLayout()); |
||||||
|
DefaultListModel defaultListModel = new DefaultListModel(); |
||||||
|
mainTypeList = new JList(defaultListModel); |
||||||
|
|
||||||
|
for (int i = 0; i < typeName.length; i++) { |
||||||
|
defaultListModel.insertElementAt(Inter.getLocText(typeName[i].getName()), i); |
||||||
|
} |
||||||
|
mainTypeList.addListSelectionListener(listSelectionListener); |
||||||
|
|
||||||
|
JScrollPane typeScrollPane = new JScrollPane(mainTypeList); |
||||||
|
typeScrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED); |
||||||
|
|
||||||
|
iconViewList = new JList(); |
||||||
|
|
||||||
|
iconListModel = new DefaultListModel(); |
||||||
|
iconViewList.setModel(iconListModel); |
||||||
|
iconViewList.setVisibleRowCount(0); |
||||||
|
iconViewList.setLayoutOrientation(JList.HORIZONTAL_WRAP); |
||||||
|
iconViewList.setCellRenderer(iconCellRenderer); |
||||||
|
|
||||||
|
JScrollPane subListPane = new JScrollPane(iconViewList); |
||||||
|
//iconPane.add
|
||||||
|
mainTypeList.setSelectedIndex(0); |
||||||
|
|
||||||
|
JSplitPane spane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, true, typeScrollPane, subListPane); |
||||||
|
spane.setDividerLocation(120); |
||||||
|
spane.setBorder(BorderFactory.createTitledBorder(Inter.getLocText("M-Popup_ChartType"))); |
||||||
|
this.add(spane); |
||||||
|
|
||||||
|
iconViewList.setSelectedIndex(0); |
||||||
|
} |
||||||
|
|
||||||
|
ListCellRenderer iconCellRenderer = new DefaultListCellRenderer() { |
||||||
|
private static final long serialVersionUID = 956888843609479566L; |
||||||
|
|
||||||
|
public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { |
||||||
|
super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); |
||||||
|
this.setText(""); |
||||||
|
if (value instanceof ChartIcon) { |
||||||
|
this.setIcon((ChartIcon) value); |
||||||
|
setHorizontalAlignment(UILabel.CENTER); |
||||||
|
if (isSelected) { |
||||||
|
// 深蓝色.
|
||||||
|
this.setBackground(new Color(57, 107, 181)); |
||||||
|
} |
||||||
|
ChartIcon chartIcon = (ChartIcon) value; |
||||||
|
this.setBorder(GUICoreUtils.createTitledBorder(getChartName(chartIcon), null)); |
||||||
|
} |
||||||
|
return this; |
||||||
|
} |
||||||
|
}; |
||||||
|
|
||||||
|
protected ListSelectionListener listSelectionListener = new ListSelectionListener() { |
||||||
|
public void valueChanged(ListSelectionEvent e) { |
||||||
|
int main_index = mainTypeList.getSelectedIndex(); |
||||||
|
Chart[] sub_charts = ChartTypePane.this.charts4Icon[main_index]; |
||||||
|
ChartTypePane.this.iconListModel.clear(); |
||||||
|
for (int i = 0; i < sub_charts.length; i++) { |
||||||
|
ChartTypePane.this.iconListModel.addElement(new ChartIcon(sub_charts[i])); |
||||||
|
} |
||||||
|
iconViewList.setSelectedIndex(0); |
||||||
|
} |
||||||
|
}; |
||||||
|
|
||||||
|
public String getChartName(ChartIcon chartIcon) { |
||||||
|
Chart chart = (Chart)chartIcon.getChart(); |
||||||
|
return chart.getChartName(); |
||||||
|
} |
||||||
|
|
||||||
|
public void populate(Chart chart) { |
||||||
|
if (chart == null) { |
||||||
|
return; |
||||||
|
} |
||||||
|
Plot plot = chart.getPlot(); |
||||||
|
|
||||||
|
int mainIndex = 0; |
||||||
|
int subIndex = 0; |
||||||
|
|
||||||
|
for (int i = 0; i < typeName.length; i++) { |
||||||
|
Chart [] charts = ChartTypeManager.getInstance().getChartTypes(typeName[i].getPlotID()); |
||||||
|
for (int j = 0; j < charts.length; j++) { |
||||||
|
if (charts[j].getPlot().match4GUI(plot)) { |
||||||
|
mainIndex = i; |
||||||
|
subIndex = j; |
||||||
|
// 一旦匹配 立马中断
|
||||||
|
break; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
mainTypeList.setSelectedIndex(mainIndex); |
||||||
|
iconViewList.setSelectedIndex(subIndex); |
||||||
|
} |
||||||
|
|
||||||
|
public void update(Chart oldChart) { |
||||||
|
String plotID = typeName[mainTypeList.getSelectedIndex()].getPlotID(); |
||||||
|
Chart chart = ChartTypeManager.getInstance().getChartTypes(plotID)[iconViewList.getSelectedIndex()]; |
||||||
|
if(chart.getPlot() != null){ |
||||||
|
if(chart.getPlot() instanceof MapPlot && !(VT4FR.isLicAvailable(StableUtils.getBytes()) && VT4FR.CHART_MAP.support())){ |
||||||
|
JOptionPane.showMessageDialog(null, Inter.getLocText("FR-Chart-Map_Not_Supported")); |
||||||
|
throw new RegistEditionException(VT4FR.CHART_MAP); |
||||||
|
} |
||||||
|
|
||||||
|
if (chart.getPlot() != null) { |
||||||
|
try { |
||||||
|
oldChart.changePlotInNewType((Plot) chart.getPlot().clone()); |
||||||
|
} catch (CloneNotSupportedException e) { |
||||||
|
FRContext.getLogger().error(e.getMessage(), e); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public void update(ChartCollection cc) { |
||||||
|
if (cc == null) { |
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
Chart chart4Update = cc.getSelectedChart(); |
||||||
|
if (chart4Update == null) { |
||||||
|
String plotID = typeName[mainTypeList.getSelectedIndex()].getPlotID(); |
||||||
|
Chart chart = ChartTypeManager.getInstance().getChartTypes(plotID)[iconViewList.getSelectedIndex()]; |
||||||
|
try{ |
||||||
|
chart4Update = (Chart)chart.clone(); |
||||||
|
cc.addChart(chart4Update); |
||||||
|
}catch (CloneNotSupportedException ex){ |
||||||
|
FRContext.getLogger().error(ex.getMessage(), ex); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
update(chart4Update); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,20 @@ |
|||||||
|
package com.fr.design.chart; |
||||||
|
|
||||||
|
import com.fr.chart.chartattr.ChartCollection; |
||||||
|
import com.fr.design.dialog.JWizardPanel; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author kunsnat E-mail:kunsnat@gmail.com |
||||||
|
* @version 创建时间:2012-4-23 下午03:07:52 |
||||||
|
* 类说明: 图表向导界面 |
||||||
|
*/ |
||||||
|
public abstract class ChartWizardPane extends JWizardPanel { |
||||||
|
|
||||||
|
public ChartWizardPane() { |
||||||
|
super(); |
||||||
|
} |
||||||
|
|
||||||
|
public abstract void update(ChartCollection cc); |
||||||
|
|
||||||
|
public abstract void populate(ChartCollection cc); |
||||||
|
} |
@ -0,0 +1,40 @@ |
|||||||
|
package com.fr.design.chart; |
||||||
|
|
||||||
|
import com.fr.design.chart.axis.ChartStyleAxisPane; |
||||||
|
import com.fr.design.chart.series.SeriesCondition.dlp.DataLabelPane; |
||||||
|
|
||||||
|
/** |
||||||
|
* Created by IntelliJ IDEA. |
||||||
|
* Author : Richer |
||||||
|
* Version: 6.5.6 |
||||||
|
* Date : 11-12-5 |
||||||
|
* Time : 下午5:29 |
||||||
|
*/ |
||||||
|
public class FactoryObject { |
||||||
|
private Class<? extends ChartStyleAxisPane> axisPaneClass; |
||||||
|
private Class<? extends DataLabelPane> dataLabelPaneClass; |
||||||
|
|
||||||
|
public FactoryObject() { |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
public Class<? extends ChartStyleAxisPane> getAxisPaneClass() { |
||||||
|
return axisPaneClass; |
||||||
|
} |
||||||
|
|
||||||
|
public FactoryObject setAxisPaneCls(Class<? extends ChartStyleAxisPane> axisPaneClass) { |
||||||
|
this.axisPaneClass = axisPaneClass; |
||||||
|
return this; |
||||||
|
} |
||||||
|
|
||||||
|
public Class<? extends DataLabelPane> getDataLabelPaneClass() { |
||||||
|
return dataLabelPaneClass; |
||||||
|
} |
||||||
|
|
||||||
|
public FactoryObject setDataLabelPaneClass(Class<? extends DataLabelPane> dataLabelPaneClass) { |
||||||
|
this.dataLabelPaneClass = dataLabelPaneClass; |
||||||
|
return this; |
||||||
|
} |
||||||
|
|
||||||
|
public static FactoryObject EMPTY = new FactoryObject(); |
||||||
|
} |
@ -0,0 +1,29 @@ |
|||||||
|
package com.fr.design.chart.axis; |
||||||
|
|
||||||
|
import com.fr.design.mainframe.chart.gui.style.axis.ChartAxisUsePane; |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* Created by IntelliJ IDEA. |
||||||
|
* Author : Richer |
||||||
|
* Version: 6.5.6 |
||||||
|
* Date : 11-12-2 |
||||||
|
* Time : 下午2:40 |
||||||
|
*/ |
||||||
|
public class AxisStyleObject { |
||||||
|
private String name; |
||||||
|
private ChartAxisUsePane axisStylePane; |
||||||
|
|
||||||
|
public AxisStyleObject(String name, ChartAxisUsePane axisStylePane) { |
||||||
|
this.name = name; |
||||||
|
this.axisStylePane = axisStylePane; |
||||||
|
} |
||||||
|
|
||||||
|
public String getName() { |
||||||
|
return name; |
||||||
|
} |
||||||
|
|
||||||
|
public ChartAxisUsePane getAxisStylePane() { |
||||||
|
return axisStylePane; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,17 @@ |
|||||||
|
package com.fr.design.chart.axis; |
||||||
|
|
||||||
|
import com.fr.general.Inter; |
||||||
|
import com.fr.design.dialog.BasicPane; |
||||||
|
|
||||||
|
public abstract class AxisStylePane<T> extends BasicPane { |
||||||
|
private static final long serialVersionUID = 8969849654720197617L; |
||||||
|
|
||||||
|
public abstract void populate(T axis); |
||||||
|
|
||||||
|
public abstract void update(T axis); |
||||||
|
|
||||||
|
@Override |
||||||
|
protected String title4PopupWindow() { |
||||||
|
return Inter.getLocText(new String[]{"Set", "ChartF-Axis", "Format"}); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,63 @@ |
|||||||
|
package com.fr.design.chart.axis; |
||||||
|
|
||||||
|
import com.fr.chart.chartattr.Axis; |
||||||
|
import com.fr.chart.chartattr.CategoryPlot; |
||||||
|
import com.fr.chart.chartattr.Plot; |
||||||
|
import com.fr.design.mainframe.chart.gui.style.axis.ChartAxisUsePane; |
||||||
|
import com.fr.design.mainframe.chart.gui.style.axis.ChartCategoryPane; |
||||||
|
import com.fr.design.mainframe.chart.gui.style.axis.ChartPercentValuePane; |
||||||
|
import com.fr.design.mainframe.chart.gui.style.axis.ChartValuePane; |
||||||
|
|
||||||
|
/** |
||||||
|
* Created by IntelliJ IDEA. |
||||||
|
* Author : Richer |
||||||
|
* Version: 6.5.6 |
||||||
|
* Date : 11-12-6 |
||||||
|
* Time : 上午8:57 |
||||||
|
*/ |
||||||
|
public class BinaryChartStyleAxisPane extends ChartStyleAxisPane { |
||||||
|
|
||||||
|
public BinaryChartStyleAxisPane(Plot plot) { |
||||||
|
super(plot); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 创建坐标轴样式面板 |
||||||
|
* @param plot 图表 |
||||||
|
* @return 面板 |
||||||
|
*/ |
||||||
|
public final AxisStyleObject[] createAxisStyleObjects(Plot plot) { |
||||||
|
return new AxisStyleObject[]{ |
||||||
|
getXAxisPane(plot), |
||||||
|
getYAxisPane(plot) |
||||||
|
}; |
||||||
|
} |
||||||
|
|
||||||
|
protected AxisStyleObject getXAxisPane(final Plot plot) { |
||||||
|
//是否支持坐标轴轴样式
|
||||||
|
return new AxisStyleObject(CATE_AXIS, new ChartCategoryPane(){ |
||||||
|
protected boolean isSupportLineStyle(){ |
||||||
|
return plot.isSupportAxisLineStyle(); |
||||||
|
} |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
protected AxisStyleObject getYAxisPane(final Plot plot) { |
||||||
|
Axis axis = plot.getyAxis(); |
||||||
|
// 堆积情况时
|
||||||
|
boolean isStack = false; |
||||||
|
if(plot instanceof CategoryPlot) { |
||||||
|
isStack = ((CategoryPlot)plot).isStacked(); |
||||||
|
} |
||||||
|
|
||||||
|
ChartValuePane valuePane = new ChartValuePane(){ |
||||||
|
protected boolean isSupportLineStyle(){ |
||||||
|
return plot.isSupportAxisLineStyle(); |
||||||
|
} |
||||||
|
}; |
||||||
|
boolean usePercentPane = axis.isPercentage() && isStack; |
||||||
|
ChartAxisUsePane p = usePercentPane ? new ChartPercentValuePane() : valuePane; |
||||||
|
|
||||||
|
return new AxisStyleObject(VALUE_AXIS, p); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,63 @@ |
|||||||
|
package com.fr.design.chart.axis; |
||||||
|
|
||||||
|
import com.fr.general.Inter; |
||||||
|
import com.fr.general.NameObject; |
||||||
|
import com.fr.stable.Nameable; |
||||||
|
import com.fr.chart.chartattr.ChartAlertValue; |
||||||
|
import com.fr.design.gui.controlpane.JControlPane; |
||||||
|
import com.fr.design.gui.controlpane.NameObjectCreator; |
||||||
|
import com.fr.design.gui.controlpane.NameableCreator; |
||||||
|
|
||||||
|
import java.util.ArrayList; |
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
public class ChartAlertLinePane extends JControlPane { |
||||||
|
|
||||||
|
public NameableCreator[] createNameableCreators() { |
||||||
|
return new NameableCreator[]{ |
||||||
|
new NameObjectCreator(Inter.getLocText("ChartF-Alert-Line"), |
||||||
|
ChartAlertValue.class, ChartAlertValuePane.class) |
||||||
|
}; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected String title4PopupWindow() { |
||||||
|
return Inter.getLocText(new String[]{"Edit", "ChartF-Alert-Line"}); |
||||||
|
} |
||||||
|
|
||||||
|
public void populate(ChartAlertValue[] alertList) { |
||||||
|
if (alertList == null) { |
||||||
|
alertList = new ChartAlertValue[0]; |
||||||
|
} |
||||||
|
List<NameObject> nameObjectList = new ArrayList<NameObject>(); |
||||||
|
|
||||||
|
for (int i = 0; i < alertList.length; i++) { |
||||||
|
ChartAlertValue value = alertList[i]; |
||||||
|
nameObjectList.add(new NameObject(value.getAlertPaneSelectName(), value)); |
||||||
|
} |
||||||
|
|
||||||
|
if (!nameObjectList.isEmpty()) { |
||||||
|
populate(nameObjectList.toArray(new NameObject[nameObjectList.size()])); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public ChartAlertValue[] updateAlertValues() { |
||||||
|
Nameable[] res = update(); |
||||||
|
|
||||||
|
NameObject[] res_array = new NameObject[res.length]; |
||||||
|
java.util.Arrays.asList(res).toArray(res_array); |
||||||
|
|
||||||
|
if (res_array.length < 1) { |
||||||
|
return new ChartAlertValue[0]; |
||||||
|
} |
||||||
|
|
||||||
|
List alertValueList = new ArrayList(); |
||||||
|
for (int i = 0; i < res_array.length; i++) { |
||||||
|
NameObject nameObject = res_array[i]; |
||||||
|
ChartAlertValue chartAlertValue = (ChartAlertValue) nameObject.getObject(); |
||||||
|
chartAlertValue.setAlertPaneSelectName(nameObject.getName()); |
||||||
|
alertValueList.add(chartAlertValue); |
||||||
|
} |
||||||
|
return (ChartAlertValue[]) alertValueList.toArray(new ChartAlertValue[alertValueList.size()]); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,20 @@ |
|||||||
|
package com.fr.design.chart.axis; |
||||||
|
|
||||||
|
import com.fr.general.Inter; |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* 警戒线 居上 居下界面. |
||||||
|
* @author kunsnat E-mail:kunsnat@gmail.com |
||||||
|
* @version 创建时间:2013-5-22 上午09:53:28 |
||||||
|
*/ |
||||||
|
public class ChartAlertValueInTopBottomPane extends ChartAlertValuePane { |
||||||
|
|
||||||
|
protected String getLeftName() { |
||||||
|
return Inter.getLocText("Chart_Alert_Bottom"); |
||||||
|
} |
||||||
|
|
||||||
|
protected String getRightName() { |
||||||
|
return Inter.getLocText("Chart_Alert_Top"); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,229 @@ |
|||||||
|
package com.fr.design.chart.axis; |
||||||
|
|
||||||
|
import com.fr.base.Formula; |
||||||
|
import com.fr.base.Utils; |
||||||
|
import com.fr.chart.chartattr.ChartAlertValue; |
||||||
|
import com.fr.design.beans.BasicBeanPane; |
||||||
|
import com.fr.design.dialog.DialogActionAdapter; |
||||||
|
import com.fr.design.formula.FormulaFactory; |
||||||
|
import com.fr.design.formula.UIFormula; |
||||||
|
import com.fr.design.gui.ibutton.UIRadioButton; |
||||||
|
import com.fr.design.gui.icombobox.LineComboBox; |
||||||
|
import com.fr.design.gui.icombobox.UIComboBox; |
||||||
|
import com.fr.design.gui.ilable.UILabel; |
||||||
|
import com.fr.design.gui.itextfield.UITextField; |
||||||
|
import com.fr.design.layout.FRGUIPaneFactory; |
||||||
|
import com.fr.design.layout.TableLayout; |
||||||
|
import com.fr.design.layout.TableLayoutHelper; |
||||||
|
import com.fr.design.style.AlphaPane; |
||||||
|
import com.fr.design.style.FRFontPane; |
||||||
|
import com.fr.design.style.color.ColorSelectBox; |
||||||
|
import com.fr.design.utils.gui.GUICoreUtils; |
||||||
|
import com.fr.general.FRFont; |
||||||
|
import com.fr.general.Inter; |
||||||
|
import com.fr.stable.Constants; |
||||||
|
import com.fr.stable.CoreConstants; |
||||||
|
|
||||||
|
import javax.swing.*; |
||||||
|
import java.awt.*; |
||||||
|
import java.awt.event.KeyAdapter; |
||||||
|
import java.awt.event.KeyEvent; |
||||||
|
import java.awt.event.MouseAdapter; |
||||||
|
import java.awt.event.MouseEvent; |
||||||
|
|
||||||
|
/** |
||||||
|
* 图表 坐标轴 警戒线值 编辑界面. (默认 位置居左居右) |
||||||
|
* @author kunsnat E-mail:kunsnat@gmail.com |
||||||
|
* @version 创建时间:2013-5-22 上午09:49:54 |
||||||
|
*/ |
||||||
|
public class ChartAlertValuePane extends BasicBeanPane<ChartAlertValue> { |
||||||
|
private static final int DE_FONT = 9; |
||||||
|
private static final double ALPH_PER = 100; |
||||||
|
|
||||||
|
private UITextField textField; |
||||||
|
private LineComboBox lineCombo; |
||||||
|
private ColorSelectBox colorBox; |
||||||
|
private AlphaPane alphaPane; |
||||||
|
|
||||||
|
private UITextField contentField; |
||||||
|
private UIComboBox fontNameBox; |
||||||
|
private UIComboBox fontSizeBox; |
||||||
|
|
||||||
|
private UIRadioButton leftButton; |
||||||
|
private UIRadioButton rightButton; |
||||||
|
|
||||||
|
public ChartAlertValuePane() { |
||||||
|
this.setLayout(FRGUIPaneFactory.createBorderLayout()); |
||||||
|
|
||||||
|
JPanel pane = FRGUIPaneFactory.createY_AXISBoxInnerContainer_S_Pane(); |
||||||
|
this.add(pane, BorderLayout.CENTER); |
||||||
|
|
||||||
|
JPanel alertLinePane =FRGUIPaneFactory.createY_AXISBoxInnerContainer_S_Pane(); |
||||||
|
pane.add(alertLinePane); |
||||||
|
|
||||||
|
alertLinePane.setBorder(GUICoreUtils.createTitledBorder(Inter.getLocText(new String[]{"ChartF-Alert-Line", "Set"}))); |
||||||
|
|
||||||
|
JPanel valuePane = FRGUIPaneFactory.createNormalFlowInnerContainer_S_Pane(); |
||||||
|
alertLinePane.add(valuePane); |
||||||
|
|
||||||
|
valuePane.add(new UILabel(Inter.getLocText(new String[]{"ChartF_Alert", "Value"}) + ":")); |
||||||
|
|
||||||
|
textField = new UITextField(); |
||||||
|
textField.setColumns(4); |
||||||
|
valuePane.add(textField); |
||||||
|
|
||||||
|
textField.addMouseListener(new MouseAdapter() { |
||||||
|
public void mousePressed(MouseEvent e) { |
||||||
|
showFormulaPane(); |
||||||
|
} |
||||||
|
}); |
||||||
|
|
||||||
|
textField.addKeyListener(new KeyAdapter() { |
||||||
|
public void keyTyped(KeyEvent e) { |
||||||
|
e.consume(); |
||||||
|
showFormulaPane(); |
||||||
|
} |
||||||
|
}); |
||||||
|
|
||||||
|
JPanel lineStylePane = FRGUIPaneFactory.createNormalFlowInnerContainer_S_Pane(); |
||||||
|
alertLinePane.add(lineStylePane); |
||||||
|
|
||||||
|
lineStylePane.add(new UILabel(Inter.getLocText("Line-Style") + ":")); |
||||||
|
lineCombo = new LineComboBox(CoreConstants.STRIKE_LINE_STYLE_ARRAY_4_CHART); |
||||||
|
lineStylePane.add(lineCombo); |
||||||
|
|
||||||
|
JPanel lineColorPane =FRGUIPaneFactory.createNormalFlowInnerContainer_S_Pane(); |
||||||
|
alertLinePane.add(lineColorPane); |
||||||
|
|
||||||
|
lineColorPane.add(new UILabel(Inter.getLocText(new String[]{"ChartF-Alert-Line", "Color"}) + ":")); |
||||||
|
colorBox = new ColorSelectBox(80); |
||||||
|
lineColorPane.add(colorBox); |
||||||
|
|
||||||
|
alphaPane = new AlphaPane(); |
||||||
|
alertLinePane.add(alphaPane); |
||||||
|
|
||||||
|
JPanel tipPane = FRGUIPaneFactory.createY_AXISBoxInnerContainer_S_Pane(); |
||||||
|
pane.add(tipPane); |
||||||
|
|
||||||
|
tipPane.setBorder(GUICoreUtils.createTitledBorder(Inter.getLocText("Chart_Alert_Tip") + ":", null)); |
||||||
|
|
||||||
|
JPanel centerPane = FRGUIPaneFactory.createNormalFlowInnerContainer_S_Pane(); |
||||||
|
tipPane.add(centerPane); |
||||||
|
|
||||||
|
fontNameBox = new UIComboBox(); |
||||||
|
fontNameBox.setPreferredSize(new Dimension(80,20)); |
||||||
|
|
||||||
|
fontNameBox.addItem("SimSun"); // TODO 这边字体中没有在列表内
|
||||||
|
String[] names = Utils.getAvailableFontFamilyNames4Report(); |
||||||
|
for(int i = 0; i < names.length; i++) { |
||||||
|
fontNameBox.addItem(names[i]); |
||||||
|
} |
||||||
|
|
||||||
|
fontSizeBox = new UIComboBox(); |
||||||
|
fontSizeBox.setPreferredSize(new Dimension(80,20)); |
||||||
|
Integer[] sizes = FRFontPane.Font_Sizes; |
||||||
|
for(int i = 0; i < sizes.length; i++) { |
||||||
|
fontSizeBox.addItem(sizes[i]); |
||||||
|
} |
||||||
|
|
||||||
|
double t = TableLayout.FILL; |
||||||
|
double[] rowSize = {t, t, t, t, t}; |
||||||
|
double[] columnSize = {0.1, 0.2, 0.5, 0.2}; |
||||||
|
Component[][] components= { |
||||||
|
{null, new UILabel(Inter.getLocText("Content") + ":"), contentField = new UITextField(3)}, |
||||||
|
{null, new UILabel(Inter.getLocText("FRFont") + ":"), fontNameBox}, |
||||||
|
{null, new UILabel(Inter.getLocText("FRFont-Size") + ":"), fontSizeBox}, |
||||||
|
{null, new UILabel(Inter.getLocText("Layout") + ": "), leftButton = new UIRadioButton(getLeftName())}, |
||||||
|
{null, null, rightButton = new UIRadioButton(getRightName())}, |
||||||
|
|
||||||
|
}; |
||||||
|
JPanel tablePane = TableLayoutHelper.createTableLayoutPane(components, rowSize, columnSize); |
||||||
|
centerPane.add(tablePane); |
||||||
|
|
||||||
|
ButtonGroup bg = new ButtonGroup(); |
||||||
|
bg.add(leftButton); |
||||||
|
bg.add(rightButton); |
||||||
|
|
||||||
|
leftButton.setSelected(true); |
||||||
|
} |
||||||
|
|
||||||
|
protected String getLeftName() {// 居左 居右
|
||||||
|
return Inter.getLocText("Chart_Alert_Left"); |
||||||
|
} |
||||||
|
|
||||||
|
protected String getRightName() { |
||||||
|
return Inter.getLocText("Chart_Alert_Right"); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected String title4PopupWindow() { |
||||||
|
return Inter.getLocText("ChartF-Alert-Line"); |
||||||
|
} |
||||||
|
|
||||||
|
private void showFormulaPane() { |
||||||
|
final UIFormula formulaPane = FormulaFactory.createFormulaPane(); |
||||||
|
formulaPane.populate(new Formula(textField.getText())); |
||||||
|
formulaPane.showLargeWindow(SwingUtilities.getWindowAncestor(ChartAlertValuePane.this), new DialogActionAdapter(){ |
||||||
|
public void doOk() { |
||||||
|
Formula formula = formulaPane.update(); |
||||||
|
textField.setText(Utils.objectToString(formula)); |
||||||
|
} |
||||||
|
}).setVisible(true); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void populateBean(ChartAlertValue ob) { |
||||||
|
//兼容以前设置的虚线
|
||||||
|
if (ob.getLineStyle().getLineStyle() != Constants.LINE_NONE |
||||||
|
&& ob.getLineStyle().getLineStyle() != Constants.LINE_THIN |
||||||
|
&& ob.getLineStyle().getLineStyle() != Constants.LINE_MEDIUM |
||||||
|
&& ob.getLineStyle().getLineStyle() != Constants.LINE_THICK) { |
||||||
|
ob.getLineStyle().setLineStyle(Constants.LINE_THIN); |
||||||
|
} |
||||||
|
textField.setText(Utils.objectToString(ob.getAlertValueFormula())); |
||||||
|
lineCombo.setSelectedLineStyle(ob.getLineStyle().getLineStyle()); |
||||||
|
colorBox.setSelectObject(ob.getLineColor().getSeriesColor()); |
||||||
|
alphaPane.populate((int)(ob.getAlertLineAlpha() * ALPH_PER)); |
||||||
|
|
||||||
|
contentField.setText(ob.getAlertContent()); |
||||||
|
fontNameBox.setSelectedItem(ob.getAlertFont().getName()); |
||||||
|
fontSizeBox.setSelectedItem(ob.getAlertFont().getSize()); |
||||||
|
|
||||||
|
if(ob.getAlertPosition() == Constants.LEFT) { |
||||||
|
leftButton.setSelected(true); |
||||||
|
} else { |
||||||
|
rightButton.setSelected(true); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public ChartAlertValue updateBean() { |
||||||
|
ChartAlertValue chartAlertValue = new ChartAlertValue(); |
||||||
|
|
||||||
|
updateBean(chartAlertValue); |
||||||
|
return chartAlertValue; |
||||||
|
} |
||||||
|
|
||||||
|
public void updateBean(ChartAlertValue chartAlertValue) { |
||||||
|
|
||||||
|
chartAlertValue.setAlertValueFormula(new Formula(textField.getText())); |
||||||
|
chartAlertValue.getLineColor().setSeriesColor(colorBox.getSelectObject()); |
||||||
|
chartAlertValue.getLineStyle().setLineStyle(lineCombo.getSelectedLineStyle()); |
||||||
|
chartAlertValue.setAlertLineAlpha(alphaPane.update()); |
||||||
|
chartAlertValue.setAlertContent(contentField.getText()); |
||||||
|
|
||||||
|
String fontName = Utils.objectToString(fontNameBox.getSelectedItem()); |
||||||
|
int fontSize = DE_FONT; |
||||||
|
Number number = Utils.objectToNumber(fontSizeBox.getSelectedItem(), true); |
||||||
|
if(number != null) { |
||||||
|
fontSize = number.intValue(); |
||||||
|
} |
||||||
|
chartAlertValue.setAlertFont(FRFont.getInstance(fontName, Font.PLAIN, fontSize)); |
||||||
|
|
||||||
|
if(leftButton.isSelected()) { |
||||||
|
chartAlertValue.setAlertPosition(Constants.LEFT); |
||||||
|
} else if(rightButton.isSelected()) { |
||||||
|
chartAlertValue.setAlertPosition(Constants.RIGHT); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,87 @@ |
|||||||
|
package com.fr.design.chart.axis; |
||||||
|
|
||||||
|
import java.awt.CardLayout; |
||||||
|
import java.util.ArrayList; |
||||||
|
|
||||||
|
import javax.swing.DefaultListModel; |
||||||
|
import javax.swing.JList; |
||||||
|
import javax.swing.JPanel; |
||||||
|
import javax.swing.JSplitPane; |
||||||
|
import javax.swing.event.ListSelectionEvent; |
||||||
|
import javax.swing.event.ListSelectionListener; |
||||||
|
|
||||||
|
import com.fr.chart.chartattr.Axis; |
||||||
|
import com.fr.chart.chartattr.Plot; |
||||||
|
import com.fr.design.layout.FRGUIPaneFactory; |
||||||
|
import com.fr.design.mainframe.chart.gui.style.axis.ChartAxisUsePane; |
||||||
|
import com.fr.design.dialog.BasicPane; |
||||||
|
import com.fr.general.Inter; |
||||||
|
|
||||||
|
/** |
||||||
|
* Created by IntelliJ IDEA. |
||||||
|
* Author : Richer |
||||||
|
* Version: 6.5.6 |
||||||
|
* Date : 11-12-2 |
||||||
|
* Time : 上午8:48 |
||||||
|
*/ |
||||||
|
public abstract class ChartStyleAxisPane extends BasicPane implements ListSelectionListener { |
||||||
|
protected static final String CATE_AXIS = Inter.getLocText("ChartF-Category_Axis"); |
||||||
|
protected static final String VALUE_AXIS = Inter.getLocText("Chart_F_Radar_Axis"); |
||||||
|
protected static final String SECOND_AXIS = Inter.getLocText(new String[]{"Second", "Chart_F_Radar_Axis"}); |
||||||
|
private JList mainList; |
||||||
|
private CardLayout cardLayout; |
||||||
|
private JPanel cardDisplayPane = null; |
||||||
|
private java.util.List<ChartAxisUsePane> axisStylePaneList = new ArrayList<ChartAxisUsePane>(); |
||||||
|
|
||||||
|
public ChartStyleAxisPane(Plot plot) { |
||||||
|
initComponents(plot); |
||||||
|
} |
||||||
|
|
||||||
|
private void initComponents(Plot plot) { |
||||||
|
this.setLayout(FRGUIPaneFactory.createBorderLayout()); |
||||||
|
|
||||||
|
DefaultListModel listModel = new DefaultListModel(); |
||||||
|
mainList = new JList(listModel); |
||||||
|
AxisStyleObject[] axisStyleObjects = createAxisStyleObjects(plot); |
||||||
|
cardLayout = new CardLayout(); |
||||||
|
cardDisplayPane = FRGUIPaneFactory.createCardLayout_S_Pane(); |
||||||
|
cardDisplayPane.setLayout(cardLayout); |
||||||
|
for (int i = 0; i < axisStyleObjects.length; i ++) { |
||||||
|
AxisStyleObject as = axisStyleObjects[i]; |
||||||
|
listModel.addElement(as.getName()); |
||||||
|
ChartAxisUsePane axisStylePane = as.getAxisStylePane(); |
||||||
|
axisStylePaneList.add(axisStylePane); |
||||||
|
cardDisplayPane.add(axisStylePane, as.getName()); |
||||||
|
} |
||||||
|
mainList.setSelectedIndex(0); |
||||||
|
mainList.addListSelectionListener(this); |
||||||
|
this.add(new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, true, mainList, cardDisplayPane)); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected String title4PopupWindow() { |
||||||
|
return "Axis"; |
||||||
|
} |
||||||
|
|
||||||
|
public void valueChanged(ListSelectionEvent e) { |
||||||
|
cardLayout.show(cardDisplayPane, (String)mainList.getSelectedValue()); |
||||||
|
} |
||||||
|
|
||||||
|
public abstract AxisStyleObject[] createAxisStyleObjects(Plot plot); |
||||||
|
|
||||||
|
public void populate(Plot plot) { |
||||||
|
for (int i = 0, len = axisStylePaneList.size(); i < len; i++) { |
||||||
|
// axisStylePaneList.get(i).populate(getAxisFromPlotByListIndex(plot, i));
|
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public void update(Plot plot) { |
||||||
|
for (int i = 0, len = axisStylePaneList.size(); i < len; i++) { |
||||||
|
// axisStylePaneList.get(i).update(getAxisFromPlotByListIndex(plot, i));
|
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
private Axis getAxisFromPlotByListIndex(Plot plot, int index) { |
||||||
|
return plot.getAxis(index); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,19 @@ |
|||||||
|
package com.fr.design.chart.axis; |
||||||
|
|
||||||
|
import com.fr.chart.chartattr.Plot; |
||||||
|
import com.fr.general.Inter; |
||||||
|
|
||||||
|
public class CustomChartStyleAxisPane extends TernaryChartStyleAxisPane { |
||||||
|
|
||||||
|
public CustomChartStyleAxisPane(Plot plot) { |
||||||
|
super(plot); |
||||||
|
} |
||||||
|
|
||||||
|
protected String getValueAxisName() { |
||||||
|
return Inter.getLocText("Main_Axis"); |
||||||
|
} |
||||||
|
|
||||||
|
protected String getSecondValueAxisName() { |
||||||
|
return Inter.getLocText("Second_Axis"); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,28 @@ |
|||||||
|
package com.fr.design.chart.axis; |
||||||
|
|
||||||
|
import com.fr.chart.chartattr.Plot; |
||||||
|
import com.fr.design.mainframe.chart.gui.style.axis.ChartCategoryPane; |
||||||
|
import com.fr.general.Inter; |
||||||
|
|
||||||
|
/** |
||||||
|
* Created by IntelliJ IDEA. |
||||||
|
* Author : Richer |
||||||
|
* Version: 6.5.6 |
||||||
|
* Date : 11-12-6 |
||||||
|
* Time : 上午9:50 |
||||||
|
*/ |
||||||
|
public class GanntChartStyleAxisPane extends BinaryChartStyleAxisPane { |
||||||
|
public GanntChartStyleAxisPane(Plot plot) { |
||||||
|
super(plot); |
||||||
|
} |
||||||
|
|
||||||
|
protected AxisStyleObject getXAxisPane(Plot plot) { |
||||||
|
ChartCategoryPane categoryPane = new ChartCategoryPane(); |
||||||
|
categoryPane.getAxisValueTypePane().removeTextAxisPane(); |
||||||
|
return new AxisStyleObject(Inter.getLocText("Chart_Date_Axis"), categoryPane); |
||||||
|
} |
||||||
|
|
||||||
|
protected AxisStyleObject getYAxisPane(Plot plot) { |
||||||
|
return new AxisStyleObject(CATE_AXIS, new ChartCategoryPane()); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,193 @@ |
|||||||
|
package com.fr.design.chart.axis; |
||||||
|
|
||||||
|
import com.fr.base.Formula; |
||||||
|
import com.fr.chart.base.ChartBaseUtils; |
||||||
|
import com.fr.chart.chartattr.Axis; |
||||||
|
import com.fr.design.chart.ChartSwingUtils; |
||||||
|
import com.fr.design.gui.icheckbox.UICheckBox; |
||||||
|
import com.fr.design.gui.itextfield.UITextField; |
||||||
|
import com.fr.design.layout.TableLayout; |
||||||
|
import com.fr.design.layout.TableLayoutHelper; |
||||||
|
import com.fr.general.Inter; |
||||||
|
import com.fr.stable.StringUtils; |
||||||
|
|
||||||
|
import javax.swing.*; |
||||||
|
import java.awt.*; |
||||||
|
import java.awt.event.ActionEvent; |
||||||
|
import java.awt.event.ActionListener; |
||||||
|
|
||||||
|
public class MinMaxValuePane extends JPanel { |
||||||
|
private static final long serialVersionUID = 3353266754022091576L; |
||||||
|
protected UICheckBox maxCheckBox; |
||||||
|
protected UITextField maxValueField; |
||||||
|
protected UICheckBox minCheckBox; |
||||||
|
protected UITextField minValueField; |
||||||
|
|
||||||
|
// 主次要刻度单位
|
||||||
|
protected UICheckBox isCustomMainUnitBox; |
||||||
|
protected UITextField mainUnitField; |
||||||
|
|
||||||
|
protected UICheckBox isCustomSecUnitBox; |
||||||
|
protected UITextField secUnitField; |
||||||
|
|
||||||
|
public MinMaxValuePane() { |
||||||
|
minCheckBox = new UICheckBox(Inter.getLocText(new String[]{"Custom", "Min_Value"})); |
||||||
|
minValueField = new UITextField(6); |
||||||
|
maxCheckBox = new UICheckBox(Inter.getLocText(new String[]{"Custom", "Max_Value"})); |
||||||
|
maxValueField = new UITextField(6); |
||||||
|
isCustomMainUnitBox = new UICheckBox(Inter.getLocText("FR-Chart_MainGraduationUnit")); |
||||||
|
mainUnitField = new UITextField(6); |
||||||
|
isCustomSecUnitBox = new UICheckBox(Inter.getLocText("FR-Chart_SecondGraduationUnit")); |
||||||
|
secUnitField = new UITextField(6); |
||||||
|
double p = TableLayout.PREFERRED; |
||||||
|
double f = TableLayout.FILL; |
||||||
|
double[] columnSize = { p, f }; |
||||||
|
double[] rowSize = { p, p, p, p}; |
||||||
|
|
||||||
|
Component[][] components = getPanelComponents(); |
||||||
|
JPanel panel = TableLayoutHelper.createTableLayoutPane(components ,rowSize,columnSize); |
||||||
|
this.setLayout(new BorderLayout()); |
||||||
|
this.add(panel,BorderLayout.CENTER); |
||||||
|
|
||||||
|
for(int i = 0; i < components.length; i++) { |
||||||
|
((UICheckBox)components[i][0]).addActionListener(new ActionListener() { |
||||||
|
|
||||||
|
@Override |
||||||
|
public void actionPerformed(ActionEvent e) { |
||||||
|
checkBoxUse(); |
||||||
|
} |
||||||
|
}); |
||||||
|
ChartSwingUtils.addListener((UICheckBox)components[i][0], (UITextField)components[i][1]); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
protected Component[][] getPanelComponents() { |
||||||
|
return new Component[][]{ |
||||||
|
new Component[]{minCheckBox, minValueField}, |
||||||
|
new Component[]{maxCheckBox, maxValueField}, |
||||||
|
new Component[]{isCustomMainUnitBox, mainUnitField}, |
||||||
|
new Component[]{isCustomSecUnitBox, secUnitField}, |
||||||
|
}; |
||||||
|
} |
||||||
|
|
||||||
|
private void checkBoxUse() { |
||||||
|
minValueField.setEnabled(minCheckBox.isSelected()); |
||||||
|
maxValueField.setEnabled(maxCheckBox.isSelected()); |
||||||
|
|
||||||
|
mainUnitField.setEnabled(isCustomMainUnitBox.isSelected()); |
||||||
|
secUnitField.setEnabled(isCustomSecUnitBox.isSelected()); |
||||||
|
} |
||||||
|
|
||||||
|
public void setPaneEditable(boolean isEditable) { |
||||||
|
minCheckBox.setEnabled(isEditable); |
||||||
|
maxCheckBox.setEnabled(isEditable); |
||||||
|
minValueField.setEnabled(isEditable); |
||||||
|
maxValueField.setEnabled(isEditable); |
||||||
|
|
||||||
|
mainUnitField.setEnabled(isEditable); |
||||||
|
secUnitField.setEnabled(isEditable); |
||||||
|
isCustomMainUnitBox.setEnabled(isEditable); |
||||||
|
isCustomSecUnitBox.setEnabled(isEditable); |
||||||
|
checkBoxUse(); |
||||||
|
} |
||||||
|
|
||||||
|
public void populate(Axis axis) { |
||||||
|
if(axis == null) { |
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
if (axis.isCustomMinValue()) { |
||||||
|
minCheckBox.setSelected(true); |
||||||
|
if(axis.getMinValue() != null) { |
||||||
|
minValueField.setText(axis.getMinValue().toString()); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
// 最大值
|
||||||
|
if (axis.isCustomMaxValue()) { |
||||||
|
maxCheckBox.setSelected(true); |
||||||
|
if(axis.getMaxValue() != null) { |
||||||
|
maxValueField.setText(axis.getMaxValue().toString()); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
// 主次刻度单位
|
||||||
|
if (axis.isCustomMainUnit()) { |
||||||
|
isCustomMainUnitBox.setSelected(true); |
||||||
|
if(axis.getMainUnit() != null) { |
||||||
|
mainUnitField.setText(axis.getMainUnit().toString()); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
if(axis.isCustomSecUnit()) { |
||||||
|
isCustomSecUnitBox.setSelected(true); |
||||||
|
if(axis.getSecUnit() != null) { |
||||||
|
secUnitField.setText(axis.getSecUnit().toString()); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
checkBoxUse(); |
||||||
|
} |
||||||
|
|
||||||
|
public void update(Axis axis) { |
||||||
|
if (axis == null) { |
||||||
|
return; |
||||||
|
} |
||||||
|
// 最大最小值
|
||||||
|
if (minCheckBox.isSelected()) { |
||||||
|
axis.setCustomMinValue(StringUtils.isNotEmpty(minValueField.getText())); |
||||||
|
axis.setMinValue(new Formula(minValueField.getText())); |
||||||
|
} else { |
||||||
|
axis.setCustomMinValue(false); |
||||||
|
} |
||||||
|
if (maxCheckBox.isSelected()) { |
||||||
|
axis.setCustomMaxValue(StringUtils.isNotEmpty(maxValueField.getText())); |
||||||
|
axis.setMaxValue(new Formula(maxValueField.getText())); |
||||||
|
} else { |
||||||
|
axis.setCustomMaxValue(false); |
||||||
|
} |
||||||
|
|
||||||
|
updateUnit(axis); |
||||||
|
} |
||||||
|
|
||||||
|
private void updateUnit(Axis axis) { |
||||||
|
// 主要刻度
|
||||||
|
if (isCustomMainUnitBox.isSelected()){ |
||||||
|
String increment = mainUnitField.getText(); |
||||||
|
if(StringUtils.isEmpty(increment)) { |
||||||
|
axis.setCustomMainUnit(false); |
||||||
|
axis.setMainUnit(null); |
||||||
|
} else { |
||||||
|
axis.setCustomMainUnit(true); |
||||||
|
Formula formula = new Formula(increment); |
||||||
|
Number number = ChartBaseUtils.formula2Number(formula); |
||||||
|
if(number != null && number.doubleValue() < 0) { |
||||||
|
axis.setMainUnit(new Formula("10")); |
||||||
|
} else { |
||||||
|
axis.setMainUnit(formula); |
||||||
|
} |
||||||
|
} |
||||||
|
} else { |
||||||
|
axis.setCustomMainUnit(false); |
||||||
|
} |
||||||
|
|
||||||
|
if (isCustomSecUnitBox.isSelected()){ |
||||||
|
String increment = secUnitField.getText(); |
||||||
|
if(StringUtils.isEmpty(increment)) { |
||||||
|
axis.setCustomSecUnit(false); |
||||||
|
axis.setSecUnit(null); |
||||||
|
} else { |
||||||
|
axis.setCustomSecUnit(true); |
||||||
|
Formula formula = new Formula(increment); |
||||||
|
Number number = ChartBaseUtils.formula2Number(formula); |
||||||
|
if(number != null && number.doubleValue() < 0) { |
||||||
|
axis.setSecUnit(new Formula("10")); |
||||||
|
} else { |
||||||
|
axis.setSecUnit(formula); |
||||||
|
} |
||||||
|
} |
||||||
|
} else { |
||||||
|
axis.setCustomSecUnit(false); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,26 @@ |
|||||||
|
package com.fr.design.chart.axis; |
||||||
|
|
||||||
|
import com.fr.chart.chartattr.Plot; |
||||||
|
import com.fr.design.mainframe.chart.gui.style.axis.ChartRadarPane; |
||||||
|
|
||||||
|
/** |
||||||
|
* Created by IntelliJ IDEA. |
||||||
|
* Author : Richer |
||||||
|
* Version: 6.5.6 |
||||||
|
* Date : 11-12-5 |
||||||
|
* Time : 下午7:18 |
||||||
|
* 雷达图的图表样式--> 坐标轴界面 |
||||||
|
*/ |
||||||
|
public class RadarChartStyleAxisPane extends ChartStyleAxisPane { |
||||||
|
private static final long serialVersionUID = 8919941507725513032L; |
||||||
|
|
||||||
|
public RadarChartStyleAxisPane(Plot plot) { |
||||||
|
super(plot); |
||||||
|
} |
||||||
|
|
||||||
|
public final AxisStyleObject[] createAxisStyleObjects(Plot plot) { |
||||||
|
return new AxisStyleObject[]{new AxisStyleObject( |
||||||
|
CATE_AXIS, |
||||||
|
new ChartRadarPane())}; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,42 @@ |
|||||||
|
package com.fr.design.chart.axis; |
||||||
|
|
||||||
|
import com.fr.chart.chartattr.Plot; |
||||||
|
import com.fr.design.mainframe.chart.gui.style.axis.ChartCategoryPane; |
||||||
|
import com.fr.design.mainframe.chart.gui.style.axis.ChartSecondValuePane; |
||||||
|
import com.fr.design.mainframe.chart.gui.style.axis.ChartValuePane; |
||||||
|
|
||||||
|
/** |
||||||
|
* Created by IntelliJ IDEA. |
||||||
|
* Author : Richer |
||||||
|
* Version: 6.5.6 |
||||||
|
* Date : 11-12-6 |
||||||
|
* Time : 上午8:58 |
||||||
|
* 三元坐标设置界面 |
||||||
|
*/ |
||||||
|
public class TernaryChartStyleAxisPane extends ChartStyleAxisPane { |
||||||
|
private static final long serialVersionUID = 539802340384090324L; |
||||||
|
|
||||||
|
public TernaryChartStyleAxisPane(Plot plot) { |
||||||
|
super(plot); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public AxisStyleObject[] createAxisStyleObjects(Plot plot) { |
||||||
|
return new AxisStyleObject[]{ |
||||||
|
new AxisStyleObject(CATE_AXIS, |
||||||
|
new ChartCategoryPane()), |
||||||
|
new AxisStyleObject(getValueAxisName(), |
||||||
|
new ChartValuePane()), |
||||||
|
new AxisStyleObject(getSecondValueAxisName(), |
||||||
|
new ChartSecondValuePane()) |
||||||
|
}; |
||||||
|
} |
||||||
|
|
||||||
|
protected String getValueAxisName() { |
||||||
|
return VALUE_AXIS; |
||||||
|
} |
||||||
|
|
||||||
|
protected String getSecondValueAxisName() { |
||||||
|
return SECOND_AXIS; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,25 @@ |
|||||||
|
package com.fr.design.chart.axis; |
||||||
|
|
||||||
|
import com.fr.chart.chartattr.Plot; |
||||||
|
import com.fr.design.mainframe.chart.gui.style.axis.ChartValuePane; |
||||||
|
|
||||||
|
/** |
||||||
|
* Created by IntelliJ IDEA. |
||||||
|
* Author : Richer |
||||||
|
* Version: 6.5.6 |
||||||
|
* Date : 11-12-6 |
||||||
|
* Time : 上午9:02 |
||||||
|
*/ |
||||||
|
public class ValueChartStyleAxisPane extends ChartStyleAxisPane { |
||||||
|
private static final long serialVersionUID = 8513685484255363315L; |
||||||
|
|
||||||
|
public ValueChartStyleAxisPane(Plot plot) { |
||||||
|
super(plot); |
||||||
|
} |
||||||
|
|
||||||
|
public final AxisStyleObject[] createAxisStyleObjects(Plot plot) { |
||||||
|
return new AxisStyleObject[]{new AxisStyleObject( |
||||||
|
CATE_AXIS, |
||||||
|
new ChartValuePane())}; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,26 @@ |
|||||||
|
package com.fr.design.chart.axis; |
||||||
|
|
||||||
|
import com.fr.chart.chartattr.Plot; |
||||||
|
import com.fr.design.mainframe.chart.gui.style.axis.ChartValuePane; |
||||||
|
import com.fr.general.Inter; |
||||||
|
|
||||||
|
/** |
||||||
|
* Created by IntelliJ IDEA. |
||||||
|
* Author : Richer |
||||||
|
* Version: 6.5.6 |
||||||
|
* Date : 11-12-6 |
||||||
|
* Time : 上午9:51 |
||||||
|
*/ |
||||||
|
public class XYChartStyleAxisPane extends BinaryChartStyleAxisPane { |
||||||
|
public XYChartStyleAxisPane(Plot plot) { |
||||||
|
super(plot); |
||||||
|
} |
||||||
|
|
||||||
|
protected AxisStyleObject getXAxisPane(Plot plot) { |
||||||
|
return new AxisStyleObject(Inter.getLocText("ChartF-X_Axis"), new ChartValuePane()); |
||||||
|
} |
||||||
|
|
||||||
|
protected AxisStyleObject getYAxisPane(Plot plot) { |
||||||
|
return new AxisStyleObject(Inter.getLocText("ChartF-Y_Axis"), new ChartValuePane()); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,59 @@ |
|||||||
|
package com.fr.design.chart.comp; |
||||||
|
|
||||||
|
import com.fr.design.gui.ilable.UILabel; |
||||||
|
import com.fr.general.Inter; |
||||||
|
import com.fr.stable.Constants; |
||||||
|
import com.fr.stable.CoreConstants; |
||||||
|
import com.fr.design.gui.icombobox.LineComboBox; |
||||||
|
import com.fr.design.dialog.BasicPane; |
||||||
|
import com.fr.design.style.color.ColorSelectBox; |
||||||
|
|
||||||
|
import java.awt.*; |
||||||
|
|
||||||
|
public class BorderAttriPane extends BasicPane { |
||||||
|
|
||||||
|
private LineComboBox lineCombo; |
||||||
|
private ColorSelectBox colorSelectBox; |
||||||
|
|
||||||
|
public BorderAttriPane() { |
||||||
|
this(Inter.getLocText("Line-Style"), Inter.getLocText("Color")); |
||||||
|
} |
||||||
|
|
||||||
|
public BorderAttriPane(String lineString, String colorSting) { |
||||||
|
this.setLayout(new FlowLayout(FlowLayout.LEFT, 2, 0)); |
||||||
|
|
||||||
|
this.add(new UILabel(lineString + ":")); |
||||||
|
this.add(lineCombo = new LineComboBox(CoreConstants.STRIKE_LINE_STYLE_ARRAY_4_CHART)); |
||||||
|
lineCombo.setPreferredSize(new Dimension(60, 18)); |
||||||
|
|
||||||
|
this.add(new UILabel(colorSting + ":")); |
||||||
|
this.add(colorSelectBox = new ColorSelectBox(80)); |
||||||
|
colorSelectBox.setPreferredSize(new Dimension(60, 18)); |
||||||
|
colorSelectBox.setSelectObject(null); |
||||||
|
} |
||||||
|
|
||||||
|
public void setLineColor(Color color) { |
||||||
|
this.colorSelectBox.setSelectObject(color); |
||||||
|
} |
||||||
|
|
||||||
|
public Color getLineColor() { |
||||||
|
return this.colorSelectBox.getSelectObject(); |
||||||
|
} |
||||||
|
|
||||||
|
public void setLineStyle(int style) { |
||||||
|
if (style != Constants.LINE_NONE && style != Constants.LINE_THICK |
||||||
|
&& style != Constants.LINE_THIN && style != Constants.LINE_MEDIUM) { |
||||||
|
style = Constants.LINE_THIN; |
||||||
|
} |
||||||
|
this.lineCombo.setSelectedLineStyle(style); |
||||||
|
} |
||||||
|
|
||||||
|
public int getLineStyle() { |
||||||
|
return lineCombo.getSelectedLineStyle(); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected String title4PopupWindow() { |
||||||
|
return "Border"; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,123 @@ |
|||||||
|
package com.fr.design.chart.demo; |
||||||
|
|
||||||
|
import com.fr.chart.chartattr.Chart; |
||||||
|
import com.fr.chart.chartattr.ChartCollection; |
||||||
|
import com.fr.chart.charttypes.*; |
||||||
|
import com.fr.design.chart.gui.ChartComponent; |
||||||
|
import com.fr.design.gui.frpane.UITabbedPane; |
||||||
|
import com.fr.design.layout.FRGUIPaneFactory; |
||||||
|
|
||||||
|
import javax.swing.*; |
||||||
|
import java.awt.*; |
||||||
|
|
||||||
|
public class GlyphDemo extends JFrame { |
||||||
|
private static final long serialVersionUID = -3174315376448330927L; |
||||||
|
|
||||||
|
/** |
||||||
|
* 主函数 |
||||||
|
* @param args 参数 |
||||||
|
*/ |
||||||
|
public static void main(String[] args) { |
||||||
|
new GlyphDemo(); |
||||||
|
} |
||||||
|
|
||||||
|
public GlyphDemo() { |
||||||
|
JPanel contentPane = (JPanel)this.getContentPane(); |
||||||
|
contentPane.setLayout(FRGUIPaneFactory.createBorderLayout()); |
||||||
|
UITabbedPane tab = new UITabbedPane(); |
||||||
|
contentPane.add(tab, BorderLayout.CENTER); |
||||||
|
|
||||||
|
tab.add("Line", createGlyphLinePanel()); |
||||||
|
tab.add("Bar", createBarPanel()); |
||||||
|
tab.add("Area", createAreaPanel()); |
||||||
|
tab.add("Meter", createMeterPanel()); |
||||||
|
tab.add("Pie", createPiePanel()); |
||||||
|
tab.add("Radar", createRadarPanel()); |
||||||
|
tab.add("Stock", createStockPanel()); |
||||||
|
tab.add("XYScatter", createXYScatterPanel()); |
||||||
|
tab.add("Range", createRangePanel()); |
||||||
|
tab.add("Mix", createCustomPanel()); |
||||||
|
tab.add("Gantt", createGanttPanel()); |
||||||
|
tab.add("Bubble", createBubblePane()); |
||||||
|
|
||||||
|
setSize(1200, 600); |
||||||
|
// 关闭时退出
|
||||||
|
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); |
||||||
|
|
||||||
|
setTitle("Line Glyph Demo"); |
||||||
|
setVisible(true); |
||||||
|
} |
||||||
|
|
||||||
|
private JPanel createGlyphLinePanel() { |
||||||
|
Chart[] chr = LineIndependentChart.lineChartTypes; |
||||||
|
|
||||||
|
return contentPane(chr,2,4); |
||||||
|
} |
||||||
|
|
||||||
|
private JPanel createBarPanel() { |
||||||
|
Chart[] chr= ColumnIndependentChart.columnChartTypes; |
||||||
|
return contentPane(chr,2,4); |
||||||
|
} |
||||||
|
|
||||||
|
private JPanel createAreaPanel() { |
||||||
|
Chart[] chr= AreaIndependentChart.areaChartTypes; |
||||||
|
return contentPane(chr,2,4); |
||||||
|
} |
||||||
|
|
||||||
|
private JPanel createMeterPanel() { |
||||||
|
Chart[] chr= MeterIndependentChart.meterChartTypes; |
||||||
|
return contentPane(chr,2,4); |
||||||
|
} |
||||||
|
|
||||||
|
private JPanel createPiePanel() { |
||||||
|
Chart[] chr = PieIndependentChart.pieChartTypes; |
||||||
|
JPanel contentPane = contentPane(chr,2,4); |
||||||
|
|
||||||
|
return contentPane; |
||||||
|
} |
||||||
|
|
||||||
|
private JPanel createRadarPanel() { |
||||||
|
Chart[] chr = RadarIndependentChart.radarChartTypes; |
||||||
|
return contentPane(chr,2,4); |
||||||
|
} |
||||||
|
|
||||||
|
private JPanel createStockPanel() { |
||||||
|
Chart[] chr = StockIndependentChart.stockChartTypes; |
||||||
|
return contentPane(chr,2,4); |
||||||
|
} |
||||||
|
|
||||||
|
private JPanel createXYScatterPanel() { |
||||||
|
Chart[] chr = XYScatterIndependentChart.XYScatterChartTypes; |
||||||
|
return contentPane(chr,2,4); |
||||||
|
} |
||||||
|
|
||||||
|
private JPanel createRangePanel() { |
||||||
|
Chart[] chr = RangeIndependentChart.rangeChartTypes; |
||||||
|
return contentPane(chr,2,4); |
||||||
|
} |
||||||
|
|
||||||
|
private JPanel createCustomPanel() { |
||||||
|
Chart[] chr = CustomIndependentChart.combChartTypes; |
||||||
|
return contentPane(chr,2,4); |
||||||
|
} |
||||||
|
|
||||||
|
private JPanel createGanttPanel() { |
||||||
|
Chart[] chr = GanttIndependentChart.ganttChartTypes; |
||||||
|
return contentPane(chr,2,4); |
||||||
|
} |
||||||
|
|
||||||
|
private JPanel createBubblePane() { |
||||||
|
Chart[] chr = BubbleIndependentChart.bubbleChartTypes; |
||||||
|
return contentPane(chr,2,4); |
||||||
|
} |
||||||
|
|
||||||
|
private JPanel contentPane(Chart[] chr,int x,int y){ |
||||||
|
JPanel contentPane = FRGUIPaneFactory.createNormalFlowInnerContainer_S_Pane(); |
||||||
|
contentPane.setLayout(new /**/ GridLayout(x, y)); |
||||||
|
for(int i=0;i<chr.length;i++){ |
||||||
|
contentPane.add(new ChartComponent(new ChartCollection(chr[i]))); |
||||||
|
} |
||||||
|
|
||||||
|
return contentPane; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,86 @@ |
|||||||
|
package com.fr.design.chart.fun; |
||||||
|
|
||||||
|
import com.fr.chart.chartattr.Plot; |
||||||
|
import com.fr.design.beans.BasicBeanPane; |
||||||
|
import com.fr.design.condition.ConditionAttributesPane; |
||||||
|
import com.fr.design.gui.frpane.AttributeChangeListener; |
||||||
|
import com.fr.design.mainframe.chart.AbstractChartAttrPane; |
||||||
|
import com.fr.design.mainframe.chart.gui.ChartDataPane; |
||||||
|
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.table.AbstractTableDataContentPane; |
||||||
|
import com.fr.design.mainframe.chart.gui.type.AbstractChartTypePane; |
||||||
|
import com.fr.stable.fun.Level; |
||||||
|
|
||||||
|
/** |
||||||
|
* Created by eason on 14/12/29. |
||||||
|
* |
||||||
|
* @since 8.0 |
||||||
|
* 自定义图表类型设设计界面接口 |
||||||
|
*/ |
||||||
|
public interface IndependentChartUIProvider extends Level { |
||||||
|
|
||||||
|
String XML_TAG = "IndependentChartUIProvider"; |
||||||
|
|
||||||
|
int CURRENT_API_LEVEL = 2; |
||||||
|
|
||||||
|
/** |
||||||
|
* 图表的类型定义界面类型,就是属性表的第一个界面 |
||||||
|
* |
||||||
|
* @return 图表的类型定义界面类型 |
||||||
|
*/ |
||||||
|
AbstractChartTypePane getPlotTypePane(); |
||||||
|
|
||||||
|
/** |
||||||
|
* 数据集数据源的界面 |
||||||
|
* |
||||||
|
* @return 数据集数据源的界面 |
||||||
|
*/ |
||||||
|
AbstractTableDataContentPane getTableDataSourcePane(Plot plot, ChartDataPane parent); |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* 单元格数据源的界面 |
||||||
|
* |
||||||
|
* @return 单元格数据源的界面 |
||||||
|
*/ |
||||||
|
AbstractReportDataContentPane getReportDataSourcePane(Plot plot, ChartDataPane parent); |
||||||
|
|
||||||
|
/** |
||||||
|
* 条件属性界面 |
||||||
|
* |
||||||
|
* @return 条件属性界面 |
||||||
|
*/ |
||||||
|
ConditionAttributesPane getPlotConditionPane(Plot plot); |
||||||
|
|
||||||
|
/** |
||||||
|
* 系列界面 |
||||||
|
* |
||||||
|
* @return 系列界面 |
||||||
|
*/ |
||||||
|
BasicBeanPane<Plot> getPlotSeriesPane(ChartStylePane parent, Plot plot); |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* 图表的属性界面数组 |
||||||
|
* |
||||||
|
* @return 属性界面 |
||||||
|
*/ |
||||||
|
AbstractChartAttrPane[] getAttrPaneArray(AttributeChangeListener listener); |
||||||
|
|
||||||
|
/** |
||||||
|
* 是否使用默认的界面,为了避免界面来回切换 |
||||||
|
* |
||||||
|
* @return 是否使用默认的界面 |
||||||
|
*/ |
||||||
|
boolean isUseDefaultPane(); |
||||||
|
|
||||||
|
/** |
||||||
|
* 图标路径 |
||||||
|
* |
||||||
|
* @return 图标路径 |
||||||
|
*/ |
||||||
|
String getIconPath(); |
||||||
|
|
||||||
|
|
||||||
|
} |
@ -0,0 +1,52 @@ |
|||||||
|
package com.fr.design.chart.fun.impl; |
||||||
|
|
||||||
|
import com.fr.chart.chartattr.Plot; |
||||||
|
import com.fr.design.beans.BasicBeanPane; |
||||||
|
import com.fr.design.chart.fun.IndependentChartUIProvider; |
||||||
|
import com.fr.design.chart.series.SeriesCondition.DataSeriesConditionPane; |
||||||
|
import com.fr.design.condition.ConditionAttributesPane; |
||||||
|
import com.fr.design.gui.frpane.AttributeChangeListener; |
||||||
|
import com.fr.design.mainframe.chart.AbstractChartAttrPane; |
||||||
|
import com.fr.design.mainframe.chart.gui.ChartStylePane; |
||||||
|
import com.fr.general.ComparatorUtils; |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* Created by eason on 15/4/23. |
||||||
|
*/ |
||||||
|
@Deprecated |
||||||
|
public abstract class AbstractIndependentChartUI implements IndependentChartUIProvider { |
||||||
|
|
||||||
|
@Override |
||||||
|
public int currentAPILevel() { |
||||||
|
return -1; |
||||||
|
} |
||||||
|
|
||||||
|
public AbstractChartAttrPane[] getAttrPaneArray(AttributeChangeListener listener){ |
||||||
|
return new AbstractChartAttrPane[0]; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 是否使用默认的界面,为了避免界面来回切换 |
||||||
|
* @return 是否使用默认的界面 |
||||||
|
*/ |
||||||
|
public boolean isUseDefaultPane(){ |
||||||
|
return true; |
||||||
|
} |
||||||
|
|
||||||
|
public BasicBeanPane<Plot> getPlotSeriesPane(ChartStylePane parent, Plot plot){ |
||||||
|
return getPlotSeriesPane(); |
||||||
|
} |
||||||
|
|
||||||
|
public BasicBeanPane<Plot> getPlotSeriesPane(){ |
||||||
|
return null; |
||||||
|
} |
||||||
|
|
||||||
|
public boolean equals(Object obj) { |
||||||
|
return obj != null && ComparatorUtils.equals(obj.getClass(), this.getClass()); |
||||||
|
} |
||||||
|
|
||||||
|
public ConditionAttributesPane getPlotConditionPane(Plot plot){ |
||||||
|
return new DataSeriesConditionPane(); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,49 @@ |
|||||||
|
package com.fr.design.chart.fun.impl; |
||||||
|
|
||||||
|
import com.fr.chart.chartattr.Plot; |
||||||
|
import com.fr.design.beans.BasicBeanPane; |
||||||
|
import com.fr.design.chart.fun.IndependentChartUIProvider; |
||||||
|
import com.fr.design.chart.series.SeriesCondition.DataSeriesConditionPane; |
||||||
|
import com.fr.design.condition.ConditionAttributesPane; |
||||||
|
import com.fr.design.gui.frpane.AttributeChangeListener; |
||||||
|
import com.fr.design.mainframe.chart.AbstractChartAttrPane; |
||||||
|
import com.fr.design.mainframe.chart.gui.ChartStylePane; |
||||||
|
import com.fr.general.ComparatorUtils; |
||||||
|
|
||||||
|
/** |
||||||
|
* Created by Mitisky on 16/3/7. |
||||||
|
*/ |
||||||
|
public abstract class AbstractIndependentChartUIWithAPILevel implements IndependentChartUIProvider { |
||||||
|
@Override |
||||||
|
public int currentAPILevel() { |
||||||
|
return CURRENT_API_LEVEL; |
||||||
|
} |
||||||
|
|
||||||
|
public AbstractChartAttrPane[] getAttrPaneArray(AttributeChangeListener listener){ |
||||||
|
return new AbstractChartAttrPane[0]; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 是否使用默认的界面,为了避免界面来回切换 |
||||||
|
* @return 是否使用默认的界面 |
||||||
|
*/ |
||||||
|
public boolean isUseDefaultPane(){ |
||||||
|
return true; |
||||||
|
} |
||||||
|
|
||||||
|
public BasicBeanPane<Plot> getPlotSeriesPane(ChartStylePane parent, Plot plot){ |
||||||
|
return getPlotSeriesPane(); |
||||||
|
} |
||||||
|
|
||||||
|
public BasicBeanPane<Plot> getPlotSeriesPane(){ |
||||||
|
return null; |
||||||
|
} |
||||||
|
|
||||||
|
public boolean equals(Object obj) { |
||||||
|
return obj != null && ComparatorUtils.equals(obj.getClass(), this.getClass()); |
||||||
|
} |
||||||
|
|
||||||
|
public ConditionAttributesPane getPlotConditionPane(Plot plot){ |
||||||
|
return new DataSeriesConditionPane(); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,97 @@ |
|||||||
|
package com.fr.design.chart.gui; |
||||||
|
|
||||||
|
import java.util.HashMap; |
||||||
|
import java.util.Map; |
||||||
|
|
||||||
|
import com.fr.base.chart.Glyph; |
||||||
|
import com.fr.chart.chartglyph.CategoryAxisGlyph; |
||||||
|
import com.fr.chart.chartglyph.ChartAlertValueGlyph; |
||||||
|
import com.fr.chart.chartglyph.ChartGlyph; |
||||||
|
import com.fr.chart.chartglyph.DataSeries; |
||||||
|
import com.fr.chart.chartglyph.DataSheetGlyph; |
||||||
|
import com.fr.chart.chartglyph.DateAxisGlyph; |
||||||
|
import com.fr.chart.chartglyph.LegendGlyph; |
||||||
|
import com.fr.chart.chartglyph.PlotGlyph; |
||||||
|
import com.fr.chart.chartglyph.RadarAxisGlyph; |
||||||
|
import com.fr.chart.chartglyph.RangeAxisGlyph; |
||||||
|
import com.fr.chart.chartglyph.TextGlyph; |
||||||
|
import com.fr.chart.chartglyph.TitleGlyph; |
||||||
|
import com.fr.chart.chartglyph.TrendLineGlyph; |
||||||
|
import com.fr.chart.chartglyph.ValueAxisGlyph; |
||||||
|
import com.fr.design.chart.gui.active.ActiveGlyph; |
||||||
|
import com.fr.design.chart.gui.active.AlertValueActiveGlyph; |
||||||
|
import com.fr.design.chart.gui.active.CategoryAxisActiveGlyph; |
||||||
|
import com.fr.design.chart.gui.active.ChartActiveGlyph; |
||||||
|
import com.fr.design.chart.gui.active.DataLabelActiveGlyph; |
||||||
|
import com.fr.design.chart.gui.active.DataSeriesActiveGlyph; |
||||||
|
import com.fr.design.chart.gui.active.DataSheetActiveGlyph; |
||||||
|
import com.fr.design.chart.gui.active.DateAxisActiveGlyph; |
||||||
|
import com.fr.design.chart.gui.active.LegendActiveGlyph; |
||||||
|
import com.fr.design.chart.gui.active.PlotActiveGlyph; |
||||||
|
import com.fr.design.chart.gui.active.RadarAxisActiveGlyph; |
||||||
|
import com.fr.design.chart.gui.active.RangeAxisActiveGlyph; |
||||||
|
import com.fr.design.chart.gui.active.TextActiveGlyph; |
||||||
|
import com.fr.design.chart.gui.active.TrendLineActiveGlyph; |
||||||
|
import com.fr.design.chart.gui.active.ValueAxisActiveGlyph; |
||||||
|
|
||||||
|
/** |
||||||
|
* Created by IntelliJ IDEA. |
||||||
|
* Author : Richer |
||||||
|
* Version: 6.5.6 |
||||||
|
* Date : 11-11-23 |
||||||
|
* Time : 上午9:08 |
||||||
|
*/ |
||||||
|
public class ActiveGlyphFactory { |
||||||
|
private static Map<String, Class> glyphMap = new HashMap<String, Class>(); |
||||||
|
|
||||||
|
static { |
||||||
|
glyphMap.put(DataSeries.class.getName(), DataSeriesActiveGlyph.class); |
||||||
|
glyphMap.put(RadarAxisGlyph.class.getName(), RadarAxisActiveGlyph.class); |
||||||
|
glyphMap.put(RangeAxisGlyph.class.getName(), RangeAxisActiveGlyph.class); |
||||||
|
glyphMap.put(TitleGlyph.class.getName(), TextActiveGlyph.class); |
||||||
|
glyphMap.put(DateAxisGlyph.class.getName(), DateAxisActiveGlyph.class); |
||||||
|
glyphMap.put(ValueAxisGlyph.class.getName(), ValueAxisActiveGlyph.class); |
||||||
|
glyphMap.put(CategoryAxisGlyph.class.getName(), CategoryAxisActiveGlyph.class); |
||||||
|
glyphMap.put(ChartGlyph.class.getName(), ChartActiveGlyph.class); |
||||||
|
glyphMap.put(DataSheetGlyph.class.getName(), DataSheetActiveGlyph.class); |
||||||
|
glyphMap.put(LegendGlyph.class.getName(), LegendActiveGlyph.class); |
||||||
|
glyphMap.put(TextGlyph.class.getName(), DataLabelActiveGlyph.class); |
||||||
|
glyphMap.put(TrendLineGlyph.class.getName(), TrendLineActiveGlyph.class); |
||||||
|
glyphMap.put(ChartAlertValueGlyph.class.getName(), AlertValueActiveGlyph.class); |
||||||
|
} |
||||||
|
|
||||||
|
private ActiveGlyphFactory() { |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
public static ActiveGlyph createActiveGlyph(ChartComponent chartComponent, Object glyph) { |
||||||
|
return createActiveGlyph(chartComponent, glyph, null); |
||||||
|
} |
||||||
|
|
||||||
|
public static ActiveGlyph createActiveGlyph(ChartComponent chartComponent, Object glyph, Glyph parentGlyph) { |
||||||
|
if (glyph == null) { |
||||||
|
return null; |
||||||
|
} |
||||||
|
String clsName = glyph.getClass().getName(); |
||||||
|
Class cls = glyphMap.get(clsName); |
||||||
|
Class parameterCls = glyph.getClass(); |
||||||
|
if (cls == null) { |
||||||
|
if (clsName.endsWith("PlotGlyph")) { |
||||||
|
cls = PlotActiveGlyph.class; |
||||||
|
parameterCls = PlotGlyph.class; |
||||||
|
} else if (clsName.endsWith("DataSeries4Area")) { |
||||||
|
cls = DataSeriesActiveGlyph.class; |
||||||
|
parameterCls = DataSeries.class; |
||||||
|
} else { |
||||||
|
cls = ChartActiveGlyph.class; |
||||||
|
parameterCls = ChartGlyph.class; |
||||||
|
} |
||||||
|
} |
||||||
|
try { |
||||||
|
Class[] argsClass = new Class[]{ChartComponent.class, parameterCls, Glyph.class}; |
||||||
|
return (ActiveGlyph) cls.getConstructor(argsClass).newInstance(new Object[]{chartComponent, glyph, parentGlyph}); |
||||||
|
} catch (Exception e) { |
||||||
|
return null; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,322 @@ |
|||||||
|
package com.fr.design.chart.gui; |
||||||
|
|
||||||
|
import com.fr.base.FRContext; |
||||||
|
import com.fr.base.ScreenResolution; |
||||||
|
import com.fr.base.chart.BaseChart; |
||||||
|
import com.fr.base.chart.BaseChartCollection; |
||||||
|
import com.fr.base.chart.BaseChartGlyph; |
||||||
|
import com.fr.chart.base.ChartConstants; |
||||||
|
import com.fr.chart.chartattr.Axis; |
||||||
|
import com.fr.chart.chartattr.Chart; |
||||||
|
import com.fr.chart.chartattr.ChartCollection; |
||||||
|
import com.fr.chart.chartglyph.AxisGlyph; |
||||||
|
import com.fr.design.chart.gui.active.ActiveGlyph; |
||||||
|
import com.fr.design.chart.gui.active.ChartActiveGlyph; |
||||||
|
import com.fr.design.gui.chart.MiddleChartComponent; |
||||||
|
import com.fr.stable.ArrayUtils; |
||||||
|
import com.fr.stable.core.PropertyChangeListener; |
||||||
|
|
||||||
|
import java.awt.*; |
||||||
|
import java.awt.event.MouseEvent; |
||||||
|
import java.awt.event.MouseListener; |
||||||
|
import java.awt.event.MouseMotionListener; |
||||||
|
import java.awt.geom.Rectangle2D; |
||||||
|
import java.awt.geom.RoundRectangle2D; |
||||||
|
import java.util.ArrayList; |
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author kunsnat E-mail:kunsnat@gmail.com |
||||||
|
* @version 创建时间:2012-7-3 下午02:46:45 |
||||||
|
* 类说明: 事件说明: 工具栏编辑--> 是刷新ChartComponent 然后响应整个设计块的改变事件 |
||||||
|
右键编辑 ---> 刷新ChartCompment 刷新对应的工具栏(加入事件) 然后响应整个设计块的改变事件 |
||||||
|
*/ |
||||||
|
public class ChartComponent extends MiddleChartComponent implements MouseListener, MouseMotionListener { |
||||||
|
private static final long serialVersionUID = 744164838619052097L; |
||||||
|
private final List<PropertyChangeListener> listeners = new ArrayList<PropertyChangeListener>(); |
||||||
|
private ChartCollection chartCollection4Design; |
||||||
|
private Chart editingChart; |
||||||
|
private BaseChartGlyph chartGlyph; |
||||||
|
private int chartWidth = -1; |
||||||
|
private int chartHeight = -1; |
||||||
|
private Point point; |
||||||
|
|
||||||
|
private ActiveGlyph activeGlyph; |
||||||
|
|
||||||
|
private boolean supportEdit = true; |
||||||
|
|
||||||
|
private final int[] resizeCursors = new int[]{ |
||||||
|
Cursor.NW_RESIZE_CURSOR, Cursor.N_RESIZE_CURSOR, Cursor.NE_RESIZE_CURSOR, |
||||||
|
Cursor.E_RESIZE_CURSOR, Cursor.W_RESIZE_CURSOR, |
||||||
|
Cursor.SE_RESIZE_CURSOR, Cursor.S_RESIZE_CURSOR, Cursor.SW_RESIZE_CURSOR |
||||||
|
}; |
||||||
|
|
||||||
|
public ChartComponent() { |
||||||
|
super(); |
||||||
|
addMouseListener(this); |
||||||
|
addMouseMotionListener(this); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 必须加入 响应事件, 停止当前的选中元素编辑 && 获取焦点 |
||||||
|
* @author kunsnat E-mail kunsnat@gmail.com |
||||||
|
* @param cc |
||||||
|
*/ |
||||||
|
public ChartComponent(ChartCollection cc) { |
||||||
|
this(); |
||||||
|
populate(cc); |
||||||
|
} |
||||||
|
|
||||||
|
public ChartComponent(BaseChartCollection cc) { |
||||||
|
this(); |
||||||
|
populate(cc); |
||||||
|
} |
||||||
|
|
||||||
|
public ChartComponent(ChartCollection cc, PropertyChangeListener l) { |
||||||
|
this(); |
||||||
|
populate(cc); |
||||||
|
addStopEditingListener(l); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* 右键编辑 图表编辑层的监听事件, 在停止编辑时 响应整个编辑模板(form, sheet)的改变. |
||||||
|
* @param l 监听事件 |
||||||
|
*/ |
||||||
|
public void addStopEditingListener(PropertyChangeListener l) { |
||||||
|
if (!listeners.contains(l)) { |
||||||
|
listeners.add(l); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
private void fireStopEditing() { |
||||||
|
for (int len = listeners.size(), i = len; i > 0; i--) { |
||||||
|
listeners.get(i - 1).propertyChange(); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 停止编辑, 通知事情, 刷新画出新界面. |
||||||
|
*/ |
||||||
|
public void reset() { |
||||||
|
fireStopEditing(); |
||||||
|
|
||||||
|
this.editingChart = null; |
||||||
|
this.chartGlyph = null; |
||||||
|
this.activeGlyph = null; |
||||||
|
this.point = null; |
||||||
|
this.chartHeight = this.chartWidth = -1; |
||||||
|
|
||||||
|
this.editingChart = this.chartCollection4Design.getSelectedChart(); |
||||||
|
|
||||||
|
refreshChartGlyph(); |
||||||
|
this.activeGlyph = ActiveGlyphFactory.createActiveGlyph(this, chartGlyph); |
||||||
|
|
||||||
|
repaint(); |
||||||
|
} |
||||||
|
|
||||||
|
public void populate(BaseChartCollection cc) { // kunsnat_bug: 5471 实现设置的即时预览
|
||||||
|
try {// clone 为了判断编辑前后的值.
|
||||||
|
this.chartCollection4Design = (ChartCollection)cc; |
||||||
|
// this.chartCollection4Design = (ChartCollection)cc.clone();
|
||||||
|
} catch (Exception e) { |
||||||
|
FRContext.getLogger().error("ChartCollection clone is Error"); |
||||||
|
} |
||||||
|
reset(); |
||||||
|
} |
||||||
|
|
||||||
|
public BaseChartCollection update() { |
||||||
|
return this.chartCollection4Design; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 设置是否支持编辑, 如:弹出对话框, 右键选中列表 |
||||||
|
*/ |
||||||
|
public void setSupportEdit(boolean supportEdit) { |
||||||
|
this.supportEdit = supportEdit; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 返回是否支持编辑, 如:弹出对话框, 右键选中列表 |
||||||
|
* @return 返回是否支持编辑. |
||||||
|
*/ |
||||||
|
public boolean isSupportEdit() { |
||||||
|
return supportEdit; |
||||||
|
} |
||||||
|
|
||||||
|
public ChartCollection getChartCollection() { |
||||||
|
return chartCollection4Design; |
||||||
|
} |
||||||
|
|
||||||
|
public int getChartSize() { |
||||||
|
return (this.chartCollection4Design == null) ? 0 : this.chartCollection4Design.getChartCount(); |
||||||
|
} |
||||||
|
|
||||||
|
public BaseChart getEditingChart() { |
||||||
|
return editingChart; |
||||||
|
} |
||||||
|
|
||||||
|
public BaseChartGlyph getChartGlyph() { |
||||||
|
return chartGlyph; |
||||||
|
} |
||||||
|
|
||||||
|
public void paintComponent(Graphics g) { //
|
||||||
|
super.paintComponent(g); |
||||||
|
|
||||||
|
Graphics2D g2d = (Graphics2D) g; |
||||||
|
|
||||||
|
Paint oldPaint = g2d.getPaint(); |
||||||
|
|
||||||
|
g2d.setPaint(Color.white); |
||||||
|
g2d.fillRect(0, 0, this.getBounds().width, this.getBounds().height); |
||||||
|
g2d.setPaint(oldPaint); |
||||||
|
|
||||||
|
g2d.translate(ChartConstants.PREGAP4BOUNDS/2, ChartConstants.PREGAP4BOUNDS/2); |
||||||
|
|
||||||
|
if (needRefreshChartGlyph()) { |
||||||
|
refreshChartGlyph(); |
||||||
|
} |
||||||
|
|
||||||
|
Object lastHint = g2d.getRenderingHint(RenderingHints.KEY_ANTIALIASING); |
||||||
|
// 反锯齿
|
||||||
|
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); |
||||||
|
|
||||||
|
drawChartGlyph(g2d); |
||||||
|
|
||||||
|
ActiveGlyph ag = this.getActiveGlyph(); |
||||||
|
if (ag != null) { |
||||||
|
ag.paint4ActiveGlyph(g2d, chartGlyph); |
||||||
|
} |
||||||
|
|
||||||
|
g2d.translate(-ChartConstants.PREGAP4BOUNDS/2, -ChartConstants.PREGAP4BOUNDS/2); |
||||||
|
if (lastHint == null) { |
||||||
|
lastHint = RenderingHints.VALUE_ANTIALIAS_OFF; |
||||||
|
} |
||||||
|
|
||||||
|
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, lastHint); |
||||||
|
} |
||||||
|
|
||||||
|
/* |
||||||
|
* ChartGlyph改变大小的时候做的操作 |
||||||
|
*/ |
||||||
|
private void refreshChartGlyph() { |
||||||
|
Dimension d = getBounds().getSize(); |
||||||
|
this.editingChart = this.chartCollection4Design.getSelectedChart();// kunsnat: 切换选中时 同步切换Plot
|
||||||
|
if (editingChart != null) { |
||||||
|
this.chartGlyph = editingChart.createGlyph(editingChart.defaultChartData()); |
||||||
|
this.activeGlyph = ActiveGlyphFactory.createActiveGlyph(this, chartGlyph); |
||||||
|
} |
||||||
|
this.chartWidth = d.width - ChartConstants.PREGAP4BOUNDS; |
||||||
|
this.chartHeight = d.height - ChartConstants.PREGAP4BOUNDS; |
||||||
|
} |
||||||
|
|
||||||
|
private ActiveGlyph getActiveGlyph() { |
||||||
|
if (point == null) { |
||||||
|
this.activeGlyph = new ChartActiveGlyph(this, chartGlyph); |
||||||
|
} else { |
||||||
|
this.activeGlyph = new ChartActiveGlyph(this, chartGlyph).findActionGlyphFromChildren(point.x, point.y); |
||||||
|
} |
||||||
|
return this.activeGlyph; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 鼠标点击 |
||||||
|
* @param event 鼠标事件 |
||||||
|
*/ |
||||||
|
public void mouseClicked(MouseEvent event) { |
||||||
|
int click = event.getClickCount(); |
||||||
|
if (click >= 1 && activeGlyph != null && this.isSupportEdit()) { |
||||||
|
activeGlyph.goRightPane(); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 鼠标按压 |
||||||
|
* @param e 鼠标事件 |
||||||
|
*/ |
||||||
|
public void mousePressed(MouseEvent e) { |
||||||
|
point = new Point(e.getX(),e.getY()); |
||||||
|
if (!ArrayUtils.contains(resizeCursors, this.getCursor().getType())) { |
||||||
|
this.activeGlyph = new ChartActiveGlyph(this, chartGlyph).findActionGlyphFromChildren(point.x, point.y); |
||||||
|
} |
||||||
|
|
||||||
|
if (this.activeGlyph == null) { |
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
repaint(); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 鼠标松开 |
||||||
|
* @param e 鼠标事件 |
||||||
|
*/ |
||||||
|
public void mouseReleased(MouseEvent e) { |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 鼠标进入 |
||||||
|
* @param e 鼠标事件 |
||||||
|
*/ |
||||||
|
public void mouseEntered(MouseEvent e) { |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 鼠标退出 |
||||||
|
* @param e 鼠标事件 |
||||||
|
*/ |
||||||
|
public void mouseExited(MouseEvent e) { |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 鼠标拖拽 |
||||||
|
* @param e 鼠标事件 |
||||||
|
*/ |
||||||
|
public void mouseDragged(MouseEvent e) { |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 鼠标移动 |
||||||
|
* @param e 鼠标事件 |
||||||
|
*/ |
||||||
|
public void mouseMoved(MouseEvent e) { |
||||||
|
ActiveGlyph ag = this.getActiveGlyph(); |
||||||
|
if (ag != null) { |
||||||
|
ag.onMouseMove(e); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public AxisGlyph getActiveAxisGlyph() { |
||||||
|
return (AxisGlyph) activeGlyph.getGlyph(); |
||||||
|
} |
||||||
|
|
||||||
|
public Axis getActiveAxis() { |
||||||
|
AxisGlyph axisGlyph = getActiveAxisGlyph(); |
||||||
|
if (editingChart.getPlot() != null) { |
||||||
|
return editingChart.getPlot().getAxis(axisGlyph.getAxisType()); |
||||||
|
} |
||||||
|
return null; |
||||||
|
} |
||||||
|
|
||||||
|
private boolean needRefreshChartGlyph() { |
||||||
|
return chartGlyph == null || chartWidth != this.getBounds().width || chartHeight != this.getBounds().height; |
||||||
|
} |
||||||
|
|
||||||
|
private void drawChartGlyph(Graphics2D g2d) { |
||||||
|
if (chartGlyph != null) { |
||||||
|
if (chartGlyph.isRoundBorder()) { |
||||||
|
chartGlyph.setBounds(new RoundRectangle2D.Double(0, 0, chartWidth, chartHeight, 10, 10)); |
||||||
|
} else { |
||||||
|
chartGlyph.setBounds(new Rectangle2D.Double(0, 0, chartWidth, chartHeight)); |
||||||
|
} |
||||||
|
// chartGlyph.draw(g2d, ScreenResolution.getScreenResolution());
|
||||||
|
//不直接画chartGlyph而画image的原因是表单的柱形图会溢出表单
|
||||||
|
//其他图都ok,其实感觉应该是柱形图画的不对,应该也可以改那边
|
||||||
|
Image chartImage = chartGlyph.toImage(chartWidth,chartHeight,ScreenResolution.getScreenResolution()); |
||||||
|
g2d.drawImage(chartImage, 0, 0, chartWidth, chartHeight, null); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,79 @@ |
|||||||
|
package com.fr.design.chart.gui; |
||||||
|
|
||||||
|
import com.fr.base.FRContext; |
||||||
|
import com.fr.chart.chartattr.Chart; |
||||||
|
import com.fr.design.gui.core.WidgetOption; |
||||||
|
import com.fr.form.ui.ChartEditor; |
||||||
|
import com.fr.form.ui.Widget; |
||||||
|
|
||||||
|
import javax.swing.*; |
||||||
|
|
||||||
|
/** |
||||||
|
* 表单中 图表控件信息, 名称, class, form中通过XcreatorUtils反射类 实现XChartEditor的初始化. |
||||||
|
* |
||||||
|
* @author kunsnat E-mail:kunsnat@gmail.com |
||||||
|
* @version 创建时间:2013-7-5 上午09:59:39 |
||||||
|
*/ |
||||||
|
public class ChartWidgetOption extends WidgetOption { |
||||||
|
private static final long serialVersionUID = -6576352405047132226L; |
||||||
|
private String optionName; |
||||||
|
private Icon optionIcon; |
||||||
|
private Class<? extends ChartEditor> widgetClass; |
||||||
|
private Chart chart; |
||||||
|
|
||||||
|
public ChartWidgetOption(String optionName, Icon optionIcon, Class<? extends ChartEditor> widgetClass, Chart chart) { |
||||||
|
this.optionName = optionName; |
||||||
|
this.optionIcon = optionIcon; |
||||||
|
this.widgetClass = widgetClass; |
||||||
|
this.chart = chart; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 通过类 信息等 创建对应的控件编辑器. |
||||||
|
* |
||||||
|
* @return 返回控件编辑器. |
||||||
|
*/ |
||||||
|
public Widget createWidget() { |
||||||
|
Class<? extends ChartEditor> clz = widgetClass(); |
||||||
|
try { |
||||||
|
ChartEditor widget = clz.newInstance(); |
||||||
|
widget.addChart((Chart) chart.clone()); |
||||||
|
return widget; |
||||||
|
} catch (InstantiationException e) { |
||||||
|
FRContext.getLogger().error(e.getMessage(), e); |
||||||
|
} catch (IllegalAccessException e) { |
||||||
|
FRContext.getLogger().error(e.getMessage(), e); |
||||||
|
} catch (CloneNotSupportedException e) { |
||||||
|
FRContext.getLogger().error(e.getMessage(), e); |
||||||
|
} |
||||||
|
|
||||||
|
return null; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 信息名称, 一般是图表的类型名称. |
||||||
|
* |
||||||
|
* @return 返回名称. |
||||||
|
*/ |
||||||
|
public String optionName() { |
||||||
|
return this.optionName; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 信息图片, 一般是图表按钮的缩略图. |
||||||
|
* |
||||||
|
* @return 信息图片. |
||||||
|
*/ |
||||||
|
public Icon optionIcon() { |
||||||
|
return this.optionIcon; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 图表控件对应Editor的类. |
||||||
|
* |
||||||
|
* @return 返回类. |
||||||
|
*/ |
||||||
|
public Class<? extends ChartEditor> widgetClass() { |
||||||
|
return this.widgetClass; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,161 @@ |
|||||||
|
package com.fr.design.chart.gui.active; |
||||||
|
|
||||||
|
import java.awt.AlphaComposite; |
||||||
|
import java.awt.Color; |
||||||
|
import java.awt.Composite; |
||||||
|
import java.awt.Graphics2D; |
||||||
|
import java.awt.Paint; |
||||||
|
import java.awt.Shape; |
||||||
|
import java.awt.event.MouseEvent; |
||||||
|
import java.awt.geom.Point2D; |
||||||
|
|
||||||
|
import com.fr.base.ScreenResolution; |
||||||
|
import com.fr.base.chart.BaseChartGlyph; |
||||||
|
import com.fr.base.chart.Glyph; |
||||||
|
import com.fr.design.chart.gui.ActiveGlyphFactory; |
||||||
|
import com.fr.design.chart.gui.ChartComponent; |
||||||
|
|
||||||
|
/** |
||||||
|
* Created by IntelliJ IDEA. |
||||||
|
* Author : Richer |
||||||
|
* Version: 6.5.6 |
||||||
|
* Date : 11-11-22 |
||||||
|
* Time : 下午3:51 |
||||||
|
* 选中的Glyph |
||||||
|
*/ |
||||||
|
public abstract class ActiveGlyph { |
||||||
|
protected Glyph parentGlyph; |
||||||
|
protected ChartComponent chartComponent; |
||||||
|
|
||||||
|
public ActiveGlyph(ChartComponent chartComponent, Glyph parentGlyph) { |
||||||
|
this.chartComponent = chartComponent; |
||||||
|
this.parentGlyph = parentGlyph; |
||||||
|
} |
||||||
|
|
||||||
|
public abstract Glyph getGlyph(); |
||||||
|
|
||||||
|
public void drawAllGlyph(Graphics2D g2d, int resolution){ |
||||||
|
Point2D offset4Paint = offset4Paint(); |
||||||
|
g2d.translate(offset4Paint.getX(), offset4Paint.getY()); |
||||||
|
this.getGlyph().draw(g2d, resolution); |
||||||
|
g2d.translate(-offset4Paint.getX(), -offset4Paint.getY()); |
||||||
|
}; |
||||||
|
|
||||||
|
/** |
||||||
|
* 属性表中, 通过点击 展开到对应的界面. |
||||||
|
*/ |
||||||
|
public abstract void goRightPane(); |
||||||
|
|
||||||
|
/** |
||||||
|
* 画的偏移的 |
||||||
|
* @return 偏移的 |
||||||
|
*/ |
||||||
|
public Point2D offset4Paint() { |
||||||
|
return new Point2D.Double( |
||||||
|
this.parentGlyph.getShape().getBounds().getX(), |
||||||
|
this.parentGlyph.getShape().getBounds().getY() |
||||||
|
); |
||||||
|
} |
||||||
|
|
||||||
|
public void paint4ActiveGlyph(Graphics2D g2d, BaseChartGlyph chartGlyph) { |
||||||
|
if(this.parentGlyph == null) { |
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
Paint oldPaint = g2d.getPaint(); |
||||||
|
Composite oldComposite = g2d.getComposite(); |
||||||
|
g2d.setPaint(Color.white); |
||||||
|
g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.5f)); |
||||||
|
|
||||||
|
g2d.fill(chartGlyph.getShape()); |
||||||
|
drawAllGlyph(g2d, ScreenResolution.getScreenResolution()); |
||||||
|
|
||||||
|
g2d.setPaint(oldPaint); |
||||||
|
g2d.setComposite(oldComposite); |
||||||
|
} |
||||||
|
|
||||||
|
protected void drawSelectedBounds4Active(Graphics2D g2d) { |
||||||
|
if (this.getGlyph() != null) { |
||||||
|
Shape shape = this.getGlyph().getShape(); |
||||||
|
if (shape != null) { |
||||||
|
g2d.draw(shape); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
*当前的ActiveGlyph是否包含坐标mouseX, mouseY |
||||||
|
* @param mouseX 坐标X |
||||||
|
* @param mouseY 坐标Y |
||||||
|
* @return 包含则返回true |
||||||
|
*/ |
||||||
|
public boolean contains(int mouseX, int mouseY) { |
||||||
|
if (getGlyph() == null || getGlyph().getShape() == null){ |
||||||
|
return false; |
||||||
|
} |
||||||
|
|
||||||
|
Point2D offset = this.offset4Paint(); |
||||||
|
|
||||||
|
/* |
||||||
|
* alex:因为Line2D.contains(x, y)必然返回false |
||||||
|
* 所以用intersect一个区域,这个区域大小用4 * 4的,区域大一些,就灵敏一些 |
||||||
|
*/ |
||||||
|
return getGlyph().getShape().intersects(mouseX - offset.getX() - 2, mouseY - offset.getY() - 2, 4, 4); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 在当前选中的ActiveGlyph中,仅仅在其Children中找与mouseX, mouseY匹配的ActiveGlyph |
||||||
|
* @param mouseX 坐标X |
||||||
|
* @param mouseY 坐标Y |
||||||
|
* @return 当前ativeGlyph |
||||||
|
*/ |
||||||
|
public ActiveGlyph findActionGlyphFromChildren(int mouseX, int mouseY) { |
||||||
|
Glyph currentGlyph = getGlyph(); |
||||||
|
// 报错应对.
|
||||||
|
if (currentGlyph == null) { |
||||||
|
return null; |
||||||
|
} |
||||||
|
java.util.Iterator selectableChildren = currentGlyph.selectableChildren(); |
||||||
|
|
||||||
|
ActiveGlyph resAG = null; |
||||||
|
while (selectableChildren.hasNext() && resAG == null) { |
||||||
|
ActiveGlyph childActiveGlyph = ActiveGlyphFactory.createActiveGlyph(chartComponent, selectableChildren.next(), currentGlyph); |
||||||
|
|
||||||
|
// 如果childActiveGlyph不为null,找一下其子辈有没有符合条件
|
||||||
|
if (childActiveGlyph != null) { |
||||||
|
resAG = childActiveGlyph.findActionGlyphFromChildren(mouseX, mouseY); |
||||||
|
} |
||||||
|
|
||||||
|
// 如果childActiveGlyph的子辈没有符合条件的,就看一下这个childGlyph是否符合条件
|
||||||
|
if (resAG == null && childActiveGlyph != null && childActiveGlyph.contains(mouseX, mouseY)) { |
||||||
|
resAG = childActiveGlyph; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
// 如果当前ActiveGlyph的所有子辈都没有与mouseX, mouseY相匹配的,看一下它自己是否匹配
|
||||||
|
if (resAG == null) { |
||||||
|
if (this.contains(mouseX, mouseY)) { |
||||||
|
resAG = this; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
return resAG; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 拖拽 |
||||||
|
* @param e 事件 |
||||||
|
*/ |
||||||
|
public void onMouseDragged(MouseEvent e) { |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 移动事件 |
||||||
|
* @param e 事件 |
||||||
|
*/ |
||||||
|
public void onMouseMove(MouseEvent e) { |
||||||
|
|
||||||
|
} |
||||||
|
} |
@ -0,0 +1,38 @@ |
|||||||
|
package com.fr.design.chart.gui.active; |
||||||
|
|
||||||
|
import java.awt.geom.Point2D; |
||||||
|
import java.awt.geom.Rectangle2D; |
||||||
|
|
||||||
|
import com.fr.base.chart.Glyph; |
||||||
|
import com.fr.chart.chartglyph.ChartAlertValueGlyph; |
||||||
|
import com.fr.design.chart.gui.ChartComponent; |
||||||
|
import com.fr.design.chart.gui.active.action.SetAnalysisLineStyleAction; |
||||||
|
|
||||||
|
public class AlertValueActiveGlyph extends ActiveGlyph{ |
||||||
|
ChartAlertValueGlyph alertValueGlyph; |
||||||
|
|
||||||
|
public AlertValueActiveGlyph(ChartComponent chartComponent,ChartAlertValueGlyph alertLine, Glyph parentGlyph) { |
||||||
|
super(chartComponent, parentGlyph); |
||||||
|
this.alertValueGlyph = alertLine; |
||||||
|
} |
||||||
|
|
||||||
|
public Point2D offset4Paint() { |
||||||
|
Rectangle2D valueAxisBoudns = this.alertValueGlyph.getValueAxisGlyph().getBounds(); |
||||||
|
|
||||||
|
return new Point2D.Double( |
||||||
|
this.parentGlyph.getShape().getBounds().getX() + valueAxisBoudns.getX(), |
||||||
|
this.parentGlyph.getShape().getBounds().getY() + valueAxisBoudns.getY() |
||||||
|
); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public Glyph getGlyph() { |
||||||
|
return this.alertValueGlyph; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void goRightPane() { |
||||||
|
new SetAnalysisLineStyleAction(chartComponent).showAnalysisLineStylePane(); |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,43 @@ |
|||||||
|
package com.fr.design.chart.gui.active; |
||||||
|
|
||||||
|
import java.awt.Graphics2D; |
||||||
|
import java.awt.geom.Point2D; |
||||||
|
|
||||||
|
import com.fr.base.chart.Glyph; |
||||||
|
import com.fr.chart.chartglyph.AxisGlyph; |
||||||
|
import com.fr.design.chart.gui.ChartComponent; |
||||||
|
import com.fr.design.chart.gui.active.action.SetAxisStyleAction; |
||||||
|
|
||||||
|
/** |
||||||
|
* Created by IntelliJ IDEA. |
||||||
|
* Author : Richer |
||||||
|
* Version: 6.5.6 |
||||||
|
* Date : 11-11-22 |
||||||
|
* Time : 下午4:00 |
||||||
|
*/ |
||||||
|
public abstract class AxisActiveGlyph extends ActiveGlyph { |
||||||
|
protected AxisGlyph axis; |
||||||
|
|
||||||
|
public AxisActiveGlyph(ChartComponent chartComponent, AxisGlyph axis, Glyph parentGlyph) { |
||||||
|
super(chartComponent, parentGlyph); |
||||||
|
this.axis = axis; |
||||||
|
} |
||||||
|
|
||||||
|
public void drawAllGlyph(Graphics2D g2d, int resolution){ |
||||||
|
Point2D offset4Paint = offset4Paint(); |
||||||
|
g2d.translate(offset4Paint.getX(), offset4Paint.getY()); |
||||||
|
this.axis.drawWithOutAlert(g2d, resolution); |
||||||
|
g2d.translate(-offset4Paint.getX(), -offset4Paint.getY()); |
||||||
|
}; |
||||||
|
|
||||||
|
public void goRightPane() { |
||||||
|
new SetAxisStyleAction(chartComponent).showAxisStylePane(); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 返回 对应的属性Axis |
||||||
|
*/ |
||||||
|
public Glyph getGlyph() { |
||||||
|
return this.axis; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,19 @@ |
|||||||
|
package com.fr.design.chart.gui.active; |
||||||
|
|
||||||
|
import com.fr.base.chart.Glyph; |
||||||
|
import com.fr.chart.chartglyph.CategoryAxisGlyph; |
||||||
|
import com.fr.design.chart.gui.ChartComponent; |
||||||
|
|
||||||
|
/** |
||||||
|
* Created by IntelliJ IDEA. |
||||||
|
* Author : Richer |
||||||
|
* Version: 6.5.6 |
||||||
|
* Date : 11-11-22 |
||||||
|
* Time : 下午4:01 |
||||||
|
*/ |
||||||
|
public class CategoryAxisActiveGlyph extends AxisActiveGlyph { |
||||||
|
|
||||||
|
public CategoryAxisActiveGlyph(ChartComponent chartComponent, CategoryAxisGlyph axis, Glyph parentGlyph) { |
||||||
|
super(chartComponent, axis, parentGlyph); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,39 @@ |
|||||||
|
package com.fr.design.chart.gui.active; |
||||||
|
|
||||||
|
import java.awt.geom.Point2D; |
||||||
|
|
||||||
|
import com.fr.base.chart.BaseChartGlyph; |
||||||
|
import com.fr.base.chart.Glyph; |
||||||
|
import com.fr.design.chart.gui.ChartComponent; |
||||||
|
import com.fr.design.chart.gui.active.action.SetChartStyleAciton; |
||||||
|
|
||||||
|
/** |
||||||
|
* Created by IntelliJ IDEA. |
||||||
|
* Author : Richer |
||||||
|
* Version: 6.5.6 |
||||||
|
* Date : 11-11-22 |
||||||
|
* Time : 下午3:54 |
||||||
|
*/ |
||||||
|
public class ChartActiveGlyph extends ActiveGlyph { |
||||||
|
private BaseChartGlyph glyphChart; |
||||||
|
|
||||||
|
public ChartActiveGlyph(ChartComponent chartComponent, BaseChartGlyph chart) { |
||||||
|
this(chartComponent, chart, null); |
||||||
|
} |
||||||
|
public ChartActiveGlyph(ChartComponent chartComponent, BaseChartGlyph chart, Glyph parentGlyph) { |
||||||
|
super(chartComponent, parentGlyph); |
||||||
|
this.glyphChart = chart; |
||||||
|
} |
||||||
|
|
||||||
|
public Glyph getGlyph() { |
||||||
|
return this.glyphChart; |
||||||
|
} |
||||||
|
|
||||||
|
public Point2D offset4Paint() { |
||||||
|
return new java.awt.Point(0, 0); |
||||||
|
} |
||||||
|
|
||||||
|
public void goRightPane() { |
||||||
|
new SetChartStyleAciton(chartComponent).showChartStylePane(); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,44 @@ |
|||||||
|
package com.fr.design.chart.gui.active; |
||||||
|
|
||||||
|
import java.awt.Graphics2D; |
||||||
|
import java.awt.geom.Point2D; |
||||||
|
import java.util.ArrayList; |
||||||
|
|
||||||
|
import com.fr.base.chart.Glyph; |
||||||
|
import com.fr.chart.chartglyph.PlotGlyph; |
||||||
|
import com.fr.chart.chartglyph.TextGlyph; |
||||||
|
import com.fr.design.chart.gui.ChartComponent; |
||||||
|
import com.fr.design.chart.gui.active.action.SetDataLabelStyleAction; |
||||||
|
|
||||||
|
public class DataLabelActiveGlyph extends ActiveGlyph{ |
||||||
|
private TextGlyph dataLabel; |
||||||
|
|
||||||
|
public DataLabelActiveGlyph(ChartComponent chartComponent, TextGlyph dataLabel, Glyph parentGlyph) { |
||||||
|
super(chartComponent, parentGlyph); |
||||||
|
this.dataLabel = dataLabel; |
||||||
|
} |
||||||
|
|
||||||
|
public void drawAllGlyph(Graphics2D g2d, int resolution){ |
||||||
|
Point2D offset4Paint = offset4Paint(); |
||||||
|
g2d.translate(offset4Paint.getX(), offset4Paint.getY()); |
||||||
|
|
||||||
|
ArrayList<TextGlyph> allDataPointLableGlyph = new ArrayList<TextGlyph>(); |
||||||
|
PlotGlyph plotGlyph = (PlotGlyph)(this.parentGlyph); |
||||||
|
plotGlyph.getAllDataPointGlyph(allDataPointLableGlyph); |
||||||
|
for(int index = 0; index < allDataPointLableGlyph.size(); index++){ |
||||||
|
allDataPointLableGlyph.get(index).draw(g2d, resolution); |
||||||
|
} |
||||||
|
g2d.translate(-offset4Paint.getX(), -offset4Paint.getY()); |
||||||
|
}; |
||||||
|
|
||||||
|
@Override |
||||||
|
public Glyph getGlyph() { |
||||||
|
return this.dataLabel; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void goRightPane() { |
||||||
|
new SetDataLabelStyleAction(chartComponent).showDataLabelStylePane(); |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,53 @@ |
|||||||
|
package com.fr.design.chart.gui.active; |
||||||
|
|
||||||
|
import java.awt.Graphics2D; |
||||||
|
import java.awt.geom.Point2D; |
||||||
|
import com.fr.base.chart.Glyph; |
||||||
|
import com.fr.chart.chartglyph.DataSeries; |
||||||
|
import com.fr.chart.chartglyph.PlotGlyph; |
||||||
|
import com.fr.design.chart.gui.ChartComponent; |
||||||
|
import com.fr.design.mainframe.chart.ChartEditPane; |
||||||
|
import com.fr.design.mainframe.chart.PaneTitleConstants; |
||||||
|
|
||||||
|
/** |
||||||
|
* Created by IntelliJ IDEA. |
||||||
|
* Author : Richer |
||||||
|
* Version: 6.5.6 |
||||||
|
* Date : 11-11-22 |
||||||
|
* Time : 下午3:59 |
||||||
|
*/ |
||||||
|
public class DataSeriesActiveGlyph extends ActiveGlyph { |
||||||
|
private DataSeries series; |
||||||
|
|
||||||
|
public DataSeriesActiveGlyph(ChartComponent chartComponent, DataSeries series, Glyph parentGlyph) { |
||||||
|
super(chartComponent, parentGlyph); |
||||||
|
this.series = series; |
||||||
|
} |
||||||
|
|
||||||
|
public Glyph getGlyph() { |
||||||
|
return this.series; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 界面条状 |
||||||
|
*/ |
||||||
|
public void goRightPane() { |
||||||
|
if(chartComponent.getEditingChart() == null) { |
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
ChartEditPane.getInstance().GoToPane(PaneTitleConstants.CHART_STYLE_TITLE, PaneTitleConstants.CHART_STYLE_SERIES_TITLE); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void drawAllGlyph(Graphics2D g2d, int resolution) { |
||||||
|
Point2D offset4Paint = offset4Paint(); |
||||||
|
g2d.translate(offset4Paint.getX(), offset4Paint.getY()); |
||||||
|
if(this.parentGlyph != null && this.parentGlyph instanceof PlotGlyph){ |
||||||
|
PlotGlyph plotGlyph = (PlotGlyph)this.parentGlyph; |
||||||
|
plotGlyph.drawShape4Series(g2d, resolution); |
||||||
|
} |
||||||
|
g2d.translate(-offset4Paint.getX(), -offset4Paint.getY()); |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,30 @@ |
|||||||
|
package com.fr.design.chart.gui.active; |
||||||
|
|
||||||
|
import com.fr.base.chart.Glyph; |
||||||
|
import com.fr.chart.chartglyph.DataSheetGlyph; |
||||||
|
import com.fr.design.chart.gui.ChartComponent; |
||||||
|
import com.fr.design.chart.gui.active.action.SetDataSheetAction; |
||||||
|
|
||||||
|
/** |
||||||
|
* Created by IntelliJ IDEA. |
||||||
|
* Author : Richer |
||||||
|
* Version: 6.5.6 |
||||||
|
* Date : 11-11-22 |
||||||
|
* Time : 下午3:57 |
||||||
|
*/ |
||||||
|
public class DataSheetActiveGlyph extends ActiveGlyph { |
||||||
|
private DataSheetGlyph dataSheetGlyph; |
||||||
|
|
||||||
|
public DataSheetActiveGlyph(ChartComponent chartComponent, DataSheetGlyph dataSheetGlyph, Glyph parentGlyph) { |
||||||
|
super(chartComponent, parentGlyph); |
||||||
|
this.dataSheetGlyph = dataSheetGlyph; |
||||||
|
} |
||||||
|
|
||||||
|
public Glyph getGlyph() { |
||||||
|
return this.dataSheetGlyph; |
||||||
|
} |
||||||
|
|
||||||
|
public void goRightPane() { |
||||||
|
new SetDataSheetAction(chartComponent).showDataSheetStylePane(); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,18 @@ |
|||||||
|
package com.fr.design.chart.gui.active; |
||||||
|
|
||||||
|
import com.fr.base.chart.Glyph; |
||||||
|
import com.fr.chart.chartglyph.DateAxisGlyph; |
||||||
|
import com.fr.design.chart.gui.ChartComponent; |
||||||
|
|
||||||
|
/** |
||||||
|
* Created by IntelliJ IDEA. |
||||||
|
* Author : Richer |
||||||
|
* Version: 6.5.6 |
||||||
|
* Date : 11-11-22 |
||||||
|
* Time : 下午4:03 |
||||||
|
*/ |
||||||
|
public class DateAxisActiveGlyph extends AxisActiveGlyph { |
||||||
|
public DateAxisActiveGlyph(ChartComponent chartComponent, DateAxisGlyph axis, Glyph parentGlyph) { |
||||||
|
super(chartComponent, axis, parentGlyph); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,30 @@ |
|||||||
|
package com.fr.design.chart.gui.active; |
||||||
|
|
||||||
|
import com.fr.base.chart.Glyph; |
||||||
|
import com.fr.chart.chartglyph.LegendGlyph; |
||||||
|
import com.fr.design.chart.gui.ChartComponent; |
||||||
|
import com.fr.design.chart.gui.active.action.SetLegendStyleAction; |
||||||
|
|
||||||
|
/** |
||||||
|
* Created by IntelliJ IDEA. |
||||||
|
* Author : Richer |
||||||
|
* Version: 6.5.6 |
||||||
|
* Date : 11-11-22 |
||||||
|
* Time : 下午3:58 |
||||||
|
*/ |
||||||
|
public class LegendActiveGlyph extends ActiveGlyph { |
||||||
|
private LegendGlyph legendGlyph; |
||||||
|
|
||||||
|
public LegendActiveGlyph(ChartComponent chartComponent, LegendGlyph legendGlyph, Glyph parentGlyph) { |
||||||
|
super(chartComponent, parentGlyph); |
||||||
|
this.legendGlyph = legendGlyph; |
||||||
|
} |
||||||
|
|
||||||
|
public Glyph getGlyph() { |
||||||
|
return this.legendGlyph; |
||||||
|
} |
||||||
|
|
||||||
|
public void goRightPane() { |
||||||
|
new SetLegendStyleAction(chartComponent).showLegendStylePane(); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,34 @@ |
|||||||
|
package com.fr.design.chart.gui.active; |
||||||
|
|
||||||
|
import com.fr.base.chart.Glyph; |
||||||
|
import com.fr.chart.chartglyph.PlotGlyph; |
||||||
|
import com.fr.design.chart.gui.ChartComponent; |
||||||
|
import com.fr.design.chart.gui.active.action.SetPlotStyleAction; |
||||||
|
|
||||||
|
/** |
||||||
|
* Created by IntelliJ IDEA. |
||||||
|
* Author : Richer |
||||||
|
* Version: 6.5.6 |
||||||
|
* Date : 11-11-22 |
||||||
|
* Time : 下午3:55 |
||||||
|
*/ |
||||||
|
public class PlotActiveGlyph extends ActiveGlyph { |
||||||
|
private PlotGlyph plotGlyph; |
||||||
|
|
||||||
|
public PlotActiveGlyph(ChartComponent chartComponent, PlotGlyph plotGlyph, Glyph parentGlyph) { |
||||||
|
super(chartComponent, parentGlyph); |
||||||
|
this.plotGlyph = plotGlyph; |
||||||
|
} |
||||||
|
|
||||||
|
public Glyph getGlyph() { |
||||||
|
return this.plotGlyph; |
||||||
|
} |
||||||
|
|
||||||
|
public void goRightPane() { |
||||||
|
new SetPlotStyleAction(chartComponent).showPlotPane(); |
||||||
|
} |
||||||
|
|
||||||
|
public java.awt.Point offset4Paint() { |
||||||
|
return new java.awt.Point(0, 0); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,18 @@ |
|||||||
|
package com.fr.design.chart.gui.active; |
||||||
|
|
||||||
|
import com.fr.base.chart.Glyph; |
||||||
|
import com.fr.chart.chartglyph.RadarAxisGlyph; |
||||||
|
import com.fr.design.chart.gui.ChartComponent; |
||||||
|
|
||||||
|
/** |
||||||
|
* Created by IntelliJ IDEA. |
||||||
|
* Author : Richer |
||||||
|
* Version: 6.5.6 |
||||||
|
* Date : 11-11-22 |
||||||
|
* Time : 下午4:03 |
||||||
|
*/ |
||||||
|
public class RadarAxisActiveGlyph extends AxisActiveGlyph { |
||||||
|
public RadarAxisActiveGlyph(ChartComponent chartComponent, RadarAxisGlyph axis, Glyph parentGlyph) { |
||||||
|
super(chartComponent, axis, parentGlyph); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,18 @@ |
|||||||
|
package com.fr.design.chart.gui.active; |
||||||
|
|
||||||
|
import com.fr.base.chart.Glyph; |
||||||
|
import com.fr.chart.chartglyph.ValueAxisGlyph; |
||||||
|
import com.fr.design.chart.gui.ChartComponent; |
||||||
|
|
||||||
|
/** |
||||||
|
* Created by IntelliJ IDEA. |
||||||
|
* Author : Richer |
||||||
|
* Version: 6.5.6 |
||||||
|
* Date : 11-11-22 |
||||||
|
* Time : 下午4:02 |
||||||
|
*/ |
||||||
|
public class RangeAxisActiveGlyph extends AxisActiveGlyph { |
||||||
|
public RangeAxisActiveGlyph(ChartComponent chartComponent, ValueAxisGlyph axis, Glyph parentGlyph) { |
||||||
|
super(chartComponent, axis, parentGlyph); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,35 @@ |
|||||||
|
package com.fr.design.chart.gui.active; |
||||||
|
|
||||||
|
import com.fr.base.chart.Glyph; |
||||||
|
import com.fr.chart.chartglyph.TitleGlyph; |
||||||
|
import com.fr.design.chart.gui.ChartComponent; |
||||||
|
import com.fr.design.chart.gui.active.action.SetTitleStyleAction; |
||||||
|
|
||||||
|
/** |
||||||
|
* Created by IntelliJ IDEA. |
||||||
|
* Author : Richer |
||||||
|
* Version: 6.5.6 |
||||||
|
* Date : 11-11-22 |
||||||
|
* Time : 下午3:57 |
||||||
|
*/ |
||||||
|
public class TextActiveGlyph extends ActiveGlyph { |
||||||
|
private TitleGlyph titleGlyph; |
||||||
|
|
||||||
|
public TextActiveGlyph(ChartComponent chartComponent, TitleGlyph titleGlyph, Glyph parentGlyph) { |
||||||
|
super(chartComponent, parentGlyph); |
||||||
|
this.titleGlyph = titleGlyph; |
||||||
|
} |
||||||
|
|
||||||
|
public Glyph getGlyph() { |
||||||
|
return this.titleGlyph; |
||||||
|
} |
||||||
|
|
||||||
|
public java.awt.Point offset4Paint() { |
||||||
|
return new java.awt.Point(0, 0); |
||||||
|
} |
||||||
|
|
||||||
|
public void goRightPane() { |
||||||
|
new SetTitleStyleAction(chartComponent).showTitlePane(); |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,43 @@ |
|||||||
|
package com.fr.design.chart.gui.active; |
||||||
|
|
||||||
|
import java.awt.Graphics2D; |
||||||
|
import java.awt.geom.Point2D; |
||||||
|
import java.util.ArrayList; |
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
import com.fr.base.chart.Glyph; |
||||||
|
import com.fr.chart.chartglyph.PlotGlyph; |
||||||
|
import com.fr.chart.chartglyph.TrendLineGlyph; |
||||||
|
import com.fr.design.chart.gui.ChartComponent; |
||||||
|
import com.fr.design.chart.gui.active.action.SetAnalysisLineStyleAction; |
||||||
|
|
||||||
|
public class TrendLineActiveGlyph extends ActiveGlyph{ |
||||||
|
private TrendLineGlyph trendLine; |
||||||
|
public TrendLineActiveGlyph(ChartComponent chartComponent,TrendLineGlyph trendLine, Glyph parentGlyph) { |
||||||
|
super(chartComponent, parentGlyph); |
||||||
|
this.trendLine = trendLine; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public Glyph getGlyph() { |
||||||
|
return this.trendLine; |
||||||
|
} |
||||||
|
|
||||||
|
public void drawAllGlyph(Graphics2D g2d, int resolution){ |
||||||
|
Point2D offset4Paint = offset4Paint(); |
||||||
|
g2d.translate(offset4Paint.getX(), offset4Paint.getY()); |
||||||
|
PlotGlyph plotGlyph = (PlotGlyph)this.parentGlyph; |
||||||
|
List<TrendLineGlyph> list = new ArrayList<TrendLineGlyph>(); |
||||||
|
plotGlyph.getAllTrendLineGlyph(list); |
||||||
|
for(int index = 0; index < list.size(); index++){ |
||||||
|
list.get(index).draw(g2d, resolution); |
||||||
|
} |
||||||
|
g2d.translate(-offset4Paint.getX(), -offset4Paint.getY()); |
||||||
|
}; |
||||||
|
|
||||||
|
@Override |
||||||
|
public void goRightPane() { |
||||||
|
new SetAnalysisLineStyleAction(chartComponent).showAnalysisLineStylePane(); |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,19 @@ |
|||||||
|
package com.fr.design.chart.gui.active; |
||||||
|
|
||||||
|
import com.fr.base.chart.Glyph; |
||||||
|
import com.fr.chart.chartglyph.ValueAxisGlyph; |
||||||
|
import com.fr.design.chart.gui.ChartComponent; |
||||||
|
|
||||||
|
/** |
||||||
|
* Created by IntelliJ IDEA. |
||||||
|
* Author : Richer |
||||||
|
* Version: 6.5.6 |
||||||
|
* Date : 11-11-22 |
||||||
|
* Time : 下午4:02 |
||||||
|
*/ |
||||||
|
public class ValueAxisActiveGlyph extends AxisActiveGlyph { |
||||||
|
|
||||||
|
public ValueAxisActiveGlyph(ChartComponent chartComponent, ValueAxisGlyph axis, Glyph parentGlyph) { |
||||||
|
super(chartComponent, axis, parentGlyph); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,47 @@ |
|||||||
|
package com.fr.design.chart.gui.active.action; |
||||||
|
|
||||||
|
import com.fr.base.chart.BaseChart; |
||||||
|
import com.fr.chart.chartattr.Axis; |
||||||
|
import com.fr.chart.chartattr.ChartCollection; |
||||||
|
import com.fr.chart.chartglyph.AxisGlyph; |
||||||
|
import com.fr.design.chart.gui.ChartComponent; |
||||||
|
import com.fr.design.actions.UpdateAction; |
||||||
|
|
||||||
|
/** |
||||||
|
* Created by IntelliJ IDEA. |
||||||
|
* Author : Richer |
||||||
|
* Version: 6.5.6 |
||||||
|
* Date : 11-11-22 |
||||||
|
* Time : 下午5:05 |
||||||
|
*/ |
||||||
|
public abstract class ChartComponentAction extends UpdateAction { |
||||||
|
protected ChartComponent chartComponent; |
||||||
|
|
||||||
|
public ChartComponentAction(ChartComponent chartComponent) { |
||||||
|
this.chartComponent = chartComponent; |
||||||
|
} |
||||||
|
|
||||||
|
public void reset() { |
||||||
|
chartComponent.reset(); |
||||||
|
} |
||||||
|
|
||||||
|
public void repaint() { |
||||||
|
chartComponent.repaint(); |
||||||
|
} |
||||||
|
|
||||||
|
public BaseChart getEditingChart() { |
||||||
|
return chartComponent.getEditingChart(); |
||||||
|
} |
||||||
|
|
||||||
|
public ChartCollection getChartCollection() { |
||||||
|
return chartComponent.getChartCollection(); |
||||||
|
} |
||||||
|
|
||||||
|
public Axis getActiveAxis() { |
||||||
|
return chartComponent.getActiveAxis(); |
||||||
|
} |
||||||
|
|
||||||
|
public AxisGlyph getActiveAxisGlyph() { |
||||||
|
return chartComponent.getActiveAxisGlyph(); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,27 @@ |
|||||||
|
package com.fr.design.chart.gui.active.action; |
||||||
|
|
||||||
|
import java.awt.event.ActionEvent; |
||||||
|
|
||||||
|
import com.fr.design.chart.gui.ChartComponent; |
||||||
|
import com.fr.design.mainframe.chart.ChartEditPane; |
||||||
|
import com.fr.design.mainframe.chart.PaneTitleConstants; |
||||||
|
import com.fr.general.Inter; |
||||||
|
|
||||||
|
public class SetAnalysisLineStyleAction extends ChartComponentAction{ |
||||||
|
|
||||||
|
public SetAnalysisLineStyleAction(ChartComponent chartComponent) { |
||||||
|
super(chartComponent); |
||||||
|
this.setName(Inter.getLocText(new String[]{"Set", "AnalysisLine"})); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void actionPerformed(ActionEvent e) { |
||||||
|
showAnalysisLineStylePane(); |
||||||
|
} |
||||||
|
|
||||||
|
public void showAnalysisLineStylePane(){ |
||||||
|
ChartEditPane.getInstance().GoToPane(PaneTitleConstants.CHART_STYLE_TITLE, PaneTitleConstants.CHART_STYLE_LINE_TITLE); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
} |
@ -0,0 +1,33 @@ |
|||||||
|
package com.fr.design.chart.gui.active.action; |
||||||
|
|
||||||
|
import java.awt.event.ActionEvent; |
||||||
|
|
||||||
|
import com.fr.design.chart.gui.ChartComponent; |
||||||
|
import com.fr.design.mainframe.chart.ChartEditPane; |
||||||
|
import com.fr.design.mainframe.chart.PaneTitleConstants; |
||||||
|
import com.fr.general.Inter; |
||||||
|
import com.fr.stable.StringUtils; |
||||||
|
|
||||||
|
/** |
||||||
|
* Created by IntelliJ IDEA. |
||||||
|
* Author : Richer |
||||||
|
* Version: 6.5.6 |
||||||
|
* Date : 11-11-22 |
||||||
|
* Time : 下午5:10 |
||||||
|
*/ |
||||||
|
public class SetAxisStyleAction extends ChartComponentAction { |
||||||
|
public SetAxisStyleAction(ChartComponent chartComponent) { |
||||||
|
super(chartComponent); |
||||||
|
this.setName(Inter.getLocText(new String[]{"Set", "ChartF-Axis", "Format"})); |
||||||
|
} |
||||||
|
|
||||||
|
public void actionPerformed(ActionEvent e) { |
||||||
|
showAxisStylePane(); |
||||||
|
} |
||||||
|
|
||||||
|
public void showAxisStylePane() { |
||||||
|
String axisType = getActiveAxisGlyph() == null ? StringUtils.EMPTY : getActiveAxisGlyph().getAxisType(); |
||||||
|
|
||||||
|
ChartEditPane.getInstance().GoToPane(PaneTitleConstants.CHART_STYLE_TITLE, PaneTitleConstants.CHART_STYLE_AXIS_TITLE, axisType); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,31 @@ |
|||||||
|
package com.fr.design.chart.gui.active.action; |
||||||
|
|
||||||
|
import java.awt.event.ActionEvent; |
||||||
|
|
||||||
|
import com.fr.design.chart.gui.ChartComponent; |
||||||
|
import com.fr.design.mainframe.chart.ChartEditPane; |
||||||
|
import com.fr.design.mainframe.chart.PaneTitleConstants; |
||||||
|
import com.fr.general.Inter; |
||||||
|
|
||||||
|
/** |
||||||
|
* Created by IntelliJ IDEA. |
||||||
|
* Author : Richer |
||||||
|
* Version: 6.5.6 |
||||||
|
* Date : 11-11-22 |
||||||
|
* Time : 下午5:00 |
||||||
|
*/ |
||||||
|
public class SetChartStyleAciton extends ChartComponentAction { |
||||||
|
|
||||||
|
public SetChartStyleAciton(ChartComponent chartComponent) { |
||||||
|
super(chartComponent); |
||||||
|
this.setName(Inter.getLocText(new String[]{"DashBoard-ChartFloat", "Style"})); |
||||||
|
} |
||||||
|
|
||||||
|
public void actionPerformed(ActionEvent e) { |
||||||
|
showChartStylePane(); |
||||||
|
} |
||||||
|
|
||||||
|
public void showChartStylePane() { |
||||||
|
ChartEditPane.getInstance().GoToPane(PaneTitleConstants.CHART_STYLE_TITLE, PaneTitleConstants.CHART_STYLE_AREA_TITLE, PaneTitleConstants.CHART_STYLE_AREA_AREA_TITLE); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,26 @@ |
|||||||
|
package com.fr.design.chart.gui.active.action; |
||||||
|
|
||||||
|
import java.awt.event.ActionEvent; |
||||||
|
|
||||||
|
import com.fr.design.chart.gui.ChartComponent; |
||||||
|
import com.fr.design.mainframe.chart.ChartEditPane; |
||||||
|
import com.fr.design.mainframe.chart.PaneTitleConstants; |
||||||
|
import com.fr.general.Inter; |
||||||
|
|
||||||
|
public class SetDataLabelStyleAction extends ChartComponentAction{ |
||||||
|
|
||||||
|
public SetDataLabelStyleAction(ChartComponent chartComponent) { |
||||||
|
super(chartComponent); |
||||||
|
this.setName(Inter.getLocText(new String[]{"Set", "Data-Label"})); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void actionPerformed(ActionEvent e) { |
||||||
|
showDataLabelStylePane(); |
||||||
|
} |
||||||
|
|
||||||
|
public void showDataLabelStylePane() { |
||||||
|
ChartEditPane.getInstance().GoToPane(PaneTitleConstants.CHART_STYLE_TITLE, PaneTitleConstants.CHART_STYLE_LABEL_TITLE); |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,26 @@ |
|||||||
|
package com.fr.design.chart.gui.active.action; |
||||||
|
|
||||||
|
import java.awt.event.ActionEvent; |
||||||
|
|
||||||
|
import com.fr.design.chart.gui.ChartComponent; |
||||||
|
import com.fr.design.mainframe.chart.ChartEditPane; |
||||||
|
import com.fr.design.mainframe.chart.PaneTitleConstants; |
||||||
|
import com.fr.general.Inter; |
||||||
|
|
||||||
|
/** |
||||||
|
* Created by IntelliJ IDEA. |
||||||
|
* Author : Richer |
||||||
|
* Version: 6.5.6 |
||||||
|
* Date : 11-11-22 |
||||||
|
* Time : 下午5:28 |
||||||
|
*/ |
||||||
|
public class SetDataSeriesAttrAction extends ChartComponentAction { |
||||||
|
public SetDataSeriesAttrAction(ChartComponent chartComponent) { |
||||||
|
super(chartComponent); |
||||||
|
this.setName(Inter.getLocText(new String[]{"Set", "ChartF-Series", "Format"})); |
||||||
|
} |
||||||
|
|
||||||
|
public void actionPerformed(ActionEvent e) { |
||||||
|
ChartEditPane.getInstance().GoToPane(PaneTitleConstants.CHART_STYLE_TITLE, PaneTitleConstants.CHART_STYLE_SERIES_TITLE); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,33 @@ |
|||||||
|
package com.fr.design.chart.gui.active.action; |
||||||
|
|
||||||
|
import java.awt.event.ActionEvent; |
||||||
|
|
||||||
|
import com.fr.design.chart.gui.ChartComponent; |
||||||
|
import com.fr.design.mainframe.chart.ChartEditPane; |
||||||
|
import com.fr.design.mainframe.chart.PaneTitleConstants; |
||||||
|
import com.fr.general.Inter; |
||||||
|
|
||||||
|
/** |
||||||
|
* Created by IntelliJ IDEA. |
||||||
|
* Author : Richer |
||||||
|
* Version: 6.5.6 |
||||||
|
* Date : 11-11-22 |
||||||
|
* Time : 下午4:49 |
||||||
|
*/ |
||||||
|
public class SetDataSheetAction extends ChartComponentAction { |
||||||
|
|
||||||
|
private static final long serialVersionUID = -4763886493273213850L; |
||||||
|
|
||||||
|
public SetDataSheetAction(ChartComponent chartComponent) { |
||||||
|
super(chartComponent); |
||||||
|
this.setName(Inter.getLocText("Chart_Set_Data_Sheet")); |
||||||
|
} |
||||||
|
|
||||||
|
public void actionPerformed(ActionEvent e) { |
||||||
|
showDataSheetStylePane(); |
||||||
|
} |
||||||
|
|
||||||
|
public void showDataSheetStylePane() { |
||||||
|
ChartEditPane.getInstance().GoToPane(PaneTitleConstants.CHART_STYLE_TITLE, PaneTitleConstants.CHART_STYLE_DATA_TITLE); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,32 @@ |
|||||||
|
package com.fr.design.chart.gui.active.action; |
||||||
|
|
||||||
|
import java.awt.event.ActionEvent; |
||||||
|
|
||||||
|
import com.fr.design.chart.gui.ChartComponent; |
||||||
|
import com.fr.design.mainframe.chart.ChartEditPane; |
||||||
|
import com.fr.design.mainframe.chart.PaneTitleConstants; |
||||||
|
import com.fr.general.Inter; |
||||||
|
|
||||||
|
/** |
||||||
|
* Created by IntelliJ IDEA. |
||||||
|
* Author : Richer |
||||||
|
* Version: 6.5.6 |
||||||
|
* Date : 11-11-22 |
||||||
|
* Time : 下午4:56 |
||||||
|
*/ |
||||||
|
public class SetLegendStyleAction extends ChartComponentAction { |
||||||
|
private static final long serialVersionUID = 3253190503195130478L; |
||||||
|
|
||||||
|
public SetLegendStyleAction(ChartComponent chartComponent) { |
||||||
|
super(chartComponent); |
||||||
|
this.setName(Inter.getLocText("Set_Legend_Sytle")); |
||||||
|
} |
||||||
|
|
||||||
|
public void actionPerformed(ActionEvent e) { |
||||||
|
showLegendStylePane(); |
||||||
|
} |
||||||
|
|
||||||
|
public void showLegendStylePane() { |
||||||
|
ChartEditPane.getInstance().GoToPane(PaneTitleConstants.CHART_STYLE_TITLE, PaneTitleConstants.CHART_STYLE_LEGNED_TITLE); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,32 @@ |
|||||||
|
package com.fr.design.chart.gui.active.action; |
||||||
|
|
||||||
|
import java.awt.event.ActionEvent; |
||||||
|
|
||||||
|
import com.fr.design.chart.gui.ChartComponent; |
||||||
|
import com.fr.design.mainframe.chart.ChartEditPane; |
||||||
|
import com.fr.design.mainframe.chart.PaneTitleConstants; |
||||||
|
import com.fr.general.Inter; |
||||||
|
|
||||||
|
/** |
||||||
|
* Created by IntelliJ IDEA. |
||||||
|
* Author : Richer |
||||||
|
* Version: 6.5.6 |
||||||
|
* Date : 11-11-22 |
||||||
|
* Time : 下午4:58 |
||||||
|
*/ |
||||||
|
public class SetPlotStyleAction extends ChartComponentAction { |
||||||
|
private static final long serialVersionUID = 2894127568015714372L; |
||||||
|
|
||||||
|
public SetPlotStyleAction(ChartComponent chartComponent) { |
||||||
|
super(chartComponent); |
||||||
|
this.setName(Inter.getLocText(new String[]{"Set", "ChartF-Plot"})); |
||||||
|
} |
||||||
|
|
||||||
|
public void actionPerformed(ActionEvent e) { |
||||||
|
showPlotPane(); |
||||||
|
} |
||||||
|
|
||||||
|
public void showPlotPane() { |
||||||
|
ChartEditPane.getInstance().GoToPane(PaneTitleConstants.CHART_STYLE_TITLE, PaneTitleConstants.CHART_STYLE_AREA_TITLE, PaneTitleConstants.CHART_STYLE_AREA_PLOT_TITLE); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,32 @@ |
|||||||
|
package com.fr.design.chart.gui.active.action; |
||||||
|
|
||||||
|
import java.awt.event.ActionEvent; |
||||||
|
|
||||||
|
import com.fr.design.chart.gui.ChartComponent; |
||||||
|
import com.fr.design.mainframe.chart.ChartEditPane; |
||||||
|
import com.fr.design.mainframe.chart.PaneTitleConstants; |
||||||
|
import com.fr.general.Inter; |
||||||
|
|
||||||
|
/** |
||||||
|
* Created by IntelliJ IDEA. |
||||||
|
* Author : Richer |
||||||
|
* Version: 6.5.6 |
||||||
|
* Date : 11-11-22 |
||||||
|
* Time : 下午4:52 |
||||||
|
*/ |
||||||
|
public class SetTitleStyleAction extends ChartComponentAction { |
||||||
|
private static final long serialVersionUID = -4763886493273213850L; |
||||||
|
|
||||||
|
public SetTitleStyleAction(ChartComponent chartComponent) { |
||||||
|
super(chartComponent); |
||||||
|
this.setName(Inter.getLocText(new String[]{"Set", "Title", "Style"})); |
||||||
|
} |
||||||
|
|
||||||
|
public void actionPerformed(ActionEvent e) { |
||||||
|
showTitlePane(); |
||||||
|
} |
||||||
|
|
||||||
|
public void showTitlePane() { |
||||||
|
ChartEditPane.getInstance().GoToPane(PaneTitleConstants.CHART_STYLE_TITLE, PaneTitleConstants.CHART_STYLE_TITLE_TITLE); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,81 @@ |
|||||||
|
package com.fr.design.chart.javascript; |
||||||
|
|
||||||
|
import javax.swing.JComponent; |
||||||
|
import javax.swing.JScrollPane; |
||||||
|
import javax.swing.SwingConstants; |
||||||
|
|
||||||
|
import com.fr.design.gui.icheckbox.UICheckBox; |
||||||
|
import com.fr.design.gui.ilable.UILabel; |
||||||
|
import com.fr.design.gui.itextfield.UITextField; |
||||||
|
import com.fr.design.javascript.EmailPane; |
||||||
|
import com.fr.design.layout.TableLayoutHelper; |
||||||
|
import com.fr.design.mainframe.DesignerContext; |
||||||
|
import com.fr.design.mainframe.JTemplate; |
||||||
|
import com.fr.general.Inter; |
||||||
|
import com.fr.js.EmailJavaScript; |
||||||
|
|
||||||
|
/** |
||||||
|
* |
||||||
|
* @author jim |
||||||
|
* |
||||||
|
*/ |
||||||
|
public class ChartEmailPane extends EmailPane{ |
||||||
|
|
||||||
|
private UITextField itemNameTextField; |
||||||
|
|
||||||
|
@Override |
||||||
|
protected void initCenterPane(UILabel mainTextLabel, JScrollPane scrollPane, double fill, double preferred) { |
||||||
|
double[] columnSize = { preferred, fill}; |
||||||
|
itemNameTextField = new UITextField(); |
||||||
|
JTemplate jTemplate = DesignerContext.getDesignerFrame().getSelectedJTemplate(); |
||||||
|
// 是否支持导出控制图表的超链邮件是否显示showTplContent
|
||||||
|
boolean supportExport = jTemplate.isJWorkBook(); |
||||||
|
if (supportExport) { |
||||||
|
double[] rSizes = { preferred, preferred, preferred, preferred, preferred, preferred, fill, preferred, preferred}; |
||||||
|
showTplContent = new UICheckBox(Inter.getLocText("Email-Can_Preview_Report_Content")); |
||||||
|
centerPane = TableLayoutHelper.createCommonTableLayoutPane(new JComponent[][]{ |
||||||
|
{new UILabel(Inter.getLocText("Name") + ":", SwingConstants.RIGHT), itemNameTextField}, |
||||||
|
{new UILabel(), tipsPane1}, |
||||||
|
createLinePane(Inter.getLocText("HJS-Mail_to"), maitoEditor = new UITextField()), |
||||||
|
createLinePane(Inter.getLocText("HJS-CC_to"), ccEditor = new UITextField()), |
||||||
|
createLinePane(Inter.getLocText("EmailPane-BCC"), bccEditor = new UITextField()), |
||||||
|
createLinePane(Inter.getLocText("EmailPane-mailSubject"), titleEditor = new UITextField()), |
||||||
|
{mainTextLabel, scrollPane}, |
||||||
|
{new UILabel(), showTplContent}, |
||||||
|
{new UILabel(), tipsPane2}},rSizes, columnSize, 6); |
||||||
|
} else { |
||||||
|
double[] rSizes = { preferred, preferred, preferred, preferred, preferred, preferred, fill, preferred}; |
||||||
|
centerPane = TableLayoutHelper.createCommonTableLayoutPane(new JComponent[][]{ |
||||||
|
{new UILabel(Inter.getLocText("Name") + ":", SwingConstants.RIGHT), itemNameTextField}, |
||||||
|
{new UILabel(), tipsPane1}, |
||||||
|
createLinePane(Inter.getLocText("HJS-Mail_to"), maitoEditor = new UITextField()), |
||||||
|
createLinePane(Inter.getLocText("HJS-CC_to"), ccEditor = new UITextField()), |
||||||
|
createLinePane(Inter.getLocText("EmailPane-BCC"), bccEditor = new UITextField()), |
||||||
|
createLinePane(Inter.getLocText("EmailPane-mailSubject"), titleEditor = new UITextField()), |
||||||
|
{mainTextLabel, scrollPane}, |
||||||
|
{new UILabel(), tipsPane2}},rSizes, columnSize, 8); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
protected void checkEmailConfig(boolean valid) { |
||||||
|
super.checkEmailConfig(valid); |
||||||
|
if(itemNameTextField != null){ |
||||||
|
itemNameTextField.setEnabled(valid); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public void populateBean(EmailJavaScript ob) { |
||||||
|
if(itemNameTextField != null){ |
||||||
|
itemNameTextField.setName(ob == null ? null : ob.getItemName()); |
||||||
|
} |
||||||
|
super.populateBean(ob); |
||||||
|
} |
||||||
|
|
||||||
|
public void updateBean(EmailJavaScript email) { |
||||||
|
if(itemNameTextField != null){ |
||||||
|
email.setItemName(itemNameTextField.getText()); |
||||||
|
} |
||||||
|
super.updateBean(email); |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,155 @@ |
|||||||
|
package com.fr.design.chart.report; |
||||||
|
|
||||||
|
import com.fr.base.chart.chartdata.TopDefinitionProvider; |
||||||
|
import com.fr.chart.chartattr.Chart; |
||||||
|
import com.fr.chart.chartattr.ChartCollection; |
||||||
|
import com.fr.chart.chartdata.GisMapReportDefinition; |
||||||
|
import com.fr.chart.chartdata.GisMapTableDefinition; |
||||||
|
import com.fr.chart.chartdata.TopDefinition; |
||||||
|
import com.fr.design.beans.FurtherBasicBeanPane; |
||||||
|
import com.fr.design.constants.LayoutConstants; |
||||||
|
import com.fr.design.dialog.BasicScrollPane; |
||||||
|
import com.fr.design.gui.frpane.AttributeChangeListener; |
||||||
|
import com.fr.design.gui.frpane.UIComboBoxPane; |
||||||
|
import com.fr.design.gui.ilable.BoldFontTextLabel; |
||||||
|
import com.fr.design.layout.TableLayout; |
||||||
|
import com.fr.design.layout.TableLayoutHelper; |
||||||
|
import com.fr.design.mainframe.chart.gui.data.DataContentsPane; |
||||||
|
import com.fr.general.Inter; |
||||||
|
|
||||||
|
import javax.swing.*; |
||||||
|
import java.awt.*; |
||||||
|
import java.util.ArrayList; |
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
public class GisMapDataPane extends DataContentsPane{ |
||||||
|
private static final long serialVersionUID = -190573722921978406L; |
||||||
|
|
||||||
|
private UIComboBoxPane<Chart> dataFromPane;// 数据来源的box界面
|
||||||
|
|
||||||
|
private GisMapReportDataContentPane reportPane; |
||||||
|
private GisMapTableDataContentPane tablePane; |
||||||
|
private AttributeChangeListener listener; |
||||||
|
|
||||||
|
public GisMapDataPane(AttributeChangeListener listener) { |
||||||
|
super(); |
||||||
|
this.listener = listener; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* 判断准许的情况 |
||||||
|
* @param ob 传入的对象 |
||||||
|
* @return 返回是否允许 |
||||||
|
*/ |
||||||
|
public boolean accept(Object ob) { |
||||||
|
return ob instanceof TopDefinition; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 重置 |
||||||
|
*/ |
||||||
|
public void reset() { |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 界面标题 |
||||||
|
* @return 界面标题 |
||||||
|
*/ |
||||||
|
public String title4PopupWindow() { |
||||||
|
return Inter.getLocText("ChartF-Gis"); |
||||||
|
} |
||||||
|
|
||||||
|
public void setSupportCellData(boolean surpportCellData) { |
||||||
|
dataFromPane.justSupportOneSelect(surpportCellData); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
@Override |
||||||
|
public void populate(ChartCollection collection) { |
||||||
|
TopDefinitionProvider definition = collection.getSelectedChart().getFilterDefinition(); |
||||||
|
|
||||||
|
if(definition instanceof GisMapTableDefinition) { |
||||||
|
dataFromPane.setSelectedIndex(0); |
||||||
|
tablePane.populateBean((GisMapTableDefinition)definition); |
||||||
|
}else if(definition instanceof GisMapReportDefinition) { |
||||||
|
dataFromPane.setSelectedIndex(1); |
||||||
|
reportPane.populateBean((GisMapReportDefinition)definition); |
||||||
|
} |
||||||
|
|
||||||
|
this.initAllListeners(); |
||||||
|
this.addAttributeChangeListener(listener); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void update(ChartCollection collection) { |
||||||
|
if(dataFromPane.getSelectedIndex() == 0){ |
||||||
|
collection.getSelectedChart().setFilterDefinition(tablePane.updateBean()); |
||||||
|
}else if(dataFromPane.getSelectedIndex() == 1){ |
||||||
|
collection.getSelectedChart().setFilterDefinition(reportPane.updateBean()); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected JPanel createContentPane() { |
||||||
|
return new BasicScrollPane<Chart>() { |
||||||
|
|
||||||
|
@Override |
||||||
|
protected JPanel createContentPane() { |
||||||
|
JPanel contentPane = new JPanel(); |
||||||
|
contentPane.setLayout(new BorderLayout()); |
||||||
|
|
||||||
|
contentPane.add(dataFromPane = new UIComboBoxPane<Chart>() { |
||||||
|
protected void initLayout() { |
||||||
|
this.setLayout(new BorderLayout(LayoutConstants.HGAP_LARGE,6)); |
||||||
|
|
||||||
|
double p = TableLayout.PREFERRED; |
||||||
|
double f = TableLayout.FILL; |
||||||
|
double[] columnSize = { p,f }; |
||||||
|
double[] rowSize = { p}; |
||||||
|
Component[][] components = new Component[][]{ |
||||||
|
new Component[]{new BoldFontTextLabel(Inter.getLocText("ChartF-Data-Resource") + ":"), jcb}, |
||||||
|
} ; |
||||||
|
|
||||||
|
JPanel northPane = TableLayoutHelper.createGapTableLayoutPane(components, rowSize, columnSize, 0, 0); |
||||||
|
|
||||||
|
this.add(northPane, BorderLayout.NORTH); |
||||||
|
this.add(cardPane, BorderLayout.CENTER); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected List<FurtherBasicBeanPane<? extends Chart>> initPaneList() { |
||||||
|
List list = new ArrayList(); |
||||||
|
|
||||||
|
list.add(tablePane = new GisMapTableDataContentPane());// 数据集界面
|
||||||
|
list.add(reportPane = new GisMapReportDataContentPane());// 单元格界面
|
||||||
|
|
||||||
|
return list; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected String title4PopupWindow() { |
||||||
|
return Inter.getLocText("Data_Setting"); |
||||||
|
} |
||||||
|
}, BorderLayout.CENTER); |
||||||
|
|
||||||
|
dataFromPane.setBorder(BorderFactory.createEmptyBorder(10 ,0, 0, 0)); |
||||||
|
return contentPane; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void populateBean(Chart ob) { |
||||||
|
// TODO Auto-generated method stub
|
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected String title4PopupWindow() { |
||||||
|
// TODO Auto-generated method stub
|
||||||
|
return null; |
||||||
|
}}; |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,69 @@ |
|||||||
|
package com.fr.design.chart.report; |
||||||
|
|
||||||
|
import com.fr.base.TableData; |
||||||
|
import com.fr.base.chart.chartdata.TopDefinitionProvider; |
||||||
|
import com.fr.chart.chartattr.Chart; |
||||||
|
import com.fr.chart.chartattr.ChartCollection; |
||||||
|
import com.fr.chart.chartdata.*; |
||||||
|
import com.fr.design.gui.frpane.AttributeChangeListener; |
||||||
|
import com.fr.design.mainframe.AbstractChartDataPane4Chart; |
||||||
|
import com.fr.design.mainframe.chart.gui.ChartDataPane; |
||||||
|
|
||||||
|
import javax.swing.*; |
||||||
|
|
||||||
|
/** |
||||||
|
* Created by IntelliJ IDEA. |
||||||
|
* Author : daisy |
||||||
|
* Version: 7.1.1 |
||||||
|
*/ |
||||||
|
public class GisMapDataPane4Chart extends AbstractChartDataPane4Chart { |
||||||
|
|
||||||
|
private GisMapTableDataContentPane4Chart tablePane = new GisMapTableDataContentPane4Chart(); |
||||||
|
|
||||||
|
public GisMapDataPane4Chart(AttributeChangeListener listener, ChartDataPane parent) { |
||||||
|
super(listener, parent); |
||||||
|
} |
||||||
|
|
||||||
|
protected JPanel getDataContentPane() { |
||||||
|
return tablePane; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void populate(ChartCollection collection) { |
||||||
|
tablePane = new GisMapTableDataContentPane4Chart(); |
||||||
|
if (collection != null && collection.getSelectedChart() != null) { |
||||||
|
Chart chart = collection.getSelectedChart(); |
||||||
|
TopDefinitionProvider definition = chart.getFilterDefinition(); |
||||||
|
if (definition instanceof TableDataDefinition) { |
||||||
|
TableData tableData = ((TableDataDefinition) definition).getTableData(); |
||||||
|
if (tableData != null) { |
||||||
|
populateChoosePane(tableData); |
||||||
|
fireTableDataChange(); |
||||||
|
} |
||||||
|
} |
||||||
|
if (definition instanceof GisMapTableDefinition) { |
||||||
|
tablePane.populateBean((GisMapTableDefinition) definition); |
||||||
|
} |
||||||
|
} |
||||||
|
this.remove(leftContentPane); |
||||||
|
this.initContentPane(); |
||||||
|
this.validate(); |
||||||
|
dataSource.addItemListener(dsListener); |
||||||
|
initAllListeners(); |
||||||
|
initSelfListener(tablePane); |
||||||
|
this.addAttributeChangeListener(attributeChangeListener); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void update(ChartCollection collection) { |
||||||
|
collection.getSelectedChart().setFilterDefinition(tablePane.updateBean()); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* 数据集数据改变 |
||||||
|
*/ |
||||||
|
public void fireTableDataChange() { |
||||||
|
tablePane.fireTableDataChange(choosePane.getTableDataWrapper()); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,301 @@ |
|||||||
|
package com.fr.design.chart.report; |
||||||
|
|
||||||
|
import java.awt.*; |
||||||
|
import java.awt.event.FocusAdapter; |
||||||
|
import java.awt.event.FocusEvent; |
||||||
|
import java.util.ArrayList; |
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
import javax.swing.JComponent; |
||||||
|
import javax.swing.JPanel; |
||||||
|
import javax.swing.JTable; |
||||||
|
import javax.swing.SwingConstants; |
||||||
|
import javax.swing.event.ChangeEvent; |
||||||
|
import javax.swing.event.ChangeListener; |
||||||
|
|
||||||
|
import com.fr.base.Formula; |
||||||
|
import com.fr.base.Utils; |
||||||
|
import com.fr.chart.chartdata.BaseSeriesDefinition; |
||||||
|
import com.fr.chart.chartdata.GisMapReportDefinition; |
||||||
|
import com.fr.chart.chartdata.SeriesDefinition; |
||||||
|
import com.fr.design.constants.LayoutConstants; |
||||||
|
import com.fr.design.constants.UIConstants; |
||||||
|
import com.fr.design.beans.FurtherBasicBeanPane; |
||||||
|
import com.fr.design.event.UIObserver; |
||||||
|
import com.fr.design.event.UIObserverListener; |
||||||
|
import com.fr.design.formula.TinyFormulaPane; |
||||||
|
import com.fr.design.gui.frpane.UICorrelationPane; |
||||||
|
import com.fr.design.gui.ibutton.UIButtonGroup; |
||||||
|
import com.fr.design.gui.ilable.UILabel; |
||||||
|
import com.fr.design.gui.itable.UITableEditor; |
||||||
|
import com.fr.design.gui.itextfield.UITextField; |
||||||
|
import com.fr.design.layout.TableLayout; |
||||||
|
import com.fr.design.layout.TableLayoutHelper; |
||||||
|
import com.fr.general.Inter; |
||||||
|
import com.fr.stable.StableUtils; |
||||||
|
import com.fr.stable.StringUtils; |
||||||
|
|
||||||
|
/** |
||||||
|
* 属性表gis地图单元格数据源设置界面 |
||||||
|
* |
||||||
|
* @author eason |
||||||
|
*/ |
||||||
|
public class GisMapReportDataContentPane extends FurtherBasicBeanPane<GisMapReportDefinition> implements UIObserver { |
||||||
|
private UIButtonGroup<String> addressType; |
||||||
|
private UIButtonGroup<String> lnglatOrder; |
||||||
|
private TinyFormulaPane addressPane; |
||||||
|
private TinyFormulaPane addressNamePane; |
||||||
|
private UICorrelationPane seriesPane; |
||||||
|
private JPanel orderPane; |
||||||
|
private ArrayList<ChangeListener> changeListeners = new ArrayList<ChangeListener>(); |
||||||
|
|
||||||
|
public GisMapReportDataContentPane() { |
||||||
|
initCom(); |
||||||
|
} |
||||||
|
|
||||||
|
private void initCom() { |
||||||
|
this.setLayout(new BorderLayout(0, 0)); |
||||||
|
addressType = new UIButtonGroup<String>(new String[]{Inter.getLocText("Chart-Address"), Inter.getLocText("Chart-LngLat")}); |
||||||
|
lnglatOrder = new UIButtonGroup<String>(new String[]{Inter.getLocText("Chart-LngFirst"), Inter.getLocText("Chart-LatFirst")}); |
||||||
|
addressPane = new TinyFormulaPane(); |
||||||
|
addressNamePane = new TinyFormulaPane(); |
||||||
|
double p = TableLayout.PREFERRED; |
||||||
|
double f = TableLayout.FILL; |
||||||
|
double[] columnSize = new double[]{p, f}; |
||||||
|
double[] rowSize = new double[]{p, p, p}; |
||||||
|
|
||||||
|
orderPane = new JPanel(new BorderLayout(LayoutConstants.VGAP_MEDIUM, 0)) { |
||||||
|
@Override |
||||||
|
public Dimension getPreferredSize() { |
||||||
|
if (this.isVisible()) { |
||||||
|
return super.getPreferredSize(); |
||||||
|
} else { |
||||||
|
return new Dimension(0, 0); |
||||||
|
} |
||||||
|
} |
||||||
|
}; |
||||||
|
orderPane.add(new UILabel(Inter.getLocText("Chart-LatLngOrder")), BorderLayout.WEST); |
||||||
|
orderPane.add(lnglatOrder, BorderLayout.CENTER); |
||||||
|
orderPane.setVisible(false); |
||||||
|
lnglatOrder.setSelectedIndex(0); |
||||||
|
addressType.setSelectedIndex(0); |
||||||
|
Component[][] components = new Component[][]{ |
||||||
|
new Component[]{addressType, addressPane}, |
||||||
|
new Component[]{orderPane, null}, |
||||||
|
new Component[]{new UILabel(" " +Inter.getLocText("Chart-Address-Name")+":", SwingConstants.RIGHT), addressNamePane}, |
||||||
|
}; |
||||||
|
JPanel northPane = TableLayoutHelper.createTableLayoutPane(components, rowSize, columnSize); |
||||||
|
|
||||||
|
this.add(northPane, BorderLayout.NORTH); |
||||||
|
|
||||||
|
String[] columnNames = new String[]{Inter.getLocText(new String[]{"Filed", "Title"}), Inter.getLocText("Area_Value")}; |
||||||
|
seriesPane = new UICorrelationPane(columnNames) { |
||||||
|
public UITableEditor createUITableEditor() { |
||||||
|
return new InnerTableEditor(); |
||||||
|
} |
||||||
|
}; |
||||||
|
|
||||||
|
this.add(seriesPane, BorderLayout.CENTER); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 界面接入. |
||||||
|
* @param ob 对象 |
||||||
|
* @return true表示接受 |
||||||
|
*/ |
||||||
|
public boolean accept(Object ob) { |
||||||
|
return true; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 重置 |
||||||
|
*/ |
||||||
|
public void reset() { |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 界面弹出标题. |
||||||
|
* @return 标题 |
||||||
|
*/ |
||||||
|
public String title4PopupWindow() { |
||||||
|
return Inter.getLocText("Cell"); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void populateBean(GisMapReportDefinition ob) { |
||||||
|
if (ob.getCategoryName() != null) { |
||||||
|
if (ob.isAddress()) { |
||||||
|
addressType.setSelectedIndex(0); |
||||||
|
orderPane.setVisible(false); |
||||||
|
} else { |
||||||
|
addressType.setSelectedIndex(1); |
||||||
|
orderPane.setVisible(true); |
||||||
|
} |
||||||
|
|
||||||
|
if (ob.isLngFirst()) { |
||||||
|
lnglatOrder.setSelectedIndex(0); |
||||||
|
} else { |
||||||
|
lnglatOrder.setSelectedIndex(1); |
||||||
|
} |
||||||
|
|
||||||
|
addressPane.populateBean(Utils.objectToString(ob.getCategoryName())); |
||||||
|
if (ob.getAddressName() != null) { |
||||||
|
addressNamePane.populateBean(Utils.objectToString(ob.getAddressName())); |
||||||
|
} |
||||||
|
int size = ob.getTitleValueSize(); |
||||||
|
List paneList = new ArrayList(); |
||||||
|
for (int i = 0; i < size; i++) { |
||||||
|
BaseSeriesDefinition first = ob.getTitleValueWithIndex(i); |
||||||
|
if (first != null && first.getSeriesName() != null && first.getValue() != null) { |
||||||
|
paneList.add(new Object[]{first.getSeriesName(), first.getValue()}); |
||||||
|
} |
||||||
|
} |
||||||
|
if (!paneList.isEmpty()) { |
||||||
|
seriesPane.populateBean(paneList); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public GisMapReportDefinition updateBean() { |
||||||
|
GisMapReportDefinition reportDefinition = new GisMapReportDefinition(); |
||||||
|
if (this.addressType.getSelectedIndex() == 0) { |
||||||
|
reportDefinition.setAddressType(true); |
||||||
|
orderPane.setVisible(false); |
||||||
|
} else { |
||||||
|
reportDefinition.setAddressType(false); |
||||||
|
orderPane.setVisible(true); |
||||||
|
} |
||||||
|
|
||||||
|
if (this.lnglatOrder.getSelectedIndex() == 0) { |
||||||
|
reportDefinition.setLnglatOrder(true); |
||||||
|
} else { |
||||||
|
reportDefinition.setLnglatOrder(false); |
||||||
|
} |
||||||
|
|
||||||
|
String address = addressPane.updateBean(); |
||||||
|
if (StringUtils.isBlank(address)) { |
||||||
|
return null; |
||||||
|
} |
||||||
|
if (StableUtils.canBeFormula(address)) { |
||||||
|
reportDefinition.setCategoryName(new Formula(address)); |
||||||
|
} else { |
||||||
|
reportDefinition.setCategoryName(address); |
||||||
|
} |
||||||
|
|
||||||
|
String addressName = addressNamePane.updateBean(); |
||||||
|
if (addressName != null && !StringUtils.isBlank(addressName)) { |
||||||
|
if (StableUtils.canBeFormula(addressName)) { |
||||||
|
reportDefinition.setAddressName(addressName); |
||||||
|
} else { |
||||||
|
reportDefinition.setAddressName(addressName); |
||||||
|
} |
||||||
|
} |
||||||
|
List values = seriesPane.updateBean(); |
||||||
|
if (values != null && !values.isEmpty()) { |
||||||
|
for (int i = 0, size = values.size(); i < size; i++) { |
||||||
|
Object[] objects = (Object[]) values.get(i); |
||||||
|
Object name = objects[0]; |
||||||
|
Object value = objects[1]; |
||||||
|
|
||||||
|
if (StableUtils.canBeFormula(value)) { |
||||||
|
value = new Formula(Utils.objectToString(value)); |
||||||
|
} |
||||||
|
SeriesDefinition definition = new SeriesDefinition(name, value); |
||||||
|
reportDefinition.addTitleValue(definition); |
||||||
|
} |
||||||
|
} |
||||||
|
return reportDefinition; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 给组件登记一个观察者监听事件 |
||||||
|
* |
||||||
|
* @param listener 观察者监听事件 |
||||||
|
*/ |
||||||
|
public void registerChangeListener(final UIObserverListener listener) { |
||||||
|
changeListeners.add(new ChangeListener() { |
||||||
|
public void stateChanged(ChangeEvent e) { |
||||||
|
listener.doChange(); |
||||||
|
} |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 组件是否需要响应添加的观察者事件 |
||||||
|
* |
||||||
|
* @return 如果需要响应观察者事件则返回true,否则返回false |
||||||
|
*/ |
||||||
|
public boolean shouldResponseChangeListener() { |
||||||
|
return true; |
||||||
|
} |
||||||
|
|
||||||
|
private class InnerTableEditor extends UITableEditor { |
||||||
|
private JComponent editorComponent; |
||||||
|
|
||||||
|
/** |
||||||
|
* 返回当前编辑器的值 |
||||||
|
*/ |
||||||
|
public Object getCellEditorValue() { |
||||||
|
if (editorComponent instanceof TinyFormulaPane) { |
||||||
|
return ((TinyFormulaPane) editorComponent).getUITextField().getText(); |
||||||
|
} else if (editorComponent instanceof UITextField) { |
||||||
|
return ((UITextField) editorComponent).getText(); |
||||||
|
} |
||||||
|
|
||||||
|
return super.getCellEditorValue(); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 返回当前编辑器.. |
||||||
|
*/ |
||||||
|
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { |
||||||
|
if (column == table.getModel().getColumnCount()) { |
||||||
|
return null; |
||||||
|
} |
||||||
|
return getEditorComponent(column, value); |
||||||
|
} |
||||||
|
|
||||||
|
private JComponent getEditorComponent(int column, Object value) { |
||||||
|
if (column == 0) { |
||||||
|
UITextField field = new UITextField(); |
||||||
|
addListener4UITextFiled(field); |
||||||
|
|
||||||
|
if (value != null) { |
||||||
|
field.setText(Utils.objectToString(value)); |
||||||
|
} |
||||||
|
editorComponent = field; |
||||||
|
} else { |
||||||
|
TinyFormulaPane tinyPane = new TinyFormulaPane() { |
||||||
|
@Override |
||||||
|
public void okEvent() { |
||||||
|
seriesPane.stopCellEditing(); |
||||||
|
seriesPane.fireTargetChanged(); |
||||||
|
} |
||||||
|
}; |
||||||
|
tinyPane.setBackground(UIConstants.FLESH_BLUE); |
||||||
|
|
||||||
|
addListener4UITextFiled(tinyPane.getUITextField()); |
||||||
|
|
||||||
|
if (value != null) { |
||||||
|
tinyPane.getUITextField().setText(Utils.objectToString(value)); |
||||||
|
} |
||||||
|
|
||||||
|
editorComponent = tinyPane; |
||||||
|
} |
||||||
|
return editorComponent; |
||||||
|
} |
||||||
|
|
||||||
|
private void addListener4UITextFiled(UITextField textField) { |
||||||
|
|
||||||
|
textField.addFocusListener(new FocusAdapter() { |
||||||
|
@Override |
||||||
|
public void focusLost(FocusEvent e) { |
||||||
|
// seriesPane.stopCellEditing(); //kunsnat: 不stop是因为可能直接点击公式编辑按钮, 否则需要点击两次才能弹出.
|
||||||
|
seriesPane.fireTargetChanged(); |
||||||
|
} |
||||||
|
}); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,350 @@ |
|||||||
|
package com.fr.design.chart.report; |
||||||
|
|
||||||
|
import com.fr.base.Utils; |
||||||
|
import com.fr.chart.base.ChartConstants; |
||||||
|
import com.fr.chart.chartdata.GisMapTableDefinition; |
||||||
|
import com.fr.chart.chartdata.SeriesDefinition; |
||||||
|
import com.fr.design.constants.LayoutConstants; |
||||||
|
import com.fr.data.impl.NameTableData; |
||||||
|
import com.fr.design.data.tabledata.wrapper.TableDataWrapper; |
||||||
|
import com.fr.design.beans.FurtherBasicBeanPane; |
||||||
|
import com.fr.design.event.UIObserver; |
||||||
|
import com.fr.design.event.UIObserverListener; |
||||||
|
import com.fr.design.gui.frpane.UICorrelationPane; |
||||||
|
import com.fr.design.gui.ibutton.UIButtonGroup; |
||||||
|
import com.fr.design.gui.icombobox.UIComboBox; |
||||||
|
import com.fr.design.gui.ilable.UILabel; |
||||||
|
import com.fr.design.gui.itable.UITableEditor; |
||||||
|
import com.fr.design.gui.itextfield.UITextField; |
||||||
|
import com.fr.design.layout.TableLayout; |
||||||
|
import com.fr.design.layout.TableLayoutHelper; |
||||||
|
import com.fr.design.mainframe.chart.gui.data.DatabaseTableDataPane; |
||||||
|
import com.fr.general.Inter; |
||||||
|
import com.fr.stable.ArrayUtils; |
||||||
|
import com.fr.stable.StringUtils; |
||||||
|
|
||||||
|
import javax.swing.*; |
||||||
|
import javax.swing.event.ChangeEvent; |
||||||
|
import javax.swing.event.ChangeListener; |
||||||
|
import java.awt.*; |
||||||
|
import java.awt.event.FocusAdapter; |
||||||
|
import java.awt.event.FocusEvent; |
||||||
|
import java.awt.event.ItemEvent; |
||||||
|
import java.awt.event.ItemListener; |
||||||
|
import java.util.ArrayList; |
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
/** |
||||||
|
* 属性表gis地图数据集数据源定义面板 |
||||||
|
* @author eason |
||||||
|
* |
||||||
|
*/ |
||||||
|
public class GisMapTableDataContentPane extends FurtherBasicBeanPane<GisMapTableDefinition> implements UIObserver { |
||||||
|
|
||||||
|
private DatabaseTableDataPane fromTableData; |
||||||
|
|
||||||
|
private ArrayList<ChangeListener> changeListeners = new ArrayList<ChangeListener>(); |
||||||
|
private String[] initNames = {""}; |
||||||
|
|
||||||
|
private UIButtonGroup<String> addressType; |
||||||
|
private UIButtonGroup<String> lnglatOrder; |
||||||
|
private UIComboBox addressBox; |
||||||
|
private UIComboBox addressNameBox; |
||||||
|
private UICorrelationPane titleValuePane; |
||||||
|
private JPanel orderPane; |
||||||
|
|
||||||
|
public GisMapTableDataContentPane() { |
||||||
|
this.setLayout(new BorderLayout()); |
||||||
|
|
||||||
|
JPanel northPane = new JPanel(); |
||||||
|
this.add(northPane, BorderLayout.NORTH); |
||||||
|
|
||||||
|
northPane.setLayout(new FlowLayout(FlowLayout.LEFT)); |
||||||
|
|
||||||
|
UILabel label = new UILabel(Inter.getLocText("Chart-Select_Data_Set") + ":", SwingConstants.LEFT); |
||||||
|
|
||||||
|
northPane.add(fromTableData = new DatabaseTableDataPane(label) { |
||||||
|
@Override |
||||||
|
protected void userEvent() { |
||||||
|
refresh2ComboBox(); |
||||||
|
} |
||||||
|
}); |
||||||
|
fromTableData.setPreferredSize(new Dimension(218, 20)); |
||||||
|
northPane.add(fromTableData); |
||||||
|
|
||||||
|
addressType = new UIButtonGroup<String>(new String[]{Inter.getLocText("Chart-Gis_Address"), Inter.getLocText("Chart-Gis_LatLng")}); |
||||||
|
lnglatOrder = new UIButtonGroup<String>(new String[]{Inter.getLocText("Chart-Lng_First"),Inter.getLocText("Chart-Lat_First")}); |
||||||
|
addressBox = new UIComboBox(); |
||||||
|
addressNameBox = new UIComboBox(); |
||||||
|
double p = TableLayout.PREFERRED; |
||||||
|
double f = TableLayout.FILL; |
||||||
|
double[] columnSize = new double[]{p, f}; |
||||||
|
double[] rowSize = new double[]{p, p, p}; |
||||||
|
orderPane = new JPanel(new BorderLayout(LayoutConstants.VGAP_MEDIUM,0)){ |
||||||
|
@Override |
||||||
|
public Dimension getPreferredSize() { |
||||||
|
if(this.isVisible()){ |
||||||
|
return super.getPreferredSize(); |
||||||
|
}else{ |
||||||
|
return new Dimension(0,0); |
||||||
|
} |
||||||
|
} |
||||||
|
}; |
||||||
|
orderPane.add(new UILabel(Inter.getLocText("Chart-LatLng_Order")), BorderLayout.WEST); |
||||||
|
orderPane.add(lnglatOrder, BorderLayout.CENTER); |
||||||
|
orderPane.setVisible(false); |
||||||
|
lnglatOrder.setSelectedIndex(0); |
||||||
|
addressType.setSelectedIndex(0); |
||||||
|
|
||||||
|
addressNameBox.removeAllItems(); |
||||||
|
addressNameBox.addItem(Inter.getLocText("Chart-Use_None")); |
||||||
|
|
||||||
|
Component[][] components = new Component[][]{ |
||||||
|
new Component[]{addressType, addressBox}, |
||||||
|
new Component[]{orderPane,null}, |
||||||
|
new Component[]{new UILabel(Inter.getLocText("Chart-Address_Name") + ":", SwingConstants.RIGHT), addressNameBox}, |
||||||
|
}; |
||||||
|
JPanel centerPane = TableLayoutHelper.createTableLayoutPane(components, rowSize, columnSize); |
||||||
|
|
||||||
|
JPanel pane = new JPanel(); |
||||||
|
this.add(pane, BorderLayout.CENTER); |
||||||
|
pane.setLayout(new BorderLayout()); |
||||||
|
|
||||||
|
pane.add(centerPane, BorderLayout.NORTH); |
||||||
|
|
||||||
|
String[] titles = {Inter.getLocText("Chart-Area_Title"), Inter.getLocText("Chart-Area_Value")}; |
||||||
|
titleValuePane = new UICorrelationPane(titles){ |
||||||
|
public UITableEditor createUITableEditor() { |
||||||
|
return new InnerTableEditor(); |
||||||
|
} |
||||||
|
}; |
||||||
|
|
||||||
|
pane.add(titleValuePane, BorderLayout.CENTER); |
||||||
|
} |
||||||
|
|
||||||
|
private void refresh2ComboBox() {// 刷新地址 地址名 名称列表
|
||||||
|
TableDataWrapper tableDataWrappe = fromTableData.getTableDataWrapper(); |
||||||
|
if (tableDataWrappe == null) { |
||||||
|
return; |
||||||
|
} |
||||||
|
List<String> columnNameList = tableDataWrappe.calculateColumnNameList(); |
||||||
|
initNames = columnNameList.toArray(new String[columnNameList.size()]); |
||||||
|
|
||||||
|
addressBox.removeAllItems(); |
||||||
|
addressNameBox.removeAllItems(); |
||||||
|
addressNameBox.addItem(Inter.getLocText("Chart-Use_None")); |
||||||
|
|
||||||
|
for(int i = 0, size = initNames.length; i < size; i++) { |
||||||
|
addressBox.addItem(initNames[i]); |
||||||
|
addressNameBox.addItem(initNames[i]); |
||||||
|
} |
||||||
|
|
||||||
|
addressBox.getModel().setSelectedItem(null); |
||||||
|
addressNameBox.getModel().setSelectedItem(null); |
||||||
|
|
||||||
|
stopEditing(); |
||||||
|
} |
||||||
|
/** |
||||||
|
* 界面接入 |
||||||
|
* @param ob 对象 |
||||||
|
* @return true表示接受 |
||||||
|
*/ |
||||||
|
public boolean accept(Object ob) { |
||||||
|
return false; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 界面重置 |
||||||
|
*/ |
||||||
|
public void reset() { |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 界面弹出标题 |
||||||
|
* @return 标题 |
||||||
|
*/ |
||||||
|
public String title4PopupWindow() { |
||||||
|
return Inter.getLocText("Chart-DS_TableData"); |
||||||
|
} |
||||||
|
|
||||||
|
private void stopEditing() { |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void populateBean(GisMapTableDefinition ob) { |
||||||
|
stopEditing(); |
||||||
|
if (ob instanceof GisMapTableDefinition) { |
||||||
|
GisMapTableDefinition mapDefinition = (GisMapTableDefinition) ob; |
||||||
|
fromTableData.populateBean(((NameTableData) mapDefinition.getTableData())); |
||||||
|
|
||||||
|
if(ob.isAddress()){ |
||||||
|
addressType.setSelectedIndex(0); |
||||||
|
orderPane.setVisible(false); |
||||||
|
}else{ |
||||||
|
addressType.setSelectedIndex(1); |
||||||
|
orderPane.setVisible(true); |
||||||
|
} |
||||||
|
|
||||||
|
if(ob.isLngFirst()){ |
||||||
|
lnglatOrder.setSelectedIndex(0); |
||||||
|
}else{ |
||||||
|
lnglatOrder.setSelectedIndex(1); |
||||||
|
} |
||||||
|
|
||||||
|
addressBox.setSelectedItem(mapDefinition.getAddress()); |
||||||
|
|
||||||
|
if(StringUtils.isEmpty(mapDefinition.getAddressName())) { |
||||||
|
addressNameBox.setSelectedItem(Inter.getLocText("Chart-Use_None")); |
||||||
|
} else { |
||||||
|
addressNameBox.setSelectedItem(mapDefinition.getAddressName()); |
||||||
|
} |
||||||
|
|
||||||
|
List paneList = new ArrayList(); |
||||||
|
int titleValueSize = mapDefinition.getTittleValueSize(); |
||||||
|
for(int i = 0; i < titleValueSize; i++) { |
||||||
|
SeriesDefinition definition = mapDefinition.getTittleValueWithIndex(i); |
||||||
|
if(definition != null && definition.getSeriesName() != null && definition.getValue() != null) { |
||||||
|
paneList.add(new Object[]{definition.getSeriesName(), definition.getValue()}); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
if(!paneList.isEmpty()) { |
||||||
|
titleValuePane.populateBean(paneList); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public GisMapTableDefinition updateBean() {// 从一行内容中update
|
||||||
|
stopEditing(); |
||||||
|
|
||||||
|
GisMapTableDefinition definition = new GisMapTableDefinition(); |
||||||
|
|
||||||
|
TableDataWrapper tableDataWrappe = fromTableData.getTableDataWrapper(); |
||||||
|
if (tableDataWrappe == null || addressBox.getSelectedItem() == null) { |
||||||
|
return null; |
||||||
|
} |
||||||
|
|
||||||
|
definition.setTableData(new NameTableData(tableDataWrappe.getTableDataName())); |
||||||
|
definition.setAddress(Utils.objectToString(addressBox.getSelectedItem())); |
||||||
|
|
||||||
|
if(this.addressType.getSelectedIndex() == 0){ |
||||||
|
definition.setAddressType(true); |
||||||
|
lnglatOrder.setVisible(false); |
||||||
|
}else{ |
||||||
|
definition.setAddressType(false); |
||||||
|
lnglatOrder.setVisible(true); |
||||||
|
} |
||||||
|
|
||||||
|
if(this.lnglatOrder.getSelectedIndex() == 0){ |
||||||
|
definition.setLnglatOrder(true); |
||||||
|
}else{ |
||||||
|
definition.setLnglatOrder(false); |
||||||
|
} |
||||||
|
|
||||||
|
if(addressNameBox.getSelectedItem() != null){ |
||||||
|
String adName = Utils.objectToString(addressNameBox.getSelectedItem()); |
||||||
|
if(ArrayUtils.contains(ChartConstants.NONE_KEYS, adName)) { |
||||||
|
definition.setAddressName(StringUtils.EMPTY); |
||||||
|
} else { |
||||||
|
definition.setAddressName(adName); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
List paneList = titleValuePane.updateBean(); |
||||||
|
for(int i = 0, size = paneList.size(); i < size; i++) { |
||||||
|
Object[] values = (Object[])paneList.get(i); |
||||||
|
if(values.length == 2) { |
||||||
|
SeriesDefinition seriesDefinition = new SeriesDefinition(); |
||||||
|
seriesDefinition.setSeriesName(values[0]); |
||||||
|
seriesDefinition.setValue(values[1]); |
||||||
|
definition.addTittleValue(seriesDefinition); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
return definition; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 给组件登记一个观察者监听事件 |
||||||
|
* |
||||||
|
* @param listener 观察者监听事件 |
||||||
|
*/ |
||||||
|
public void registerChangeListener(final UIObserverListener listener) { |
||||||
|
changeListeners.add(new ChangeListener() { |
||||||
|
public void stateChanged(ChangeEvent e) { |
||||||
|
listener.doChange(); |
||||||
|
} |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 组件是否需要响应添加的观察者事件 |
||||||
|
* |
||||||
|
* @return 如果需要响应观察者事件则返回true,否则返回false |
||||||
|
*/ |
||||||
|
public boolean shouldResponseChangeListener() { |
||||||
|
return true; |
||||||
|
} |
||||||
|
|
||||||
|
private class InnerTableEditor extends UITableEditor { |
||||||
|
private JComponent editorComponent; |
||||||
|
|
||||||
|
/** |
||||||
|
* 返回当前编辑器的值 |
||||||
|
*/ |
||||||
|
public Object getCellEditorValue() { |
||||||
|
if(editorComponent instanceof UITextField) { |
||||||
|
UITextField textField = (UITextField)editorComponent; |
||||||
|
return textField.getText(); |
||||||
|
} else if(editorComponent instanceof UIComboBox) { |
||||||
|
UIComboBox boxPane = (UIComboBox)editorComponent; |
||||||
|
return boxPane.getSelectedItem(); |
||||||
|
} |
||||||
|
return super.getCellEditorValue(); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 返回当前编辑器.. |
||||||
|
*/ |
||||||
|
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { |
||||||
|
if (column == table.getModel().getColumnCount()) { |
||||||
|
return null; |
||||||
|
} |
||||||
|
if(column == 0 ) { |
||||||
|
UITextField text = new UITextField(); |
||||||
|
if(value != null) { |
||||||
|
text.setText(Utils.objectToString(value)); |
||||||
|
} |
||||||
|
|
||||||
|
text.addFocusListener(new FocusAdapter() { |
||||||
|
public void focusLost(FocusEvent e) { |
||||||
|
titleValuePane.stopCellEditing(); |
||||||
|
titleValuePane.fireTargetChanged(); |
||||||
|
} |
||||||
|
}); |
||||||
|
|
||||||
|
this.editorComponent = text; |
||||||
|
} else { |
||||||
|
UIComboBox box = new UIComboBox(initNames); |
||||||
|
box.addItemListener(new ItemListener() { |
||||||
|
@Override |
||||||
|
public void itemStateChanged(ItemEvent e) { |
||||||
|
titleValuePane.fireTargetChanged(); |
||||||
|
titleValuePane.stopCellEditing(); |
||||||
|
} |
||||||
|
}); |
||||||
|
|
||||||
|
if (value != null && StringUtils.isNotEmpty(value.toString())) { |
||||||
|
box.setSelectedItem(value); |
||||||
|
} else { |
||||||
|
box.setSelectedItem(value); |
||||||
|
} |
||||||
|
|
||||||
|
this.editorComponent = box; |
||||||
|
} |
||||||
|
return this.editorComponent; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,341 @@ |
|||||||
|
package com.fr.design.chart.report; |
||||||
|
|
||||||
|
import com.fr.base.Utils; |
||||||
|
import com.fr.chart.base.ChartConstants; |
||||||
|
import com.fr.chart.chartdata.GisMapTableDefinition; |
||||||
|
import com.fr.chart.chartdata.SeriesDefinition; |
||||||
|
import com.fr.design.beans.FurtherBasicBeanPane; |
||||||
|
import com.fr.design.constants.LayoutConstants; |
||||||
|
import com.fr.design.data.tabledata.wrapper.TableDataWrapper; |
||||||
|
import com.fr.design.event.UIObserver; |
||||||
|
import com.fr.design.event.UIObserverListener; |
||||||
|
import com.fr.design.gui.frpane.UICorrelationPane; |
||||||
|
import com.fr.design.gui.ibutton.UIButtonGroup; |
||||||
|
import com.fr.design.gui.icombobox.UIComboBox; |
||||||
|
import com.fr.design.gui.ilable.UILabel; |
||||||
|
import com.fr.design.gui.itable.UITableEditor; |
||||||
|
import com.fr.design.gui.itextfield.UITextField; |
||||||
|
import com.fr.design.layout.TableLayout; |
||||||
|
import com.fr.design.layout.TableLayoutHelper; |
||||||
|
import com.fr.general.Inter; |
||||||
|
import com.fr.stable.ArrayUtils; |
||||||
|
import com.fr.stable.StringUtils; |
||||||
|
|
||||||
|
import javax.swing.*; |
||||||
|
import javax.swing.event.ChangeEvent; |
||||||
|
import javax.swing.event.ChangeListener; |
||||||
|
import java.awt.*; |
||||||
|
import java.awt.event.FocusAdapter; |
||||||
|
import java.awt.event.FocusEvent; |
||||||
|
import java.awt.event.ItemEvent; |
||||||
|
import java.awt.event.ItemListener; |
||||||
|
import java.util.*; |
||||||
|
|
||||||
|
/** |
||||||
|
* Created by IntelliJ IDEA. |
||||||
|
* Author : daisy |
||||||
|
* Version: 7.1.1 |
||||||
|
*/ |
||||||
|
public class GisMapTableDataContentPane4Chart extends FurtherBasicBeanPane<GisMapTableDefinition> implements UIObserver { |
||||||
|
|
||||||
|
private ArrayList<ChangeListener> changeListeners = new ArrayList<ChangeListener>(); |
||||||
|
private String[] initNames = {""}; |
||||||
|
|
||||||
|
private UIButtonGroup<String> addressType; |
||||||
|
private UIButtonGroup<String> lnglatOrder; |
||||||
|
private UIComboBox addressBox; |
||||||
|
private UIComboBox addressNameBox; |
||||||
|
private UICorrelationPane titleValuePane; |
||||||
|
private JPanel orderPane; |
||||||
|
private TableDataWrapper tableDataWrapper; |
||||||
|
|
||||||
|
public GisMapTableDataContentPane4Chart() { |
||||||
|
this.setLayout(new BorderLayout()); |
||||||
|
|
||||||
|
addressType = new UIButtonGroup<String>(new String[]{Inter.getLocText("Chart-Gis_Address"), Inter.getLocText("Chart-Gis_LatLng")}); |
||||||
|
lnglatOrder = new UIButtonGroup<String>(new String[]{Inter.getLocText("Chart-Lng_First"), Inter.getLocText("Chart-Lat_First")}); |
||||||
|
addressBox = new UIComboBox(); |
||||||
|
addressNameBox = new UIComboBox(); |
||||||
|
double p = TableLayout.PREFERRED; |
||||||
|
double f = TableLayout.FILL; |
||||||
|
double[] columnSize = new double[]{p, f}; |
||||||
|
double[] rowSize = new double[]{p, p, p}; |
||||||
|
orderPane = new JPanel(new BorderLayout(LayoutConstants.VGAP_MEDIUM, 0)) { |
||||||
|
@Override |
||||||
|
public Dimension getPreferredSize() { |
||||||
|
if (this.isVisible()) { |
||||||
|
return super.getPreferredSize(); |
||||||
|
} else { |
||||||
|
return new Dimension(0, 0); |
||||||
|
} |
||||||
|
} |
||||||
|
}; |
||||||
|
orderPane.add(new UILabel(Inter.getLocText("Chart-LatLng_Order")), BorderLayout.WEST); |
||||||
|
orderPane.add(lnglatOrder, BorderLayout.CENTER); |
||||||
|
orderPane.setVisible(false); |
||||||
|
lnglatOrder.setSelectedIndex(0); |
||||||
|
addressType.setSelectedIndex(0); |
||||||
|
|
||||||
|
addressNameBox.removeAllItems(); |
||||||
|
addressNameBox.addItem(Inter.getLocText("Chart-Use_None")); |
||||||
|
|
||||||
|
Component[][] components = new Component[][]{ |
||||||
|
new Component[]{addressType, addressBox}, |
||||||
|
new Component[]{orderPane, null}, |
||||||
|
new Component[]{new UILabel(Inter.getLocText("Chart-Address_Name") + ":", SwingConstants.RIGHT), addressNameBox}, |
||||||
|
}; |
||||||
|
JPanel centerPane = TableLayoutHelper.createTableLayoutPane(components, rowSize, columnSize); |
||||||
|
|
||||||
|
JPanel pane = new JPanel(); |
||||||
|
this.add(pane, BorderLayout.CENTER); |
||||||
|
pane.setLayout(new BorderLayout()); |
||||||
|
|
||||||
|
pane.add(centerPane, BorderLayout.NORTH); |
||||||
|
|
||||||
|
String[] titles = {Inter.getLocText("Chart-Area_Title"), Inter.getLocText("Chart-Area_Value")}; |
||||||
|
titleValuePane = new UICorrelationPane(titles) { |
||||||
|
public UITableEditor createUITableEditor() { |
||||||
|
return new InnerTableEditor(); |
||||||
|
} |
||||||
|
}; |
||||||
|
|
||||||
|
pane.add(titleValuePane, BorderLayout.CENTER); |
||||||
|
} |
||||||
|
|
||||||
|
private void refresh2ComboBox() {// 刷新地址 地址名 名称列表
|
||||||
|
TableDataWrapper tableDataWrappe =tableDataWrapper; |
||||||
|
if (tableDataWrappe == null) { |
||||||
|
return; |
||||||
|
} |
||||||
|
java.util.List<String> columnNameList = tableDataWrappe.calculateColumnNameList(); |
||||||
|
initNames = columnNameList.toArray(new String[columnNameList.size()]); |
||||||
|
|
||||||
|
addressBox.removeAllItems(); |
||||||
|
addressNameBox.removeAllItems(); |
||||||
|
addressNameBox.addItem(Inter.getLocText("Chart-Use_None")); |
||||||
|
|
||||||
|
for (int i = 0, size = initNames.length; i < size; i++) { |
||||||
|
addressBox.addItem(initNames[i]); |
||||||
|
addressNameBox.addItem(initNames[i]); |
||||||
|
} |
||||||
|
if(initNames.length > 0){ |
||||||
|
addressBox.setSelectedIndex(0); |
||||||
|
} |
||||||
|
addressNameBox.setSelectedIndex(0); |
||||||
|
stopEditing(); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 界面接入 |
||||||
|
* |
||||||
|
* @param ob 对象 |
||||||
|
* @return true表示接受 |
||||||
|
*/ |
||||||
|
public boolean accept(Object ob) { |
||||||
|
return false; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 界面重置 |
||||||
|
*/ |
||||||
|
public void reset() { |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 界面弹出标题 |
||||||
|
* |
||||||
|
* @return 标题 |
||||||
|
*/ |
||||||
|
public String title4PopupWindow() { |
||||||
|
return Inter.getLocText("Chart-DS_TableData"); |
||||||
|
} |
||||||
|
|
||||||
|
private void stopEditing() { |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void populateBean(GisMapTableDefinition ob) { |
||||||
|
stopEditing(); |
||||||
|
if (ob instanceof GisMapTableDefinition) { |
||||||
|
GisMapTableDefinition mapDefinition = (GisMapTableDefinition) ob; |
||||||
|
if (ob.isAddress()) { |
||||||
|
addressType.setSelectedIndex(0); |
||||||
|
orderPane.setVisible(false); |
||||||
|
} else { |
||||||
|
addressType.setSelectedIndex(1); |
||||||
|
orderPane.setVisible(true); |
||||||
|
} |
||||||
|
|
||||||
|
if (ob.isLngFirst()) { |
||||||
|
lnglatOrder.setSelectedIndex(0); |
||||||
|
} else { |
||||||
|
lnglatOrder.setSelectedIndex(1); |
||||||
|
} |
||||||
|
|
||||||
|
addressBox.setSelectedItem(mapDefinition.getAddress()); |
||||||
|
|
||||||
|
if (StringUtils.isEmpty(mapDefinition.getAddressName())) { |
||||||
|
addressNameBox.setSelectedItem(Inter.getLocText("Chart-Use_None")); |
||||||
|
} else { |
||||||
|
addressNameBox.setSelectedItem(mapDefinition.getAddressName()); |
||||||
|
} |
||||||
|
|
||||||
|
java.util.List paneList = new ArrayList(); |
||||||
|
int titleValueSize = mapDefinition.getTittleValueSize(); |
||||||
|
for (int i = 0; i < titleValueSize; i++) { |
||||||
|
SeriesDefinition definition = mapDefinition.getTittleValueWithIndex(i); |
||||||
|
if (definition != null && definition.getSeriesName() != null && definition.getValue() != null) { |
||||||
|
paneList.add(new Object[]{definition.getSeriesName(), definition.getValue()}); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
if (!paneList.isEmpty()) { |
||||||
|
titleValuePane.populateBean(paneList); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public GisMapTableDefinition updateBean() {// 从一行内容中update
|
||||||
|
stopEditing(); |
||||||
|
|
||||||
|
GisMapTableDefinition definition = new GisMapTableDefinition(); |
||||||
|
|
||||||
|
TableDataWrapper tableDataWrappe = tableDataWrapper; |
||||||
|
if (tableDataWrappe == null || addressBox.getSelectedItem() == null) { |
||||||
|
return null; |
||||||
|
} |
||||||
|
|
||||||
|
definition.setTableData(tableDataWrapper.getTableData()); |
||||||
|
definition.setAddress(Utils.objectToString(addressBox.getSelectedItem())); |
||||||
|
|
||||||
|
if (this.addressType.getSelectedIndex() == 0) { |
||||||
|
definition.setAddressType(true); |
||||||
|
lnglatOrder.setVisible(false); |
||||||
|
} else { |
||||||
|
definition.setAddressType(false); |
||||||
|
lnglatOrder.setVisible(true); |
||||||
|
} |
||||||
|
|
||||||
|
if (this.lnglatOrder.getSelectedIndex() == 0) { |
||||||
|
definition.setLnglatOrder(true); |
||||||
|
} else { |
||||||
|
definition.setLnglatOrder(false); |
||||||
|
} |
||||||
|
|
||||||
|
if (addressNameBox.getSelectedItem() != null) { |
||||||
|
String adName = Utils.objectToString(addressNameBox.getSelectedItem()); |
||||||
|
if (ArrayUtils.contains(ChartConstants.NONE_KEYS, adName)) { |
||||||
|
definition.setAddressName(StringUtils.EMPTY); |
||||||
|
} else { |
||||||
|
definition.setAddressName(adName); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
java.util.List paneList = titleValuePane.updateBean(); |
||||||
|
for (int i = 0, size = paneList.size(); i < size; i++) { |
||||||
|
Object[] values = (Object[]) paneList.get(i); |
||||||
|
if (values.length == 2) { |
||||||
|
SeriesDefinition seriesDefinition = new SeriesDefinition(); |
||||||
|
seriesDefinition.setSeriesName(values[0]); |
||||||
|
seriesDefinition.setValue(values[1]); |
||||||
|
definition.addTittleValue(seriesDefinition); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
return definition; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 给组件登记一个观察者监听事件 |
||||||
|
* |
||||||
|
* @param listener 观察者监听事件 |
||||||
|
*/ |
||||||
|
public void registerChangeListener(final UIObserverListener listener) { |
||||||
|
changeListeners.add(new ChangeListener() { |
||||||
|
public void stateChanged(ChangeEvent e) { |
||||||
|
listener.doChange(); |
||||||
|
} |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 组件是否需要响应添加的观察者事件 |
||||||
|
* |
||||||
|
* @return 如果需要响应观察者事件则返回true,否则返回false |
||||||
|
*/ |
||||||
|
public boolean shouldResponseChangeListener() { |
||||||
|
return true; |
||||||
|
} |
||||||
|
|
||||||
|
private class InnerTableEditor extends UITableEditor { |
||||||
|
private JComponent editorComponent; |
||||||
|
|
||||||
|
/** |
||||||
|
* 返回当前编辑器的值 |
||||||
|
*/ |
||||||
|
public Object getCellEditorValue() { |
||||||
|
if (editorComponent instanceof UITextField) { |
||||||
|
UITextField textField = (UITextField) editorComponent; |
||||||
|
return textField.getText(); |
||||||
|
} else if (editorComponent instanceof UIComboBox) { |
||||||
|
UIComboBox boxPane = (UIComboBox) editorComponent; |
||||||
|
return boxPane.getSelectedItem(); |
||||||
|
} |
||||||
|
return super.getCellEditorValue(); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 返回当前编辑器.. |
||||||
|
*/ |
||||||
|
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { |
||||||
|
if (column == table.getModel().getColumnCount()) { |
||||||
|
return null; |
||||||
|
} |
||||||
|
if (column == 0) { |
||||||
|
UITextField text = new UITextField(); |
||||||
|
if (value != null) { |
||||||
|
text.setText(Utils.objectToString(value)); |
||||||
|
} |
||||||
|
|
||||||
|
text.addFocusListener(new FocusAdapter() { |
||||||
|
public void focusLost(FocusEvent e) { |
||||||
|
titleValuePane.stopCellEditing(); |
||||||
|
titleValuePane.fireTargetChanged(); |
||||||
|
} |
||||||
|
}); |
||||||
|
|
||||||
|
this.editorComponent = text; |
||||||
|
} else { |
||||||
|
UIComboBox box = new UIComboBox(initNames); |
||||||
|
box.addItemListener(new ItemListener() { |
||||||
|
@Override |
||||||
|
public void itemStateChanged(ItemEvent e) { |
||||||
|
titleValuePane.fireTargetChanged(); |
||||||
|
titleValuePane.stopCellEditing(); |
||||||
|
} |
||||||
|
}); |
||||||
|
|
||||||
|
if (value != null && StringUtils.isNotEmpty(value.toString())) { |
||||||
|
box.setSelectedItem(value); |
||||||
|
} else { |
||||||
|
box.setSelectedItem(value); |
||||||
|
} |
||||||
|
|
||||||
|
this.editorComponent = box; |
||||||
|
} |
||||||
|
return this.editorComponent; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 出发数据集改变 |
||||||
|
* @param wrapper 数据集 |
||||||
|
*/ |
||||||
|
public void fireTableDataChange(TableDataWrapper wrapper){ |
||||||
|
this.tableDataWrapper = wrapper; |
||||||
|
refresh2ComboBox(); |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,76 @@ |
|||||||
|
package com.fr.design.chart.report; |
||||||
|
|
||||||
|
import com.fr.base.chart.chartdata.TopDefinitionProvider; |
||||||
|
import com.fr.chart.chartdata.MapMoreLayerReportDefinition; |
||||||
|
import com.fr.chart.chartdata.MapMoreLayerTableDefinition; |
||||||
|
import com.fr.design.beans.FurtherBasicBeanPane; |
||||||
|
import com.fr.design.gui.frpane.UIComboBoxPane; |
||||||
|
import com.fr.design.gui.ilable.BoldFontTextLabel; |
||||||
|
import com.fr.general.Inter; |
||||||
|
|
||||||
|
import javax.swing.*; |
||||||
|
import java.awt.*; |
||||||
|
import java.util.ArrayList; |
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
/** |
||||||
|
* 钻取数据 |
||||||
|
* @author kunsnat E-mail:kunsnat@gmail.com |
||||||
|
* @version 创建时间:2012-10-21 下午11:02:02 |
||||||
|
*/ |
||||||
|
public class MapCubeDataPane extends UIComboBoxPane<TopDefinitionProvider> { |
||||||
|
|
||||||
|
private MapReportCubeDataPane reportPane; |
||||||
|
private MapTableCubeDataPane tablePane; |
||||||
|
|
||||||
|
protected void initLayout() { |
||||||
|
this.setLayout(new BorderLayout(0, 0)); |
||||||
|
JPanel northPane = new JPanel(new FlowLayout(FlowLayout.LEFT, 0, 0)); |
||||||
|
northPane.add(new BoldFontTextLabel(Inter.getLocText("ChartF-Data-Resource") + ":")); |
||||||
|
northPane.add(jcb); |
||||||
|
|
||||||
|
this.add(northPane, BorderLayout.NORTH); |
||||||
|
this.add(cardPane, BorderLayout.CENTER); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected List<FurtherBasicBeanPane<? extends TopDefinitionProvider>> initPaneList() { |
||||||
|
List list = new ArrayList(); |
||||||
|
|
||||||
|
list.add(tablePane = new MapTableCubeDataPane()); |
||||||
|
list.add(reportPane = new MapReportCubeDataPane()); |
||||||
|
|
||||||
|
return list; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected String title4PopupWindow() { |
||||||
|
return Inter.getLocText("LayerData"); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 对数据集或者单元格数据加载界面 |
||||||
|
*/ |
||||||
|
public void populateBean(TopDefinitionProvider definition) { |
||||||
|
if(definition instanceof MapMoreLayerReportDefinition) { |
||||||
|
this.setSelectedIndex(1); |
||||||
|
MapMoreLayerReportDefinition reportDefinition = (MapMoreLayerReportDefinition)definition; |
||||||
|
reportPane.populateBean(reportDefinition); |
||||||
|
} else if(definition instanceof MapMoreLayerTableDefinition) { |
||||||
|
MapMoreLayerTableDefinition tableDefinition = (MapMoreLayerTableDefinition)definition; |
||||||
|
this.setSelectedIndex(0); |
||||||
|
tablePane.populateBean(tableDefinition); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 根据界面 下载保存数据 |
||||||
|
*/ |
||||||
|
public TopDefinitionProvider update() { |
||||||
|
if(this.getSelectedIndex() == 0) { |
||||||
|
return tablePane.updateBean(); |
||||||
|
} else { |
||||||
|
return reportPane.updateBean(); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,68 @@ |
|||||||
|
package com.fr.design.chart.report; |
||||||
|
|
||||||
|
import com.fr.base.chart.chartdata.TopDefinitionProvider; |
||||||
|
import com.fr.chart.chartdata.MapMoreLayerTableDefinition; |
||||||
|
import com.fr.design.beans.FurtherBasicBeanPane; |
||||||
|
import com.fr.design.data.tabledata.wrapper.TableDataWrapper; |
||||||
|
import com.fr.design.gui.frpane.UIComboBoxPane; |
||||||
|
import com.fr.general.Inter; |
||||||
|
|
||||||
|
import java.awt.*; |
||||||
|
import java.util.*; |
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
/** |
||||||
|
* Created by IntelliJ IDEA. |
||||||
|
* Author : daisy |
||||||
|
* Version: 7.1.1 |
||||||
|
*/ |
||||||
|
public class MapCubeDataPane4Chart extends UIComboBoxPane<TopDefinitionProvider> { |
||||||
|
private MapTableCubeDataPane4Chart tablePane; |
||||||
|
|
||||||
|
protected void initLayout() { |
||||||
|
this.setLayout(new BorderLayout(0, 0)); |
||||||
|
this.add(cardPane, BorderLayout.CENTER); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected List<FurtherBasicBeanPane<? extends TopDefinitionProvider>> initPaneList() { |
||||||
|
List list = new ArrayList(); |
||||||
|
|
||||||
|
list.add(tablePane = new MapTableCubeDataPane4Chart()); |
||||||
|
|
||||||
|
return list; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected String title4PopupWindow() { |
||||||
|
return Inter.getLocText("FR-Chart-Map_LayerData"); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 对数据集或者单元格数据加载界面 |
||||||
|
*/ |
||||||
|
public void populateBean(TopDefinitionProvider definition) { |
||||||
|
if(definition instanceof MapMoreLayerTableDefinition) { |
||||||
|
MapMoreLayerTableDefinition tableDefinition = (MapMoreLayerTableDefinition)definition; |
||||||
|
this.setSelectedIndex(0); |
||||||
|
tablePane.populateBean(tableDefinition); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 根据界面 下载保存数据 |
||||||
|
*/ |
||||||
|
public TopDefinitionProvider update() { |
||||||
|
return tablePane.updateBean(); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 出发数据集改变 |
||||||
|
* @param tableDataWrapper 数据集 |
||||||
|
*/ |
||||||
|
public void fireTableDataChanged(TableDataWrapper tableDataWrapper) { |
||||||
|
tablePane.setTableDataWrapper(tableDataWrapper); |
||||||
|
tablePane.refreshAreaNameBox(); |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,309 @@ |
|||||||
|
package com.fr.design.chart.report; |
||||||
|
|
||||||
|
import com.fr.base.MapXMLHelper; |
||||||
|
import com.fr.base.Utils; |
||||||
|
import com.fr.chart.base.ChartConstants; |
||||||
|
import com.fr.chart.base.MapSvgAttr; |
||||||
|
import com.fr.chart.base.MapSvgXMLHelper; |
||||||
|
import com.fr.chart.chartglyph.MapAttr; |
||||||
|
import com.fr.design.DesignerEnvManager; |
||||||
|
import com.fr.design.beans.BasicBeanPane; |
||||||
|
import com.fr.design.dialog.DialogActionAdapter; |
||||||
|
import com.fr.design.dialog.UIDialog; |
||||||
|
import com.fr.design.utils.gui.GUICoreUtils; |
||||||
|
import com.fr.general.FRLogger; |
||||||
|
import com.fr.general.Inter; |
||||||
|
import com.fr.stable.ArrayUtils; |
||||||
|
import com.fr.stable.StringUtils; |
||||||
|
|
||||||
|
import javax.swing.*; |
||||||
|
import javax.swing.event.ChangeEvent; |
||||||
|
import javax.swing.event.ChangeListener; |
||||||
|
import javax.swing.tree.DefaultMutableTreeNode; |
||||||
|
import javax.swing.tree.DefaultTreeModel; |
||||||
|
import javax.swing.tree.TreePath; |
||||||
|
import java.awt.*; |
||||||
|
import java.awt.event.MouseAdapter; |
||||||
|
import java.awt.event.MouseEvent; |
||||||
|
import java.awt.event.MouseListener; |
||||||
|
import java.util.*; |
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
/** |
||||||
|
* 地图钻取层级界面, 默认钻取到同名的地图 |
||||||
|
* @author kunsnat E-mail:kunsnat@gmail.com |
||||||
|
* @version 创建时间:2012-11-20 下午03:39:08 |
||||||
|
*/ |
||||||
|
public class MapCubeLayerPane extends BasicBeanPane<String>{ |
||||||
|
|
||||||
|
private JTree mapTree; |
||||||
|
private DefaultMutableTreeNode root; |
||||||
|
|
||||||
|
private String editingMap = ""; |
||||||
|
|
||||||
|
private Set<String> editedMap = new HashSet<String>(); |
||||||
|
|
||||||
|
private List<ChangeListener> fireWhenTreeChange = new ArrayList<ChangeListener>(); |
||||||
|
|
||||||
|
private List<String> hasDealNames = new ArrayList<String>(); |
||||||
|
|
||||||
|
private boolean isSvg = true; |
||||||
|
|
||||||
|
public MapCubeLayerPane() { |
||||||
|
initCom(); |
||||||
|
} |
||||||
|
|
||||||
|
private void initCom() { |
||||||
|
this.setLayout(new BorderLayout()); |
||||||
|
|
||||||
|
root = new DefaultMutableTreeNode(); |
||||||
|
|
||||||
|
mapTree = new JTree(root); |
||||||
|
mapTree.setRootVisible(false); |
||||||
|
mapTree.addMouseListener(mapListener); |
||||||
|
|
||||||
|
JScrollPane treePane = new JScrollPane(mapTree); |
||||||
|
treePane.setPreferredSize(new Dimension(100, 100)); |
||||||
|
this.add(treePane, BorderLayout.CENTER); |
||||||
|
} |
||||||
|
|
||||||
|
public void setSvg(boolean isSvg) { |
||||||
|
this.isSvg = isSvg; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 返回节点路径 |
||||||
|
*/ |
||||||
|
public int getTreeDepth() { |
||||||
|
return root.getDepth(); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 初始化节点界面. |
||||||
|
* @param mapName 地图名称. |
||||||
|
*/ |
||||||
|
public void initRootTree(String mapName) { |
||||||
|
editingMap = mapName; |
||||||
|
|
||||||
|
root.removeAllChildren(); |
||||||
|
|
||||||
|
DefaultMutableTreeNode node = new DefaultMutableTreeNode(mapName); |
||||||
|
|
||||||
|
root.add(node); |
||||||
|
|
||||||
|
// 每个节点都要去判断是否有地图再包含 默认钻取到同名的地图
|
||||||
|
if(isSvg) { |
||||||
|
MapSvgAttr mapAttr = MapSvgXMLHelper.getInstance().getMapAttr(mapName); |
||||||
|
hasDealNames.clear(); |
||||||
|
add4Node(mapAttr, node, mapName); |
||||||
|
} else { |
||||||
|
MapAttr mapAttr = (MapAttr)MapXMLHelper.getInstance().getMapAttr(mapName); |
||||||
|
hasDealNames.clear(); |
||||||
|
addBitMap4Node(mapAttr, node, mapName); |
||||||
|
} |
||||||
|
|
||||||
|
mapTree.doLayout(); |
||||||
|
mapTree.validate(); |
||||||
|
|
||||||
|
((DefaultTreeModel)mapTree.getModel()).reload(); |
||||||
|
|
||||||
|
for(int i = 0; i < fireWhenTreeChange.size(); i++) { |
||||||
|
fireWhenTreeChange.get(i).stateChanged(new ChangeEvent(this)); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 添加响应事件. |
||||||
|
* @param change 改变的事件. |
||||||
|
*/ |
||||||
|
public void addChangeListener(ChangeListener change) { |
||||||
|
fireWhenTreeChange.add(change); |
||||||
|
} |
||||||
|
|
||||||
|
private void addBitMap4Node(MapAttr editingMapAttr, DefaultMutableTreeNode node, String mapName) { |
||||||
|
MapAttr mapAttr = (MapAttr)MapXMLHelper.getInstance().getMapAttr(mapName); |
||||||
|
if(mapAttr != null) { |
||||||
|
Iterator namesValue = mapAttr.shapeValuesIterator(); |
||||||
|
while(namesValue.hasNext()) { |
||||||
|
Object names = namesValue.next(); |
||||||
|
String nextToName = Utils.objectToString(editingMapAttr.getLayerTo(Utils.objectToString(names))); |
||||||
|
|
||||||
|
MapAttr tmpAttr = (MapAttr)MapXMLHelper.getInstance().getMapAttr(nextToName); |
||||||
|
if(tmpAttr != null) { |
||||||
|
DefaultMutableTreeNode currentName = new DefaultMutableTreeNode(names); |
||||||
|
node.add(currentName);// 有钻取内容的地图才添加节点
|
||||||
|
|
||||||
|
if(!hasDealNames.contains(Utils.objectToString(currentName.getUserObject()))) { |
||||||
|
hasDealNames.add(Utils.objectToString(currentName.getUserObject())); |
||||||
|
addBitMap4Node(editingMapAttr, currentName, nextToName); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
private void add4Node(MapSvgAttr editingMapAttr, DefaultMutableTreeNode node, String mapName) { |
||||||
|
MapSvgAttr mapAttr = MapSvgXMLHelper.getInstance().getMapAttr(mapName); |
||||||
|
if(mapAttr != null) { |
||||||
|
Iterator namesValue = mapAttr.shapeValuesIterator(); |
||||||
|
while(namesValue.hasNext()) { |
||||||
|
Object names = namesValue.next(); |
||||||
|
String nextToName = Utils.objectToString(editingMapAttr.getLayerTo(Utils.objectToString(names))); |
||||||
|
|
||||||
|
MapSvgAttr tmpAttr = MapSvgXMLHelper.getInstance().getMapAttr(nextToName); |
||||||
|
if(tmpAttr != null) { |
||||||
|
DefaultMutableTreeNode currentName = new DefaultMutableTreeNode(names); |
||||||
|
node.add(currentName);// 有钻取内容的地图才添加节点
|
||||||
|
|
||||||
|
if(!hasDealNames.contains(Utils.objectToString(currentName.getUserObject()))) { |
||||||
|
hasDealNames.add(Utils.objectToString(currentName.getUserObject())); |
||||||
|
add4Node(editingMapAttr, currentName, nextToName); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
MouseListener mapListener = new MouseAdapter() { |
||||||
|
public void mouseClicked(MouseEvent e) { |
||||||
|
final TreePath visiblePath = mapTree.getSelectionPath(); // 取得当前选中的节点 selectTreeName
|
||||||
|
if(visiblePath == null) { |
||||||
|
return; |
||||||
|
} |
||||||
|
final String selectTreeName = Utils.objectToString(((DefaultMutableTreeNode)visiblePath.getLastPathComponent()).getUserObject()); |
||||||
|
if(SwingUtilities.isRightMouseButton(e)) { |
||||||
|
if(!isSvg){ |
||||||
|
popBitMapDialog(e, selectTreeName); |
||||||
|
return; |
||||||
|
} |
||||||
|
final MapSvgAttr editingAttr = MapSvgXMLHelper.getInstance().getMapAttr(editingMap); |
||||||
|
editedMap.add(editingMap); |
||||||
|
final MapCubeSetDataPane setDataPane = new MapCubeSetDataPane(); |
||||||
|
setDataPane.freshComboxNames(); |
||||||
|
MapSvgAttr mapAttr = MapSvgXMLHelper.getInstance().getMapAttr(selectTreeName); |
||||||
|
editedMap.add(selectTreeName); |
||||||
|
if(mapAttr != null) {// 从中取出对应关系 // 取出当前节点名称所对应的地图
|
||||||
|
List list = new ArrayList(); |
||||||
|
Iterator names = mapAttr.shapeValuesIterator();//行: 地图区域名(String) + 对应地图名(String)
|
||||||
|
while(names.hasNext()) { |
||||||
|
Object name = names.next(); |
||||||
|
String layName = editingAttr.getLayerTo(Utils.objectToString(name)); |
||||||
|
if(ArrayUtils.contains(ChartConstants.NONE_KEYS, layName)) {// kunsnat: 考虑切换设计器语言.
|
||||||
|
layName = StringUtils.EMPTY; |
||||||
|
} |
||||||
|
list.add(new Object[]{name, layName}); |
||||||
|
} |
||||||
|
setDataPane.populateBean(list); |
||||||
|
} |
||||||
|
|
||||||
|
int x = (int)(mapTree.getLocationOnScreen().getX() + mapTree.getWidth()); |
||||||
|
int y = (int)e.getLocationOnScreen().getY(); |
||||||
|
|
||||||
|
UIDialog dialog = setDataPane.showUnsizedWindow(SwingUtilities.getWindowAncestor(setDataPane), new DialogActionAdapter() { |
||||||
|
public void doOk() { |
||||||
|
List list = setDataPane.updateBean(); // 更新当前的 地图名所对应的 区域名钻取关系 重新inittree
|
||||||
|
for(int i = 0; i < list.size(); i++) { |
||||||
|
Object[] values = (Object[])list.get(i); |
||||||
|
editingAttr.putLayerTo(Utils.objectToString(values[0]), Utils.objectToString(values[1])); |
||||||
|
} |
||||||
|
initRootTree(editingMap); |
||||||
|
saveMapInfo(); |
||||||
|
} |
||||||
|
}); |
||||||
|
dialog.setSize(300, 300); |
||||||
|
GUICoreUtils.centerWindow(dialog); |
||||||
|
dialog.setVisible(true); |
||||||
|
} |
||||||
|
} |
||||||
|
}; |
||||||
|
|
||||||
|
|
||||||
|
private void popBitMapDialog(MouseEvent e, final String selectTreeName) { |
||||||
|
final MapAttr editingAttr = (MapAttr)MapXMLHelper.getInstance().getMapAttr(editingMap); |
||||||
|
editedMap.add(editingMap); |
||||||
|
final MapCubeSetDataPane setDataPane = new MapCubeSetDataPane(); |
||||||
|
setDataPane.freshBitMapComboxNames(); |
||||||
|
MapAttr mapAttr = (MapAttr)MapXMLHelper.getInstance().getMapAttr(selectTreeName); |
||||||
|
if(mapAttr != null) {// 从中取出对应关系 // 取出当前节点名称所对应的地图
|
||||||
|
List list = new ArrayList(); |
||||||
|
Iterator names = mapAttr.shapeValuesIterator();//行: 地图区域名(String) + 对应地图名(String)
|
||||||
|
while(names.hasNext()) { |
||||||
|
Object name = names.next(); |
||||||
|
String layName = editingAttr.getLayerTo(Utils.objectToString(name)); |
||||||
|
if(ArrayUtils.contains(ChartConstants.NONE_KEYS, layName)) {// kunsnat: 考虑切换设计器语言.
|
||||||
|
layName = StringUtils.EMPTY; |
||||||
|
} |
||||||
|
list.add(new Object[]{name, layName}); |
||||||
|
} |
||||||
|
setDataPane.populateBean(list); |
||||||
|
} |
||||||
|
|
||||||
|
int x = (int)(mapTree.getLocationOnScreen().getX() + mapTree.getWidth()); |
||||||
|
int y = (int)e.getLocationOnScreen().getY(); |
||||||
|
|
||||||
|
UIDialog dialog = setDataPane.showUnsizedWindow(SwingUtilities.getWindowAncestor(setDataPane), new DialogActionAdapter() { |
||||||
|
public void doOk() { |
||||||
|
List list = setDataPane.updateBean(); // 更新当前的 地图名所对应的 区域名钻取关系 重新inittree
|
||||||
|
for(int i = 0; i < list.size(); i++) { |
||||||
|
Object[] values = (Object[])list.get(i); |
||||||
|
editingAttr.putLayerTo(values[0], values[1]); |
||||||
|
} |
||||||
|
initRootTree(editingMap); |
||||||
|
saveMapInfo(); |
||||||
|
} |
||||||
|
}); |
||||||
|
dialog.setSize(300, 300); |
||||||
|
GUICoreUtils.centerWindow(dialog); |
||||||
|
dialog.setVisible(true); |
||||||
|
} |
||||||
|
|
||||||
|
private void saveMapInfo() { |
||||||
|
final String[] mapNames = editedMap.toArray(new String[0]); |
||||||
|
if(isSvg){ |
||||||
|
editedMap.clear(); |
||||||
|
} |
||||||
|
SwingWorker worker = new SwingWorker<Integer, Void>() { |
||||||
|
@Override |
||||||
|
protected Integer doInBackground() throws Exception { |
||||||
|
if(isSvg){ |
||||||
|
MapSvgXMLHelper.getInstance().saveEditedMaps(mapNames); |
||||||
|
} else { |
||||||
|
MapXMLHelper.getInstance().writerMapSourceWhenEditMap(); |
||||||
|
} |
||||||
|
return 0; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected void done() { |
||||||
|
FRLogger.getLogger().info("Map Save End"); |
||||||
|
} |
||||||
|
|
||||||
|
}; |
||||||
|
worker.execute(); |
||||||
|
DesignerEnvManager.addWorkers(worker); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void populateBean(String rootMapName) {// 更节点的地图名称 只有根节点是确定的
|
||||||
|
// 从数据库中取出地图名称 和 层级关系 刷新列表
|
||||||
|
initRootTree(rootMapName); |
||||||
|
} |
||||||
|
|
||||||
|
public void updateBean(String rootMapName) {// HashMap --> 对应层级的 地图名称
|
||||||
|
// 刷新列表, 更新数据库中的地图名称
|
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public String updateBean() { |
||||||
|
return ""; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 返回界面标题. |
||||||
|
*/ |
||||||
|
protected String title4PopupWindow() { |
||||||
|
return Inter.getLocText("FR-Chart-Map_Drill"); |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,130 @@ |
|||||||
|
package com.fr.design.chart.report; |
||||||
|
|
||||||
|
import com.fr.base.MapXMLHelper; |
||||||
|
import com.fr.chart.base.MapSvgXMLHelper; |
||||||
|
import com.fr.design.beans.BasicBeanPane; |
||||||
|
import com.fr.design.editor.ValueEditorPane; |
||||||
|
import com.fr.design.editor.ValueEditorPaneFactory; |
||||||
|
import com.fr.design.editor.editor.Editor; |
||||||
|
import com.fr.design.editor.editor.TextEditor; |
||||||
|
import com.fr.design.gui.itableeditorpane.UIArrayTableModel; |
||||||
|
import com.fr.design.gui.itableeditorpane.UITableEditorPane; |
||||||
|
import com.fr.design.gui.xcombox.ComboBoxUseEditor; |
||||||
|
import com.fr.general.Inter; |
||||||
|
|
||||||
|
import javax.swing.*; |
||||||
|
import javax.swing.table.DefaultTableCellRenderer; |
||||||
|
import javax.swing.table.TableCellEditor; |
||||||
|
import java.awt.*; |
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
/** |
||||||
|
* 地图, 下层钻取设置 |
||||||
|
* @author kunsnat E-mail:kunsnat@gmail.com |
||||||
|
* @version 创建时间:2012-10-19 下午03:19:53 |
||||||
|
*/ |
||||||
|
public class MapCubeSetDataPane extends BasicBeanPane<List>{ |
||||||
|
|
||||||
|
private UITableEditorPane tableEditorPane;// 地图名称 + 地图类型列表
|
||||||
|
|
||||||
|
private String[] initNames = new String[]{""}; |
||||||
|
|
||||||
|
public MapCubeSetDataPane() { |
||||||
|
initCom(); |
||||||
|
} |
||||||
|
|
||||||
|
private void initCom() { |
||||||
|
this.setLayout(new BorderLayout(0, 0)); |
||||||
|
|
||||||
|
UIArrayTableModel model = new UIArrayTableModel(new String[]{Inter.getLocText("FR-Chart-Area_Name"), Inter.getLocText("FR-Chart-Drill_Map")}, new int[] {}) { |
||||||
|
public boolean isCellEditable(int row, int col) { |
||||||
|
return col != 0; |
||||||
|
} |
||||||
|
}; |
||||||
|
model.setDefaultEditor(Object.class, new DefaultComboBoxEditor()); |
||||||
|
model.setDefaultRenderer(Object.class, new DefaultComboBoxRenderer()); |
||||||
|
|
||||||
|
tableEditorPane = new UITableEditorPane<Object[]>(model); |
||||||
|
this.add(tableEditorPane); |
||||||
|
|
||||||
|
model.addRow(new Object[]{"", ""}); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 刷新下拉列表 |
||||||
|
*/ |
||||||
|
public void freshComboxNames() { |
||||||
|
initNames = MapSvgXMLHelper.getInstance().mapAllNames(); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 位图地图刷新下拉列表 |
||||||
|
*/ |
||||||
|
public void freshBitMapComboxNames() { |
||||||
|
initNames = MapXMLHelper.getInstance().mapAllNames(); |
||||||
|
} |
||||||
|
|
||||||
|
// 需要得到地图 所有区域名称. 以及对应好的名字.
|
||||||
|
@Override |
||||||
|
public void populateBean(List ob) { |
||||||
|
tableEditorPane.populate(ob.toArray()); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public List updateBean() { |
||||||
|
return tableEditorPane.update(); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected String title4PopupWindow() { |
||||||
|
return Inter.getLocText("FR-Chart-Drill_Setting"); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* refresh TODO 只是需要随时更新initNames |
||||||
|
* @author kunsnat E-mail:kunsnat@gmail.com |
||||||
|
* @version 创建时间:2012-11-20 下午05:12:20 |
||||||
|
*/ |
||||||
|
|
||||||
|
private class DefaultComboBoxEditor extends AbstractCellEditor implements TableCellEditor { |
||||||
|
private static final long serialVersionUID = -3239789564820528730L; |
||||||
|
private ValueEditorPane cellEditor; |
||||||
|
|
||||||
|
public DefaultComboBoxEditor() { |
||||||
|
cellEditor = ValueEditorPaneFactory.createValueEditorPane(new Editor[]{new ComboBoxUseEditor(initNames)}); |
||||||
|
} |
||||||
|
|
||||||
|
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { |
||||||
|
if(column == 0) { |
||||||
|
cellEditor = ValueEditorPaneFactory.createValueEditorPane(new Editor[]{new TextEditor()}); |
||||||
|
} else { |
||||||
|
cellEditor = ValueEditorPaneFactory.createValueEditorPane(new Editor[]{new ComboBoxUseEditor(initNames)}); |
||||||
|
} |
||||||
|
cellEditor.populate(value == null ? "" : value); |
||||||
|
return cellEditor; |
||||||
|
} |
||||||
|
|
||||||
|
public Object getCellEditorValue() { |
||||||
|
return cellEditor.update(); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
private class DefaultComboBoxRenderer extends DefaultTableCellRenderer { |
||||||
|
private static final long serialVersionUID = -695450455731718014L; |
||||||
|
private ValueEditorPane cellEditor; |
||||||
|
|
||||||
|
public DefaultComboBoxRenderer() { |
||||||
|
cellEditor = ValueEditorPaneFactory.createValueEditorPane(new Editor[]{new ComboBoxUseEditor(initNames)}); |
||||||
|
} |
||||||
|
|
||||||
|
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { |
||||||
|
if(column == 0) { |
||||||
|
cellEditor = ValueEditorPaneFactory.createValueEditorPane(new Editor[]{new TextEditor()}); |
||||||
|
} else { |
||||||
|
cellEditor = ValueEditorPaneFactory.createValueEditorPane(new Editor[]{new ComboBoxUseEditor(initNames)}); |
||||||
|
} |
||||||
|
cellEditor.populate(value == null ? "" : value); |
||||||
|
return cellEditor; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,139 @@ |
|||||||
|
package com.fr.design.chart.report; |
||||||
|
|
||||||
|
import com.fr.base.chart.chartdata.TopDefinitionProvider; |
||||||
|
import com.fr.chart.chartdata.TopDefinition; |
||||||
|
import com.fr.chart.chartattr.Chart; |
||||||
|
import com.fr.chart.chartattr.ChartCollection; |
||||||
|
import com.fr.chart.chartdata.MapMoreLayerReportDefinition; |
||||||
|
import com.fr.chart.chartdata.MapMoreLayerTableDefinition; |
||||||
|
import com.fr.chart.chartdata.MapSingleLayerReportDefinition; |
||||||
|
import com.fr.chart.chartdata.MapSingleLayerTableDefinition; |
||||||
|
import com.fr.design.beans.FurtherBasicBeanPane; |
||||||
|
import com.fr.design.gui.frpane.AttributeChangeListener; |
||||||
|
import com.fr.design.gui.frpane.UIComboBoxPane; |
||||||
|
import com.fr.design.gui.ilable.BoldFontTextLabel; |
||||||
|
import com.fr.design.mainframe.chart.gui.data.DataContentsPane; |
||||||
|
import com.fr.design.dialog.BasicScrollPane; |
||||||
|
import com.fr.general.Inter; |
||||||
|
|
||||||
|
import javax.swing.*; |
||||||
|
import java.awt.*; |
||||||
|
import java.util.ArrayList; |
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
/** |
||||||
|
* 选择地图类型后 使用的地图数据界面 |
||||||
|
* @author kunsnat E-mail:kunsnat@gmail.com |
||||||
|
* @version 创建时间:2012-10-21 下午10:49:13 |
||||||
|
*/ |
||||||
|
public class MapDataPane extends DataContentsPane { |
||||||
|
|
||||||
|
private UIComboBoxPane<Chart> mainPane; |
||||||
|
private MapMoreCubeLayerPane morePane; |
||||||
|
private MapSinglePane singlePane; |
||||||
|
|
||||||
|
private AttributeChangeListener listener; |
||||||
|
|
||||||
|
public MapDataPane(AttributeChangeListener listener) { |
||||||
|
super(); |
||||||
|
this.listener = listener; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 加载界面, 更新地图数据 |
||||||
|
*/ |
||||||
|
public void populate(ChartCollection collection) { |
||||||
|
TopDefinitionProvider definition = collection.getSelectedChart().getFilterDefinition(); |
||||||
|
|
||||||
|
morePane.init4PopuMapTree(collection); |
||||||
|
|
||||||
|
if(definition instanceof MapSingleLayerTableDefinition) { |
||||||
|
mainPane.setSelectedIndex(0); |
||||||
|
singlePane.populateBean(definition); |
||||||
|
} |
||||||
|
else if(definition instanceof MapMoreLayerTableDefinition) { |
||||||
|
mainPane.setSelectedIndex(1); |
||||||
|
morePane.populateBean(collection); |
||||||
|
} else if(definition instanceof MapMoreLayerReportDefinition) { |
||||||
|
mainPane.setSelectedIndex(1); |
||||||
|
morePane.populateBean(collection); |
||||||
|
} else if(definition instanceof MapSingleLayerReportDefinition) { |
||||||
|
mainPane.setSelectedIndex(0); |
||||||
|
singlePane.populateBean(definition); |
||||||
|
} |
||||||
|
|
||||||
|
this.initAllListeners(); |
||||||
|
this.addAttributeChangeListener(listener); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 下载保存数据 |
||||||
|
*/ |
||||||
|
public void update(ChartCollection collection) { |
||||||
|
if(mainPane.getSelectedIndex() == 0) { |
||||||
|
collection.getSelectedChart().setFilterDefinition(singlePane.updateBean()); |
||||||
|
} else { |
||||||
|
morePane.updateBean(collection); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected JPanel createContentPane() { |
||||||
|
BasicScrollPane<Chart> scroll = new BasicScrollPane<Chart>() { |
||||||
|
|
||||||
|
protected JPanel createContentPane() { |
||||||
|
JPanel pane = new JPanel(); |
||||||
|
pane.setLayout(new BorderLayout()); |
||||||
|
mainPane = new UIComboBoxPane<Chart>() { |
||||||
|
protected void initLayout() { |
||||||
|
this.setLayout(new BorderLayout(0, 6)); |
||||||
|
JPanel northPane = new JPanel(new FlowLayout(FlowLayout.LEFT)); |
||||||
|
northPane.add(new BoldFontTextLabel(Inter.getLocText("Map Show Type") + ":")); |
||||||
|
northPane.add(jcb); |
||||||
|
this.add(northPane, BorderLayout.NORTH); |
||||||
|
this.add(cardPane, BorderLayout.CENTER); |
||||||
|
} |
||||||
|
protected List<FurtherBasicBeanPane<? extends Chart>> initPaneList() { |
||||||
|
List list = new ArrayList(); |
||||||
|
list.add(singlePane = new MapSinglePane()); |
||||||
|
list.add(morePane = new MapMoreCubeLayerPane()); |
||||||
|
return list; |
||||||
|
} |
||||||
|
protected String title4PopupWindow() { |
||||||
|
return Inter.getLocText(new String[]{"Chart-Map", "Data"}); |
||||||
|
} |
||||||
|
}; |
||||||
|
pane.add(mainPane, BorderLayout.CENTER); |
||||||
|
return pane; |
||||||
|
} |
||||||
|
public void populateBean(Chart ob) { |
||||||
|
} |
||||||
|
protected String title4PopupWindow() { |
||||||
|
return null; |
||||||
|
} |
||||||
|
}; |
||||||
|
return scroll; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* 返回界面使用图标路径 |
||||||
|
*/ |
||||||
|
public String getIconPath() { |
||||||
|
return "com/fr/design/images/chart/ChartData.png"; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 返回界面标题 |
||||||
|
* @return 标题 |
||||||
|
*/ |
||||||
|
public String title4PopupWindow() { |
||||||
|
return Inter.getLocText(new String[]{"Chart-Map", "Data"}); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void setSupportCellData(boolean surpportCellData) { |
||||||
|
morePane.setSurpportCellData(surpportCellData); |
||||||
|
singlePane.setSurpportCellData(surpportCellData); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,133 @@ |
|||||||
|
package com.fr.design.chart.report; |
||||||
|
|
||||||
|
import com.fr.base.TableData; |
||||||
|
import com.fr.base.chart.chartdata.TopDefinitionProvider; |
||||||
|
import com.fr.chart.chartattr.Chart; |
||||||
|
import com.fr.chart.chartattr.ChartCollection; |
||||||
|
import com.fr.chart.chartdata.*; |
||||||
|
import com.fr.design.beans.FurtherBasicBeanPane; |
||||||
|
import com.fr.design.gui.frpane.AttributeChangeListener; |
||||||
|
import com.fr.design.gui.frpane.UIComboBoxPane; |
||||||
|
import com.fr.design.gui.ilable.BoldFontTextLabel; |
||||||
|
import com.fr.design.mainframe.AbstractChartDataPane4Chart; |
||||||
|
import com.fr.design.mainframe.chart.gui.ChartDataPane; |
||||||
|
import com.fr.general.Inter; |
||||||
|
|
||||||
|
import javax.swing.*; |
||||||
|
import java.awt.*; |
||||||
|
import java.awt.event.ItemEvent; |
||||||
|
import java.awt.event.ItemListener; |
||||||
|
import java.util.*; |
||||||
|
|
||||||
|
/** |
||||||
|
* Created by IntelliJ IDEA. |
||||||
|
* Author : daisy |
||||||
|
* Version: 7.1.1 |
||||||
|
* Date: 14/12/3 |
||||||
|
* Time: 下午6:49 |
||||||
|
*/ |
||||||
|
public class MapDataPane4Chart extends AbstractChartDataPane4Chart { |
||||||
|
private UIComboBoxPane dataContentPane; |
||||||
|
private MapMoreCubeLayerPane4Chart morePane = new MapMoreCubeLayerPane4Chart(); |
||||||
|
private MapSinglePane4Chart singlePane = new MapSinglePane4Chart(); |
||||||
|
private ChartCollection currentCollection; |
||||||
|
private ItemListener itemListener = new ItemListener() { |
||||||
|
@Override |
||||||
|
public void itemStateChanged(ItemEvent e) { |
||||||
|
fireTableDataChange(); |
||||||
|
} |
||||||
|
}; |
||||||
|
|
||||||
|
public MapDataPane4Chart(AttributeChangeListener listener, ChartDataPane parent) { |
||||||
|
super(listener, parent); |
||||||
|
dataContentPane = new UIComboBoxPane<Chart>() { |
||||||
|
protected void initLayout() { |
||||||
|
this.setLayout(new BorderLayout(0, 6)); |
||||||
|
JPanel northPane = new JPanel(new FlowLayout(FlowLayout.LEFT)); |
||||||
|
northPane.add(new BoldFontTextLabel(Inter.getLocText("FR-Chart-Map_ShowWay") + ":")); |
||||||
|
northPane.add(jcb); |
||||||
|
this.add(northPane, BorderLayout.NORTH); |
||||||
|
this.add(cardPane, BorderLayout.CENTER); |
||||||
|
} |
||||||
|
protected java.util.List<FurtherBasicBeanPane<? extends Chart>> initPaneList() { |
||||||
|
java.util.List list = new ArrayList(); |
||||||
|
list.add(singlePane); |
||||||
|
list.add(morePane); |
||||||
|
return list; |
||||||
|
} |
||||||
|
|
||||||
|
protected void comboBoxItemStateChanged() { |
||||||
|
if(currentCollection == null){ |
||||||
|
return; |
||||||
|
} |
||||||
|
fireTableDataChange(); |
||||||
|
morePane.init4PopuMapTree(currentCollection); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
protected String title4PopupWindow() { |
||||||
|
return Inter.getLocText(new String[]{"Chart-Map", "Data"}); |
||||||
|
} |
||||||
|
}; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
protected JPanel getDataContentPane(){ |
||||||
|
return dataContentPane; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void populate(ChartCollection collection) { |
||||||
|
currentCollection = collection; |
||||||
|
morePane.init4PopuMapTree(collection); |
||||||
|
if (collection != null && collection.getSelectedChart() != null) { |
||||||
|
Chart chart = collection.getSelectedChart(); |
||||||
|
TopDefinitionProvider definition = chart.getFilterDefinition(); |
||||||
|
if (definition instanceof TableDataDefinition) { |
||||||
|
TableData tableData = ((TableDataDefinition) definition).getTableData(); |
||||||
|
if(tableData != null){ |
||||||
|
populateChoosePane(tableData); |
||||||
|
fireTableDataChange(); |
||||||
|
} |
||||||
|
} |
||||||
|
if(definition instanceof MapSingleLayerTableDefinition) { |
||||||
|
singlePane.populateBean(definition); |
||||||
|
} else if(definition instanceof MapMoreLayerTableDefinition) { |
||||||
|
morePane.populateBean(collection); |
||||||
|
} |
||||||
|
} |
||||||
|
this.remove(leftContentPane); |
||||||
|
this.initContentPane(); |
||||||
|
this.validate(); |
||||||
|
dataSource.addItemListener(dsListener); |
||||||
|
initAllListeners(); |
||||||
|
initSelfListener(dataContentPane); |
||||||
|
this.addAttributeChangeListener(attributeChangeListener); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void update(ChartCollection collection) { |
||||||
|
if(dataContentPane.getSelectedIndex() == 0) { |
||||||
|
collection.getSelectedChart().setFilterDefinition(singlePane.updateBean()); |
||||||
|
} else { |
||||||
|
morePane.updateBean(collection); |
||||||
|
} |
||||||
|
currentCollection = collection; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 数据集数据改变 |
||||||
|
*/ |
||||||
|
public void fireTableDataChange() { |
||||||
|
if (dataContentPane == null) { |
||||||
|
return; |
||||||
|
} |
||||||
|
if(dataContentPane.getSelectedIndex() == 0) { |
||||||
|
singlePane.fireTableDataChanged(choosePane.getTableDataWrapper()); |
||||||
|
} else { |
||||||
|
morePane.fireTableDataChanged(choosePane.getTableDataWrapper()); |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,106 @@ |
|||||||
|
package com.fr.design.chart.report; |
||||||
|
|
||||||
|
import com.fr.chart.chartattr.Chart; |
||||||
|
import com.fr.chart.chartattr.ChartCollection; |
||||||
|
import com.fr.chart.chartattr.MapPlot; |
||||||
|
import com.fr.design.dialog.BasicPane; |
||||||
|
import com.fr.design.dialog.MultiTabPane; |
||||||
|
import com.fr.general.Inter; |
||||||
|
|
||||||
|
import java.util.ArrayList; |
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
/** |
||||||
|
* 地图多层钻取界面, 就是一个多层Tab切换界面 |
||||||
|
* @author kunsnat E-mail:kunsnat@gmail.com |
||||||
|
* @version 创建时间:2012-10-22 上午10:23:37 |
||||||
|
*/ |
||||||
|
public class MapMoreCubeLayerPane extends MultiTabPane<ChartCollection>{ |
||||||
|
private static final long serialVersionUID = -174286187746442527L; |
||||||
|
|
||||||
|
private MapCubeLayerPane layerPane; |
||||||
|
private MapCubeDataPane dataPane; |
||||||
|
|
||||||
|
@Override |
||||||
|
protected List<BasicPane> initPaneList() { |
||||||
|
List<BasicPane> paneList = new ArrayList<BasicPane>(); |
||||||
|
|
||||||
|
paneList.add(layerPane = new MapCubeLayerPane()); |
||||||
|
paneList.add(dataPane = new MapCubeDataPane()); |
||||||
|
|
||||||
|
return paneList; |
||||||
|
} |
||||||
|
|
||||||
|
public ChartCollection updateBean() { |
||||||
|
return null;// do nothing
|
||||||
|
} |
||||||
|
|
||||||
|
public void populateBean(ChartCollection collection) { |
||||||
|
Chart selectChart = collection.getSelectedChart(); |
||||||
|
if(selectChart != null && selectChart.getPlot() instanceof MapPlot) { |
||||||
|
MapPlot map = (MapPlot)selectChart.getPlot(); |
||||||
|
layerPane.setSvg(map.isSvgMap()); |
||||||
|
layerPane.populateBean(map.getMapName()); |
||||||
|
} |
||||||
|
|
||||||
|
// 确认层级关系
|
||||||
|
dataPane.populateBean(collection.getSelectedChart().getFilterDefinition()); |
||||||
|
} |
||||||
|
|
||||||
|
public void updateBean(ChartCollection collection) { |
||||||
|
|
||||||
|
collection.getSelectedChart().setFilterDefinition(dataPane.update()); |
||||||
|
|
||||||
|
Chart selectChart = collection.getSelectedChart(); |
||||||
|
if(selectChart != null && selectChart.getPlot() instanceof MapPlot) { |
||||||
|
MapPlot map = (MapPlot)selectChart.getPlot(); |
||||||
|
layerPane.updateBean(map.getMapName());// 确定更新地图名称所对应的层级关系
|
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 刷新层级树 和 数据中populate 数据的层数 |
||||||
|
* @param collection 图表收集器. |
||||||
|
*/ |
||||||
|
public void init4PopuMapTree(ChartCollection collection) { |
||||||
|
Chart selectChart = collection.getSelectedChart(); |
||||||
|
if(selectChart != null && selectChart.getPlot() instanceof MapPlot) { |
||||||
|
MapPlot map = (MapPlot)selectChart.getPlot(); |
||||||
|
if(layerPane != null) { |
||||||
|
layerPane.setSvg(map.isSvgMap()); |
||||||
|
layerPane.initRootTree(map.getMapName()); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 判断是否合格 |
||||||
|
* @param ob 参数判断 |
||||||
|
* @return 默认合格. |
||||||
|
*/ |
||||||
|
public boolean accept(Object ob) { |
||||||
|
return true; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 界面标题 |
||||||
|
* @return 返回标题 |
||||||
|
*/ |
||||||
|
public String title4PopupWindow() { |
||||||
|
return Inter.getLocText("FR-Chart-Muiti_In"); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 重置 |
||||||
|
*/ |
||||||
|
public void reset() { |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 设置是否支持单元格数据. |
||||||
|
*/ |
||||||
|
public void setSurpportCellData(boolean surpportCellData) { |
||||||
|
dataPane.justSupportOneSelect(surpportCellData); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,113 @@ |
|||||||
|
package com.fr.design.chart.report; |
||||||
|
|
||||||
|
import com.fr.chart.chartattr.Chart; |
||||||
|
import com.fr.chart.chartattr.ChartCollection; |
||||||
|
import com.fr.chart.chartattr.MapPlot; |
||||||
|
import com.fr.design.data.tabledata.wrapper.TableDataWrapper; |
||||||
|
import com.fr.design.dialog.BasicPane; |
||||||
|
import com.fr.design.dialog.MultiTabPane; |
||||||
|
import com.fr.general.Inter; |
||||||
|
|
||||||
|
import java.util.ArrayList; |
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
/** |
||||||
|
* Created by IntelliJ IDEA. |
||||||
|
* Author : daisy |
||||||
|
* Version: 7.1.1 |
||||||
|
*/ |
||||||
|
public class MapMoreCubeLayerPane4Chart extends MultiTabPane<ChartCollection> { |
||||||
|
private static final long serialVersionUID = -174286187746442527L; |
||||||
|
|
||||||
|
private MapCubeLayerPane layerPane; |
||||||
|
private MapCubeDataPane4Chart dataPane; |
||||||
|
|
||||||
|
@Override |
||||||
|
protected List<BasicPane> initPaneList() { |
||||||
|
List<BasicPane> paneList = new ArrayList<BasicPane>(); |
||||||
|
|
||||||
|
paneList.add(layerPane = new MapCubeLayerPane()); |
||||||
|
paneList.add(dataPane = new MapCubeDataPane4Chart()); |
||||||
|
|
||||||
|
return paneList; |
||||||
|
} |
||||||
|
|
||||||
|
public ChartCollection updateBean() { |
||||||
|
return null;// do nothing
|
||||||
|
} |
||||||
|
|
||||||
|
public void populateBean(ChartCollection collection) { |
||||||
|
Chart selectChart = collection.getSelectedChart(); |
||||||
|
if(selectChart != null && selectChart.getPlot() instanceof MapPlot) { |
||||||
|
MapPlot map = (MapPlot)selectChart.getPlot(); |
||||||
|
layerPane.populateBean(map.getMapName()); |
||||||
|
} |
||||||
|
|
||||||
|
// 确认层级关系
|
||||||
|
dataPane.populateBean(collection.getSelectedChart().getFilterDefinition()); |
||||||
|
} |
||||||
|
|
||||||
|
public void updateBean(ChartCollection collection) { |
||||||
|
|
||||||
|
collection.getSelectedChart().setFilterDefinition(dataPane.update()); |
||||||
|
|
||||||
|
Chart selectChart = collection.getSelectedChart(); |
||||||
|
if(selectChart != null && selectChart.getPlot() instanceof MapPlot) { |
||||||
|
MapPlot map = (MapPlot)selectChart.getPlot(); |
||||||
|
layerPane.updateBean(map.getMapName());// 确定更新地图名称所对应的层级关系
|
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 刷新层级树 和 数据中populate 数据的层数 |
||||||
|
* @param collection 图表收集器. |
||||||
|
*/ |
||||||
|
public void init4PopuMapTree(ChartCollection collection) { |
||||||
|
Chart selectChart = collection.getSelectedChart(); |
||||||
|
if(selectChart != null && selectChart.getPlot() instanceof MapPlot) { |
||||||
|
MapPlot map = (MapPlot)selectChart.getPlot(); |
||||||
|
if(layerPane != null) { |
||||||
|
layerPane.initRootTree(map.getMapName()); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 判断是否合格 |
||||||
|
* @param ob 参数判断 |
||||||
|
* @return 默认合格. |
||||||
|
*/ |
||||||
|
public boolean accept(Object ob) { |
||||||
|
return true; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 界面标题 |
||||||
|
* @return 返回标题 |
||||||
|
*/ |
||||||
|
public String title4PopupWindow() { |
||||||
|
return Inter.getLocText("FR-Chart-Map_Multilayer"); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 重置 |
||||||
|
*/ |
||||||
|
public void reset() { |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 设置是否支持单元格数据. |
||||||
|
*/ |
||||||
|
public void setSurpportCellData(boolean surpportCellData) { |
||||||
|
dataPane.justSupportOneSelect(surpportCellData); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 出发数据集改变 |
||||||
|
* @param tableDataWrapper 数据集 |
||||||
|
*/ |
||||||
|
public void fireTableDataChanged(TableDataWrapper tableDataWrapper) { |
||||||
|
dataPane.fireTableDataChanged(tableDataWrapper); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,202 @@ |
|||||||
|
package com.fr.design.chart.report; |
||||||
|
|
||||||
|
import java.awt.BorderLayout; |
||||||
|
import java.awt.Component; |
||||||
|
import java.awt.Dimension; |
||||||
|
import java.awt.FlowLayout; |
||||||
|
import java.awt.event.FocusAdapter; |
||||||
|
import java.awt.event.FocusEvent; |
||||||
|
import java.util.ArrayList; |
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
import javax.swing.JComponent; |
||||||
|
import javax.swing.JPanel; |
||||||
|
import javax.swing.JTable; |
||||||
|
|
||||||
|
import com.fr.base.Formula; |
||||||
|
import com.fr.base.Utils; |
||||||
|
import com.fr.chart.chartdata.BaseSeriesDefinition; |
||||||
|
import com.fr.chart.chartdata.MapSingleLayerReportDefinition; |
||||||
|
import com.fr.chart.chartdata.SeriesDefinition; |
||||||
|
import com.fr.design.constants.UIConstants; |
||||||
|
import com.fr.design.beans.BasicBeanPane; |
||||||
|
import com.fr.design.event.UIObserver; |
||||||
|
import com.fr.design.event.UIObserverListener; |
||||||
|
import com.fr.design.formula.TinyFormulaPane; |
||||||
|
import com.fr.design.gui.frpane.UICorrelationPane; |
||||||
|
import com.fr.design.gui.ilable.UILabel; |
||||||
|
import com.fr.design.gui.itable.UITableEditor; |
||||||
|
import com.fr.design.gui.itextfield.UITextField; |
||||||
|
import com.fr.general.Inter; |
||||||
|
import com.fr.stable.StableUtils; |
||||||
|
import com.fr.stable.StringUtils; |
||||||
|
|
||||||
|
/** |
||||||
|
* 多层地图, 单元格, 多层切换 单界面. |
||||||
|
* @author kunsnat E-mail:kunsnat@gmail.com |
||||||
|
* @version 创建时间:2013-4-22 下午04:26:10 |
||||||
|
*/ |
||||||
|
public class MapMoreReportIndexPane extends BasicBeanPane<MapSingleLayerReportDefinition> implements UIObserver{ |
||||||
|
private String title = StringUtils.EMPTY; |
||||||
|
|
||||||
|
private TinyFormulaPane areaNamePane; |
||||||
|
private UICorrelationPane tabPane; |
||||||
|
|
||||||
|
public MapMoreReportIndexPane() { |
||||||
|
initPane(); |
||||||
|
} |
||||||
|
|
||||||
|
public MapMoreReportIndexPane(String titleName) { |
||||||
|
title = titleName; |
||||||
|
initPane(); |
||||||
|
} |
||||||
|
|
||||||
|
private void initPane() { |
||||||
|
this.setLayout(new BorderLayout(0, 0)); |
||||||
|
|
||||||
|
JPanel northPane = new JPanel(); |
||||||
|
this.add(northPane, BorderLayout.NORTH); |
||||||
|
northPane.setLayout(new FlowLayout(FlowLayout.LEFT)); |
||||||
|
|
||||||
|
northPane.add(new UILabel(Inter.getLocText("Area_Name") + ":")); |
||||||
|
|
||||||
|
areaNamePane = new TinyFormulaPane(); |
||||||
|
areaNamePane.setPreferredSize(new Dimension(120, 20)); |
||||||
|
northPane.add(areaNamePane); |
||||||
|
|
||||||
|
tabPane = new UICorrelationPane(new String[]{Inter.getLocText(new String[]{"Filed", "Title"}), Inter.getLocText("Area_Value")}){ |
||||||
|
public UITableEditor createUITableEditor() { |
||||||
|
return new InnerTableEditor(); |
||||||
|
} |
||||||
|
}; |
||||||
|
|
||||||
|
this.add(tabPane, BorderLayout.CENTER); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void populateBean(MapSingleLayerReportDefinition definition) { |
||||||
|
if(definition != null && definition.getCategoryName() != null) { |
||||||
|
areaNamePane.populateBean(Utils.objectToString(definition.getCategoryName())); |
||||||
|
|
||||||
|
List paneList = new ArrayList(); |
||||||
|
int titleValueSize = definition.getTitleValueSize(); |
||||||
|
for(int i = 0; i < titleValueSize; i++) { |
||||||
|
BaseSeriesDefinition sd = definition.getTitleValueWithIndex(i); |
||||||
|
if(sd != null && sd.getSeriesName() != null && sd.getValue() != null) { |
||||||
|
paneList.add(new Object[]{sd.getSeriesName(), sd.getValue()}); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
if(!paneList.isEmpty()) { |
||||||
|
tabPane.populateBean(paneList); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public MapSingleLayerReportDefinition updateBean() { |
||||||
|
MapSingleLayerReportDefinition definition = new MapSingleLayerReportDefinition(); |
||||||
|
|
||||||
|
String areaName = areaNamePane.updateBean(); |
||||||
|
if(StableUtils.canBeFormula(areaName)) { |
||||||
|
definition.setCategoryName(new Formula(areaName)); |
||||||
|
} else { |
||||||
|
definition.setCategoryName(areaName); |
||||||
|
} |
||||||
|
|
||||||
|
List paneList = tabPane.updateBean(); |
||||||
|
for(int i = 0, size = paneList.size(); i < size; i++) { |
||||||
|
Object[] values = (Object[])paneList.get(i); |
||||||
|
if(values.length == 2) { |
||||||
|
SeriesDefinition seriesDefinition = new SeriesDefinition(); |
||||||
|
seriesDefinition.setSeriesName(values[0]); |
||||||
|
seriesDefinition.setValue(values[1]); |
||||||
|
definition.addTitleValue(seriesDefinition); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
return definition; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected String title4PopupWindow() { |
||||||
|
return title; |
||||||
|
} |
||||||
|
|
||||||
|
private class InnerTableEditor extends UITableEditor { |
||||||
|
private JComponent editorComponent; |
||||||
|
|
||||||
|
/** |
||||||
|
* 返回当前编辑器的值 |
||||||
|
*/ |
||||||
|
public Object getCellEditorValue() { |
||||||
|
if(editorComponent instanceof TinyFormulaPane) { |
||||||
|
return ((TinyFormulaPane)editorComponent).getUITextField().getText(); |
||||||
|
} else if(editorComponent instanceof UITextField) { |
||||||
|
return ((UITextField)editorComponent).getText(); |
||||||
|
} |
||||||
|
|
||||||
|
return super.getCellEditorValue(); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 返回当前编辑器.. |
||||||
|
*/ |
||||||
|
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { |
||||||
|
if (column == table.getModel().getColumnCount()) { |
||||||
|
return null; |
||||||
|
} |
||||||
|
return getEditorComponent(column, value); |
||||||
|
} |
||||||
|
|
||||||
|
private JComponent getEditorComponent(int column, Object value) { |
||||||
|
if(column == 0) { |
||||||
|
UITextField field = new UITextField(); |
||||||
|
editorComponent = field; |
||||||
|
|
||||||
|
if(value != null) { |
||||||
|
field.setText(Utils.objectToString(value)); |
||||||
|
} |
||||||
|
} else { |
||||||
|
TinyFormulaPane tinyPane = new TinyFormulaPane() { |
||||||
|
@Override |
||||||
|
public void okEvent() { |
||||||
|
tabPane.stopCellEditing(); |
||||||
|
tabPane.fireTargetChanged(); |
||||||
|
} |
||||||
|
}; |
||||||
|
tinyPane.setBackground(UIConstants.FLESH_BLUE); |
||||||
|
|
||||||
|
tinyPane.getUITextField().addFocusListener(new FocusAdapter() { |
||||||
|
@Override |
||||||
|
public void focusLost(FocusEvent e) { |
||||||
|
// tabPane.stopCellEditing();//kunsnat: 不stop是因为可能直接点击公式编辑按钮, 否则需要点击两次才能弹出.
|
||||||
|
tabPane.fireTargetChanged(); |
||||||
|
} |
||||||
|
}); |
||||||
|
|
||||||
|
if(value != null) { |
||||||
|
tinyPane.getUITextField().setText(Utils.objectToString(value)); |
||||||
|
} |
||||||
|
|
||||||
|
editorComponent = tinyPane; |
||||||
|
} |
||||||
|
return editorComponent; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void registerChangeListener(UIObserverListener listener) { |
||||||
|
if(tabPane != null) { |
||||||
|
tabPane.registerChangeListener(listener); |
||||||
|
} |
||||||
|
if(areaNamePane != null) { |
||||||
|
areaNamePane.registerChangeListener(listener); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public boolean shouldResponseChangeListener() { |
||||||
|
return true; |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,209 @@ |
|||||||
|
package com.fr.design.chart.report; |
||||||
|
|
||||||
|
import java.awt.BorderLayout; |
||||||
|
import java.awt.Component; |
||||||
|
import java.awt.Dimension; |
||||||
|
import java.awt.FlowLayout; |
||||||
|
import java.awt.event.ItemEvent; |
||||||
|
import java.awt.event.ItemListener; |
||||||
|
import java.util.ArrayList; |
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
import javax.swing.JComponent; |
||||||
|
import javax.swing.JPanel; |
||||||
|
import javax.swing.JTable; |
||||||
|
|
||||||
|
import com.fr.base.Utils; |
||||||
|
import com.fr.chart.chartdata.MapSingleLayerTableDefinition; |
||||||
|
import com.fr.chart.chartdata.SeriesDefinition; |
||||||
|
import com.fr.design.beans.BasicBeanPane; |
||||||
|
import com.fr.design.event.UIObserver; |
||||||
|
import com.fr.design.event.UIObserverListener; |
||||||
|
import com.fr.design.gui.frpane.UICorrelationPane; |
||||||
|
import com.fr.design.gui.icombobox.UIComboBox; |
||||||
|
import com.fr.design.gui.ilable.UILabel; |
||||||
|
import com.fr.design.gui.itable.UITableEditor; |
||||||
|
import com.fr.design.gui.itextfield.UITextField; |
||||||
|
import com.fr.general.Inter; |
||||||
|
import com.fr.stable.StringUtils; |
||||||
|
|
||||||
|
/** |
||||||
|
* 多层地图, 数据集定义, 多层切换 界面. |
||||||
|
* @author kunsnat E-mail:kunsnat@gmail.com |
||||||
|
* @version 创建时间:2013-4-22 下午03:27:51 |
||||||
|
*/ |
||||||
|
public class MapMoreTableIndexPane extends BasicBeanPane<MapSingleLayerTableDefinition> implements UIObserver{ |
||||||
|
private static final long serialVersionUID = 8135457041761804584L; |
||||||
|
|
||||||
|
private String title = StringUtils.EMPTY; |
||||||
|
|
||||||
|
private UIComboBox areaNameBox; |
||||||
|
private UICorrelationPane tabPane;// 文本框 + 下拉框
|
||||||
|
|
||||||
|
private Object[] boxItems = new Object[]{""}; |
||||||
|
|
||||||
|
public MapMoreTableIndexPane() { |
||||||
|
initPane(); |
||||||
|
} |
||||||
|
|
||||||
|
public MapMoreTableIndexPane(String titleName) { |
||||||
|
title = titleName; |
||||||
|
initPane(); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected String title4PopupWindow() { |
||||||
|
return title; |
||||||
|
} |
||||||
|
|
||||||
|
private void initPane() { |
||||||
|
this.setLayout(new BorderLayout()); |
||||||
|
|
||||||
|
JPanel northPane = new JPanel(); |
||||||
|
this.add(northPane, BorderLayout.NORTH); |
||||||
|
northPane.setLayout(new FlowLayout(FlowLayout.LEFT)); |
||||||
|
|
||||||
|
northPane.add(new UILabel(Inter.getLocText("Area_Name") + ":")); |
||||||
|
|
||||||
|
areaNameBox = new UIComboBox(); |
||||||
|
areaNameBox.setPreferredSize(new Dimension(120, 20)); |
||||||
|
northPane.add(areaNameBox); |
||||||
|
|
||||||
|
tabPane = new UICorrelationPane(new String[]{Inter.getLocText(new String[]{"Filed", "Title"}), Inter.getLocText("Area_Value")}){ |
||||||
|
public UITableEditor createUITableEditor() { |
||||||
|
return new InnerTableEditor(); |
||||||
|
} |
||||||
|
}; |
||||||
|
|
||||||
|
this.add(tabPane, BorderLayout.CENTER); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 初始化 Box的选项. |
||||||
|
*/ |
||||||
|
public void initAreaComBox(Object[] values) { |
||||||
|
Object oldSelected = areaNameBox.getSelectedItem(); |
||||||
|
areaNameBox.removeAllItems(); |
||||||
|
boxItems = values; |
||||||
|
if(values != null) { |
||||||
|
for(int i = 0, size = values.length; i < size; i++) { |
||||||
|
areaNameBox.addItem(values[i]); |
||||||
|
} |
||||||
|
} |
||||||
|
areaNameBox.getModel().setSelectedItem(oldSelected); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void populateBean(MapSingleLayerTableDefinition ob) { |
||||||
|
if(ob != null) { |
||||||
|
areaNameBox.setSelectedItem(ob.getAreaName()); |
||||||
|
|
||||||
|
List paneList = new ArrayList(); |
||||||
|
int titleValueSize = ob.getTitleValueSize(); |
||||||
|
for(int i = 0; i < titleValueSize; i++) { |
||||||
|
SeriesDefinition definition = ob.getTitleValueWithIndex(i); |
||||||
|
if(definition != null && definition.getSeriesName() != null && definition.getValue() != null) { |
||||||
|
paneList.add(new Object[]{definition.getSeriesName(), definition.getValue()}); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
if(!paneList.isEmpty()) { |
||||||
|
tabPane.populateBean(paneList); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public MapSingleLayerTableDefinition updateBean() {// 不需要数据集,
|
||||||
|
MapSingleLayerTableDefinition definition = new MapSingleLayerTableDefinition(); |
||||||
|
|
||||||
|
if(areaNameBox.getSelectedItem() != null) { |
||||||
|
definition.setAreaName(Utils.objectToString(areaNameBox.getSelectedItem())); |
||||||
|
} |
||||||
|
|
||||||
|
List paneList = tabPane.updateBean(); |
||||||
|
for(int i = 0, size = paneList.size(); i < size; i++) { |
||||||
|
Object[] values = (Object[])paneList.get(i); |
||||||
|
if(values.length == 2) { |
||||||
|
SeriesDefinition seriesDefinition = new SeriesDefinition(); |
||||||
|
seriesDefinition.setSeriesName(values[0]); |
||||||
|
seriesDefinition.setValue(values[1]); |
||||||
|
definition.addTitleValue(seriesDefinition); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
return definition; |
||||||
|
} |
||||||
|
|
||||||
|
private class InnerTableEditor extends UITableEditor {// 文本框 + 下拉框
|
||||||
|
private JComponent editorComponent; |
||||||
|
|
||||||
|
/** |
||||||
|
* 返回当前编辑器的值 |
||||||
|
*/ |
||||||
|
public Object getCellEditorValue() { |
||||||
|
if(editorComponent instanceof UIComboBox) { |
||||||
|
return ((UIComboBox)editorComponent).getSelectedItem(); |
||||||
|
} else if(editorComponent instanceof UITextField) { |
||||||
|
return ((UITextField)editorComponent).getText(); |
||||||
|
} |
||||||
|
|
||||||
|
return super.getCellEditorValue(); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 返回当前编辑器.. |
||||||
|
*/ |
||||||
|
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { |
||||||
|
if (column == table.getModel().getColumnCount()) { |
||||||
|
return null; |
||||||
|
} |
||||||
|
return getEditorComponent(column, value); |
||||||
|
} |
||||||
|
|
||||||
|
private JComponent getEditorComponent(int column, Object value) { |
||||||
|
if(column == 0) { |
||||||
|
UITextField field = new UITextField(); |
||||||
|
editorComponent = field; |
||||||
|
|
||||||
|
if(value != null) { |
||||||
|
field.setText(value.toString()); |
||||||
|
} |
||||||
|
} else { |
||||||
|
UIComboBox box = new UIComboBox(boxItems); |
||||||
|
|
||||||
|
box.addItemListener(new ItemListener() { |
||||||
|
@Override |
||||||
|
public void itemStateChanged(ItemEvent e) { |
||||||
|
tabPane.fireTargetChanged(); |
||||||
|
tabPane.stopCellEditing(); |
||||||
|
} |
||||||
|
}); |
||||||
|
|
||||||
|
if (value != null && StringUtils.isNotEmpty(value.toString())) { |
||||||
|
box.setSelectedItem(value); |
||||||
|
} else { |
||||||
|
box.setSelectedItem(value); |
||||||
|
} |
||||||
|
|
||||||
|
editorComponent = box; |
||||||
|
} |
||||||
|
return editorComponent; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void registerChangeListener(UIObserverListener listener) { |
||||||
|
if(areaNameBox != null) { |
||||||
|
areaNameBox.registerChangeListener(listener); |
||||||
|
} |
||||||
|
if(tabPane != null) { |
||||||
|
tabPane.registerChangeListener(listener); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public boolean shouldResponseChangeListener() { |
||||||
|
return true; |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,74 @@ |
|||||||
|
package com.fr.design.chart.report; |
||||||
|
|
||||||
|
import com.fr.chart.chartdata.MapMoreLayerReportDefinition; |
||||||
|
import com.fr.chart.chartdata.MapSingleLayerReportDefinition; |
||||||
|
import com.fr.design.beans.FurtherBasicBeanPane; |
||||||
|
import com.fr.general.Inter; |
||||||
|
|
||||||
|
import java.awt.*; |
||||||
|
|
||||||
|
/** |
||||||
|
* 多层钻取 单元格的数据设置界面 |
||||||
|
* |
||||||
|
* @author kunsnat E-mail:kunsnat@gmail.com |
||||||
|
* @version 创建时间:2012-10-23 上午10:07:41 |
||||||
|
*/ |
||||||
|
public class MapReportCubeDataPane extends FurtherBasicBeanPane<MapMoreLayerReportDefinition> { |
||||||
|
|
||||||
|
private MapMoreReportIndexPane reportPane; |
||||||
|
|
||||||
|
public MapReportCubeDataPane() { |
||||||
|
this.setLayout(new BorderLayout(0, 0)); |
||||||
|
|
||||||
|
reportPane = new MapMoreReportIndexPane(); |
||||||
|
this.add(reportPane, BorderLayout.CENTER); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 能够展示界面的判断. |
||||||
|
* @param ob 界面类型 |
||||||
|
* @return 返回是否符合. |
||||||
|
*/ |
||||||
|
public boolean accept(Object ob) { |
||||||
|
return ob instanceof MapMoreLayerReportDefinition; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 界面重置 |
||||||
|
*/ |
||||||
|
public void reset() { |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 界面弹出标题 |
||||||
|
* @return 返回标题. |
||||||
|
*/ |
||||||
|
public String title4PopupWindow() { |
||||||
|
return Inter.getLocText("Cell"); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void populateBean(MapMoreLayerReportDefinition ob) {// 根据Populate 决定层级的个数, 表现为row的个数
|
||||||
|
|
||||||
|
if (ob != null) { |
||||||
|
|
||||||
|
MapSingleLayerReportDefinition[] values = ob.getNameValues(); |
||||||
|
|
||||||
|
if(values != null && values.length > 0) { |
||||||
|
reportPane.populateBean(values[0]); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public MapMoreLayerReportDefinition updateBean() { |
||||||
|
MapMoreLayerReportDefinition reportDefinition = new MapMoreLayerReportDefinition(); |
||||||
|
|
||||||
|
reportDefinition.clearNameValues(); |
||||||
|
reportDefinition.addNameValue(reportPane.updateBean()); |
||||||
|
|
||||||
|
return reportDefinition; |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,233 @@ |
|||||||
|
package com.fr.design.chart.report; |
||||||
|
|
||||||
|
import java.awt.BorderLayout; |
||||||
|
import java.awt.Component; |
||||||
|
import java.awt.Dimension; |
||||||
|
import java.awt.FlowLayout; |
||||||
|
import java.awt.event.FocusAdapter; |
||||||
|
import java.awt.event.FocusEvent; |
||||||
|
import java.util.ArrayList; |
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
import javax.swing.JComponent; |
||||||
|
import javax.swing.JPanel; |
||||||
|
import javax.swing.JTable; |
||||||
|
import javax.swing.SwingConstants; |
||||||
|
import javax.swing.event.ChangeEvent; |
||||||
|
import javax.swing.event.ChangeListener; |
||||||
|
|
||||||
|
import com.fr.base.Formula; |
||||||
|
import com.fr.base.Utils; |
||||||
|
import com.fr.chart.chartdata.BaseSeriesDefinition; |
||||||
|
import com.fr.chart.chartdata.MapSingleLayerReportDefinition; |
||||||
|
import com.fr.chart.chartdata.SeriesDefinition; |
||||||
|
import com.fr.design.constants.UIConstants; |
||||||
|
import com.fr.design.beans.FurtherBasicBeanPane; |
||||||
|
import com.fr.design.event.UIObserver; |
||||||
|
import com.fr.design.event.UIObserverListener; |
||||||
|
import com.fr.design.formula.TinyFormulaPane; |
||||||
|
import com.fr.design.gui.frpane.UICorrelationPane; |
||||||
|
import com.fr.design.gui.ilable.UILabel; |
||||||
|
import com.fr.design.gui.itable.UITableEditor; |
||||||
|
import com.fr.design.gui.itextfield.UITextField; |
||||||
|
import com.fr.general.Inter; |
||||||
|
import com.fr.stable.StableUtils; |
||||||
|
|
||||||
|
/** |
||||||
|
* 地图 单元格数据 单层地图 界面 |
||||||
|
* |
||||||
|
* @author kunsnat E-mail:kunsnat@gmail.com |
||||||
|
* @version 创建时间:2012-10-22 下午05:16:23 |
||||||
|
*/ |
||||||
|
public class MapReportDataSinglePane extends FurtherBasicBeanPane<MapSingleLayerReportDefinition> implements UIObserver { |
||||||
|
|
||||||
|
private TinyFormulaPane areaNamePane; |
||||||
|
private UICorrelationPane seriesPane; |
||||||
|
private ArrayList<ChangeListener> changeListeners = new ArrayList<ChangeListener>(); |
||||||
|
|
||||||
|
public MapReportDataSinglePane() { |
||||||
|
initCom(); |
||||||
|
} |
||||||
|
|
||||||
|
private void initCom() { |
||||||
|
this.setLayout(new BorderLayout(0, 0)); |
||||||
|
|
||||||
|
JPanel northPane = new JPanel(); |
||||||
|
this.add(northPane, BorderLayout.NORTH); |
||||||
|
|
||||||
|
northPane.setLayout(new FlowLayout(FlowLayout.CENTER)); |
||||||
|
|
||||||
|
northPane.add(new UILabel(Inter.getLocText("Area_Name") + ":", SwingConstants.RIGHT)); |
||||||
|
areaNamePane = new TinyFormulaPane(); |
||||||
|
areaNamePane.setPreferredSize(new Dimension(120, 20)); |
||||||
|
northPane.add(areaNamePane); |
||||||
|
|
||||||
|
String[] columnNames = new String[]{Inter.getLocText(new String[]{"Filed", "Title"}), Inter.getLocText("Area_Value")}; |
||||||
|
seriesPane = new UICorrelationPane(columnNames) { |
||||||
|
public UITableEditor createUITableEditor() { |
||||||
|
return new InnerTableEditor(); |
||||||
|
} |
||||||
|
}; |
||||||
|
|
||||||
|
this.add(seriesPane, BorderLayout.CENTER); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 界面接入. |
||||||
|
*/ |
||||||
|
public boolean accept(Object ob) { |
||||||
|
return true; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 重置 |
||||||
|
*/ |
||||||
|
public void reset() { |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 界面弹出标题. |
||||||
|
*/ |
||||||
|
public String title4PopupWindow() { |
||||||
|
return Inter.getLocText("Cell"); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void populateBean(MapSingleLayerReportDefinition ob) { |
||||||
|
if(ob.getCategoryName() != null) { |
||||||
|
areaNamePane.populateBean(Utils.objectToString(ob.getCategoryName())); |
||||||
|
|
||||||
|
int size = ob.getTitleValueSize(); |
||||||
|
List paneList = new ArrayList(); |
||||||
|
for(int i = 0; i < size; i++) { |
||||||
|
BaseSeriesDefinition first = ob.getTitleValueWithIndex(i); |
||||||
|
if (first != null && first.getSeriesName() != null && first.getValue() != null) { |
||||||
|
paneList.add(new Object[]{first.getSeriesName(), first.getValue()}); |
||||||
|
} |
||||||
|
} |
||||||
|
if (!paneList.isEmpty()) { |
||||||
|
seriesPane.populateBean(paneList); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public MapSingleLayerReportDefinition updateBean() { |
||||||
|
MapSingleLayerReportDefinition reportDefinition = new MapSingleLayerReportDefinition(); |
||||||
|
|
||||||
|
String areaName = areaNamePane.updateBean(); |
||||||
|
if(StableUtils.canBeFormula(areaName)) { |
||||||
|
reportDefinition.setCategoryName(new Formula(areaName)); |
||||||
|
} else { |
||||||
|
reportDefinition.setCategoryName(areaName); |
||||||
|
} |
||||||
|
|
||||||
|
List values = seriesPane.updateBean(); |
||||||
|
if(values != null && !values.isEmpty() ) { |
||||||
|
for (int i = 0, size = values.size(); i < size; i++) { |
||||||
|
Object[] objects = (Object[]) values.get(i); |
||||||
|
Object name = objects[0]; |
||||||
|
Object value = objects[1]; |
||||||
|
|
||||||
|
if (StableUtils.canBeFormula(value)) { |
||||||
|
value = new Formula(Utils.objectToString(value)); |
||||||
|
} |
||||||
|
SeriesDefinition definition = new SeriesDefinition(name, value); |
||||||
|
reportDefinition.addTitleValue(definition); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
return reportDefinition; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 给组件登记一个观察者监听事件 |
||||||
|
* |
||||||
|
* @param listener 观察者监听事件 |
||||||
|
*/ |
||||||
|
public void registerChangeListener(final UIObserverListener listener) { |
||||||
|
changeListeners.add(new ChangeListener() { |
||||||
|
public void stateChanged(ChangeEvent e) { |
||||||
|
listener.doChange(); |
||||||
|
} |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 组件是否需要响应添加的观察者事件 |
||||||
|
* |
||||||
|
* @return 如果需要响应观察者事件则返回true,否则返回false |
||||||
|
*/ |
||||||
|
public boolean shouldResponseChangeListener() { |
||||||
|
return true; |
||||||
|
} |
||||||
|
|
||||||
|
private class InnerTableEditor extends UITableEditor { |
||||||
|
private JComponent editorComponent; |
||||||
|
|
||||||
|
/** |
||||||
|
* 返回当前编辑器的值 |
||||||
|
*/ |
||||||
|
public Object getCellEditorValue() { |
||||||
|
if(editorComponent instanceof TinyFormulaPane) { |
||||||
|
return ((TinyFormulaPane)editorComponent).getUITextField().getText(); |
||||||
|
} else if(editorComponent instanceof UITextField) { |
||||||
|
return ((UITextField)editorComponent).getText(); |
||||||
|
} |
||||||
|
|
||||||
|
return super.getCellEditorValue(); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 返回当前编辑器.. |
||||||
|
*/ |
||||||
|
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { |
||||||
|
if (column == table.getModel().getColumnCount()) { |
||||||
|
return null; |
||||||
|
} |
||||||
|
return getEditorComponent(column, value); |
||||||
|
} |
||||||
|
|
||||||
|
private JComponent getEditorComponent(int column, Object value) { |
||||||
|
if(column == 0) { |
||||||
|
UITextField field = new UITextField(); |
||||||
|
addListener4UITextFiled(field); |
||||||
|
|
||||||
|
if(value != null) { |
||||||
|
field.setText(Utils.objectToString(value)); |
||||||
|
} |
||||||
|
editorComponent = field; |
||||||
|
} else { |
||||||
|
TinyFormulaPane tinyPane = new TinyFormulaPane() { |
||||||
|
@Override |
||||||
|
public void okEvent() { |
||||||
|
seriesPane.stopCellEditing(); |
||||||
|
seriesPane.fireTargetChanged(); |
||||||
|
} |
||||||
|
}; |
||||||
|
tinyPane.setBackground(UIConstants.FLESH_BLUE); |
||||||
|
|
||||||
|
addListener4UITextFiled(tinyPane.getUITextField()); |
||||||
|
|
||||||
|
if(value != null) { |
||||||
|
tinyPane.getUITextField().setText(Utils.objectToString(value)); |
||||||
|
} |
||||||
|
|
||||||
|
editorComponent = tinyPane; |
||||||
|
} |
||||||
|
return editorComponent; |
||||||
|
} |
||||||
|
|
||||||
|
private void addListener4UITextFiled(UITextField textField) { |
||||||
|
|
||||||
|
textField.addFocusListener(new FocusAdapter() { |
||||||
|
@Override |
||||||
|
public void focusLost(FocusEvent e) { |
||||||
|
// seriesPane.stopCellEditing(); //kunsnat: 不stop是因为可能直接点击公式编辑按钮, 否则需要点击两次才能弹出.
|
||||||
|
seriesPane.fireTargetChanged(); |
||||||
|
} |
||||||
|
}); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,62 @@ |
|||||||
|
package com.fr.design.chart.report; |
||||||
|
|
||||||
|
import java.awt.Component; |
||||||
|
import java.util.ArrayList; |
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
import javax.swing.AbstractCellEditor; |
||||||
|
import javax.swing.JTable; |
||||||
|
import javax.swing.event.ChangeListener; |
||||||
|
import javax.swing.table.TableCellEditor; |
||||||
|
|
||||||
|
import com.fr.design.editor.ValueEditorPane; |
||||||
|
import com.fr.design.editor.ValueEditorPaneFactory; |
||||||
|
import com.fr.design.editor.editor.Editor; |
||||||
|
import com.fr.design.editor.editor.FormulaEditor; |
||||||
|
import com.fr.design.editor.editor.TextEditor; |
||||||
|
import com.fr.general.Inter; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author kunsnat E-mail:kunsnat@gmail.com |
||||||
|
* @version 创建时间:2012-10-23 上午10:31:22 |
||||||
|
*/ |
||||||
|
public class MapReportEditor extends AbstractCellEditor implements TableCellEditor { |
||||||
|
private ValueEditorPane cellEditor; |
||||||
|
|
||||||
|
private List<ChangeListener> list = new ArrayList<ChangeListener>(); |
||||||
|
|
||||||
|
public MapReportEditor() { |
||||||
|
} |
||||||
|
|
||||||
|
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { |
||||||
|
cellEditor = createPane(); |
||||||
|
cellEditor.populate(value == null ? "" : value); |
||||||
|
return cellEditor; |
||||||
|
} |
||||||
|
|
||||||
|
public Object getCellEditorValue() { |
||||||
|
return cellEditor.update(); |
||||||
|
} |
||||||
|
|
||||||
|
public void addChangeListener(ChangeListener l) { |
||||||
|
list.add(l); |
||||||
|
} |
||||||
|
|
||||||
|
private ValueEditorPane createPane() { |
||||||
|
TextEditor textEidtor = new TextEditor(); |
||||||
|
initListeners(textEidtor); |
||||||
|
|
||||||
|
FormulaEditor formulaEditor = new FormulaEditor(Inter.getLocText("Parameter-Formula")); |
||||||
|
initListeners(formulaEditor); |
||||||
|
|
||||||
|
Editor[] editors = new Editor[]{textEidtor, formulaEditor}; |
||||||
|
cellEditor = ValueEditorPaneFactory.createValueEditorPane(editors); |
||||||
|
return cellEditor; |
||||||
|
} |
||||||
|
|
||||||
|
private void initListeners(Editor editor) { |
||||||
|
for(int i = 0; i < list.size(); i++) { |
||||||
|
editor.addChangeListener(list.get(i)); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,32 @@ |
|||||||
|
package com.fr.design.chart.report; |
||||||
|
|
||||||
|
import java.awt.Component; |
||||||
|
|
||||||
|
import javax.swing.JTable; |
||||||
|
import javax.swing.table.DefaultTableCellRenderer; |
||||||
|
|
||||||
|
import com.fr.design.editor.ValueEditorPane; |
||||||
|
import com.fr.design.editor.ValueEditorPaneFactory; |
||||||
|
import com.fr.design.editor.editor.Editor; |
||||||
|
import com.fr.design.editor.editor.FormulaEditor; |
||||||
|
import com.fr.design.editor.editor.TextEditor; |
||||||
|
import com.fr.general.Inter; |
||||||
|
|
||||||
|
/** |
||||||
|
* 简要提供 文本和公式两种编辑器 |
||||||
|
* @author kunsnat E-mail:kunsnat@gmail.com |
||||||
|
* @version 创建时间:2012-10-23 上午10:30:16 |
||||||
|
*/ |
||||||
|
public class MapReportRenderer extends DefaultTableCellRenderer { |
||||||
|
private ValueEditorPane cellEditor; |
||||||
|
|
||||||
|
public MapReportRenderer() { |
||||||
|
Editor[] editors = new Editor[]{new TextEditor(), new FormulaEditor(Inter.getLocText("Parameter-Formula"))}; |
||||||
|
cellEditor = ValueEditorPaneFactory.createValueEditorPane(editors); |
||||||
|
} |
||||||
|
|
||||||
|
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { |
||||||
|
cellEditor.populate(value == null ? "" : value); |
||||||
|
return cellEditor; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,113 @@ |
|||||||
|
package com.fr.design.chart.report; |
||||||
|
|
||||||
|
import com.fr.base.chart.chartdata.TopDefinitionProvider; |
||||||
|
import com.fr.chart.chartattr.Chart; |
||||||
|
import com.fr.chart.chartdata.MapSingleLayerReportDefinition; |
||||||
|
import com.fr.chart.chartdata.MapSingleLayerTableDefinition; |
||||||
|
import com.fr.chart.chartdata.TopDefinition; |
||||||
|
import com.fr.design.beans.FurtherBasicBeanPane; |
||||||
|
import com.fr.design.gui.frpane.UIComboBoxPane; |
||||||
|
import com.fr.design.gui.ilable.BoldFontTextLabel; |
||||||
|
import com.fr.general.Inter; |
||||||
|
|
||||||
|
import javax.swing.*; |
||||||
|
import java.awt.*; |
||||||
|
import java.util.ArrayList; |
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
/** |
||||||
|
* 数据定义: 地图单层设置 |
||||||
|
* @author kunsnat E-mail:kunsnat@gmail.com |
||||||
|
* @version 创建时间:2012-10-22 上午10:41:03 |
||||||
|
*/ |
||||||
|
public class MapSinglePane extends FurtherBasicBeanPane<TopDefinitionProvider> { |
||||||
|
|
||||||
|
private UIComboBoxPane<Chart> dataFromPane;// 数据来源的box界面
|
||||||
|
|
||||||
|
private MapReportDataSinglePane reportSinglePane; |
||||||
|
private MapTableDataSinglePane tableSinglePane; |
||||||
|
|
||||||
|
public MapSinglePane() { |
||||||
|
initCom(); |
||||||
|
} |
||||||
|
|
||||||
|
private void initCom() { |
||||||
|
this.setLayout(new BorderLayout()); |
||||||
|
|
||||||
|
this.add(dataFromPane = new UIComboBoxPane<Chart>() { |
||||||
|
protected void initLayout() { |
||||||
|
this.setLayout(new BorderLayout(0, 6)); |
||||||
|
JPanel northPane = new JPanel(new FlowLayout(FlowLayout.LEFT)); |
||||||
|
northPane.add(new BoldFontTextLabel(Inter.getLocText("ChartF-Data-Resource") + ":")); |
||||||
|
northPane.add(jcb); |
||||||
|
|
||||||
|
this.add(northPane, BorderLayout.NORTH); |
||||||
|
this.add(cardPane, BorderLayout.CENTER); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected List<FurtherBasicBeanPane<? extends Chart>> initPaneList() { |
||||||
|
List list = new ArrayList(); |
||||||
|
|
||||||
|
list.add(tableSinglePane = new MapTableDataSinglePane());// 数据集界面
|
||||||
|
list.add(reportSinglePane = new MapReportDataSinglePane());// 单元格界面
|
||||||
|
|
||||||
|
return list; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected String title4PopupWindow() { |
||||||
|
return Inter.getLocText("Data_Setting"); |
||||||
|
} |
||||||
|
}, BorderLayout.CENTER); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 判断准许的情况 |
||||||
|
*/ |
||||||
|
public boolean accept(Object ob) { |
||||||
|
return ob instanceof TopDefinition; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 重置 |
||||||
|
*/ |
||||||
|
public void reset() { |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 界面标题 |
||||||
|
*/ |
||||||
|
public String title4PopupWindow() { |
||||||
|
return Inter.getLocText(new String[]{"SingleLayer", "Chart-Map"}); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 加载单层地图时的 数据来源界面 |
||||||
|
*/ |
||||||
|
public void populateBean(TopDefinitionProvider ob) { |
||||||
|
if(ob instanceof MapSingleLayerReportDefinition) { |
||||||
|
dataFromPane.setSelectedIndex(1); |
||||||
|
reportSinglePane.populateBean((MapSingleLayerReportDefinition)ob); |
||||||
|
} else if(ob instanceof MapSingleLayerTableDefinition) { |
||||||
|
dataFromPane.setSelectedIndex(0); |
||||||
|
tableSinglePane.populateBean((MapSingleLayerTableDefinition)ob); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 保存下载 单层数据界面 |
||||||
|
*/ |
||||||
|
public TopDefinitionProvider updateBean() { |
||||||
|
if(dataFromPane.getSelectedIndex() == 0) { |
||||||
|
return tableSinglePane.updateBean(); |
||||||
|
} else { |
||||||
|
return reportSinglePane.updateBean(); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public void setSurpportCellData(boolean surpportCellData) { |
||||||
|
dataFromPane.justSupportOneSelect(surpportCellData); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,79 @@ |
|||||||
|
package com.fr.design.chart.report; |
||||||
|
|
||||||
|
import com.fr.base.chart.chartdata.TopDefinitionProvider; |
||||||
|
import com.fr.chart.chartdata.MapSingleLayerTableDefinition; |
||||||
|
import com.fr.chart.chartdata.TopDefinition; |
||||||
|
import com.fr.design.beans.FurtherBasicBeanPane; |
||||||
|
import com.fr.design.data.tabledata.wrapper.TableDataWrapper; |
||||||
|
import com.fr.general.Inter; |
||||||
|
|
||||||
|
import java.awt.*; |
||||||
|
|
||||||
|
/** |
||||||
|
* Created by IntelliJ IDEA. |
||||||
|
* Author : daisy |
||||||
|
* Version: 7.1.1 |
||||||
|
*/ |
||||||
|
public class MapSinglePane4Chart extends FurtherBasicBeanPane<TopDefinitionProvider> { |
||||||
|
|
||||||
|
private MapTableDataSinglePane4Chart tableSinglePane; |
||||||
|
|
||||||
|
public MapSinglePane4Chart() { |
||||||
|
initCom(); |
||||||
|
} |
||||||
|
|
||||||
|
private void initCom() { |
||||||
|
this.setLayout(new BorderLayout()); |
||||||
|
|
||||||
|
this.add(tableSinglePane = new MapTableDataSinglePane4Chart(), BorderLayout.CENTER); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 判断准许的情况 |
||||||
|
* @param ob 数据集 |
||||||
|
* @return 是不是顶层数据 |
||||||
|
*/ |
||||||
|
public boolean accept(Object ob) { |
||||||
|
return ob instanceof TopDefinition; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 重置 |
||||||
|
*/ |
||||||
|
public void reset() { |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
*界面标题 |
||||||
|
* @return 界面标题 |
||||||
|
*/ |
||||||
|
public String title4PopupWindow() { |
||||||
|
return Inter.getLocText(new String[]{"SingleLayer", "Chart-Map"}); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 加载单层地图时的 数据来源界面 |
||||||
|
*/ |
||||||
|
public void populateBean(TopDefinitionProvider ob) { |
||||||
|
if(ob instanceof MapSingleLayerTableDefinition) { |
||||||
|
tableSinglePane.populateBean((MapSingleLayerTableDefinition)ob); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 保存下载 单层数据界面 |
||||||
|
*/ |
||||||
|
public TopDefinitionProvider updateBean() { |
||||||
|
return tableSinglePane.updateBean(); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 出发数据集改变 |
||||||
|
* @param tableDataWrapper 数据集 |
||||||
|
*/ |
||||||
|
public void fireTableDataChanged(TableDataWrapper tableDataWrapper) { |
||||||
|
tableSinglePane.setTableDataWrapper(tableDataWrapper); |
||||||
|
tableSinglePane.refreshAreaNameBox(); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,110 @@ |
|||||||
|
package com.fr.design.chart.report; |
||||||
|
|
||||||
|
import com.fr.chart.chartdata.MapMoreLayerTableDefinition; |
||||||
|
import com.fr.chart.chartdata.MapSingleLayerTableDefinition; |
||||||
|
import com.fr.data.impl.NameTableData; |
||||||
|
import com.fr.design.data.tabledata.wrapper.TableDataWrapper; |
||||||
|
import com.fr.design.beans.FurtherBasicBeanPane; |
||||||
|
import com.fr.design.gui.ilable.UILabel; |
||||||
|
import com.fr.design.mainframe.chart.gui.data.DatabaseTableDataPane; |
||||||
|
import com.fr.general.Inter; |
||||||
|
|
||||||
|
import javax.swing.*; |
||||||
|
import java.awt.*; |
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
/** |
||||||
|
* 地图 多层钻取 数据集定义界面 |
||||||
|
* |
||||||
|
* @author kunsnat E-mail:kunsnat@gmail.com |
||||||
|
* @version 创建时间:2012-10-23 上午10:55:39 |
||||||
|
*/ |
||||||
|
public class MapTableCubeDataPane extends FurtherBasicBeanPane<MapMoreLayerTableDefinition> { |
||||||
|
|
||||||
|
private DatabaseTableDataPane dataFromBox; |
||||||
|
|
||||||
|
private MapMoreTableIndexPane tablePane; |
||||||
|
|
||||||
|
public MapTableCubeDataPane() { |
||||||
|
this.setLayout(new BorderLayout()); |
||||||
|
|
||||||
|
JPanel pane = new JPanel(); |
||||||
|
this.add(pane, BorderLayout.NORTH); |
||||||
|
|
||||||
|
pane.setLayout(new FlowLayout(FlowLayout.LEFT)); |
||||||
|
|
||||||
|
UILabel label = new UILabel(Inter.getLocText("Select_Data_Set") + ":", SwingConstants.RIGHT); |
||||||
|
|
||||||
|
dataFromBox = new DatabaseTableDataPane(label) { |
||||||
|
protected void userEvent() { |
||||||
|
refreshAreaNameBox(); |
||||||
|
} |
||||||
|
}; |
||||||
|
dataFromBox.setPreferredSize(new Dimension(180, 20)); |
||||||
|
pane.add(dataFromBox); |
||||||
|
|
||||||
|
tablePane = new MapMoreTableIndexPane(); |
||||||
|
this.add(tablePane, BorderLayout.CENTER); |
||||||
|
} |
||||||
|
|
||||||
|
private void refreshAreaNameBox() {// 刷新区域名称列表
|
||||||
|
TableDataWrapper tableDataWrappe = dataFromBox.getTableDataWrapper(); |
||||||
|
if (tableDataWrappe == null) { |
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
List<String> columnNameList = tableDataWrappe.calculateColumnNameList(); |
||||||
|
tablePane.initAreaComBox(columnNameList.toArray(new String[columnNameList.size()])); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 界面接入 |
||||||
|
* @param ob 界面 |
||||||
|
* @return 返回接入. |
||||||
|
*/ |
||||||
|
public boolean accept(Object ob) { |
||||||
|
return true; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 重置 |
||||||
|
*/ |
||||||
|
public void reset() { |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 界面弹出标题 |
||||||
|
* @return 返回标题. |
||||||
|
*/ |
||||||
|
public String title4PopupWindow() { |
||||||
|
return Inter.getLocText("DS-TableData"); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void populateBean(MapMoreLayerTableDefinition tableDefinition) {// editingLayerCout
|
||||||
|
|
||||||
|
if (tableDefinition != null) { |
||||||
|
dataFromBox.populateBean(tableDefinition.getTableData()); |
||||||
|
|
||||||
|
MapSingleLayerTableDefinition[] values = tableDefinition.getNameValues(); |
||||||
|
if(values != null && values.length > 0) { |
||||||
|
tablePane.populateBean(values[0]); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public MapMoreLayerTableDefinition updateBean() { |
||||||
|
MapMoreLayerTableDefinition tableDefinition = new MapMoreLayerTableDefinition(); |
||||||
|
|
||||||
|
TableDataWrapper tableDataWrappe = dataFromBox.getTableDataWrapper(); |
||||||
|
if (tableDataWrappe != null) { |
||||||
|
tableDefinition.setTableData(new NameTableData(tableDataWrappe.getTableDataName())); |
||||||
|
|
||||||
|
tableDefinition.clearNameValues(); |
||||||
|
tableDefinition.addNameValue(tablePane.updateBean()); |
||||||
|
} |
||||||
|
|
||||||
|
return tableDefinition; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,93 @@ |
|||||||
|
package com.fr.design.chart.report; |
||||||
|
|
||||||
|
import com.fr.chart.chartdata.MapMoreLayerTableDefinition; |
||||||
|
import com.fr.chart.chartdata.MapSingleLayerTableDefinition; |
||||||
|
import com.fr.design.beans.FurtherBasicBeanPane; |
||||||
|
import com.fr.design.data.tabledata.wrapper.TableDataWrapper; |
||||||
|
import com.fr.general.Inter; |
||||||
|
|
||||||
|
import java.awt.*; |
||||||
|
|
||||||
|
/** |
||||||
|
* Created by IntelliJ IDEA. |
||||||
|
* Author : daisy |
||||||
|
* Version: 7.1.1 |
||||||
|
*/ |
||||||
|
public class MapTableCubeDataPane4Chart extends FurtherBasicBeanPane<MapMoreLayerTableDefinition> { |
||||||
|
|
||||||
|
private MapMoreTableIndexPane tablePane; |
||||||
|
private TableDataWrapper tableDataWrapper; |
||||||
|
|
||||||
|
public MapTableCubeDataPane4Chart() { |
||||||
|
this.setLayout(new BorderLayout()); |
||||||
|
tablePane = new MapMoreTableIndexPane(); |
||||||
|
this.add(tablePane, BorderLayout.CENTER); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 刷新区域名称列表 |
||||||
|
*/ |
||||||
|
public void refreshAreaNameBox() { |
||||||
|
TableDataWrapper tableDataWrappe = tableDataWrapper; |
||||||
|
if (tableDataWrappe == null) { |
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
java.util.List<String> columnNameList = tableDataWrappe.calculateColumnNameList(); |
||||||
|
tablePane.initAreaComBox(columnNameList.toArray(new String[columnNameList.size()])); |
||||||
|
} |
||||||
|
|
||||||
|
public void setTableDataWrapper(TableDataWrapper wrapper){ |
||||||
|
this.tableDataWrapper = wrapper; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 界面接入 |
||||||
|
* @param ob 界面 |
||||||
|
* @return 返回接入. |
||||||
|
*/ |
||||||
|
public boolean accept(Object ob) { |
||||||
|
return true; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 重置 |
||||||
|
*/ |
||||||
|
public void reset() { |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 界面弹出标题 |
||||||
|
* @return 返回标题. |
||||||
|
*/ |
||||||
|
public String title4PopupWindow() { |
||||||
|
return Inter.getLocText("FR-Chart-Table_Data"); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void populateBean(MapMoreLayerTableDefinition tableDefinition) { |
||||||
|
|
||||||
|
if (tableDefinition != null) { |
||||||
|
MapSingleLayerTableDefinition[] values = tableDefinition.getNameValues(); |
||||||
|
if(values != null && values.length > 0) { |
||||||
|
tablePane.populateBean(values[0]); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public MapMoreLayerTableDefinition updateBean() { |
||||||
|
MapMoreLayerTableDefinition tableDefinition = new MapMoreLayerTableDefinition(); |
||||||
|
|
||||||
|
TableDataWrapper tableDataWrappe =tableDataWrapper; |
||||||
|
if (tableDataWrappe != null) { |
||||||
|
tableDefinition.setTableData(tableDataWrappe.getTableData()); |
||||||
|
|
||||||
|
tableDefinition.clearNameValues(); |
||||||
|
tableDefinition.addNameValue(tablePane.updateBean()); |
||||||
|
} |
||||||
|
|
||||||
|
return tableDefinition; |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,271 @@ |
|||||||
|
package com.fr.design.chart.report; |
||||||
|
|
||||||
|
import java.awt.BorderLayout; |
||||||
|
import java.awt.Component; |
||||||
|
import java.awt.Dimension; |
||||||
|
import java.awt.FlowLayout; |
||||||
|
import java.awt.event.ItemEvent; |
||||||
|
import java.awt.event.ItemListener; |
||||||
|
import java.util.ArrayList; |
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
import javax.swing.JComponent; |
||||||
|
import javax.swing.JPanel; |
||||||
|
import javax.swing.JTable; |
||||||
|
import javax.swing.SwingConstants; |
||||||
|
import javax.swing.event.ChangeEvent; |
||||||
|
import javax.swing.event.ChangeListener; |
||||||
|
|
||||||
|
import com.fr.base.Utils; |
||||||
|
import com.fr.chart.chartdata.MapSingleLayerTableDefinition; |
||||||
|
import com.fr.chart.chartdata.SeriesDefinition; |
||||||
|
import com.fr.data.impl.NameTableData; |
||||||
|
import com.fr.design.data.tabledata.wrapper.TableDataWrapper; |
||||||
|
import com.fr.design.beans.FurtherBasicBeanPane; |
||||||
|
import com.fr.design.event.UIObserver; |
||||||
|
import com.fr.design.event.UIObserverListener; |
||||||
|
import com.fr.design.gui.frpane.UICorrelationPane; |
||||||
|
import com.fr.design.gui.icombobox.UIComboBox; |
||||||
|
import com.fr.design.gui.ilable.UILabel; |
||||||
|
import com.fr.design.gui.itable.UITableEditor; |
||||||
|
import com.fr.design.gui.itextfield.UITextField; |
||||||
|
import com.fr.design.mainframe.chart.gui.data.DatabaseTableDataPane; |
||||||
|
import com.fr.general.Inter; |
||||||
|
import com.fr.stable.StringUtils; |
||||||
|
|
||||||
|
/** |
||||||
|
* 单层地图时: 数据集 定义界面 |
||||||
|
* |
||||||
|
* @author kunsnat E-mail:kunsnat@gmail.com |
||||||
|
* @version 创建时间:2012-10-22 上午11:14:59 |
||||||
|
*/ |
||||||
|
public class MapTableDataSinglePane extends FurtherBasicBeanPane<MapSingleLayerTableDefinition> implements UIObserver { |
||||||
|
|
||||||
|
private DatabaseTableDataPane fromTableData; |
||||||
|
|
||||||
|
private ArrayList<ChangeListener> changeListeners = new ArrayList<ChangeListener>(); |
||||||
|
private String[] initNames = {""}; |
||||||
|
|
||||||
|
private UIComboBox areaNameBox; |
||||||
|
private UICorrelationPane titleValuePane; |
||||||
|
|
||||||
|
public MapTableDataSinglePane() { |
||||||
|
this.setLayout(new BorderLayout()); |
||||||
|
|
||||||
|
JPanel northPane = new JPanel(); |
||||||
|
this.add(northPane, BorderLayout.NORTH); |
||||||
|
|
||||||
|
northPane.setLayout(new FlowLayout(FlowLayout.LEFT)); |
||||||
|
|
||||||
|
UILabel label = new UILabel(Inter.getLocText("Select_Data_Set") + ":", SwingConstants.RIGHT); |
||||||
|
|
||||||
|
northPane.add(fromTableData = new DatabaseTableDataPane(label) { |
||||||
|
@Override |
||||||
|
protected void userEvent() { |
||||||
|
refreshAreaNameBox(); |
||||||
|
} |
||||||
|
}); |
||||||
|
fromTableData.setPreferredSize(new Dimension(180, 20)); |
||||||
|
northPane.add(fromTableData); |
||||||
|
|
||||||
|
UILabel nameLabel = new UILabel(" " + Inter.getLocText("Area_Name") + ":", SwingConstants.RIGHT); |
||||||
|
areaNameBox = new UIComboBox(); |
||||||
|
areaNameBox.setPreferredSize(new Dimension(80, 20)); |
||||||
|
|
||||||
|
JPanel areaNamePane = new JPanel(); |
||||||
|
areaNamePane.setLayout(new FlowLayout(FlowLayout.LEFT, 3, 0)); |
||||||
|
|
||||||
|
areaNamePane.add(nameLabel); |
||||||
|
areaNamePane.add(areaNameBox); |
||||||
|
|
||||||
|
JPanel pane = new JPanel(); |
||||||
|
this.add(pane, BorderLayout.CENTER); |
||||||
|
pane.setLayout(new BorderLayout()); |
||||||
|
|
||||||
|
pane.add(areaNamePane, BorderLayout.NORTH); |
||||||
|
|
||||||
|
String[] titles = {Inter.getLocText(new String[]{"Filed", "Title"}), Inter.getLocText("Area_Value")}; |
||||||
|
titleValuePane = new UICorrelationPane(titles){ |
||||||
|
public UITableEditor createUITableEditor() { |
||||||
|
return new InnerTableEditor(); |
||||||
|
} |
||||||
|
}; |
||||||
|
|
||||||
|
pane.add(titleValuePane, BorderLayout.CENTER); |
||||||
|
} |
||||||
|
|
||||||
|
private void refreshAreaNameBox() {// 刷新区域名称列表
|
||||||
|
TableDataWrapper tableDataWrappe = fromTableData.getTableDataWrapper(); |
||||||
|
if (tableDataWrappe == null) { |
||||||
|
return; |
||||||
|
} |
||||||
|
List<String> columnNameList = tableDataWrappe.calculateColumnNameList(); |
||||||
|
initNames = columnNameList.toArray(new String[columnNameList.size()]); |
||||||
|
|
||||||
|
Object oldSelected = areaNameBox.getSelectedItem(); |
||||||
|
areaNameBox.removeAllItems(); |
||||||
|
for(int i = 0, size = initNames.length; i < size; i++) { |
||||||
|
areaNameBox.addItem(initNames[i]); |
||||||
|
} |
||||||
|
areaNameBox.getModel().setSelectedItem(oldSelected); |
||||||
|
stopEditing(); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 界面接入 |
||||||
|
*/ |
||||||
|
public boolean accept(Object ob) { |
||||||
|
return false; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 界面重置 |
||||||
|
*/ |
||||||
|
public void reset() { |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 界面弹出标题 |
||||||
|
*/ |
||||||
|
public String title4PopupWindow() { |
||||||
|
return Inter.getLocText("DS-TableData"); |
||||||
|
} |
||||||
|
|
||||||
|
private void stopEditing() { |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void populateBean(MapSingleLayerTableDefinition ob) { |
||||||
|
stopEditing(); |
||||||
|
if (ob instanceof MapSingleLayerTableDefinition) { |
||||||
|
MapSingleLayerTableDefinition mapDefinition = (MapSingleLayerTableDefinition) ob; |
||||||
|
|
||||||
|
fromTableData.populateBean(((NameTableData) mapDefinition.getTableData())); |
||||||
|
areaNameBox.setSelectedItem(mapDefinition.getAreaName()); |
||||||
|
|
||||||
|
List paneList = new ArrayList(); |
||||||
|
int titleValueSize = mapDefinition.getTitleValueSize(); |
||||||
|
for(int i = 0; i < titleValueSize; i++) { |
||||||
|
SeriesDefinition definition = mapDefinition.getTitleValueWithIndex(i); |
||||||
|
if(definition != null && definition.getSeriesName() != null && definition.getValue() != null) { |
||||||
|
paneList.add(new Object[]{definition.getSeriesName(), definition.getValue()}); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
if(!paneList.isEmpty()) { |
||||||
|
titleValuePane.populateBean(paneList); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public MapSingleLayerTableDefinition updateBean() {// 从一行内容中update
|
||||||
|
stopEditing(); |
||||||
|
|
||||||
|
MapSingleLayerTableDefinition definition = new MapSingleLayerTableDefinition(); |
||||||
|
|
||||||
|
TableDataWrapper tableDataWrappe = fromTableData.getTableDataWrapper(); |
||||||
|
if (tableDataWrappe == null || areaNameBox.getSelectedItem() == null) { |
||||||
|
return null; |
||||||
|
} |
||||||
|
|
||||||
|
definition.setTableData(new NameTableData(tableDataWrappe.getTableDataName())); |
||||||
|
definition.setAreaName(Utils.objectToString(areaNameBox.getSelectedItem())); |
||||||
|
|
||||||
|
List paneList = titleValuePane.updateBean(); |
||||||
|
for(int i = 0, size = paneList.size(); i < size; i++) { |
||||||
|
Object[] values = (Object[])paneList.get(i); |
||||||
|
if(values.length == 2) { |
||||||
|
SeriesDefinition seriesDefinition = new SeriesDefinition(); |
||||||
|
seriesDefinition.setSeriesName(values[0]); |
||||||
|
seriesDefinition.setValue(values[1]); |
||||||
|
definition.addTitleValue(seriesDefinition); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
return definition; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 给组件登记一个观察者监听事件 |
||||||
|
* |
||||||
|
* @param listener 观察者监听事件 |
||||||
|
*/ |
||||||
|
public void registerChangeListener(final UIObserverListener listener) { |
||||||
|
changeListeners.add(new ChangeListener() { |
||||||
|
public void stateChanged(ChangeEvent e) { |
||||||
|
listener.doChange(); |
||||||
|
} |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 组件是否需要响应添加的观察者事件 |
||||||
|
* |
||||||
|
* @return 如果需要响应观察者事件则返回true,否则返回false |
||||||
|
*/ |
||||||
|
public boolean shouldResponseChangeListener() { |
||||||
|
return true; |
||||||
|
} |
||||||
|
|
||||||
|
private class InnerTableEditor extends UITableEditor { |
||||||
|
private JComponent editorComponent; |
||||||
|
|
||||||
|
/** |
||||||
|
* 返回当前编辑器的值 |
||||||
|
*/ |
||||||
|
public Object getCellEditorValue() { |
||||||
|
if(editorComponent instanceof UITextField) { |
||||||
|
UITextField textField = (UITextField)editorComponent; |
||||||
|
return textField.getText(); |
||||||
|
} else if(editorComponent instanceof UIComboBox) { |
||||||
|
UIComboBox boxPane = (UIComboBox)editorComponent; |
||||||
|
return boxPane.getSelectedItem(); |
||||||
|
} |
||||||
|
return super.getCellEditorValue(); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 返回当前编辑器.. |
||||||
|
*/ |
||||||
|
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { |
||||||
|
if (column == table.getModel().getColumnCount()) { |
||||||
|
return null; |
||||||
|
} |
||||||
|
if(column == 0 ) { |
||||||
|
UITextField text = new UITextField(); |
||||||
|
if(value != null) { |
||||||
|
text.setText(Utils.objectToString(value)); |
||||||
|
} |
||||||
|
|
||||||
|
text.registerChangeListener(new UIObserverListener() { |
||||||
|
@Override |
||||||
|
public void doChange() { |
||||||
|
titleValuePane.fireTargetChanged(); |
||||||
|
} |
||||||
|
}); |
||||||
|
|
||||||
|
this.editorComponent = text; |
||||||
|
} else { |
||||||
|
UIComboBox box = new UIComboBox(initNames); |
||||||
|
box.addItemListener(new ItemListener() { |
||||||
|
@Override |
||||||
|
public void itemStateChanged(ItemEvent e) { |
||||||
|
titleValuePane.fireTargetChanged(); |
||||||
|
titleValuePane.stopCellEditing(); |
||||||
|
} |
||||||
|
}); |
||||||
|
|
||||||
|
if (value != null && StringUtils.isNotEmpty(value.toString())) { |
||||||
|
box.setSelectedItem(value); |
||||||
|
} else { |
||||||
|
box.setSelectedItem(value); |
||||||
|
} |
||||||
|
|
||||||
|
this.editorComponent = box; |
||||||
|
} |
||||||
|
return this.editorComponent; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,268 @@ |
|||||||
|
package com.fr.design.chart.report; |
||||||
|
|
||||||
|
import com.fr.base.Utils; |
||||||
|
import com.fr.chart.chartdata.MapSingleLayerTableDefinition; |
||||||
|
import com.fr.chart.chartdata.SeriesDefinition; |
||||||
|
import com.fr.design.beans.FurtherBasicBeanPane; |
||||||
|
import com.fr.design.data.tabledata.wrapper.TableDataWrapper; |
||||||
|
import com.fr.design.event.UIObserver; |
||||||
|
import com.fr.design.event.UIObserverListener; |
||||||
|
import com.fr.design.gui.frpane.UICorrelationPane; |
||||||
|
import com.fr.design.gui.icombobox.UIComboBox; |
||||||
|
import com.fr.design.gui.ilable.BoldFontTextLabel; |
||||||
|
import com.fr.design.gui.ilable.UILabel; |
||||||
|
import com.fr.design.gui.itable.UITableEditor; |
||||||
|
import com.fr.design.gui.itextfield.UITextField; |
||||||
|
import com.fr.design.layout.TableLayout; |
||||||
|
import com.fr.design.layout.TableLayoutHelper; |
||||||
|
import com.fr.general.Inter; |
||||||
|
import com.fr.stable.StringUtils; |
||||||
|
|
||||||
|
import javax.swing.*; |
||||||
|
import javax.swing.event.ChangeEvent; |
||||||
|
import javax.swing.event.ChangeListener; |
||||||
|
import java.awt.*; |
||||||
|
import java.awt.event.ItemEvent; |
||||||
|
import java.awt.event.ItemListener; |
||||||
|
import java.util.*; |
||||||
|
|
||||||
|
/** |
||||||
|
* Created by IntelliJ IDEA. |
||||||
|
* Author : daisy |
||||||
|
* Version: 7.1.1 |
||||||
|
*/ |
||||||
|
public class MapTableDataSinglePane4Chart extends FurtherBasicBeanPane<MapSingleLayerTableDefinition> implements UIObserver { |
||||||
|
|
||||||
|
private static final int LABEL_WIDTH_GAP = 5; |
||||||
|
private static final int COM_HEIGHT = 20; |
||||||
|
private ArrayList<ChangeListener> changeListeners = new ArrayList<ChangeListener>(); |
||||||
|
private String[] initNames = {""}; |
||||||
|
|
||||||
|
private UIComboBox areaNameBox; |
||||||
|
private UICorrelationPane titleValuePane; |
||||||
|
private TableDataWrapper tableDataWrapper; |
||||||
|
|
||||||
|
public MapTableDataSinglePane4Chart() { |
||||||
|
this.setLayout(new BorderLayout()); |
||||||
|
JPanel pane = new JPanel(); |
||||||
|
this.add(pane, BorderLayout.CENTER); |
||||||
|
pane.setLayout(new BorderLayout()); |
||||||
|
|
||||||
|
pane.add(getAreaNamePane(), BorderLayout.NORTH); |
||||||
|
|
||||||
|
String[] titles = {Inter.getLocText("FR-Chart-Area_Title"), Inter.getLocText("FR-Chart-Area_Value")}; |
||||||
|
titleValuePane = new UICorrelationPane(titles){ |
||||||
|
public UITableEditor createUITableEditor() { |
||||||
|
return new InnerTableEditor(); |
||||||
|
} |
||||||
|
}; |
||||||
|
|
||||||
|
pane.add(titleValuePane, BorderLayout.CENTER); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
private JPanel getAreaNamePane(){ |
||||||
|
final UILabel label = new BoldFontTextLabel(Inter.getLocText("FR-Chart-Map_ShowWay") + ":"); |
||||||
|
UILabel nameLabel = new UILabel(Inter.getLocText("FR-Chart-Area_Name") + ":", SwingConstants.RIGHT){ |
||||||
|
public Dimension getPreferredSize() { |
||||||
|
return new Dimension(label.getPreferredSize().width+LABEL_WIDTH_GAP,COM_HEIGHT); |
||||||
|
} |
||||||
|
}; |
||||||
|
areaNameBox = new UIComboBox(); |
||||||
|
areaNameBox.setPreferredSize(new Dimension(80, 20)); |
||||||
|
double p =TableLayout.PREFERRED; |
||||||
|
double f = TableLayout.FILL; |
||||||
|
double[] columnSize = {p, f}; |
||||||
|
double[] rowSize = {p}; |
||||||
|
Component[][] components = new Component[][]{ |
||||||
|
new Component[]{nameLabel, areaNameBox}, |
||||||
|
}; |
||||||
|
return TableLayoutHelper.createTableLayoutPane(components, rowSize, columnSize); |
||||||
|
} |
||||||
|
/** |
||||||
|
*刷新区域名称列表 |
||||||
|
*/ |
||||||
|
public void refreshAreaNameBox() {// 刷新区域名称列表
|
||||||
|
TableDataWrapper tableDataWrappe = tableDataWrapper; |
||||||
|
if (tableDataWrappe == null) { |
||||||
|
return; |
||||||
|
} |
||||||
|
java.util.List<String> columnNameList = tableDataWrappe.calculateColumnNameList(); |
||||||
|
initNames = columnNameList.toArray(new String[columnNameList.size()]); |
||||||
|
|
||||||
|
Object oldSelected = areaNameBox.getSelectedItem(); |
||||||
|
areaNameBox.removeAllItems(); |
||||||
|
for(int i = 0, size = initNames.length; i < size; i++) { |
||||||
|
areaNameBox.addItem(initNames[i]); |
||||||
|
} |
||||||
|
areaNameBox.getModel().setSelectedItem(oldSelected); |
||||||
|
stopEditing(); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* 是否接受数据集 |
||||||
|
* @param ob 具体变量 |
||||||
|
* @return 不是 |
||||||
|
*/ |
||||||
|
public boolean accept(Object ob) { |
||||||
|
return false; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 界面重置 |
||||||
|
*/ |
||||||
|
public void reset() { |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 界面弹出标题 |
||||||
|
* @return 标题 |
||||||
|
*/ |
||||||
|
public String title4PopupWindow() { |
||||||
|
return Inter.getLocText("FR-Chart-Table_Data"); |
||||||
|
} |
||||||
|
|
||||||
|
private void stopEditing() { |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void populateBean(MapSingleLayerTableDefinition ob) { |
||||||
|
stopEditing(); |
||||||
|
if (ob instanceof MapSingleLayerTableDefinition) { |
||||||
|
MapSingleLayerTableDefinition mapDefinition = (MapSingleLayerTableDefinition) ob; |
||||||
|
|
||||||
|
// fromTableData.populateBean(((NameTableData) mapDefinition.getTableData()));
|
||||||
|
areaNameBox.setSelectedItem(mapDefinition.getAreaName()); |
||||||
|
|
||||||
|
java.util.List paneList = new ArrayList(); |
||||||
|
int titleValueSize = mapDefinition.getTitleValueSize(); |
||||||
|
for(int i = 0; i < titleValueSize; i++) { |
||||||
|
SeriesDefinition definition = mapDefinition.getTitleValueWithIndex(i); |
||||||
|
if(definition != null && definition.getSeriesName() != null && definition.getValue() != null) { |
||||||
|
paneList.add(new Object[]{definition.getSeriesName(), definition.getValue()}); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
if(!paneList.isEmpty()) { |
||||||
|
titleValuePane.populateBean(paneList); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public MapSingleLayerTableDefinition updateBean() {// 从一行内容中update
|
||||||
|
stopEditing(); |
||||||
|
|
||||||
|
MapSingleLayerTableDefinition definition = new MapSingleLayerTableDefinition(); |
||||||
|
|
||||||
|
TableDataWrapper tableDataWrappe = tableDataWrapper; |
||||||
|
// = fromTableData.getTableDataWrapper();
|
||||||
|
if (tableDataWrappe == null || areaNameBox.getSelectedItem() == null) { |
||||||
|
return null; |
||||||
|
} |
||||||
|
|
||||||
|
definition.setTableData(tableDataWrapper.getTableData()); |
||||||
|
definition.setAreaName(Utils.objectToString(areaNameBox.getSelectedItem())); |
||||||
|
|
||||||
|
java.util.List paneList = titleValuePane.updateBean(); |
||||||
|
for(int i = 0, size = paneList.size(); i < size; i++) { |
||||||
|
Object[] values = (Object[])paneList.get(i); |
||||||
|
if(values.length == 2) { |
||||||
|
SeriesDefinition seriesDefinition = new SeriesDefinition(); |
||||||
|
seriesDefinition.setSeriesName(values[0]); |
||||||
|
seriesDefinition.setValue(values[1]); |
||||||
|
definition.addTitleValue(seriesDefinition); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
return definition; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 给组件登记一个观察者监听事件 |
||||||
|
* |
||||||
|
* @param listener 观察者监听事件 |
||||||
|
*/ |
||||||
|
public void registerChangeListener(final UIObserverListener listener) { |
||||||
|
changeListeners.add(new ChangeListener() { |
||||||
|
public void stateChanged(ChangeEvent e) { |
||||||
|
listener.doChange(); |
||||||
|
} |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 组件是否需要响应添加的观察者事件 |
||||||
|
* |
||||||
|
* @return 如果需要响应观察者事件则返回true,否则返回false |
||||||
|
*/ |
||||||
|
public boolean shouldResponseChangeListener() { |
||||||
|
return true; |
||||||
|
} |
||||||
|
|
||||||
|
private class InnerTableEditor extends UITableEditor { |
||||||
|
private JComponent editorComponent; |
||||||
|
|
||||||
|
/** |
||||||
|
* 返回当前编辑器的值 |
||||||
|
*/ |
||||||
|
public Object getCellEditorValue() { |
||||||
|
if(editorComponent instanceof UITextField) { |
||||||
|
UITextField textField = (UITextField)editorComponent; |
||||||
|
return textField.getText(); |
||||||
|
} else if(editorComponent instanceof UIComboBox) { |
||||||
|
UIComboBox boxPane = (UIComboBox)editorComponent; |
||||||
|
return boxPane.getSelectedItem(); |
||||||
|
} |
||||||
|
return super.getCellEditorValue(); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 返回当前编辑器.. |
||||||
|
*/ |
||||||
|
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { |
||||||
|
if (column == table.getModel().getColumnCount()) { |
||||||
|
return null; |
||||||
|
} |
||||||
|
if(column == 0 ) { |
||||||
|
UITextField text = new UITextField(); |
||||||
|
if(value != null) { |
||||||
|
text.setText(Utils.objectToString(value)); |
||||||
|
} |
||||||
|
|
||||||
|
text.registerChangeListener(new UIObserverListener() { |
||||||
|
@Override |
||||||
|
public void doChange() { |
||||||
|
titleValuePane.fireTargetChanged(); |
||||||
|
} |
||||||
|
}); |
||||||
|
|
||||||
|
this.editorComponent = text; |
||||||
|
} else { |
||||||
|
UIComboBox box = new UIComboBox(initNames); |
||||||
|
box.addItemListener(new ItemListener() { |
||||||
|
@Override |
||||||
|
public void itemStateChanged(ItemEvent e) { |
||||||
|
titleValuePane.fireTargetChanged(); |
||||||
|
titleValuePane.stopCellEditing(); |
||||||
|
} |
||||||
|
}); |
||||||
|
|
||||||
|
if (value != null && StringUtils.isNotEmpty(value.toString())) { |
||||||
|
box.setSelectedItem(value); |
||||||
|
} else { |
||||||
|
box.setSelectedItem(value); |
||||||
|
} |
||||||
|
|
||||||
|
this.editorComponent = box; |
||||||
|
} |
||||||
|
return this.editorComponent; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public void setTableDataWrapper(TableDataWrapper wrapper){ |
||||||
|
this.tableDataWrapper = wrapper; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,23 @@ |
|||||||
|
package com.fr.design.chart.series.PlotSeries; |
||||||
|
|
||||||
|
import com.fr.chart.base.MapSvgAttr; |
||||||
|
|
||||||
|
/** |
||||||
|
* Created by IntelliJ IDEA. |
||||||
|
* Author : daisy |
||||||
|
* Version: 7.1.1 |
||||||
|
*/ |
||||||
|
public interface AbstrctMapAttrEditPane { |
||||||
|
|
||||||
|
/** |
||||||
|
* 更新界面 |
||||||
|
* @param attr 地图属性 |
||||||
|
*/ |
||||||
|
public void populateMapAttr(MapSvgAttr attr); |
||||||
|
|
||||||
|
/** |
||||||
|
* 更新MapSvgAttr |
||||||
|
* @return 返回属性 |
||||||
|
*/ |
||||||
|
public MapSvgAttr updateCurrentAttr(); |
||||||
|
} |
@ -0,0 +1,217 @@ |
|||||||
|
package com.fr.design.chart.series.PlotSeries; |
||||||
|
|
||||||
|
import java.awt.BorderLayout; |
||||||
|
import java.awt.Dimension; |
||||||
|
import java.awt.FlowLayout; |
||||||
|
import java.awt.event.ActionEvent; |
||||||
|
import java.awt.event.ActionListener; |
||||||
|
import java.awt.event.ItemEvent; |
||||||
|
import java.awt.event.ItemListener; |
||||||
|
import java.io.File; |
||||||
|
import java.util.ArrayList; |
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
import javax.swing.JFileChooser; |
||||||
|
import javax.swing.JPanel; |
||||||
|
import javax.swing.SwingConstants; |
||||||
|
|
||||||
|
import com.fr.base.Utils; |
||||||
|
import com.fr.chart.base.MapSvgAttr; |
||||||
|
import com.fr.design.data.DesignTableDataManager; |
||||||
|
import com.fr.data.TableDataSource; |
||||||
|
import com.fr.data.core.DataCoreUtils; |
||||||
|
import com.fr.design.data.tabledata.wrapper.TableDataWrapper; |
||||||
|
import com.fr.design.beans.BasicBeanPane; |
||||||
|
import com.fr.design.gui.ibutton.UIButton; |
||||||
|
import com.fr.design.gui.icombobox.FilterComboBox; |
||||||
|
import com.fr.design.gui.ilable.BoldFontTextLabel; |
||||||
|
import com.fr.design.gui.ilable.UILabel; |
||||||
|
import com.fr.design.mainframe.DesignerContext; |
||||||
|
import com.fr.design.mainframe.chart.gui.data.DatabaseTableDataPane; |
||||||
|
import com.fr.general.Inter; |
||||||
|
import com.fr.stable.StringUtils; |
||||||
|
import org.apache.batik.swing.svg.SVGFileFilter; |
||||||
|
|
||||||
|
/** |
||||||
|
* 自定义地图界面. |
||||||
|
* |
||||||
|
* @author kunsnat E-mail:kunsnat@gmail.com |
||||||
|
* @version 创建时间:2012-10-15 下午03:38:15 |
||||||
|
*/ |
||||||
|
public class MapCustomPane extends BasicBeanPane<String> implements AbstrctMapAttrEditPane{ // 储存地图对应的字段. 名称, 类型. shape (点 用圆形代替)
|
||||||
|
|
||||||
|
private FilterComboBox<String> areaString;// 区域字段
|
||||||
|
private DatabaseTableDataPane tableDataNameBox;// 数据集名称 + 后面跟随预览按钮
|
||||||
|
private MapImageEditPane imageShowPane; // 图片展示编辑的界面
|
||||||
|
private String lastSelectPath; |
||||||
|
private boolean isNeedDataSource = true; |
||||||
|
|
||||||
|
public MapCustomPane() { |
||||||
|
initComp(); |
||||||
|
} |
||||||
|
|
||||||
|
public MapCustomPane(boolean isNeedDataSource){ |
||||||
|
this.isNeedDataSource = isNeedDataSource; |
||||||
|
initComp(); |
||||||
|
} |
||||||
|
|
||||||
|
private void initComp() { |
||||||
|
this.setLayout(new BorderLayout(0, 0)); |
||||||
|
|
||||||
|
JPanel pane = new JPanel(); |
||||||
|
this.add(pane, BorderLayout.NORTH); |
||||||
|
|
||||||
|
pane.setLayout(new BorderLayout()); |
||||||
|
|
||||||
|
pane.add(northPaneCreate(), BorderLayout.NORTH); |
||||||
|
|
||||||
|
imageShowPane = new MapImageEditPane(); |
||||||
|
|
||||||
|
pane.add(imageShowPane, BorderLayout.CENTER); |
||||||
|
} |
||||||
|
|
||||||
|
private JPanel northPaneCreate() { |
||||||
|
JPanel northPane = new JPanel(); |
||||||
|
|
||||||
|
northPane.setLayout(new FlowLayout(FlowLayout.LEFT)); |
||||||
|
|
||||||
|
UIButton loadMap = new UIButton(Inter.getLocText("FR-Chart-Import_Map")); |
||||||
|
loadMap.setPreferredSize(new Dimension(160, 20)); |
||||||
|
northPane.add(loadMap); |
||||||
|
|
||||||
|
loadMap.addActionListener(selectPictureActionListener); |
||||||
|
|
||||||
|
if(isNeedDataSource){ |
||||||
|
UILabel label =new UILabel(Inter.getLocText("FR-Chart-Table_Data") + ":", SwingConstants.RIGHT) ; |
||||||
|
|
||||||
|
tableDataNameBox = new DatabaseTableDataPane(label) { |
||||||
|
protected void userEvent() { |
||||||
|
refreshAreaNameBox(); |
||||||
|
} |
||||||
|
}; |
||||||
|
tableDataNameBox.setPreferredSize(new Dimension(200, 20)); |
||||||
|
northPane.add(tableDataNameBox); |
||||||
|
|
||||||
|
northPane.add(new BoldFontTextLabel(Inter.getLocText(new String[]{"Filed", "Field"}) + ":")); |
||||||
|
|
||||||
|
areaString = new FilterComboBox<String>(); |
||||||
|
areaString.setPreferredSize(new Dimension(120, 20)); |
||||||
|
areaString.addItemListener(areaChange); |
||||||
|
northPane.add(areaString); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
return northPane; |
||||||
|
} |
||||||
|
|
||||||
|
private ActionListener selectPictureActionListener = new ActionListener() { |
||||||
|
|
||||||
|
public void actionPerformed(ActionEvent evt) { |
||||||
|
JFileChooser svgFileChooser = new JFileChooser(); |
||||||
|
svgFileChooser.addChoosableFileFilter(new SVGFileFilter()); |
||||||
|
if (StringUtils.isNotBlank(lastSelectPath)) { |
||||||
|
svgFileChooser.setSelectedFile(new File(lastSelectPath)); |
||||||
|
} |
||||||
|
int returnVal = svgFileChooser.showOpenDialog(DesignerContext.getDesignerFrame()); |
||||||
|
if (returnVal != JFileChooser.CANCEL_OPTION) { |
||||||
|
File selectedFile = svgFileChooser.getSelectedFile(); |
||||||
|
lastSelectPath = selectedFile.getAbsolutePath(); |
||||||
|
if (selectedFile != null && selectedFile.isFile()) { |
||||||
|
imageShowPane.setSvgMap(selectedFile.getPath()); |
||||||
|
imageShowPane.repaint(); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
}; |
||||||
|
|
||||||
|
private ItemListener areaChange = new ItemListener() { |
||||||
|
public void itemStateChanged(ItemEvent e) { |
||||||
|
Object select = areaString.getSelectedItem(); |
||||||
|
if (select != null) { |
||||||
|
String colName = Utils.objectToString(areaString.getSelectedItem()); |
||||||
|
|
||||||
|
TableDataWrapper tableDataWrappe = tableDataNameBox.getTableDataWrapper(); |
||||||
|
TableDataSource source = DesignTableDataManager.getEditingTableDataSource(); |
||||||
|
if (tableDataWrappe == null || source == null) { |
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
String[] values = DataCoreUtils.getColValuesInData(source, tableDataWrappe.getTableDataName(), colName); |
||||||
|
ArrayList list = new ArrayList(); |
||||||
|
for(int i = 0; i < values.length; i++) { |
||||||
|
list.add(values[i]); |
||||||
|
} |
||||||
|
|
||||||
|
imageShowPane.refreshFromDataList(list); |
||||||
|
} |
||||||
|
} |
||||||
|
}; |
||||||
|
|
||||||
|
/** |
||||||
|
* 选中方式: 区域或者点 |
||||||
|
*/ |
||||||
|
public void setImageSelectType(int selectType) { |
||||||
|
if (imageShowPane != null) { |
||||||
|
imageShowPane.setEditType(selectType); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
private void refreshAreaNameBox() {// 刷新区域名称列表
|
||||||
|
if(!isNeedDataSource){ |
||||||
|
return; |
||||||
|
} |
||||||
|
TableDataWrapper tableDataWrappe = tableDataNameBox.getTableDataWrapper(); |
||||||
|
if (tableDataWrappe == null) { |
||||||
|
return; |
||||||
|
} |
||||||
|
List<String> columnNameList = tableDataWrappe.calculateColumnNameList(); |
||||||
|
|
||||||
|
areaString.removeAllItems(); |
||||||
|
areaString.setItemList(columnNameList); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 当前正在编辑的条目的类别(国家,省市)名和地图名 |
||||||
|
* @param typeName 类别名 |
||||||
|
* @param mapName 地图名 |
||||||
|
*/ |
||||||
|
public void setTypeNameAndMapName(String typeName, String mapName){ |
||||||
|
imageShowPane.setTypeNameAndMapName(typeName, mapName); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 根据地图名称 加载信息 |
||||||
|
*/ |
||||||
|
public void populateBean(String list) { |
||||||
|
imageShowPane.populateBean(list); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 根据地图名称 保存信息 |
||||||
|
*/ |
||||||
|
public String updateBean() { |
||||||
|
// 地图类型等 加入Helper
|
||||||
|
return imageShowPane.updateBean(); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected String title4PopupWindow() { |
||||||
|
return Inter.getLocText(new String[]{"Datasource-User_Defined", "Chart-Map"}); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 更新界面 |
||||||
|
* @param attr 地图属性 |
||||||
|
*/ |
||||||
|
public void populateMapAttr(MapSvgAttr attr) { |
||||||
|
imageShowPane.populateMapSvgAttr(attr); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 更新MapSvgAttr |
||||||
|
* @return 返回属性 |
||||||
|
*/ |
||||||
|
public MapSvgAttr updateCurrentAttr() { |
||||||
|
return imageShowPane.updateWithOutSave(); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,250 @@ |
|||||||
|
package com.fr.design.chart.series.PlotSeries; |
||||||
|
|
||||||
|
import java.awt.BorderLayout; |
||||||
|
import java.awt.Component; |
||||||
|
import java.awt.Dimension; |
||||||
|
import java.awt.FlowLayout; |
||||||
|
import java.awt.event.ItemEvent; |
||||||
|
import java.awt.event.ItemListener; |
||||||
|
import java.util.ArrayList; |
||||||
|
import java.util.Iterator; |
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
import javax.swing.AbstractCellEditor; |
||||||
|
import javax.swing.JPanel; |
||||||
|
import javax.swing.JTable; |
||||||
|
import javax.swing.SwingConstants; |
||||||
|
import javax.swing.table.DefaultTableCellRenderer; |
||||||
|
import javax.swing.table.TableCellEditor; |
||||||
|
|
||||||
|
import com.fr.chart.base.MapSvgAttr; |
||||||
|
import com.fr.chart.base.MapSvgXMLHelper; |
||||||
|
import com.fr.base.Utils; |
||||||
|
import com.fr.design.data.DesignTableDataManager; |
||||||
|
import com.fr.data.TableDataSource; |
||||||
|
import com.fr.data.core.DataCoreUtils; |
||||||
|
import com.fr.design.data.tabledata.wrapper.TableDataWrapper; |
||||||
|
import com.fr.design.beans.BasicBeanPane; |
||||||
|
import com.fr.design.gui.icombobox.FilterComboBox; |
||||||
|
import com.fr.design.gui.ilable.UILabel; |
||||||
|
import com.fr.design.gui.itableeditorpane.UIArrayTableModel; |
||||||
|
import com.fr.design.gui.itableeditorpane.UITableEditorPane; |
||||||
|
import com.fr.design.mainframe.chart.gui.data.DatabaseTableDataPane; |
||||||
|
import com.fr.design.editor.ValueEditorPane; |
||||||
|
import com.fr.design.editor.ValueEditorPaneFactory; |
||||||
|
import com.fr.design.gui.xcombox.ComboBoxUseEditor; |
||||||
|
import com.fr.design.editor.editor.Editor; |
||||||
|
import com.fr.design.editor.editor.TextEditor; |
||||||
|
import com.fr.general.Inter; |
||||||
|
import com.fr.third.org.apache.poi.hssf.record.formula.functions.T; |
||||||
|
|
||||||
|
/** |
||||||
|
* 地图, 定义区域名. |
||||||
|
* |
||||||
|
* @author kunsnat E-mail:kunsnat@gmail.com |
||||||
|
* @version 创建时间:2012-10-19 下午03:19:53 |
||||||
|
*/ |
||||||
|
public class MapDefiAreaNamePane extends BasicBeanPane<String> implements AbstrctMapAttrEditPane{ |
||||||
|
|
||||||
|
private DatabaseTableDataPane tableDataBox; |
||||||
|
private FilterComboBox columnBox; |
||||||
|
|
||||||
|
// 双列: 左侧Label, 数据列表(全部都是UIComboBox, 支持自定义).
|
||||||
|
private UITableEditorPane tableEditorPane; |
||||||
|
private UIArrayTableModel tableEditorModel; |
||||||
|
|
||||||
|
private String[] initNames = new String[]{}; |
||||||
|
|
||||||
|
private String editName = ""; |
||||||
|
private boolean isNeedDataSource = true; |
||||||
|
private MapSvgAttr currentSvg; |
||||||
|
|
||||||
|
public MapDefiAreaNamePane(boolean isNeedDataSource){ |
||||||
|
this.isNeedDataSource = isNeedDataSource; |
||||||
|
initCom(); |
||||||
|
} |
||||||
|
|
||||||
|
public MapDefiAreaNamePane() { |
||||||
|
initCom(); |
||||||
|
} |
||||||
|
|
||||||
|
private void initCom() { |
||||||
|
this.setLayout(new BorderLayout(0, 0)); |
||||||
|
|
||||||
|
JPanel northPane = new JPanel(); |
||||||
|
if(this.isNeedDataSource){ |
||||||
|
this.add(northPane, BorderLayout.NORTH); |
||||||
|
} |
||||||
|
|
||||||
|
northPane.setLayout(new FlowLayout(FlowLayout.LEFT)); |
||||||
|
|
||||||
|
UILabel lable = new UILabel(Inter.getLocText("Chart-DS_TableData") + ":", SwingConstants.RIGHT); |
||||||
|
|
||||||
|
// 数据集, 字段, 数据列表, 使用该数据进行自动命名
|
||||||
|
tableDataBox = new DatabaseTableDataPane(lable) { |
||||||
|
protected void userEvent() { |
||||||
|
refreshAreaNameBox(); |
||||||
|
} |
||||||
|
}; |
||||||
|
|
||||||
|
tableDataBox.setPreferredSize(new Dimension(200, 20)); |
||||||
|
northPane.add(tableDataBox); |
||||||
|
|
||||||
|
columnBox = new FilterComboBox<T>(); |
||||||
|
columnBox.setPreferredSize(new Dimension(40, 20)); |
||||||
|
columnBox.addItemListener(columnChange); |
||||||
|
|
||||||
|
northPane.add(new UILabel(Inter.getLocText("FR-Chart-Map_Field")+":")); |
||||||
|
northPane.add(columnBox); |
||||||
|
|
||||||
|
tableEditorModel = new UIArrayTableModel(new String[]{Inter.getLocText("FR-Chart-Map_Use_Field"), Inter.getLocText("FR-Chart-Area_Name")}, new int[]{}) { |
||||||
|
public boolean isCellEditable(int row, int col) { |
||||||
|
return col != 0; |
||||||
|
} |
||||||
|
}; |
||||||
|
tableEditorModel.setDefaultEditor(Object.class, new DefaultComboBoxEditor()); |
||||||
|
tableEditorModel.setDefaultRenderer(Object.class, new DefaultComboBoxRenderer()); |
||||||
|
tableEditorPane = new UITableEditorPane<Object[]>(tableEditorModel); |
||||||
|
this.add(tableEditorPane); |
||||||
|
} |
||||||
|
|
||||||
|
ItemListener columnChange = new ItemListener() { |
||||||
|
public void itemStateChanged(ItemEvent e) { |
||||||
|
if (columnBox.getSelectedItem() != null) { |
||||||
|
String columnName = Utils.objectToString(columnBox.getSelectedItem()); |
||||||
|
|
||||||
|
TableDataWrapper tableDataWrappe = tableDataBox.getTableDataWrapper(); |
||||||
|
TableDataSource source = DesignTableDataManager.getEditingTableDataSource(); |
||||||
|
if (tableDataWrappe == null || source == null) { |
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
initNames = DataCoreUtils.getColValuesInData(source, tableDataWrappe.getTableDataName(), columnName); |
||||||
|
|
||||||
|
if (tableEditorModel != null) { |
||||||
|
tableEditorModel.stopCellEditing();// 只是用来刷新列表的combox
|
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
}; |
||||||
|
|
||||||
|
private void refreshAreaNameBox() {// 刷新区域名称列表
|
||||||
|
TableDataWrapper tableDataWrappe = tableDataBox.getTableDataWrapper(); |
||||||
|
if (tableDataWrappe == null) { |
||||||
|
return; |
||||||
|
} |
||||||
|
List<String> columnNameList = tableDataWrappe.calculateColumnNameList(); |
||||||
|
|
||||||
|
columnBox.setItemList(columnNameList); |
||||||
|
} |
||||||
|
|
||||||
|
// 对应地图的名称
|
||||||
|
public void populateBean(String mapName) { |
||||||
|
if (MapSvgXMLHelper.getInstance().containsMapName(mapName)) { |
||||||
|
MapSvgAttr editingMapAttr = MapSvgXMLHelper.getInstance().getMapAttr(mapName); |
||||||
|
this.editName = mapName; |
||||||
|
this.populateMapAttr(editingMapAttr); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public String updateBean() { |
||||||
|
// 固定存储 下 区域名 对应值 列表 MapHelper
|
||||||
|
updateMapAttr(); |
||||||
|
MapSvgXMLHelper.getInstance().removeMapAttr(currentSvg.getName()); |
||||||
|
MapSvgXMLHelper.getInstance().pushMapAttr(currentSvg.getName(),currentSvg); |
||||||
|
return ""; |
||||||
|
} |
||||||
|
|
||||||
|
private void updateMapAttr(){ |
||||||
|
if(currentSvg != null){ |
||||||
|
tableEditorModel.stopCellEditing(); |
||||||
|
List list = tableEditorPane.update(); |
||||||
|
for(int i = 0, size = list.size(); i < size; i++) { |
||||||
|
Object[] tmp = (Object[]) list.get(i); |
||||||
|
String name = Utils.objectToString(tmp[0]); |
||||||
|
String nameTo = Utils.objectToString(tmp[1]); |
||||||
|
currentSvg.setNameTo(name, nameTo); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected String title4PopupWindow() { |
||||||
|
return Inter.getLocText(new String[]{"Define", "Area_Name"}); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 更新界面 |
||||||
|
* @param editingMapAttr 地图属性 |
||||||
|
*/ |
||||||
|
public void populateMapAttr(MapSvgAttr editingMapAttr) { |
||||||
|
List popuValues = new ArrayList(); |
||||||
|
if(editingMapAttr == null) { |
||||||
|
currentSvg = null; |
||||||
|
tableEditorPane.populate(popuValues.toArray()); |
||||||
|
return; |
||||||
|
} |
||||||
|
currentSvg =editingMapAttr; |
||||||
|
List namesList = new ArrayList(); |
||||||
|
Iterator shapeNames = editingMapAttr.shapeValuesIterator(); |
||||||
|
while (shapeNames.hasNext()) { |
||||||
|
namesList.add(shapeNames.next());// 先得到所有的处理名字, 然后再处理对应关系
|
||||||
|
} |
||||||
|
for (int i = 0; i < namesList.size(); i++) { |
||||||
|
Object name = namesList.get(i); |
||||||
|
Object value = editingMapAttr.getNameToValue(Utils.objectToString(name)); |
||||||
|
popuValues.add(new Object[]{name, value}); |
||||||
|
} |
||||||
|
tableEditorPane.populate(popuValues.toArray()); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 更新MapSvgAttr |
||||||
|
* @return 返回属性 |
||||||
|
*/ |
||||||
|
public MapSvgAttr updateCurrentAttr() { |
||||||
|
updateMapAttr(); |
||||||
|
return currentSvg; |
||||||
|
} |
||||||
|
|
||||||
|
private class DefaultComboBoxEditor extends AbstractCellEditor implements TableCellEditor { |
||||||
|
private ValueEditorPane cellEditor; |
||||||
|
|
||||||
|
public DefaultComboBoxEditor() { |
||||||
|
cellEditor = ValueEditorPaneFactory.createValueEditorPane(new Editor[]{new ComboBoxUseEditor(initNames)}); |
||||||
|
} |
||||||
|
|
||||||
|
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { |
||||||
|
if (column == 0) { |
||||||
|
cellEditor = ValueEditorPaneFactory.createValueEditorPane(new Editor[]{new TextEditor()}); |
||||||
|
} else { |
||||||
|
cellEditor = ValueEditorPaneFactory.createValueEditorPane(new Editor[]{new ComboBoxUseEditor(initNames)}); |
||||||
|
} |
||||||
|
cellEditor.populate(value == null ? "" : value); |
||||||
|
return cellEditor; |
||||||
|
} |
||||||
|
|
||||||
|
public Object getCellEditorValue() { |
||||||
|
return cellEditor.update(); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
private class DefaultComboBoxRenderer extends DefaultTableCellRenderer { |
||||||
|
private ValueEditorPane cellEditor; |
||||||
|
|
||||||
|
public DefaultComboBoxRenderer() { |
||||||
|
cellEditor = ValueEditorPaneFactory.createValueEditorPane(new Editor[]{new ComboBoxUseEditor(initNames)}); |
||||||
|
} |
||||||
|
|
||||||
|
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { |
||||||
|
if (column == 0) { |
||||||
|
cellEditor = ValueEditorPaneFactory.createValueEditorPane(new Editor[]{new TextEditor()}); |
||||||
|
} else { |
||||||
|
cellEditor = ValueEditorPaneFactory.createValueEditorPane(new Editor[]{new ComboBoxUseEditor(initNames)}); |
||||||
|
} |
||||||
|
cellEditor.populate(value == null ? "" : value); |
||||||
|
return cellEditor; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
File diff suppressed because one or more lines are too long
@ -0,0 +1,763 @@ |
|||||||
|
package com.fr.design.chart.series.PlotSeries; |
||||||
|
|
||||||
|
import java.awt.AlphaComposite; |
||||||
|
import java.awt.BasicStroke; |
||||||
|
import java.awt.BorderLayout; |
||||||
|
import java.awt.Color; |
||||||
|
import java.awt.Dimension; |
||||||
|
import java.awt.Graphics; |
||||||
|
import java.awt.Graphics2D; |
||||||
|
import java.awt.Image; |
||||||
|
import java.awt.Point; |
||||||
|
import java.awt.Rectangle; |
||||||
|
import java.awt.event.MouseAdapter; |
||||||
|
import java.awt.event.MouseEvent; |
||||||
|
import java.awt.event.MouseListener; |
||||||
|
import java.awt.event.MouseMotionListener; |
||||||
|
import java.awt.geom.GeneralPath; |
||||||
|
import java.util.*; |
||||||
|
|
||||||
|
import javax.swing.BoxLayout; |
||||||
|
import javax.swing.DefaultListModel; |
||||||
|
import javax.swing.JComponent; |
||||||
|
import javax.swing.JList; |
||||||
|
import javax.swing.JPanel; |
||||||
|
import javax.swing.SwingUtilities; |
||||||
|
|
||||||
|
import com.fr.base.*; |
||||||
|
import com.fr.chart.base.MapSvgAttr; |
||||||
|
import com.fr.chart.base.MapSvgXMLHelper; |
||||||
|
import com.fr.chart.chartglyph.MapShapeValue; |
||||||
|
import com.fr.design.beans.BasicBeanPane; |
||||||
|
import com.fr.design.event.ChangeEvent; |
||||||
|
import com.fr.design.event.ChangeListener; |
||||||
|
import com.fr.design.gui.icontainer.UIScrollPane; |
||||||
|
import com.fr.design.gui.ilable.BoldFontTextLabel; |
||||||
|
import com.fr.design.gui.ilable.UILabel; |
||||||
|
import com.fr.design.gui.itable.UISelectTable; |
||||||
|
import com.fr.design.gui.itable.UITableNoOptionUI; |
||||||
|
import com.fr.design.gui.itextfield.UITextField; |
||||||
|
import com.fr.design.dialog.DialogActionAdapter; |
||||||
|
import com.fr.design.dialog.UIDialog; |
||||||
|
import com.fr.general.ComparatorUtils; |
||||||
|
import com.fr.general.Inter; |
||||||
|
import com.fr.stable.CoreGraphHelper; |
||||||
|
import com.fr.stable.StringUtils; |
||||||
|
import com.fr.design.utils.gui.GUICoreUtils; |
||||||
|
|
||||||
|
/** |
||||||
|
* 地图 图片编辑界面 选中图片 编辑. 支持鼠标选中等事件 |
||||||
|
* |
||||||
|
* @author kunsnat E-mail:kunsnat@gmail.com |
||||||
|
* @version 创建时间:2012-10-15 下午04:17:28 |
||||||
|
*/ |
||||||
|
public class MapImageEditPane extends BasicBeanPane<String> { |
||||||
|
private static final long serialVersionUID = -5925535686784344616L; |
||||||
|
private static final double ARCSIZE = 7; |
||||||
|
private static final int LOCATIONOFFSET = 10; |
||||||
|
private static final int NAME_EDIT_PANE_WIDTH = 130; |
||||||
|
private static final int NAME_EDIT_PANE_HEIGHT = 225; |
||||||
|
|
||||||
|
private ImageEditPane imageEditPane; |
||||||
|
private UISelectTable recordTable; |
||||||
|
private int editType = 0;// 只标记mark或者标记出路径
|
||||||
|
private List<String> fromDataList = new ArrayList<String>();// 编辑时从数据集中取出的使用字段.
|
||||||
|
|
||||||
|
private HashMap<String, ArrayList<String>> resultAreaShape = new HashMap<String, ArrayList<String>>();// 名字 对应图形 // 已编辑区全都用指定颜色
|
||||||
|
private String currentNodeName ; //当前选中的节点的名字
|
||||||
|
private String typeName = ""; |
||||||
|
private String mapName = ""; |
||||||
|
|
||||||
|
private String mouseSelectListName = ""; |
||||||
|
private String editMapName = ""; |
||||||
|
|
||||||
|
public MapImageEditPane() { |
||||||
|
initCom(); |
||||||
|
} |
||||||
|
|
||||||
|
private void initCom() { |
||||||
|
this.setLayout(new BorderLayout(0, 0)); |
||||||
|
|
||||||
|
imageEditPane = new ImageEditPane(); |
||||||
|
this.add(imageEditPane, BorderLayout.CENTER); |
||||||
|
|
||||||
|
recordTable = new UISelectTable(1){ |
||||||
|
public int columnAtPoint(Point point) { |
||||||
|
//只有一列
|
||||||
|
return 0; |
||||||
|
} |
||||||
|
}; |
||||||
|
recordTable.addSelectionChangeListener(new ChangeListener() { |
||||||
|
@Override |
||||||
|
public void fireChanged(ChangeEvent event) { |
||||||
|
mouseSelectListName = Utils.objectToString(event.getSource()); |
||||||
|
|
||||||
|
imageEditPane.repaint(); |
||||||
|
MapImageEditPane.this.repaint(); |
||||||
|
} |
||||||
|
}); |
||||||
|
|
||||||
|
recordTable.setUI(new UITableNoOptionUI()); |
||||||
|
|
||||||
|
recordTable.addChangeListener(new javax.swing.event.ChangeListener() { |
||||||
|
public void stateChanged(javax.swing.event.ChangeEvent e) { |
||||||
|
List<Object[]> names = recordTable.updateBean();// 得到所有的List
|
||||||
|
|
||||||
|
List<String> test = new ArrayList<String>(); |
||||||
|
for (int i = 0; i < names.size(); i++) { |
||||||
|
test.add(Utils.objectToString(recordTable.getValueAt(i, 0))); |
||||||
|
} |
||||||
|
|
||||||
|
Iterator<String> keys = resultAreaShape.keySet().iterator(); |
||||||
|
while (keys.hasNext()) { |
||||||
|
String key = keys.next(); |
||||||
|
if (!test.contains(key)) { |
||||||
|
keys.remove(); |
||||||
|
} |
||||||
|
} |
||||||
|
recordTable.revalidate(); |
||||||
|
repaint(); |
||||||
|
} |
||||||
|
}); |
||||||
|
|
||||||
|
UIScrollPane pane = new UIScrollPane(recordTable); |
||||||
|
pane.setPreferredSize(new Dimension(150, 320)); |
||||||
|
pane.setBorder(GUICoreUtils.createTitledBorder(Inter.getLocText(new String[]{"Filed", "WF-Name"}))); |
||||||
|
|
||||||
|
this.add(pane, BorderLayout.EAST); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 设置编辑的类型: 区域 或者 点 |
||||||
|
*/ |
||||||
|
public void setEditType(int editType) { |
||||||
|
this.editType = editType; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 返回编辑的类型: 区域 或者 点 |
||||||
|
*/ |
||||||
|
public int getEditType() { |
||||||
|
return editType; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 设置正在编辑的svg文件 |
||||||
|
*/ |
||||||
|
public void setSvgMap(String filePath){ |
||||||
|
resultAreaShape.clear(); |
||||||
|
mouseSelectListName = StringUtils.EMPTY; |
||||||
|
recordTable.populateBean(new ArrayList<Object[]>()); |
||||||
|
recordTable.revalidate(); |
||||||
|
|
||||||
|
imageEditPane.setSvgMap(filePath); |
||||||
|
|
||||||
|
repaint(); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 清空图片内容 |
||||||
|
*/ |
||||||
|
public void clearSvgMap(){ |
||||||
|
resultAreaShape.clear(); |
||||||
|
mouseSelectListName = StringUtils.EMPTY; |
||||||
|
recordTable.populateBean(new ArrayList<Object[]>()); |
||||||
|
recordTable.revalidate(); |
||||||
|
|
||||||
|
imageEditPane.clearSvgMap(); |
||||||
|
|
||||||
|
repaint(); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 设置正在编辑的svg文件 |
||||||
|
* @param attr 已经读取过的文件 |
||||||
|
*/ |
||||||
|
public void setSvgMap(MapSvgAttr attr){ |
||||||
|
resultAreaShape.clear(); |
||||||
|
mouseSelectListName = StringUtils.EMPTY; |
||||||
|
recordTable.populateBean(new ArrayList<Object[]>()); |
||||||
|
recordTable.revalidate(); |
||||||
|
|
||||||
|
imageEditPane.setSvgMap(attr); |
||||||
|
|
||||||
|
repaint(); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 刷新数据列表中的数据 |
||||||
|
* @param list 列表 |
||||||
|
*/ |
||||||
|
public void refreshFromDataList(List list) { |
||||||
|
fromDataList.clear(); |
||||||
|
|
||||||
|
for (Object aList : list) { |
||||||
|
fromDataList.add(Utils.objectToString(aList)); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 当前正在编辑的条目的类别(国家,省市)名和地图名 |
||||||
|
* @param typeName 类别名 |
||||||
|
* @param mapName 地图名 |
||||||
|
*/ |
||||||
|
public void setTypeNameAndMapName(String typeName, String mapName){ |
||||||
|
this.typeName = typeName; |
||||||
|
this.mapName = mapName; |
||||||
|
} |
||||||
|
|
||||||
|
private class ImageEditPane extends JComponent implements MouseListener, MouseMotionListener { |
||||||
|
|
||||||
|
private MapSvgAttr currentSvgMap;//当前选中的svg地图
|
||||||
|
private GeneralPath selectedShape; // 当前选中的Shape
|
||||||
|
private Image image = BaseUtils.readImage("");// 所选择的图片
|
||||||
|
|
||||||
|
//平移的位置
|
||||||
|
private double moveLeft = 0; |
||||||
|
private double moveTop = 0; |
||||||
|
|
||||||
|
//鼠标落点的位置
|
||||||
|
private double mouseStartX; |
||||||
|
private double mouseStartY; |
||||||
|
|
||||||
|
private boolean dragged = false; |
||||||
|
|
||||||
|
public ImageEditPane() { |
||||||
|
this.addMouseListener(this); |
||||||
|
this.addMouseMotionListener(this); |
||||||
|
} |
||||||
|
|
||||||
|
public void paintComponent(Graphics g) {// 选中图片之后, 记录选中的区域, 点中的 标记点
|
||||||
|
Rectangle bounds = this.getBounds(); |
||||||
|
if (bounds == null || this.image == null) { |
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
dealReady4Paint(g, bounds); |
||||||
|
|
||||||
|
int imageWidth = this.image.getWidth(new JPanel()); |
||||||
|
int imageHeight = this.image.getHeight(new JPanel()); |
||||||
|
|
||||||
|
Graphics2D g2d = (Graphics2D) g; |
||||||
|
if (this.image != null) {// 太小会放大, 太大, 则默认拖动
|
||||||
|
g2d.drawImage(this.image, (int) moveLeft, (int) moveTop, imageWidth, imageHeight, new JPanel()); // 只是移动起始位置
|
||||||
|
} |
||||||
|
|
||||||
|
g2d.translate(moveLeft, moveTop); |
||||||
|
g2d.setStroke(new BasicStroke(1)); |
||||||
|
if (resultAreaShape != null && !resultAreaShape.isEmpty()) { |
||||||
|
for (String key : resultAreaShape.keySet()) { |
||||||
|
|
||||||
|
GeneralPath selectShape = getSelectedNodePath(key); |
||||||
|
g2d.setColor(Color.green); |
||||||
|
g2d.draw(selectShape); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
g2d.setColor(Color.blue); |
||||||
|
if (StringUtils.isNotEmpty(mouseSelectListName) && resultAreaShape.containsKey(mouseSelectListName)) {// 当前悬浮选中的 list, 自己画的悬浮提示, 背景 边框, 文字
|
||||||
|
GeneralPath highSelect = getSelectedNodePath(mouseSelectListName); |
||||||
|
if (highSelect != null) { |
||||||
|
g2d.fill(highSelect); |
||||||
|
} |
||||||
|
} else if (selectedShape != null) { |
||||||
|
g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.5f)); |
||||||
|
g2d.fill(selectedShape); |
||||||
|
} |
||||||
|
|
||||||
|
g2d.translate(-moveLeft, -moveTop); |
||||||
|
} |
||||||
|
|
||||||
|
private void dealReady4Paint(Graphics g, Rectangle bounds) { |
||||||
|
super.paintComponent(g); |
||||||
|
|
||||||
|
int x = (int) bounds.getX(); |
||||||
|
int y = (int) bounds.getY(); |
||||||
|
int width = (int) bounds.getWidth(); |
||||||
|
int height = (int) bounds.getHeight(); |
||||||
|
g.clipRect(x, y, width, height); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
//初始化下图片的状态
|
||||||
|
private void initImage() { |
||||||
|
this.image = currentSvgMap.getMapImage(); |
||||||
|
CoreGraphHelper.waitForImage(this.image); |
||||||
|
|
||||||
|
this.selectedShape = null; |
||||||
|
this.moveLeft = 0; |
||||||
|
this.moveTop = 0; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 设置当前正在编辑的文件 |
||||||
|
* @param filePath 文件路径 |
||||||
|
*/ |
||||||
|
public void setSvgMap(String filePath){ |
||||||
|
currentSvgMap = new MapSvgAttr(filePath); |
||||||
|
currentSvgMap.setMapTypeAndName(typeName, mapName); |
||||||
|
initImage(); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 设置当前正在编辑的文件 |
||||||
|
* @param attr 读取过的文件 |
||||||
|
*/ |
||||||
|
public void setSvgMap(MapSvgAttr attr){ |
||||||
|
currentSvgMap = attr; |
||||||
|
|
||||||
|
initImage(); |
||||||
|
} |
||||||
|
|
||||||
|
public void clearSvgMap(){ |
||||||
|
currentSvgMap = null; |
||||||
|
this.image = BaseUtils.readImage("");; |
||||||
|
this.selectedShape = null; |
||||||
|
this.moveLeft = 0; |
||||||
|
this.moveTop = 0; |
||||||
|
this.dragged = false; |
||||||
|
this.mouseStartX = 0; |
||||||
|
this.mouseStartY = 0; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
public Image getImage() { |
||||||
|
return this.image; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void mouseClicked(MouseEvent e) { |
||||||
|
drawSelectShape(e); |
||||||
|
if (e.getClickCount() == 2) {// 2次编辑, 不然很容易错乱 和 update 错误
|
||||||
|
showEditNamePane(e); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void mouseEntered(MouseEvent e) { |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void mouseExited(MouseEvent e) { |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void mousePressed(MouseEvent e) { |
||||||
|
this.mouseStartX = e.getPoint().getX(); |
||||||
|
this.mouseStartY = e.getPoint().getY(); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void mouseReleased(MouseEvent e) { |
||||||
|
drawWhenDragEnd(e); |
||||||
|
} |
||||||
|
|
||||||
|
public void mouseDragged(MouseEvent e) { |
||||||
|
this.dragged = true; |
||||||
|
} |
||||||
|
|
||||||
|
public void mouseMoved(MouseEvent e) { |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
private void drawWhenDragEnd(MouseEvent e) { |
||||||
|
if (this.image == null || this.getBounds() == null) { |
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
if (dragged) { |
||||||
|
double endX = e.getPoint().getX(); |
||||||
|
double endY = e.getPoint().getY(); |
||||||
|
|
||||||
|
int imageWidth = image.getWidth(new JPanel()); |
||||||
|
int imageHeight = image.getHeight(new JPanel()); |
||||||
|
|
||||||
|
int paneWidth = (int) this.getBounds().getWidth(); |
||||||
|
int paneHeight = (int) this.getBounds().getHeight(); |
||||||
|
|
||||||
|
if (imageWidth > paneWidth) { |
||||||
|
double offX = endX - this.mouseStartX; |
||||||
|
this.moveLeft += offX; |
||||||
|
|
||||||
|
this.moveLeft = Math.max(this.moveLeft, paneWidth - imageWidth); |
||||||
|
this.moveLeft = Math.min(0, this.moveLeft); |
||||||
|
} else { |
||||||
|
this.moveLeft = 0; |
||||||
|
} |
||||||
|
|
||||||
|
if (imageHeight > paneHeight) { |
||||||
|
double offY = endY - this.mouseStartY; |
||||||
|
this.moveTop += offY; |
||||||
|
|
||||||
|
this.moveTop = Math.max(this.moveTop, paneHeight - imageHeight); |
||||||
|
this.moveTop = Math.min(0, this.moveTop); |
||||||
|
} else { |
||||||
|
this.moveTop = 0; |
||||||
|
} |
||||||
|
this.repaint(); |
||||||
|
} |
||||||
|
|
||||||
|
this.dragged = false; |
||||||
|
} |
||||||
|
|
||||||
|
//画鼠标点击的区域
|
||||||
|
private void drawSelectShape(MouseEvent e) { |
||||||
|
selectedShape = null; |
||||||
|
mouseSelectListName = StringUtils.EMPTY; |
||||||
|
if (this.image == null) { |
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
Point ePoint = e.getPoint(); |
||||||
|
Point select = new Point((int) (ePoint.getX() - moveLeft), (int) (ePoint.getY() - moveTop));// 支持ctrl 选定时的多选.. 只是记录多个鼠标位置 然后shape合并
|
||||||
|
boolean gotSelectedShape = false; |
||||||
|
for (String key : resultAreaShape.keySet()) { |
||||||
|
GeneralPath mapSelect = getSelectedNodePath(key); |
||||||
|
if (mapSelect.contains(select)) { |
||||||
|
selectedShape = mapSelect; |
||||||
|
currentNodeName = currentSvgMap.getSelectedPathName(select); |
||||||
|
gotSelectedShape = true; |
||||||
|
break; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
if (!gotSelectedShape) {// 根据坐标重新在图片中选取Shape
|
||||||
|
|
||||||
|
if (getEditType() == MapShapeValue.AREA) { |
||||||
|
selectedShape = currentSvgMap.getSelectPath(select); |
||||||
|
currentNodeName = currentSvgMap.getSelectedPathName(select); |
||||||
|
} else { |
||||||
|
//标记点类型的要不要待定
|
||||||
|
|
||||||
|
} |
||||||
|
} |
||||||
|
this.repaint(); |
||||||
|
} |
||||||
|
|
||||||
|
private void showEditNamePane(MouseEvent e) { |
||||||
|
if (this.image == null || selectedShape == null) { |
||||||
|
return; |
||||||
|
} |
||||||
|
final EditNamePane namePane = new EditNamePane(); |
||||||
|
Point ePoint = e.getPoint(); |
||||||
|
final Point select = new Point((int) (ePoint.getX() - moveLeft), (int) (ePoint.getY() - moveTop)); |
||||||
|
namePane.setEditViewRow(getEditViewRow(select)); |
||||||
|
String isSelectName = StringUtils.EMPTY; |
||||||
|
for (String name : resultAreaShape.keySet()) { |
||||||
|
GeneralPath shape = getSelectedNodePath(name); |
||||||
|
if (shape.contains(select)) { |
||||||
|
isSelectName = name; |
||||||
|
break; |
||||||
|
} |
||||||
|
} |
||||||
|
namePane.populateBean(isSelectName); |
||||||
|
namePane.resetPaneWithNewNameList(fromDataList); |
||||||
|
UIDialog bg = namePane.showUnsizedWindow(SwingUtilities.getWindowAncestor(ImageEditPane.this), new DialogActionAdapter() { |
||||||
|
public void doOk() { |
||||||
|
namePane.changeList(); |
||||||
|
String endName = namePane.updateBean(); |
||||||
|
if (resultAreaShape.containsKey(endName)) { |
||||||
|
if(ComparatorUtils.equals(endName,namePane.startName)) { |
||||||
|
return; |
||||||
|
} |
||||||
|
ArrayList<String> pathID = resultAreaShape.get(endName); |
||||||
|
if(!pathID.contains(currentNodeName)){ |
||||||
|
pathID.add(currentNodeName); |
||||||
|
} |
||||||
|
}else{ |
||||||
|
ArrayList<String> paths = new ArrayList<String>(); |
||||||
|
resultAreaShape.put(endName,paths); |
||||||
|
paths.add(currentNodeName); |
||||||
|
ArrayList<String> exists = resultAreaShape.get(namePane.startName); |
||||||
|
if(exists!= null){ |
||||||
|
for(String id:exists){ |
||||||
|
paths.add(id); |
||||||
|
} |
||||||
|
resultAreaShape.remove(namePane.startName); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
}); |
||||||
|
bg.setSize(NAME_EDIT_PANE_WIDTH, NAME_EDIT_PANE_HEIGHT); |
||||||
|
bg.setLocation((int) (e.getLocationOnScreen().getX()) + LOCATIONOFFSET, (int) e.getLocationOnScreen().getY()); |
||||||
|
bg.setTitle(Inter.getLocText(new String[]{"Edit", "Filed", "WF-Name"})); |
||||||
|
bg.setVisible(true); |
||||||
|
} |
||||||
|
|
||||||
|
// viewList 根据内容名称 得到是哪一行.
|
||||||
|
public int getEditViewRow(Point point) { |
||||||
|
int rowIndex = recordTable.getRowCount();// 最差 没有找到应该也是返回 row + 1
|
||||||
|
|
||||||
|
// 根据编辑的位置, 是否有shape对应, 有则找出, 没有则是新的行
|
||||||
|
String isSelectName = StringUtils.EMPTY; |
||||||
|
for (String name : resultAreaShape.keySet()) { |
||||||
|
GeneralPath shape = getSelectedNodePath(name); |
||||||
|
if (shape.contains(point)) { |
||||||
|
isSelectName = name; |
||||||
|
break; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
if (resultAreaShape.containsKey(isSelectName)) { |
||||||
|
for (int i = 0; i < recordTable.getRowCount(); i++) { |
||||||
|
String tmp = (String) recordTable.getValueAt(i, 0); |
||||||
|
if (ComparatorUtils.equals(isSelectName, tmp)) { |
||||||
|
rowIndex = i; |
||||||
|
break; |
||||||
|
} |
||||||
|
} |
||||||
|
}// 没有则添加一行
|
||||||
|
|
||||||
|
return rowIndex; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
// 图片界面 悬浮点击弹出的名称列表
|
||||||
|
private class EditNamePane extends BasicBeanPane<String> {// 点击编辑名称
|
||||||
|
|
||||||
|
private UITextField nameText; // 文本框
|
||||||
|
private JList dataList; |
||||||
|
private String startName; |
||||||
|
|
||||||
|
private JList hasNamedList; |
||||||
|
|
||||||
|
private int editViewRow = -1;// 所对应的view的index行 , 确定当前正在编辑的viewList的行, 然后改变值
|
||||||
|
|
||||||
|
private UILabel namedLabel = new BoldFontTextLabel(Inter.getLocText("FR-Chart-Pre_Defined") + "------"); |
||||||
|
private JPanel listPane = new JPanel(); |
||||||
|
|
||||||
|
public EditNamePane() { |
||||||
|
initCom(); |
||||||
|
} |
||||||
|
|
||||||
|
public void setEditViewRow(int index) { |
||||||
|
this.editViewRow = index; |
||||||
|
} |
||||||
|
|
||||||
|
private void initCom() { |
||||||
|
this.setLayout(new BorderLayout(0, 0)); |
||||||
|
|
||||||
|
nameText = new UITextField(); |
||||||
|
nameText.setPreferredSize(new Dimension(100, 20)); |
||||||
|
|
||||||
|
this.add(nameText, BorderLayout.NORTH); |
||||||
|
|
||||||
|
listPane.setLayout(new BoxLayout(listPane, BoxLayout.Y_AXIS)); |
||||||
|
this.add(listPane, BorderLayout.CENTER); |
||||||
|
|
||||||
|
listPane.add(new UIScrollPane(dataList = new JList(new DefaultListModel()))); |
||||||
|
dataList.addMouseListener(new MouseAdapter() { |
||||||
|
public void mouseClicked(MouseEvent e) { |
||||||
|
if (e.getClickCount() >= 2 && dataList.getSelectedValue() != null) { |
||||||
|
String value = Utils.objectToString(dataList.getSelectedValue()); |
||||||
|
nameText.setText(value);// 直接对文本值改变, 让文本去触发事件
|
||||||
|
} |
||||||
|
} |
||||||
|
}); |
||||||
|
|
||||||
|
listPane.add(namedLabel); |
||||||
|
listPane.add(new UIScrollPane(hasNamedList = new JList(new DefaultListModel()))); |
||||||
|
|
||||||
|
hasNamedList.addMouseListener(new MouseAdapter() { |
||||||
|
public void mouseClicked(MouseEvent e) { |
||||||
|
if (e.getClickCount() >= 2 && hasNamedList.getSelectedValue() != null) { |
||||||
|
nameText.setText(Utils.objectToString(hasNamedList.getSelectedValue())); |
||||||
|
} |
||||||
|
} |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
private void relayoutList() { |
||||||
|
listPane.removeAll(); |
||||||
|
|
||||||
|
listPane.setLayout(new BoxLayout(listPane, BoxLayout.Y_AXIS)); |
||||||
|
listPane.add(new UIScrollPane(dataList)); |
||||||
|
|
||||||
|
if (hasNamedList.getModel().getSize() > 0) { |
||||||
|
listPane.add(namedLabel); |
||||||
|
listPane.add(new UIScrollPane(hasNamedList)); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
//列表改变,选中的时候添加shape信息
|
||||||
|
private void changeList() { |
||||||
|
String textValue = nameText.getText(); |
||||||
|
if (editViewRow >= recordTable.getRowCount()) {// 添加一行 确定的行数 即时大于viewCount
|
||||||
|
recordTable.addLine(new String[]{textValue}); |
||||||
|
} else if (editViewRow > -1) { |
||||||
|
recordTable.setValueAt(textValue, editViewRow, 0); |
||||||
|
} |
||||||
|
recordTable.revalidate(); |
||||||
|
recordTable.repaint(); |
||||||
|
|
||||||
|
resetPaneWithNewNameList(fromDataList); |
||||||
|
} |
||||||
|
|
||||||
|
public void resetPaneWithNewNameList(List<String> list) {// 界面不变, 只是刷新重置list
|
||||||
|
DefaultListModel model = (DefaultListModel) dataList.getModel(); |
||||||
|
model.removeAllElements(); |
||||||
|
|
||||||
|
DefaultListModel hasNameModel = (DefaultListModel) hasNamedList.getModel(); |
||||||
|
hasNameModel.removeAllElements(); |
||||||
|
|
||||||
|
for (int i = 0; list != null && i < list.size(); i++) { |
||||||
|
String value = list.get(i); |
||||||
|
if (!resultAreaShape.containsKey(value)) { |
||||||
|
model.addElement(value); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
for (String name : resultAreaShape.keySet()) { |
||||||
|
if (!hasNameModel.contains(name)) { |
||||||
|
hasNameModel.addElement(name); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
relayoutList(); |
||||||
|
} |
||||||
|
|
||||||
|
public void populateBean(String list) { |
||||||
|
nameText.setText(list); |
||||||
|
startName = list; |
||||||
|
nameText.setCaretPosition(list == null ? 0 : list.length()); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public String updateBean() { |
||||||
|
return nameText.getText(); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected String title4PopupWindow() { |
||||||
|
return Inter.getLocText(new String[]{"Edit", "Image"}); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected String title4PopupWindow() { |
||||||
|
return Inter.getLocText(new String[]{"Edit", "Image"}); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 更新地图 名称列表以及正在编辑的图片 |
||||||
|
*/ |
||||||
|
public void populateBean(String ob) {// 确定要编辑的地图名称
|
||||||
|
this.editMapName = ob;// 当前编辑的地图名称
|
||||||
|
MapSvgXMLHelper mapHelper = MapSvgXMLHelper.getInstance(); |
||||||
|
if (mapHelper.containsMapName(editMapName)) { |
||||||
|
MapSvgAttr svgAttr = mapHelper.getMapAttr(editMapName); |
||||||
|
populateMapSvgAttr(svgAttr); |
||||||
|
}else if(mapHelper.getNewMapAttr(editMapName) != null ){ |
||||||
|
clearSvgMap(); |
||||||
|
imageEditPane.currentSvgMap = mapHelper.getMapAttr(editMapName); |
||||||
|
}else { |
||||||
|
clearSvgMap(); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 保存编辑的地图 形状等信息. |
||||||
|
*/ |
||||||
|
public String updateBean() { |
||||||
|
if(imageEditPane.currentSvgMap !=null){ |
||||||
|
this.editMapName = imageEditPane.currentSvgMap.getName(); |
||||||
|
} |
||||||
|
// 将地图加入helper 固定存储 记录固定的hShape 原图片的坐标位置, 然后在根据现在现实的 实际坐标 展示
|
||||||
|
if (StringUtils.isNotEmpty(editMapName) && this.imageEditPane.getImage() != null) { |
||||||
|
MapSvgXMLHelper mapHelper = MapSvgXMLHelper.getInstance(); |
||||||
|
MapSvgAttr mapAttr = imageEditPane.currentSvgMap; |
||||||
|
if(mapHelper.getNewMapAttr(editMapName)!=null){ |
||||||
|
mapHelper.removeNewMapAttr(editMapName); |
||||||
|
mapHelper.pushMapAttr(editMapName,mapAttr); |
||||||
|
} |
||||||
|
if(mapHelper.containsMapName(editMapName)){ |
||||||
|
//处理下mapAttr存节点name属性
|
||||||
|
updateMapShapePath(mapAttr); |
||||||
|
mapHelper.addCustomSvgMap(editMapName, mapAttr); |
||||||
|
|
||||||
|
//设置以后要写回
|
||||||
|
mapAttr.writeBack(editMapName); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
return editMapName; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 更新界面 |
||||||
|
* @param svgAttr 地图属性 |
||||||
|
* */ |
||||||
|
public void populateMapSvgAttr(MapSvgAttr svgAttr){ |
||||||
|
if(svgAttr == null || svgAttr.getMapImage() == null){ |
||||||
|
clearSvgMap(); |
||||||
|
return; |
||||||
|
} |
||||||
|
setSvgMap(svgAttr); |
||||||
|
Iterator names = svgAttr.shapeValuesIterator(); |
||||||
|
while (names.hasNext()) { |
||||||
|
String name = Utils.objectToString(names.next()); |
||||||
|
ArrayList<String> pathIDs= svgAttr.getExistedShapePathID(name); |
||||||
|
if (name != null) { |
||||||
|
resultAreaShape.put(name,pathIDs); |
||||||
|
recordTable.addLine(new String[]{name}); |
||||||
|
} |
||||||
|
} |
||||||
|
recordTable.revalidate(); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 更新MapSvgAttr |
||||||
|
* @return 返回属性 |
||||||
|
* */ |
||||||
|
public MapSvgAttr updateWithOutSave(){ |
||||||
|
if(imageEditPane.currentSvgMap !=null){ |
||||||
|
this.editMapName = imageEditPane.currentSvgMap.getName(); |
||||||
|
} |
||||||
|
// 将地图加入helper 固定存储 记录固定的hShape 原图片的坐标位置, 然后在根据现在现实的 实际坐标 展示
|
||||||
|
if (StringUtils.isNotEmpty(editMapName) && this.imageEditPane.getImage() != null) { |
||||||
|
MapSvgXMLHelper mapHelper = MapSvgXMLHelper.getInstance(); |
||||||
|
MapSvgAttr mapAttr = imageEditPane.currentSvgMap; |
||||||
|
if(mapHelper.getNewMapAttr(editMapName)!=null){ |
||||||
|
mapHelper.removeNewMapAttr(editMapName); |
||||||
|
mapHelper.pushMapAttr(editMapName,mapAttr); |
||||||
|
} |
||||||
|
if(mapHelper.containsMapName(editMapName)){ |
||||||
|
//处理下mapAttr存节点name属性
|
||||||
|
updateMapShapePath(mapAttr); |
||||||
|
mapHelper.addCustomSvgMap(editMapName, mapAttr); |
||||||
|
} |
||||||
|
return mapAttr; |
||||||
|
} |
||||||
|
return null; |
||||||
|
} |
||||||
|
|
||||||
|
private void updateMapShapePath(MapSvgAttr mapSvgAttr){ |
||||||
|
mapSvgAttr.clearExistShape(); |
||||||
|
for(String key : resultAreaShape.keySet()){ |
||||||
|
ArrayList<String> nodeName = resultAreaShape.get(key); |
||||||
|
if(nodeName == null){ |
||||||
|
continue; |
||||||
|
} |
||||||
|
for(String node :nodeName){ |
||||||
|
mapSvgAttr.setNodeName(node, key); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
private GeneralPath getSelectedNodePath(String nodeName){ |
||||||
|
if(imageEditPane.currentSvgMap == null){ |
||||||
|
return new GeneralPath(); |
||||||
|
} |
||||||
|
MapSvgAttr attr = imageEditPane.currentSvgMap; |
||||||
|
ArrayList<String> pathsID = resultAreaShape.get(nodeName); |
||||||
|
GeneralPath unionPath =new GeneralPath(); |
||||||
|
//这边必须在新建的一个path上append,不然直接在存的path上append,不然后面删除组合了,也不能正常的选单个
|
||||||
|
for(String id :pathsID){ |
||||||
|
unionPath.append(attr.getPath4PathID(id),false); |
||||||
|
|
||||||
|
} |
||||||
|
return unionPath; |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,86 @@ |
|||||||
|
package com.fr.design.chart.series.PlotSeries; |
||||||
|
|
||||||
|
import java.awt.Point; |
||||||
|
import java.awt.Shape; |
||||||
|
import java.util.ArrayList; |
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
/** |
||||||
|
* 地图选中的shape, 封装选中的点, GeneralPath 做处理 |
||||||
|
* @author kunsnat E-mail:kunsnat@gmail.com |
||||||
|
* @version 创建时间:2012-11-12 下午05:00:34 |
||||||
|
*/ |
||||||
|
public class MapSelectShape { |
||||||
|
|
||||||
|
private List<Point> selectPoint = new ArrayList<Point>(); |
||||||
|
private List<Shape> selectShape = new ArrayList<Shape>(); |
||||||
|
|
||||||
|
private int selectType; |
||||||
|
|
||||||
|
public MapSelectShape(Shape[] shape, Point[] point, int selectType) { |
||||||
|
|
||||||
|
for(int i = 0; i < shape.length; i++) { |
||||||
|
this.selectShape.add(shape[i]); |
||||||
|
} |
||||||
|
for(int i = 0; i < point.length; i++) { |
||||||
|
this.selectPoint.add(point[i]); |
||||||
|
} |
||||||
|
this.selectType = selectType; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 判断多个区域中 是否包含Point |
||||||
|
*/ |
||||||
|
public boolean containsPoint(Point point) { |
||||||
|
boolean contains = false; |
||||||
|
for(int i = 0; selectShape != null && i < selectShape.size(); i++) { |
||||||
|
Shape shape = (Shape)selectShape.get(i); |
||||||
|
contains = shape.contains(point); |
||||||
|
if(contains) { |
||||||
|
break; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
return contains; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 添加对应的选中点和选中的区域 |
||||||
|
*/ |
||||||
|
public void addSelectValue(Point point, Shape shape) { |
||||||
|
if(!selectShape.contains(shape)) { |
||||||
|
this.selectShape.add(shape); |
||||||
|
} |
||||||
|
if(!this.selectPoint.contains(point)) { |
||||||
|
this.selectPoint.add(point); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 返回选中的点 数组 |
||||||
|
*/ |
||||||
|
public Point[] getSelectPoints() { |
||||||
|
return (Point[])this.selectPoint.toArray(new Point[selectPoint.size()]); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 返回选中的区域 数组 |
||||||
|
*/ |
||||||
|
public Shape[] getSelectShapes() { |
||||||
|
return (Shape[])this.selectShape.toArray(new Shape[selectShape.size()]); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 设置选中的类型: 区域 或者点 |
||||||
|
*/ |
||||||
|
public void setSelectType(int selectType) { |
||||||
|
this.selectType = selectType; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 返回选中的类型: 区域 或者点 |
||||||
|
*/ |
||||||
|
public int getSelectType() { |
||||||
|
return selectType; |
||||||
|
} |
||||||
|
} |
File diff suppressed because one or more lines are too long
@ -0,0 +1,173 @@ |
|||||||
|
package com.fr.design.chart.series.PlotStyle; |
||||||
|
|
||||||
|
import java.awt.Color; |
||||||
|
import java.awt.Dimension; |
||||||
|
import java.awt.event.MouseEvent; |
||||||
|
import java.awt.event.MouseListener; |
||||||
|
import java.util.ArrayList; |
||||||
|
|
||||||
|
import javax.swing.event.ChangeEvent; |
||||||
|
import javax.swing.event.ChangeListener; |
||||||
|
|
||||||
|
import com.fr.design.event.UIObserver; |
||||||
|
import com.fr.design.event.UIObserverListener; |
||||||
|
import com.fr.design.dialog.BasicPane; |
||||||
|
import com.fr.stable.ArrayUtils; |
||||||
|
|
||||||
|
/** |
||||||
|
* 图表选中demo的类. 用于 选中点击, 悬浮状态, 可以继承, 改变画的内容. |
||||||
|
* @author kunsnat E-mail:kunsnat@gmail.com |
||||||
|
* @version 创建时间:2011-10-27 下午03:50:28 |
||||||
|
*/ |
||||||
|
public class ChartSelectDemoPane extends BasicPane implements UIObserver, MouseListener { |
||||||
|
private static final long serialVersionUID = 7715973616632567352L; |
||||||
|
|
||||||
|
public boolean isPressing; |
||||||
|
|
||||||
|
// 所有统一参与的点击状态类. 相当于Group
|
||||||
|
protected ChartSelectDemoPane[] demoList = new ChartSelectDemoPane[0]; |
||||||
|
|
||||||
|
private boolean isRollOver; |
||||||
|
private ArrayList<ChangeListener> changeListeners = new ArrayList<ChangeListener>(); |
||||||
|
|
||||||
|
public void setDemoGroup(ChartSelectDemoPane[] demos) { |
||||||
|
this.demoList = demos; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected String title4PopupWindow() { |
||||||
|
return ""; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 鼠标点击 |
||||||
|
* @param e 事件 |
||||||
|
*/ |
||||||
|
public void mouseClicked(MouseEvent e) { |
||||||
|
// list中的所有的都弄成非选中状态.
|
||||||
|
if(this.isEnabled()){ |
||||||
|
for (int i = 0; i < ArrayUtils.getLength(demoList); i++) { |
||||||
|
demoList[i].isRollOver = false; |
||||||
|
demoList[i].isPressing = false; |
||||||
|
} |
||||||
|
|
||||||
|
this.isPressing = true; |
||||||
|
|
||||||
|
fireStateChange(); |
||||||
|
|
||||||
|
for (int i = 0; i < ArrayUtils.getLength(demoList); i++) { |
||||||
|
demoList[i].checkBackground(); |
||||||
|
demoList[i].repaint(); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 注册监听 |
||||||
|
* @param l 监听 |
||||||
|
*/ |
||||||
|
public void addChangeListener(ChangeListener l) { |
||||||
|
changeListeners.add(l); |
||||||
|
} |
||||||
|
|
||||||
|
private void fireStateChange() { |
||||||
|
for (int i = 0; i < changeListeners.size(); i++) { |
||||||
|
changeListeners.get(i).stateChanged(new ChangeEvent(this)); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 鼠标按压 |
||||||
|
* @param me 事件 |
||||||
|
*/ |
||||||
|
public void mousePressed(MouseEvent me) { |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 鼠标放开 |
||||||
|
* @param me 事件 |
||||||
|
*/ |
||||||
|
public void mouseReleased(MouseEvent me) { |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 鼠标进入 |
||||||
|
* @param me 事件 |
||||||
|
*/ |
||||||
|
public void mouseEntered(MouseEvent me) { |
||||||
|
if(this.isEnabled()){ |
||||||
|
for (int i = 0; i < ArrayUtils.getLength(demoList); i++) { |
||||||
|
demoList[i].isRollOver = false; |
||||||
|
} |
||||||
|
isRollOver = true; |
||||||
|
|
||||||
|
for (int i = 0; i < ArrayUtils.getLength(demoList); i++) { |
||||||
|
demoList[i].checkBackground(); |
||||||
|
demoList[i].repaint(); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 鼠标移出 |
||||||
|
* @param me 事件 |
||||||
|
*/ |
||||||
|
public void mouseExited(MouseEvent me) { |
||||||
|
// 限制在pane范围内!
|
||||||
|
if(this.isEnabled()){ |
||||||
|
int x = me.getX(); |
||||||
|
int y = me.getY(); |
||||||
|
|
||||||
|
Dimension d = this.getPreferredSize(); |
||||||
|
if (inDimension(d, x, y)) { |
||||||
|
isRollOver = true; |
||||||
|
} else { |
||||||
|
isRollOver = false; |
||||||
|
} |
||||||
|
|
||||||
|
for (int i = 0; i < ArrayUtils.getLength(demoList); i++) { |
||||||
|
demoList[i].checkBackground(); |
||||||
|
demoList[i].repaint(); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
private boolean inDimension(Dimension d, int x, int y) { |
||||||
|
return x < d.getWidth() && y < d.getHeight() && x > 0 && y > 0; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 给组件登记一个观察者监听事件 |
||||||
|
* |
||||||
|
* @param listener 观察者监听事件 |
||||||
|
*/ |
||||||
|
public void registerChangeListener(final UIObserverListener listener) { |
||||||
|
changeListeners.add(new ChangeListener() { |
||||||
|
public void stateChanged(ChangeEvent e) { |
||||||
|
listener.doChange(); |
||||||
|
} |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 组件是否需要响应添加的观察者事件 |
||||||
|
* |
||||||
|
* @return 如果需要响应观察者事件则返回true,否则返回false |
||||||
|
*/ |
||||||
|
public boolean shouldResponseChangeListener() { |
||||||
|
return true; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 修改背景颜色 |
||||||
|
*/ |
||||||
|
public void checkBackground() { |
||||||
|
if (!isRollOver && !isPressing) { |
||||||
|
this.setBackground(null); |
||||||
|
} else if(isRollOver && !isPressing){ |
||||||
|
this.setBackground(new Color(182, 217, 253)); |
||||||
|
} else { |
||||||
|
this.setBackground(new Color(164, 192, 220)); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,27 @@ |
|||||||
|
/* |
||||||
|
* Copyright (c) 2001-2014,FineReport Inc, All Rights Reserved. |
||||||
|
*/ |
||||||
|
|
||||||
|
package com.fr.design.chart.series.SeriesCondition; |
||||||
|
|
||||||
|
import com.fr.chart.base.ChartConstants; |
||||||
|
|
||||||
|
/** |
||||||
|
* 气泡图 条件显示 参数 控制界面. |
||||||
|
* Created by kunsnat on 14-3-11. |
||||||
|
* kunsnat@gmail.com |
||||||
|
*/ |
||||||
|
public class BubblePlotChartConditionPane extends ChartConditionPane{ |
||||||
|
|
||||||
|
/** |
||||||
|
* 界面条件序号 列表 |
||||||
|
* @return 返回条件列表. |
||||||
|
*/ |
||||||
|
public String[] columns2Populate() { |
||||||
|
return new String[]{ |
||||||
|
ChartConstants.SERIES_INDEX, |
||||||
|
ChartConstants.SERIES_NAME, |
||||||
|
ChartConstants.VALUE |
||||||
|
}; |
||||||
|
} |
||||||
|
} |
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in new issue