svnadmin
9 years ago
530 changed files with 45226 additions and 0 deletions
@ -1 +1,529 @@
|
||||
* 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