From 125e28d85bfa6ac83ec33f6c1ed1223b9f5cc640 Mon Sep 17 00:00:00 2001 From: fr_shine Date: Wed, 9 Aug 2017 15:59:56 +0800 Subject: [PATCH 01/39] =?UTF-8?q?=E6=8F=92=E4=BB=B6=E7=A7=BB=E5=88=B0?= =?UTF-8?q?=E8=AE=BE=E8=AE=A1=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/ChartTypeInterfaceManager.java | 68 ++ .../fr/design/images/form/toolbar/area.png | Bin 0 -> 374 bytes .../com/fr/design/images/form/toolbar/bar.png | Bin 0 -> 178 bytes .../fr/design/images/form/toolbar/bubble.png | Bin 0 -> 493 bytes .../fr/design/images/form/toolbar/column.png | Bin 0 -> 179 bytes .../fr/design/images/form/toolbar/custom.png | Bin 0 -> 306 bytes .../design/images/form/toolbar/drillmap.png | Bin 0 -> 344 bytes .../fr/design/images/form/toolbar/funnel.png | Bin 0 -> 276 bytes .../fr/design/images/form/toolbar/gantt.png | Bin 0 -> 982 bytes .../fr/design/images/form/toolbar/gauge.png | Bin 0 -> 431 bytes .../fr/design/images/form/toolbar/heatmap.png | Bin 0 -> 750 bytes .../fr/design/images/form/toolbar/line.png | Bin 0 -> 447 bytes .../com/fr/design/images/form/toolbar/map.png | Bin 0 -> 344 bytes .../design/images/form/toolbar/multiPie.png | Bin 0 -> 861 bytes .../com/fr/design/images/form/toolbar/pie.png | Bin 0 -> 372 bytes .../fr/design/images/form/toolbar/radar.png | Bin 0 -> 723 bytes .../fr/design/images/form/toolbar/scatter.png | Bin 0 -> 429 bytes .../design/images/form/toolbar/structure.png | Bin 0 -> 1239 bytes .../fr/design/images/form/toolbar/treeMap.png | Bin 0 -> 269 bytes .../design/images/form/toolbar/wordcloud.png | Bin 0 -> 654 bytes .../poly/toolbar/Plugin-ChartF_Drill_Map.png | Bin 0 -> 423 bytes .../poly/toolbar/Plugin-ChartF_NewBubble.png | Bin 0 -> 503 bytes .../poly/toolbar/Plugin-ChartF_NewCustom.png | Bin 0 -> 306 bytes .../poly/toolbar/Plugin-ChartF_NewFunnel.png | Bin 0 -> 1502 bytes .../poly/toolbar/Plugin-ChartF_NewGantt.png | Bin 0 -> 1138 bytes .../poly/toolbar/Plugin-ChartF_NewGauge.png | Bin 0 -> 559 bytes .../poly/toolbar/Plugin-ChartF_NewHeatMap.png | Bin 0 -> 6162 bytes .../poly/toolbar/Plugin-ChartF_NewMap.png | Bin 0 -> 423 bytes .../toolbar/Plugin-ChartF_NewMultiPie.png | Bin 0 -> 861 bytes .../poly/toolbar/Plugin-ChartF_NewRadar.png | Bin 0 -> 1002 bytes .../poly/toolbar/Plugin-ChartF_NewScatter.png | Bin 0 -> 329 bytes .../poly/toolbar/Plugin-ChartF_NewTreeMap.png | Bin 0 -> 269 bytes .../gui/style/series/XYScatterSeriesPane.java | 3 +- designer_chart/src/com/fr/plugin/.DS_Store | Bin 0 -> 6148 bytes .../AreaIndependentVanChartInterface.java | 40 + .../chart/area/VanChartAreaConditionPane.java | 84 ++ .../chart/area/VanChartAreaPlotPane.java | 95 ++ .../chart/area/VanChartAreaSeriesPane.java | 51 + .../com/fr/plugin/chart/area/images/area.png | Bin 0 -> 1176 bytes .../fr/plugin/chart/area/images/custom.png | Bin 0 -> 760 bytes .../plugin/chart/area/images/percentStack.png | Bin 0 -> 728 bytes .../com/fr/plugin/chart/area/images/stack.png | Bin 0 -> 1215 bytes .../bar/BarIndependentVanChartInterface.java | 56 + .../plugin/chart/bar/VanChartBarPlotPane.java | 96 ++ .../chart/bar/VanChartBarStylePane.java | 23 + .../com/fr/plugin/chart/bar/images/bar.png | Bin 0 -> 290 bytes .../com/fr/plugin/chart/bar/images/custom.png | Bin 0 -> 261 bytes .../plugin/chart/bar/images/percentstack.png | Bin 0 -> 247 bytes .../com/fr/plugin/chart/bar/images/stack.png | Bin 0 -> 256 bytes .../BubbleIndependentVanChartInterface.java | 85 ++ .../bubble/VanChartBubbleConditionPane.java | 90 ++ .../VanChartBubbleConditionSelectionPane.java | 22 + .../bubble/VanChartBubbleInteractivePane.java | 27 + .../chart/bubble/VanChartBubblePlotPane.java | 171 +++ .../bubble/VanChartBubbleSeriesPane.java | 92 ++ .../chart/bubble/VanChartBubbleStylePane.java | 57 + .../bubble/component/VanChartBubblePane.java | 74 ++ ...anChartBubblePlotTableDataContentPane.java | 184 ++++ .../VanChartBubbleRefreshTooltipPane.java | 28 + ...VanChartForceBubbleAreaBackgroundPane.java | 23 + .../force/VanChartForceBubbleAreaPane.java | 26 + .../force/VanChartForceBubbleLabelPane.java | 19 + .../force/VanChartForceBubbleTooltipPane.java | 18 + .../fr/plugin/chart/bubble/images/bubble.png | Bin 0 -> 693 bytes .../fr/plugin/chart/bubble/images/force.png | Bin 0 -> 772 bytes .../fr/plugin/chart/bubble/images/large.png | Bin 0 -> 832 bytes .../chart/column/ColumnBorderAttriPane.java | 43 + .../ColumnIndependentVanChartInterface.java | 36 + .../column/VanChartColumnConditionPane.java | 82 ++ .../column/VanChartColumnLabelBorderPane.java | 34 + .../chart/column/VanChartColumnPlotPane.java | 96 ++ .../column/VanChartColumnSeriesPane.java | 194 ++++ ...nChartCustomStackAndAxisConditionPane.java | 143 +++ .../fr/plugin/chart/column/images/column.png | Bin 0 -> 304 bytes .../fr/plugin/chart/column/images/custom.png | Bin 0 -> 296 bytes .../chart/column/images/percentstack.png | Bin 0 -> 288 bytes .../fr/plugin/chart/column/images/stack.png | Bin 0 -> 300 bytes .../CustomIndependentVanChartInterface.java | 56 + .../custom/CustomPlotDesignerPaneFactory.java | 134 +++ .../chart/custom/VanChartCustomDataPane.java | 66 ++ ...VanChartCustomPlotDataContentsTabPane.java | 175 +++ .../chart/custom/VanChartCustomPlotPane.java | 296 ++++++ ...ategoryCustomPlotTableDataContentPane.java | 27 + .../component/ChartImageCheckOutPane.java | 103 ++ .../component/CustomPlotLocationPane.java | 84 ++ .../MeterCustomPlotReportDataContentPane.java | 36 + .../MeterCustomPlotTableDataContentPane.java | 44 + .../VanChartCustomAreaBackgroundPane.java | 19 + .../VanChartCustomAxisConditionPane.java | 43 + .../component/VanChartCustomPlotAxisPane.java | 55 + .../VanChartCustomPlotSelectPane.java | 396 +++++++ .../component/VanChartCustomPlotTabPane.java | 81 ++ .../VanChartCustomPlotUITabGroup.java | 130 +++ .../custom/component/VanChartDataPane.java | 23 + .../component/VanChartHyperLinkPane.java | 133 +++ .../chart/custom/images/column_area.png | Bin 0 -> 603 bytes .../chart/custom/images/column_line.png | Bin 0 -> 601 bytes .../fr/plugin/chart/custom/images/custom.png | Bin 0 -> 461 bytes .../chart/custom/images/custom/icon/area.png | Bin 0 -> 16329 bytes .../custom/images/custom/icon/bubble.png | Bin 0 -> 15875 bytes .../custom/images/custom/icon/column.png | Bin 0 -> 15461 bytes .../custom/images/custom/icon/cuvette.png | Bin 0 -> 15846 bytes .../images/custom/icon/different_pie.png | Bin 0 -> 16274 bytes .../chart/custom/images/custom/icon/line.png | Bin 0 -> 16211 bytes .../chart/custom/images/custom/icon/pie.png | Bin 0 -> 16280 bytes .../custom/images/custom/icon/pointer_180.png | Bin 0 -> 16361 bytes .../custom/images/custom/icon/pointer_360.png | Bin 0 -> 16778 bytes .../chart/custom/images/custom/icon/radar.png | Bin 0 -> 17688 bytes .../chart/custom/images/custom/icon/ring.png | Bin 0 -> 16824 bytes .../custom/images/custom/icon/same_pie.png | Bin 0 -> 16175 bytes .../custom/images/custom/icon/scatter.png | Bin 0 -> 15487 bytes .../images/custom/icon/selected/area.png | Bin 0 -> 16383 bytes .../images/custom/icon/selected/bubble.png | Bin 0 -> 15948 bytes .../images/custom/icon/selected/column.png | Bin 0 -> 15520 bytes .../images/custom/icon/selected/cuvette.png | Bin 0 -> 15905 bytes .../custom/icon/selected/different_pie.png | Bin 0 -> 16323 bytes .../images/custom/icon/selected/line.png | Bin 0 -> 16269 bytes .../images/custom/icon/selected/pie.png | Bin 0 -> 16329 bytes .../custom/icon/selected/pointer_180.png | Bin 0 -> 16412 bytes .../custom/icon/selected/pointer_360.png | Bin 0 -> 16831 bytes .../images/custom/icon/selected/radar.png | Bin 0 -> 17719 bytes .../images/custom/icon/selected/ring.png | Bin 0 -> 16874 bytes .../images/custom/icon/selected/same_pie.png | Bin 0 -> 16216 bytes .../images/custom/icon/selected/scatter.png | Bin 0 -> 15549 bytes .../images/custom/icon/selected/slot.png | Bin 0 -> 16717 bytes .../custom/icon/selected/stack_radar.png | Bin 0 -> 17900 bytes .../chart/custom/images/custom/icon/slot.png | Bin 0 -> 16673 bytes .../custom/images/custom/icon/stack_radar.png | Bin 0 -> 17845 bytes .../chart/custom/images/stack_column_line.png | Bin 0 -> 651 bytes .../VanChartCustomConditionAttrPane.java | 71 ++ .../other/VanChartCustomInteractivePane.java | 56 + .../custom/other/VanChartCustomOtherPane.java | 19 + ...anChartCustomPlotConditionAttrTabPane.java | 112 ++ .../VanChartCustomPlotHyperlinkPane.java | 66 ++ .../VanChartCustomPlotHyperlinkTabPane.java | 93 ++ .../custom/style/VanChartCustomAreaPane.java | 21 + .../style/VanChartCustomAxisAreaPane.java | 54 + .../custom/style/VanChartCustomAxisPane.java | 84 ++ .../style/VanChartCustomAxisTabPane.java | 156 +++ .../custom/style/VanChartCustomLabelPane.java | 73 ++ .../style/VanChartCustomPlotLabelTabPane.java | 115 ++ .../style/VanChartCustomPlotSeriesPane.java | 84 ++ .../VanChartCustomPlotSeriesTabPane.java | 116 ++ .../VanChartCustomPlotTooltipTabPane.java | 118 +++ .../style/VanChartCustomSeriesPane.java | 145 +++ .../custom/style/VanChartCustomStylePane.java | 71 ++ .../style/VanChartCustomTooltipPane.java | 73 ++ .../fr/plugin/chart/designer/PlotFactory.java | 359 +++++++ .../designer/TableLayout4VanChartHelper.java | 77 ++ .../ConditionUIMenuNameableCreator.java | 44 + .../VanChartAreaSeriesFillColorPane.java | 64 ++ .../component/VanChartBeautyPane.java | 68 ++ .../VanChartFillStylePane4Condition.java | 41 + .../component/VanChartFloatPositionPane.java | 81 ++ .../component/VanChartHtmlLabelPane.java | 199 ++++ ...artHtmlLabelPaneWithOutWidthAndHeight.java | 23 + .../component/VanChartLabelContentPane.java | 18 + .../component/VanChartLineTypePane.java | 95 ++ .../component/VanChartLineWidthPane.java | 27 + .../component/VanChartMarkerPane.java | 120 +++ .../component/VanChartPlotMultiTabPane.java | 104 ++ .../VanChartRefreshTooltipContentPane.java | 42 + .../component/VanChartTooltipContentPane.java | 226 ++++ .../component/VanChartTrendLinePane.java | 101 ++ .../VanChartUIMenuNameableCreator.java | 28 + .../background/VanChartBackgroundPane.java | 165 +++ ...rtBackgroundPaneWithOutImageAndShadow.java | 58 + .../VanChartBackgroundWithOutImagePane.java | 22 + ...BackgroundWithOutShadowWithRadiusPane.java | 49 + .../background/VanChartGradientPane.java | 105 ++ .../VanChartMarkerBackgroundPane.java | 70 ++ .../component/border/VanChartBorderPane.java | 98 ++ .../border/VanChartBorderWithAlphaPane.java | 51 + .../border/VanChartBorderWithRadiusPane.java | 66 ++ .../CategoryNameFormatPaneWithCheckBox.java | 23 + .../ChangedPercentFormatPaneWithCheckBox.java | 25 + .../ChangedValueFormatPaneWithCheckBox.java | 21 + .../MapAreaNameFormatPaneWithCheckBox.java | 21 + .../format/PercentFormatPaneWithCheckBox.java | 27 + .../SeriesNameFormatPaneWithCheckBox.java | 23 + .../format/ValueFormatPaneWithCheckBox.java | 23 + .../VanChartFormatPaneWithCheckBox.java | 137 +++ .../format/XFormatPaneWithCheckBox.java | 22 + .../format/YFormatPaneWithCheckBox.java | 22 + .../label/LabelContentPaneWithCate.java | 34 + .../label/LabelContentPaneWithCateValue.java | 35 + .../label/LabelContentPaneWithOutCate.java | 36 + .../label/LabelContentPaneWithPercent.java | 33 + .../marker/VanChartCommonMarkerPane.java | 179 ++++ .../marker/VanChartImageMarkerPane.java | 97 ++ ...efreshTooltipContentPaneWithOutSeries.java | 39 + .../TooltipContentPaneWithOutSeries.java | 37 + ...eDimensionalPlotReportDataContentPane.java | 26 + ...VanChartMoreCateReportDataContentPane.java | 53 + .../VanChartMoreCateTableDataContentPane.java | 54 + .../AbstractConditionAttrContentPane.java | 31 + .../chart/designer/other/AutoRefreshPane.java | 190 ++++ .../other/AutoRefreshPaneWithoutTooltip.java | 31 + .../designer/other/HyperlinkMapFactory.java | 997 ++++++++++++++++++ .../VanChartConditionAttrContentPane.java | 75 ++ .../other/VanChartConditionAttrPane.java | 86 ++ .../other/VanChartInteractivePane.java | 441 ++++++++ .../VanChartInteractivePaneWithMapZoom.java | 19 + .../VanChartInteractivePaneWithOutSort.java | 14 + .../designer/other/VanChartOtherPane.java | 36 + .../AbstractNormalMultiLineConditionPane.java | 55 + .../VanChartAreaFillColorConditionPane.java | 70 ++ .../item/VanChartBubbleSetConditionPane.java | 63 ++ .../item/VanChartCurveConditionPane.java | 55 + .../item/VanChartDataSheetContentPane.java | 67 ++ .../item/VanChartEffectConditionPane.java | 61 ++ .../item/VanChartFloatColorConditionPane.java | 61 ++ .../item/VanChartLabelConditionPane.java | 60 ++ .../item/VanChartLineEffectConditionPane.java | 37 + .../VanChartLineMapTooltipConditionPane.java | 21 + .../item/VanChartLineTypeConditionPane.java | 63 ++ .../item/VanChartLineWidthConditionPane.java | 20 + .../item/VanChartMarkerConditionPane.java | 64 ++ .../VanChartSeriesColorConditionPane.java | 65 ++ ...artSeriesImageBackgroundConditionPane.java | 62 ++ .../VanChartStructureNodeConditionPane.java | 62 ++ .../item/VanChartTooltipConditionPane.java | 63 ++ .../item/VanChartTrendLineConditionPane.java | 57 + .../style/HeatMapRangeLegendPane.java | 65 ++ .../designer/style/VanChartLegendPane.java | 83 ++ .../style/VanChartPlotLegendPane.java | 337 ++++++ .../style/VanChartRangeLegendPane.java | 216 ++++ .../designer/style/VanChartStylePane.java | 74 ++ .../designer/style/VanChartTitlePane.java | 341 ++++++ .../style/VanLegendPaneWidthOutHighlight.java | 21 + .../designer/style/axis/AxisPaneFactory.java | 72 ++ .../designer/style/axis/VanChartAxisPane.java | 272 +++++ ...nChartAxisScrollPaneWithOutTypeSelect.java | 60 ++ .../VanChartAxisScrollPaneWithTypeSelect.java | 124 +++ .../style/axis/VanChartBaseAxisPane.java | 617 +++++++++++ .../style/axis/VanChartTimeAxisPane.java | 382 +++++++ .../style/axis/VanChartValueAxisPane.java | 172 +++ .../axis/VanChartXYAxisPaneInterface.java | 16 + .../style/axis/bar/VanChartBarAxisPane.java | 26 + ...ChartXAxisScrollPaneWithOutTypeSelect.java | 14 + ...VanChartYAxisScrollPaneWithTypeSelect.java | 14 + .../MinMaxValuePaneWithOutSecTick.java | 23 + .../component/MinMaxValuePaneWithOutTick.java | 47 + .../component/VanChartAxisButtonPane.java | 350 ++++++ .../component/VanChartMinMaxValuePane.java | 44 + .../VanChartAxisScrollPaneWithGauge.java | 23 + .../axis/gauge/VanChartGaugeAxisPane.java | 48 + .../gauge/VanChartGaugeDetailAxisPane.java | 162 +++ .../axis/radar/RadarTableContentPane.java | 128 +++ .../style/axis/radar/RadarTableDataPane.java | 26 + .../axis/radar/VanChartRadarXAxisPane.java | 43 + .../axis/radar/VanChartRadarYAxisPane.java | 118 +++ .../VanChartXAxisScrollPaneWithRadar.java | 14 + .../VanChartYAxisScrollPaneWithRadar.java | 14 + .../scatter/VanChartDoubleValueAxisPane.java | 49 + .../background/VanChartAlertValuePane.java | 199 ++++ .../VanChartAreaBackgroundPane.java | 152 +++ .../style/background/VanChartAreaPane.java | 91 ++ .../background/VanChartAxisAreaPane.java | 338 ++++++ .../VanChartCustomIntervalBackgroundPane.java | 118 +++ .../radar/VanChartRadarAlertValuePane.java | 23 + .../radar/VanChartRadarAxisAreaPane.java | 47 + ...hartRadarCustomIntervalBackgroundPane.java | 20 + .../datasheet/VanChartDataSheetPane.java | 193 ++++ .../VanchartDataSheetNoCheckPane.java | 33 + ...hartGaugeCateOrPercentLabelDetailPane.java | 77 ++ .../label/VanChartGaugePlotLabelPane.java | 65 ++ .../VanChartGaugeValueLabelDetailPane.java | 101 ++ .../style/label/VanChartLabelPane.java | 84 ++ .../label/VanChartPlotLabelDetailPane.java | 251 +++++ .../label/VanChartPlotLabelNoCheckPane.java | 30 + .../style/label/VanChartPlotLabelPane.java | 104 ++ .../VanChartAbstractPlotSeriesPane.java | 414 ++++++++ .../VanChartCustomStackAndAxisEditPane.java | 116 ++ .../style/series/VanChartEffectPane.java | 84 ++ .../series/VanChartSeriesConditionPane.java | 21 + .../VanChartPlotRefreshTooltipPane.java | 110 ++ .../VanChartPlotTooltipNoCheckPane.java | 35 + .../tooltip/VanChartPlotTooltipPane.java | 230 ++++ .../style/tooltip/VanChartTooltipPane.java | 81 ++ .../type/AbstractVanChartTypePane.java | 186 ++++ .../DrillMapIndependentVanChartInterface.java | 57 + .../data/VanChartDrillMapContentsPane.java | 52 + .../data/VanChartDrillMapDataPane.java | 39 + .../data/VanChartMapLayerAndDataTabPane.java | 131 +++ .../designer/data/comp/DrillMapDataPane.java | 123 +++ .../designer/data/comp/DrillMapLayerPane.java | 193 ++++ .../comp/EachLayerDataDefinitionPane.java | 177 ++++ .../designer/data/comp/MapDataTree.java | 162 +++ .../comp/SingleLayerDataDefinitionPane.java | 94 ++ .../other/VanChartCatalogHyperLinkPane.java | 32 + .../VanChartDrillMapInteractivePane.java | 136 +++ .../other/VanChartDrillMapOtherPane.java | 16 + .../type/VanChartDrillMapPlotPane.java | 100 ++ .../plugin/chart/drillmap/images/area-map.png | Bin 0 -> 1705 bytes .../chart/drillmap/images/custom-map.png | Bin 0 -> 1037 bytes .../chart/drillmap/images/point-map.png | Bin 0 -> 1450 bytes .../FunnelIndependentVanChartInterface.java | 83 ++ .../other/VanChartFunnelConditionPane.java | 72 ++ .../FunnelPercentFormatPaneWithCheckBox.java | 20 + .../style/VanChartFunnelLabelContentPane.java | 49 + ...nChartFunnelRefreshTooltipContentPane.java | 38 + .../style/VanChartFunnelSeriesPane.java | 85 ++ .../VanChartFunnelTooltipContentPane.java | 50 + .../designer/type/VanChartFunnelTypePane.java | 75 ++ .../fr/plugin/chart/funnel/images/funnel.png | Bin 0 -> 578 bytes .../GanttIndependentVanChartInterface.java | 81 ++ .../data/VanChartGanttContentsPane.java | 50 + .../data/VanChartGanttDataAndLinkPane.java | 203 ++++ .../designer/data/VanChartGanttDataPane.java | 37 + .../data/data/GanttDataPaneHelper.java | 75 ++ .../data/GanttPlotReportDataContentPane.java | 45 + .../data/GanttPlotTableDataContentPane.java | 62 ++ .../component/ComboBoxWithButtonPane.java | 112 ++ .../component/GanttReportDataContentPane.java | 130 +++ .../component/GanttReportDataProjectPane.java | 179 ++++ .../component/GanttTableDataContentPane.java | 170 +++ .../component/GanttTableDataProjectPane.java | 271 +++++ .../component/TinyFormulaWithButtonPane.java | 100 ++ .../link/GanttLinkReportDataContentPane.java | 102 ++ .../data/link/GanttLinkReportDataPane.java | 21 + .../link/GanttLinkTableDataContentPane.java | 113 ++ .../data/link/GanttLinkTableDataPane.java | 20 + .../other/VanChartGanttConditionPane.java | 93 ++ .../other/VanChartGanttInteractivePane.java | 18 + .../style/VanChartGanttLabelContentPane.java | 20 + .../style/VanChartGanttStylePane.java | 34 + .../style/axis/GanttAxisStylePane.java | 71 ++ .../style/axis/GanttProcessAxisPane.java | 139 +++ .../style/axis/GanttTimeAxisPane.java | 121 +++ .../series/VanChartGanttCommonMarkerPane.java | 49 + .../style/series/VanChartGanttSeriesPane.java | 125 +++ ...tImageMarkerWithoutWidthAndHeightPane.java | 20 + .../tooltip/VanChartGanttPlotTooltipPane.java | 30 + .../VanChartGanttTooltipContentPane.java | 202 ++++ .../designer/type/VanChartGanttPlotPane.java | 58 + .../fr/plugin/chart/gantt/images/gantt.png | Bin 0 -> 1729 bytes .../GaugeIndependentVanChartInterface.java | 85 ++ .../chart/gauge/VanChartGaugePlotPane.java | 116 ++ .../VanChartGaugePlotRefreshTooltipPane.java | 31 + .../gauge/VanChartGaugePlotTooltipPane.java | 35 + .../chart/gauge/VanChartGaugeSeriesPane.java | 263 +++++ .../chart/gauge/VanChartGaugeStylePane.java | 23 + .../fr/plugin/chart/gauge/images/cuvette.png | Bin 0 -> 706 bytes .../fr/plugin/chart/gauge/images/pointer.png | Bin 0 -> 1495 bytes .../plugin/chart/gauge/images/pointer_180.png | Bin 0 -> 1078 bytes .../com/fr/plugin/chart/gauge/images/ring.png | Bin 0 -> 1638 bytes .../com/fr/plugin/chart/gauge/images/slot.png | Bin 0 -> 1484 bytes .../HeatMapIndependentVanChartInterface.java | 69 ++ .../other/VanChartHeatMapConditionPane.java | 51 + .../style/VanChartHeatMapSeriesPane.java | 169 +++ .../type/VanChartHeatMapSourceChoosePane.java | 15 + .../type/VanChartHeatMapTypePane.java | 104 ++ .../plugin/chart/heatmap/images/heatmap.png | Bin 0 -> 22580 bytes .../chart/layout/VanChartCardLayoutPane.java | 60 ++ .../LineIndependentVanChartInterface.java | 36 + .../chart/line/VanChartLineConditionPane.java | 84 ++ ...rtLineCustomStackAndAxisConditionPane.java | 22 + .../chart/line/VanChartLinePlotPane.java | 96 ++ .../chart/line/VanChartLineSeriesPane.java | 43 + .../fr/plugin/chart/line/images/custom.png | Bin 0 -> 769 bytes .../com/fr/plugin/chart/line/images/line.png | Bin 0 -> 1041 bytes .../com/fr/plugin/chart/line/images/stack.png | Bin 0 -> 730 bytes .../map/MapIndependentVanChartInterface.java | 99 ++ .../chart/map/VanChartMapSeriesPane.java | 551 ++++++++++ .../chart/map/designer/VanChartGroupPane.java | 42 + .../designer/VanMapAreaAndPointGroupPane.java | 18 + .../VanMapAreaPointAndLineGroupPane.java | 20 + .../data/CustomMapChartDataContentsPane.java | 84 ++ .../map/designer/data/MapDataPaneHelper.java | 177 ++++ .../designer/data/VanChartMapDataPane.java | 121 +++ .../component/LongitudeLatitudeAndArea.java | 34 + ...riesNameUseFieldNamePaneWithOutFilter.java | 23 + ...iesNameUseFieldValuePaneWithOutFilter.java | 29 + .../SeriesTypeUseComboxPaneWithOutFilter.java | 40 + .../report/AbstractLongLatAreaPane.java | 15 + .../data/component/report/AreaPane.java | 60 ++ .../component/report/LineMapAreaPane.java | 57 + .../report/LineMapLongLatAreaPane.java | 17 + .../component/report/LongLatAreaPane.java | 73 ++ .../component/report/PointMapAreaPane.java | 47 + .../report/PointMapLongLatAreaPane.java | 14 + .../table/AbstractLongLatAreaPane.java | 26 + .../data/component/table/AreaPane.java | 99 ++ .../data/component/table/LineMapAreaPane.java | 86 ++ .../table/LineMapLongLatAreaPane.java | 22 + .../data/component/table/LongLatAreaPane.java | 119 +++ .../component/table/PointMapAreaPane.java | 68 ++ .../table/PointMapLongLatAreaPane.java | 18 + .../VanAreaMapPlotReportDataContentPane.java | 108 ++ .../VanLineMapPlotReportDataContentPane.java | 24 + .../VanPointMapPlotReportDataContentPane.java | 151 +++ .../VanAreaMapPlotTableDataContentPane.java | 160 +++ .../VanLineMapPlotTableDataContentPane.java | 26 + .../VanPointMapPlotTableDataContentPane.java | 206 ++++ .../VanChartMapConditionAttrContentPane.java | 132 +++ .../other/VanChartMapConditionAttrPane.java | 13 + .../other/VanChartMapHyperLinkPane.java | 209 ++++ .../other/VanChartMapInteractivePane.java | 62 ++ .../designer/other/VanChartMapOtherPane.java | 21 + ...VanChartLineMapConditionSelectionPane.java | 21 + .../VanChartMapConditionSelectionPane.java | 19 + .../VanChartBorderWithAlphaConditionPane.java | 60 ++ .../VanChartBubbleMarkerConditionPane.java | 24 + .../VanChartCommonMarkerConditionPane.java | 55 + .../VanChartImageMarkerConditionPane.java | 55 + .../VanChartBubblePointMapConditionPane.java | 27 + .../VanChartCommonPointMapConditionPane.java | 27 + .../VanChartDefaultPointMapConditionPane.java | 23 + .../VanChartImagePointMapConditionPane.java | 23 + .../pane/VanChartLineMapConditionPane.java | 62 ++ .../pane/VanChartMapConditionPane.java | 74 ++ .../designer/style/VanChartMapStylePane.java | 37 + .../label/VanChartMapLabelContentPane.java | 38 + .../style/label/VanChartMapLabelPane.java | 126 +++ .../series/VanChartMapScatterMarkerPane.java | 23 + .../VanChartMapRefreshTooltipContentPane.java | 49 + .../VanChartMapTooltipContentPane.java | 38 + .../style/tooltip/VanChartMapTooltipPane.java | 129 +++ .../designer/type/VanChartMapPlotPane.java | 176 ++++ .../type/VanChartMapSourceChoosePane.java | 632 +++++++++++ .../fr/plugin/chart/map/images/area-map.png | Bin 0 -> 1523 bytes .../com/fr/plugin/chart/map/images/area.png | Bin 0 -> 298 bytes .../fr/plugin/chart/map/images/custom-map.png | Bin 0 -> 22428 bytes .../com/fr/plugin/chart/map/images/image.png | Bin 0 -> 299 bytes .../fr/plugin/chart/map/images/line-map.png | Bin 0 -> 22260 bytes .../fr/plugin/chart/map/images/mapData.png | Bin 0 -> 489 bytes .../plugin/chart/map/images/marker-icon.png | Bin 0 -> 1466 bytes .../plugin/chart/map/images/marker-iconx2.png | Bin 0 -> 1845 bytes .../fr/plugin/chart/map/images/point-map.png | Bin 0 -> 1294 bytes .../com/fr/plugin/chart/map/images/point.png | Bin 0 -> 336 bytes ...StartAndEndNameFormatPaneWithCheckBox.java | 23 + .../chart/map/line/VanChartCurvePane.java | 74 ++ .../map/line/VanChartLineMapEffectPane.java | 113 ++ .../line/VanChartLineMapPlotTooltipPane.java | 22 + .../VanChartLineMapTooltipContentPane.java | 38 + .../map/server/ChartMapEditorAction.java | 30 + .../chart/map/server/MapMenuHandler.java | 61 ++ .../MultiPieIndependentVanChartInterface.java | 52 + .../multilayer/VanChartMultiPiePlotPane.java | 76 ++ .../MultiPiePlotReportDataContentPane.java | 240 +++++ .../MultiPiePlotTableDataContentPane.java | 358 +++++++ .../chart/multilayer/image/multiPie.png | Bin 0 -> 2288 bytes .../other/VanChartMultiPieConditionPane.java | 67 ++ ...anChartMultiPieConditionSelectionPane.java | 23 + ...anChartMultiPiePlotTooltipNoCheckPane.java | 34 + .../VanChartMultiPieTooltipConditionPane.java | 20 + ...ltiPieLevelNameFormatPaneWithCheckBox.java | 21 + ...tiPieSeriesNameFormatPaneWithCheckBox.java | 23 + .../VanChartMultiPieLabelContentPane.java | 33 + .../VanChartMultiPiePlotTooltipPane.java | 22 + .../style/VanChartMultiPieSeriesPane.java | 94 ++ .../VanChartMultiPieTooltipContentPane.java | 35 + ...ChartMutiPieRefreshTooltipContentPane.java | 43 + .../pie/PieIndependentVanChartInterface.java | 55 + .../chart/pie/RadiusCardLayoutPane.java | 118 +++ .../chart/pie/VanChartPieConditionPane.java | 59 ++ .../plugin/chart/pie/VanChartPiePlotPane.java | 92 ++ .../chart/pie/VanChartPieSeriesPane.java | 120 +++ .../fr/plugin/chart/pie/images/different.png | Bin 0 -> 1139 bytes .../com/fr/plugin/chart/pie/images/pie.png | Bin 0 -> 1174 bytes .../com/fr/plugin/chart/pie/images/same.png | Bin 0 -> 1017 bytes .../RadarIndependentVanChartInterface.java | 35 + .../radar/VanChartRadarConditionPane.java | 61 ++ .../chart/radar/VanChartRadarPlotPane.java | 92 ++ .../chart/radar/VanChartRadarSeriesPane.java | 100 ++ .../fr/plugin/chart/radar/images/radar.png | Bin 0 -> 1580 bytes .../fr/plugin/chart/radar/images/stack.png | Bin 0 -> 2323 bytes .../component/GradualIntervalConfigPane.java | 104 ++ .../range/component/GradualLegendPane.java | 69 ++ .../range/component/LegendGradientBar.java | 490 +++++++++ .../component/LegendLabelFormatPane.java | 113 ++ .../component/SectionIntervalConfigPane.java | 24 + .../SectionIntervalConfigPaneWithOutNum.java | 52 + .../range/component/SectionLegendPane.java | 71 ++ .../ScatterIndependentVanChartInterface.java | 85 ++ .../scatter/VanChartScatterConditionPane.java | 76 ++ .../VanChartScatterLabelContentPane.java | 23 + .../scatter/VanChartScatterPlotPane.java | 107 ++ .../VanChartScatterPlotTooltipPane.java | 27 + ...ChartScatterRefreshTooltipContentPane.java | 82 ++ .../scatter/VanChartScatterSeriesPane.java | 81 ++ .../VanChartScatterTooltipContentPane.java | 97 ++ .../VanChartScatterLineTypeConditionPane.java | 21 + .../VanChartScatterLineTypePane.java | 49 + .../component/VanChartScatterStylePane.java | 24 + .../VanChartScatterLabelConditionPane.java | 18 + .../VanChartScatterPlotLabelDetailPane.java | 24 + .../VanChartScatterPlotLabelNoCheckPane.java | 30 + .../label/VanChartScatterPlotLabelPane.java | 24 + ...VanChartScatterPlotTooltipNoCheckPane.java | 36 + .../VanChartScatterTooltipConditionPane.java | 20 + ...nChartScatterPlotTableDataContentPane.java | 55 + .../fr/plugin/chart/scatter/images/large.png | Bin 0 -> 557 bytes .../plugin/chart/scatter/images/scatter.png | Bin 0 -> 315 bytes ...VanChartLargeModelMarkerConditionPane.java | 18 + .../large/VanChartLargeModelMarkerPane.java | 14 + ...StructureIndependentVanChartInterface.java | 84 ++ .../StructurePlotReportDataContentPane.java | 95 ++ .../StructurePlotTableDataContentPane.java | 141 +++ .../other/VanChartStructureConditionPane.java | 69 ++ .../style/StructureNodeStylePane.java | 129 +++ .../VanChartStructureLabelContentPane.java | 57 + ...artStructureRefreshTooltipContentPane.java | 40 + .../style/VanChartStructureSeriesPane.java | 137 +++ .../VanChartStructureTooltipContentPane.java | 57 + .../type/VanChartStructureTypePane.java | 96 ++ .../chart/structure/images/horizontal.png | Bin 0 -> 1425 bytes .../plugin/chart/structure/images/radial.png | Bin 0 -> 2989 bytes .../chart/structure/images/vertical.png | Bin 0 -> 1463 bytes .../TreeMapIndependentVanChartInterface.java | 49 + .../treemap/VanChartTreeMapPlotPane.java | 62 ++ .../plugin/chart/treemap/images/treeMap.png | Bin 0 -> 381 bytes .../style/VanChartTreeMapSeriesPane.java | 52 + .../AbstractIndependentVanChartUI.java | 49 + .../AbstractMultiCategoryVanChartUI.java | 31 + ...WordCloudIndependentVanChartInterface.java | 107 ++ .../WordCloudPlotReportDataContentPane.java | 91 ++ .../WordCloudPlotTableDataContentPane.java | 117 ++ .../other/VanChartWordCloudConditionPane.java | 64 ++ ...hartWordCloudRefreshTootipContentPane.java | 47 + .../style/VanChartWordCloudSeriesPane.java | 217 ++++ .../VanChartWordCloudTooltipContentPane.java | 52 + .../type/VanChartWordCloudTypePane.java | 74 ++ .../chart/wordcloud/images/wordcloud.png | Bin 0 -> 2785 bytes 525 files changed, 35590 insertions(+), 1 deletion(-) create mode 100644 designer_chart/src/com/fr/design/images/form/toolbar/area.png create mode 100644 designer_chart/src/com/fr/design/images/form/toolbar/bar.png create mode 100644 designer_chart/src/com/fr/design/images/form/toolbar/bubble.png create mode 100644 designer_chart/src/com/fr/design/images/form/toolbar/column.png create mode 100644 designer_chart/src/com/fr/design/images/form/toolbar/custom.png create mode 100644 designer_chart/src/com/fr/design/images/form/toolbar/drillmap.png create mode 100644 designer_chart/src/com/fr/design/images/form/toolbar/funnel.png create mode 100644 designer_chart/src/com/fr/design/images/form/toolbar/gantt.png create mode 100644 designer_chart/src/com/fr/design/images/form/toolbar/gauge.png create mode 100644 designer_chart/src/com/fr/design/images/form/toolbar/heatmap.png create mode 100644 designer_chart/src/com/fr/design/images/form/toolbar/line.png create mode 100644 designer_chart/src/com/fr/design/images/form/toolbar/map.png create mode 100644 designer_chart/src/com/fr/design/images/form/toolbar/multiPie.png create mode 100644 designer_chart/src/com/fr/design/images/form/toolbar/pie.png create mode 100644 designer_chart/src/com/fr/design/images/form/toolbar/radar.png create mode 100644 designer_chart/src/com/fr/design/images/form/toolbar/scatter.png create mode 100644 designer_chart/src/com/fr/design/images/form/toolbar/structure.png create mode 100644 designer_chart/src/com/fr/design/images/form/toolbar/treeMap.png create mode 100644 designer_chart/src/com/fr/design/images/form/toolbar/wordcloud.png create mode 100644 designer_chart/src/com/fr/design/images/poly/toolbar/Plugin-ChartF_Drill_Map.png create mode 100644 designer_chart/src/com/fr/design/images/poly/toolbar/Plugin-ChartF_NewBubble.png create mode 100644 designer_chart/src/com/fr/design/images/poly/toolbar/Plugin-ChartF_NewCustom.png create mode 100644 designer_chart/src/com/fr/design/images/poly/toolbar/Plugin-ChartF_NewFunnel.png create mode 100644 designer_chart/src/com/fr/design/images/poly/toolbar/Plugin-ChartF_NewGantt.png create mode 100644 designer_chart/src/com/fr/design/images/poly/toolbar/Plugin-ChartF_NewGauge.png create mode 100644 designer_chart/src/com/fr/design/images/poly/toolbar/Plugin-ChartF_NewHeatMap.png create mode 100644 designer_chart/src/com/fr/design/images/poly/toolbar/Plugin-ChartF_NewMap.png create mode 100644 designer_chart/src/com/fr/design/images/poly/toolbar/Plugin-ChartF_NewMultiPie.png create mode 100644 designer_chart/src/com/fr/design/images/poly/toolbar/Plugin-ChartF_NewRadar.png create mode 100644 designer_chart/src/com/fr/design/images/poly/toolbar/Plugin-ChartF_NewScatter.png create mode 100644 designer_chart/src/com/fr/design/images/poly/toolbar/Plugin-ChartF_NewTreeMap.png create mode 100644 designer_chart/src/com/fr/plugin/.DS_Store create mode 100644 designer_chart/src/com/fr/plugin/chart/area/AreaIndependentVanChartInterface.java create mode 100644 designer_chart/src/com/fr/plugin/chart/area/VanChartAreaConditionPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/area/VanChartAreaPlotPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/area/VanChartAreaSeriesPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/area/images/area.png create mode 100644 designer_chart/src/com/fr/plugin/chart/area/images/custom.png create mode 100644 designer_chart/src/com/fr/plugin/chart/area/images/percentStack.png create mode 100644 designer_chart/src/com/fr/plugin/chart/area/images/stack.png create mode 100644 designer_chart/src/com/fr/plugin/chart/bar/BarIndependentVanChartInterface.java create mode 100644 designer_chart/src/com/fr/plugin/chart/bar/VanChartBarPlotPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/bar/VanChartBarStylePane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/bar/images/bar.png create mode 100644 designer_chart/src/com/fr/plugin/chart/bar/images/custom.png create mode 100644 designer_chart/src/com/fr/plugin/chart/bar/images/percentstack.png create mode 100644 designer_chart/src/com/fr/plugin/chart/bar/images/stack.png create mode 100644 designer_chart/src/com/fr/plugin/chart/bubble/BubbleIndependentVanChartInterface.java create mode 100644 designer_chart/src/com/fr/plugin/chart/bubble/VanChartBubbleConditionPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/bubble/VanChartBubbleConditionSelectionPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/bubble/VanChartBubbleInteractivePane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/bubble/VanChartBubblePlotPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/bubble/VanChartBubbleSeriesPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/bubble/VanChartBubbleStylePane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/bubble/component/VanChartBubblePane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/bubble/data/VanChartBubblePlotTableDataContentPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/bubble/force/VanChartBubbleRefreshTooltipPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/bubble/force/VanChartForceBubbleAreaBackgroundPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/bubble/force/VanChartForceBubbleAreaPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/bubble/force/VanChartForceBubbleLabelPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/bubble/force/VanChartForceBubbleTooltipPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/bubble/images/bubble.png create mode 100644 designer_chart/src/com/fr/plugin/chart/bubble/images/force.png create mode 100644 designer_chart/src/com/fr/plugin/chart/bubble/images/large.png create mode 100644 designer_chart/src/com/fr/plugin/chart/column/ColumnBorderAttriPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/column/ColumnIndependentVanChartInterface.java create mode 100644 designer_chart/src/com/fr/plugin/chart/column/VanChartColumnConditionPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/column/VanChartColumnLabelBorderPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/column/VanChartColumnPlotPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/column/VanChartColumnSeriesPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/column/VanChartCustomStackAndAxisConditionPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/column/images/column.png create mode 100644 designer_chart/src/com/fr/plugin/chart/column/images/custom.png create mode 100644 designer_chart/src/com/fr/plugin/chart/column/images/percentstack.png create mode 100644 designer_chart/src/com/fr/plugin/chart/column/images/stack.png create mode 100644 designer_chart/src/com/fr/plugin/chart/custom/CustomIndependentVanChartInterface.java create mode 100644 designer_chart/src/com/fr/plugin/chart/custom/CustomPlotDesignerPaneFactory.java create mode 100644 designer_chart/src/com/fr/plugin/chart/custom/VanChartCustomDataPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/custom/VanChartCustomPlotDataContentsTabPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/custom/VanChartCustomPlotPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/custom/component/CategoryCustomPlotTableDataContentPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/custom/component/ChartImageCheckOutPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/custom/component/CustomPlotLocationPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/custom/component/MeterCustomPlotReportDataContentPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/custom/component/MeterCustomPlotTableDataContentPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/custom/component/VanChartCustomAreaBackgroundPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/custom/component/VanChartCustomAxisConditionPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/custom/component/VanChartCustomPlotAxisPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/custom/component/VanChartCustomPlotSelectPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/custom/component/VanChartCustomPlotTabPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/custom/component/VanChartCustomPlotUITabGroup.java create mode 100644 designer_chart/src/com/fr/plugin/chart/custom/component/VanChartDataPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/custom/component/VanChartHyperLinkPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/custom/images/column_area.png create mode 100644 designer_chart/src/com/fr/plugin/chart/custom/images/column_line.png create mode 100644 designer_chart/src/com/fr/plugin/chart/custom/images/custom.png create mode 100644 designer_chart/src/com/fr/plugin/chart/custom/images/custom/icon/area.png create mode 100644 designer_chart/src/com/fr/plugin/chart/custom/images/custom/icon/bubble.png create mode 100644 designer_chart/src/com/fr/plugin/chart/custom/images/custom/icon/column.png create mode 100644 designer_chart/src/com/fr/plugin/chart/custom/images/custom/icon/cuvette.png create mode 100644 designer_chart/src/com/fr/plugin/chart/custom/images/custom/icon/different_pie.png create mode 100644 designer_chart/src/com/fr/plugin/chart/custom/images/custom/icon/line.png create mode 100644 designer_chart/src/com/fr/plugin/chart/custom/images/custom/icon/pie.png create mode 100644 designer_chart/src/com/fr/plugin/chart/custom/images/custom/icon/pointer_180.png create mode 100644 designer_chart/src/com/fr/plugin/chart/custom/images/custom/icon/pointer_360.png create mode 100644 designer_chart/src/com/fr/plugin/chart/custom/images/custom/icon/radar.png create mode 100644 designer_chart/src/com/fr/plugin/chart/custom/images/custom/icon/ring.png create mode 100644 designer_chart/src/com/fr/plugin/chart/custom/images/custom/icon/same_pie.png create mode 100644 designer_chart/src/com/fr/plugin/chart/custom/images/custom/icon/scatter.png create mode 100644 designer_chart/src/com/fr/plugin/chart/custom/images/custom/icon/selected/area.png create mode 100644 designer_chart/src/com/fr/plugin/chart/custom/images/custom/icon/selected/bubble.png create mode 100644 designer_chart/src/com/fr/plugin/chart/custom/images/custom/icon/selected/column.png create mode 100644 designer_chart/src/com/fr/plugin/chart/custom/images/custom/icon/selected/cuvette.png create mode 100644 designer_chart/src/com/fr/plugin/chart/custom/images/custom/icon/selected/different_pie.png create mode 100644 designer_chart/src/com/fr/plugin/chart/custom/images/custom/icon/selected/line.png create mode 100644 designer_chart/src/com/fr/plugin/chart/custom/images/custom/icon/selected/pie.png create mode 100644 designer_chart/src/com/fr/plugin/chart/custom/images/custom/icon/selected/pointer_180.png create mode 100644 designer_chart/src/com/fr/plugin/chart/custom/images/custom/icon/selected/pointer_360.png create mode 100644 designer_chart/src/com/fr/plugin/chart/custom/images/custom/icon/selected/radar.png create mode 100644 designer_chart/src/com/fr/plugin/chart/custom/images/custom/icon/selected/ring.png create mode 100644 designer_chart/src/com/fr/plugin/chart/custom/images/custom/icon/selected/same_pie.png create mode 100644 designer_chart/src/com/fr/plugin/chart/custom/images/custom/icon/selected/scatter.png create mode 100644 designer_chart/src/com/fr/plugin/chart/custom/images/custom/icon/selected/slot.png create mode 100644 designer_chart/src/com/fr/plugin/chart/custom/images/custom/icon/selected/stack_radar.png create mode 100644 designer_chart/src/com/fr/plugin/chart/custom/images/custom/icon/slot.png create mode 100644 designer_chart/src/com/fr/plugin/chart/custom/images/custom/icon/stack_radar.png create mode 100644 designer_chart/src/com/fr/plugin/chart/custom/images/stack_column_line.png create mode 100644 designer_chart/src/com/fr/plugin/chart/custom/other/VanChartCustomConditionAttrPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/custom/other/VanChartCustomInteractivePane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/custom/other/VanChartCustomOtherPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/custom/other/VanChartCustomPlotConditionAttrTabPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/custom/other/VanChartCustomPlotHyperlinkPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/custom/other/VanChartCustomPlotHyperlinkTabPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/custom/style/VanChartCustomAreaPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/custom/style/VanChartCustomAxisAreaPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/custom/style/VanChartCustomAxisPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/custom/style/VanChartCustomAxisTabPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/custom/style/VanChartCustomLabelPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/custom/style/VanChartCustomPlotLabelTabPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/custom/style/VanChartCustomPlotSeriesPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/custom/style/VanChartCustomPlotSeriesTabPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/custom/style/VanChartCustomPlotTooltipTabPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/custom/style/VanChartCustomSeriesPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/custom/style/VanChartCustomStylePane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/custom/style/VanChartCustomTooltipPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/PlotFactory.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/TableLayout4VanChartHelper.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/component/ConditionUIMenuNameableCreator.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/component/VanChartAreaSeriesFillColorPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/component/VanChartBeautyPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/component/VanChartFillStylePane4Condition.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/component/VanChartFloatPositionPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/component/VanChartHtmlLabelPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/component/VanChartHtmlLabelPaneWithOutWidthAndHeight.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/component/VanChartLabelContentPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/component/VanChartLineTypePane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/component/VanChartLineWidthPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/component/VanChartMarkerPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/component/VanChartPlotMultiTabPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/component/VanChartRefreshTooltipContentPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/component/VanChartTooltipContentPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/component/VanChartTrendLinePane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/component/VanChartUIMenuNameableCreator.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/component/background/VanChartBackgroundPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/component/background/VanChartBackgroundPaneWithOutImageAndShadow.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/component/background/VanChartBackgroundWithOutImagePane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/component/background/VanChartBackgroundWithOutShadowWithRadiusPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/component/background/VanChartGradientPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/component/background/VanChartMarkerBackgroundPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/component/border/VanChartBorderPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/component/border/VanChartBorderWithAlphaPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/component/border/VanChartBorderWithRadiusPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/component/format/CategoryNameFormatPaneWithCheckBox.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/component/format/ChangedPercentFormatPaneWithCheckBox.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/component/format/ChangedValueFormatPaneWithCheckBox.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/component/format/MapAreaNameFormatPaneWithCheckBox.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/component/format/PercentFormatPaneWithCheckBox.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/component/format/SeriesNameFormatPaneWithCheckBox.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/component/format/ValueFormatPaneWithCheckBox.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/component/format/VanChartFormatPaneWithCheckBox.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/component/format/XFormatPaneWithCheckBox.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/component/format/YFormatPaneWithCheckBox.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/component/label/LabelContentPaneWithCate.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/component/label/LabelContentPaneWithCateValue.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/component/label/LabelContentPaneWithOutCate.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/component/label/LabelContentPaneWithPercent.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/component/marker/VanChartCommonMarkerPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/component/marker/VanChartImageMarkerPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/component/tooltip/RefreshTooltipContentPaneWithOutSeries.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/component/tooltip/TooltipContentPaneWithOutSeries.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/data/OneDimensionalPlotReportDataContentPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/data/VanChartMoreCateReportDataContentPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/data/VanChartMoreCateTableDataContentPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/other/AbstractConditionAttrContentPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/other/AutoRefreshPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/other/AutoRefreshPaneWithoutTooltip.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/other/HyperlinkMapFactory.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/other/VanChartConditionAttrContentPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/other/VanChartConditionAttrPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/other/VanChartInteractivePane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/other/VanChartInteractivePaneWithMapZoom.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/other/VanChartInteractivePaneWithOutSort.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/other/VanChartOtherPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/other/condition/item/AbstractNormalMultiLineConditionPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/other/condition/item/VanChartAreaFillColorConditionPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/other/condition/item/VanChartBubbleSetConditionPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/other/condition/item/VanChartCurveConditionPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/other/condition/item/VanChartDataSheetContentPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/other/condition/item/VanChartEffectConditionPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/other/condition/item/VanChartFloatColorConditionPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/other/condition/item/VanChartLabelConditionPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/other/condition/item/VanChartLineEffectConditionPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/other/condition/item/VanChartLineMapTooltipConditionPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/other/condition/item/VanChartLineTypeConditionPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/other/condition/item/VanChartLineWidthConditionPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/other/condition/item/VanChartMarkerConditionPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/other/condition/item/VanChartSeriesColorConditionPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/other/condition/item/VanChartSeriesImageBackgroundConditionPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/other/condition/item/VanChartStructureNodeConditionPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/other/condition/item/VanChartTooltipConditionPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/other/condition/item/VanChartTrendLineConditionPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/style/HeatMapRangeLegendPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/style/VanChartLegendPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/style/VanChartPlotLegendPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/style/VanChartRangeLegendPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/style/VanChartStylePane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/style/VanChartTitlePane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/style/VanLegendPaneWidthOutHighlight.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/style/axis/AxisPaneFactory.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/style/axis/VanChartAxisPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/style/axis/VanChartAxisScrollPaneWithOutTypeSelect.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/style/axis/VanChartAxisScrollPaneWithTypeSelect.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/style/axis/VanChartBaseAxisPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/style/axis/VanChartTimeAxisPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/style/axis/VanChartValueAxisPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/style/axis/VanChartXYAxisPaneInterface.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/style/axis/bar/VanChartBarAxisPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/style/axis/bar/VanChartXAxisScrollPaneWithOutTypeSelect.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/style/axis/bar/VanChartYAxisScrollPaneWithTypeSelect.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/style/axis/component/MinMaxValuePaneWithOutSecTick.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/style/axis/component/MinMaxValuePaneWithOutTick.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/style/axis/component/VanChartAxisButtonPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/style/axis/component/VanChartMinMaxValuePane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/style/axis/gauge/VanChartAxisScrollPaneWithGauge.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/style/axis/gauge/VanChartGaugeAxisPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/style/axis/gauge/VanChartGaugeDetailAxisPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/style/axis/radar/RadarTableContentPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/style/axis/radar/RadarTableDataPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/style/axis/radar/VanChartRadarXAxisPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/style/axis/radar/VanChartRadarYAxisPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/style/axis/radar/VanChartXAxisScrollPaneWithRadar.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/style/axis/radar/VanChartYAxisScrollPaneWithRadar.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/style/axis/scatter/VanChartDoubleValueAxisPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/style/background/VanChartAlertValuePane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/style/background/VanChartAreaBackgroundPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/style/background/VanChartAreaPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/style/background/VanChartAxisAreaPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/style/background/VanChartCustomIntervalBackgroundPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/style/background/radar/VanChartRadarAlertValuePane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/style/background/radar/VanChartRadarAxisAreaPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/style/background/radar/VanChartRadarCustomIntervalBackgroundPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/style/datasheet/VanChartDataSheetPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/style/datasheet/VanchartDataSheetNoCheckPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/style/label/VanChartGaugeCateOrPercentLabelDetailPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/style/label/VanChartGaugePlotLabelPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/style/label/VanChartGaugeValueLabelDetailPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/style/label/VanChartLabelPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/style/label/VanChartPlotLabelDetailPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/style/label/VanChartPlotLabelNoCheckPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/style/label/VanChartPlotLabelPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/style/series/VanChartAbstractPlotSeriesPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/style/series/VanChartCustomStackAndAxisEditPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/style/series/VanChartEffectPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/style/series/VanChartSeriesConditionPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/style/tooltip/VanChartPlotRefreshTooltipPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/style/tooltip/VanChartPlotTooltipNoCheckPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/style/tooltip/VanChartPlotTooltipPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/style/tooltip/VanChartTooltipPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/designer/type/AbstractVanChartTypePane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/drillmap/DrillMapIndependentVanChartInterface.java create mode 100644 designer_chart/src/com/fr/plugin/chart/drillmap/designer/data/VanChartDrillMapContentsPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/drillmap/designer/data/VanChartDrillMapDataPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/drillmap/designer/data/VanChartMapLayerAndDataTabPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/drillmap/designer/data/comp/DrillMapDataPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/drillmap/designer/data/comp/DrillMapLayerPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/drillmap/designer/data/comp/EachLayerDataDefinitionPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/drillmap/designer/data/comp/MapDataTree.java create mode 100644 designer_chart/src/com/fr/plugin/chart/drillmap/designer/data/comp/SingleLayerDataDefinitionPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/drillmap/designer/other/VanChartCatalogHyperLinkPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/drillmap/designer/other/VanChartDrillMapInteractivePane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/drillmap/designer/other/VanChartDrillMapOtherPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/drillmap/designer/type/VanChartDrillMapPlotPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/drillmap/images/area-map.png create mode 100644 designer_chart/src/com/fr/plugin/chart/drillmap/images/custom-map.png create mode 100644 designer_chart/src/com/fr/plugin/chart/drillmap/images/point-map.png create mode 100644 designer_chart/src/com/fr/plugin/chart/funnel/designer/FunnelIndependentVanChartInterface.java create mode 100644 designer_chart/src/com/fr/plugin/chart/funnel/designer/other/VanChartFunnelConditionPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/funnel/designer/style/FunnelPercentFormatPaneWithCheckBox.java create mode 100644 designer_chart/src/com/fr/plugin/chart/funnel/designer/style/VanChartFunnelLabelContentPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/funnel/designer/style/VanChartFunnelRefreshTooltipContentPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/funnel/designer/style/VanChartFunnelSeriesPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/funnel/designer/style/VanChartFunnelTooltipContentPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/funnel/designer/type/VanChartFunnelTypePane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/funnel/images/funnel.png create mode 100644 designer_chart/src/com/fr/plugin/chart/gantt/designer/GanttIndependentVanChartInterface.java create mode 100644 designer_chart/src/com/fr/plugin/chart/gantt/designer/data/VanChartGanttContentsPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/gantt/designer/data/VanChartGanttDataAndLinkPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/gantt/designer/data/VanChartGanttDataPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/gantt/designer/data/data/GanttDataPaneHelper.java create mode 100644 designer_chart/src/com/fr/plugin/chart/gantt/designer/data/data/GanttPlotReportDataContentPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/gantt/designer/data/data/GanttPlotTableDataContentPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/gantt/designer/data/data/component/ComboBoxWithButtonPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/gantt/designer/data/data/component/GanttReportDataContentPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/gantt/designer/data/data/component/GanttReportDataProjectPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/gantt/designer/data/data/component/GanttTableDataContentPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/gantt/designer/data/data/component/GanttTableDataProjectPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/gantt/designer/data/data/component/TinyFormulaWithButtonPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/gantt/designer/data/link/GanttLinkReportDataContentPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/gantt/designer/data/link/GanttLinkReportDataPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/gantt/designer/data/link/GanttLinkTableDataContentPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/gantt/designer/data/link/GanttLinkTableDataPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/gantt/designer/other/VanChartGanttConditionPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/gantt/designer/other/VanChartGanttInteractivePane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/gantt/designer/style/VanChartGanttLabelContentPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/gantt/designer/style/VanChartGanttStylePane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/gantt/designer/style/axis/GanttAxisStylePane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/gantt/designer/style/axis/GanttProcessAxisPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/gantt/designer/style/axis/GanttTimeAxisPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/gantt/designer/style/series/VanChartGanttCommonMarkerPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/gantt/designer/style/series/VanChartGanttSeriesPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/gantt/designer/style/series/VanChartImageMarkerWithoutWidthAndHeightPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/gantt/designer/style/tooltip/VanChartGanttPlotTooltipPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/gantt/designer/style/tooltip/VanChartGanttTooltipContentPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/gantt/designer/type/VanChartGanttPlotPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/gantt/images/gantt.png create mode 100644 designer_chart/src/com/fr/plugin/chart/gauge/GaugeIndependentVanChartInterface.java create mode 100644 designer_chart/src/com/fr/plugin/chart/gauge/VanChartGaugePlotPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/gauge/VanChartGaugePlotRefreshTooltipPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/gauge/VanChartGaugePlotTooltipPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/gauge/VanChartGaugeSeriesPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/gauge/VanChartGaugeStylePane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/gauge/images/cuvette.png create mode 100644 designer_chart/src/com/fr/plugin/chart/gauge/images/pointer.png create mode 100644 designer_chart/src/com/fr/plugin/chart/gauge/images/pointer_180.png create mode 100644 designer_chart/src/com/fr/plugin/chart/gauge/images/ring.png create mode 100644 designer_chart/src/com/fr/plugin/chart/gauge/images/slot.png create mode 100644 designer_chart/src/com/fr/plugin/chart/heatmap/designer/HeatMapIndependentVanChartInterface.java create mode 100644 designer_chart/src/com/fr/plugin/chart/heatmap/designer/other/VanChartHeatMapConditionPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/heatmap/designer/style/VanChartHeatMapSeriesPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/heatmap/designer/type/VanChartHeatMapSourceChoosePane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/heatmap/designer/type/VanChartHeatMapTypePane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/heatmap/images/heatmap.png create mode 100644 designer_chart/src/com/fr/plugin/chart/layout/VanChartCardLayoutPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/line/LineIndependentVanChartInterface.java create mode 100644 designer_chart/src/com/fr/plugin/chart/line/VanChartLineConditionPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/line/VanChartLineCustomStackAndAxisConditionPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/line/VanChartLinePlotPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/line/VanChartLineSeriesPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/line/images/custom.png create mode 100644 designer_chart/src/com/fr/plugin/chart/line/images/line.png create mode 100644 designer_chart/src/com/fr/plugin/chart/line/images/stack.png create mode 100644 designer_chart/src/com/fr/plugin/chart/map/MapIndependentVanChartInterface.java create mode 100644 designer_chart/src/com/fr/plugin/chart/map/VanChartMapSeriesPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/map/designer/VanChartGroupPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/map/designer/VanMapAreaAndPointGroupPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/map/designer/VanMapAreaPointAndLineGroupPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/map/designer/data/CustomMapChartDataContentsPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/map/designer/data/MapDataPaneHelper.java create mode 100644 designer_chart/src/com/fr/plugin/chart/map/designer/data/VanChartMapDataPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/map/designer/data/component/LongitudeLatitudeAndArea.java create mode 100644 designer_chart/src/com/fr/plugin/chart/map/designer/data/component/SeriesNameUseFieldNamePaneWithOutFilter.java create mode 100644 designer_chart/src/com/fr/plugin/chart/map/designer/data/component/SeriesNameUseFieldValuePaneWithOutFilter.java create mode 100644 designer_chart/src/com/fr/plugin/chart/map/designer/data/component/SeriesTypeUseComboxPaneWithOutFilter.java create mode 100644 designer_chart/src/com/fr/plugin/chart/map/designer/data/component/report/AbstractLongLatAreaPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/map/designer/data/component/report/AreaPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/map/designer/data/component/report/LineMapAreaPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/map/designer/data/component/report/LineMapLongLatAreaPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/map/designer/data/component/report/LongLatAreaPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/map/designer/data/component/report/PointMapAreaPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/map/designer/data/component/report/PointMapLongLatAreaPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/map/designer/data/component/table/AbstractLongLatAreaPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/map/designer/data/component/table/AreaPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/map/designer/data/component/table/LineMapAreaPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/map/designer/data/component/table/LineMapLongLatAreaPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/map/designer/data/component/table/LongLatAreaPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/map/designer/data/component/table/PointMapAreaPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/map/designer/data/component/table/PointMapLongLatAreaPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/map/designer/data/contentpane/report/VanAreaMapPlotReportDataContentPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/map/designer/data/contentpane/report/VanLineMapPlotReportDataContentPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/map/designer/data/contentpane/report/VanPointMapPlotReportDataContentPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/map/designer/data/contentpane/table/VanAreaMapPlotTableDataContentPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/map/designer/data/contentpane/table/VanLineMapPlotTableDataContentPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/map/designer/data/contentpane/table/VanPointMapPlotTableDataContentPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/map/designer/other/VanChartMapConditionAttrContentPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/map/designer/other/VanChartMapConditionAttrPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/map/designer/other/VanChartMapHyperLinkPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/map/designer/other/VanChartMapInteractivePane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/map/designer/other/VanChartMapOtherPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/map/designer/other/condition/VanChartLineMapConditionSelectionPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/map/designer/other/condition/VanChartMapConditionSelectionPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/map/designer/other/condition/item/VanChartBorderWithAlphaConditionPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/map/designer/other/condition/item/VanChartBubbleMarkerConditionPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/map/designer/other/condition/item/VanChartCommonMarkerConditionPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/map/designer/other/condition/item/VanChartImageMarkerConditionPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/map/designer/other/condition/pane/VanChartBubblePointMapConditionPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/map/designer/other/condition/pane/VanChartCommonPointMapConditionPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/map/designer/other/condition/pane/VanChartDefaultPointMapConditionPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/map/designer/other/condition/pane/VanChartImagePointMapConditionPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/map/designer/other/condition/pane/VanChartLineMapConditionPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/map/designer/other/condition/pane/VanChartMapConditionPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/map/designer/style/VanChartMapStylePane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/map/designer/style/label/VanChartMapLabelContentPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/map/designer/style/label/VanChartMapLabelPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/map/designer/style/series/VanChartMapScatterMarkerPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/map/designer/style/tooltip/VanChartMapRefreshTooltipContentPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/map/designer/style/tooltip/VanChartMapTooltipContentPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/map/designer/style/tooltip/VanChartMapTooltipPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/map/designer/type/VanChartMapPlotPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/map/designer/type/VanChartMapSourceChoosePane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/map/images/area-map.png create mode 100644 designer_chart/src/com/fr/plugin/chart/map/images/area.png create mode 100644 designer_chart/src/com/fr/plugin/chart/map/images/custom-map.png create mode 100644 designer_chart/src/com/fr/plugin/chart/map/images/image.png create mode 100644 designer_chart/src/com/fr/plugin/chart/map/images/line-map.png create mode 100644 designer_chart/src/com/fr/plugin/chart/map/images/mapData.png create mode 100644 designer_chart/src/com/fr/plugin/chart/map/images/marker-icon.png create mode 100644 designer_chart/src/com/fr/plugin/chart/map/images/marker-iconx2.png create mode 100644 designer_chart/src/com/fr/plugin/chart/map/images/point-map.png create mode 100644 designer_chart/src/com/fr/plugin/chart/map/images/point.png create mode 100644 designer_chart/src/com/fr/plugin/chart/map/line/StartAndEndNameFormatPaneWithCheckBox.java create mode 100644 designer_chart/src/com/fr/plugin/chart/map/line/VanChartCurvePane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/map/line/VanChartLineMapEffectPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/map/line/VanChartLineMapPlotTooltipPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/map/line/VanChartLineMapTooltipContentPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/map/server/ChartMapEditorAction.java create mode 100644 designer_chart/src/com/fr/plugin/chart/map/server/MapMenuHandler.java create mode 100644 designer_chart/src/com/fr/plugin/chart/multilayer/MultiPieIndependentVanChartInterface.java create mode 100644 designer_chart/src/com/fr/plugin/chart/multilayer/VanChartMultiPiePlotPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/multilayer/data/MultiPiePlotReportDataContentPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/multilayer/data/MultiPiePlotTableDataContentPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/multilayer/image/multiPie.png create mode 100644 designer_chart/src/com/fr/plugin/chart/multilayer/other/VanChartMultiPieConditionPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/multilayer/other/VanChartMultiPieConditionSelectionPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/multilayer/other/VanChartMultiPiePlotTooltipNoCheckPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/multilayer/other/VanChartMultiPieTooltipConditionPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/multilayer/style/MultiPieLevelNameFormatPaneWithCheckBox.java create mode 100644 designer_chart/src/com/fr/plugin/chart/multilayer/style/MultiPieSeriesNameFormatPaneWithCheckBox.java create mode 100644 designer_chart/src/com/fr/plugin/chart/multilayer/style/VanChartMultiPieLabelContentPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/multilayer/style/VanChartMultiPiePlotTooltipPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/multilayer/style/VanChartMultiPieSeriesPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/multilayer/style/VanChartMultiPieTooltipContentPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/multilayer/style/VanChartMutiPieRefreshTooltipContentPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/pie/PieIndependentVanChartInterface.java create mode 100644 designer_chart/src/com/fr/plugin/chart/pie/RadiusCardLayoutPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/pie/VanChartPieConditionPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/pie/VanChartPiePlotPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/pie/VanChartPieSeriesPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/pie/images/different.png create mode 100644 designer_chart/src/com/fr/plugin/chart/pie/images/pie.png create mode 100644 designer_chart/src/com/fr/plugin/chart/pie/images/same.png create mode 100644 designer_chart/src/com/fr/plugin/chart/radar/RadarIndependentVanChartInterface.java create mode 100644 designer_chart/src/com/fr/plugin/chart/radar/VanChartRadarConditionPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/radar/VanChartRadarPlotPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/radar/VanChartRadarSeriesPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/radar/images/radar.png create mode 100644 designer_chart/src/com/fr/plugin/chart/radar/images/stack.png create mode 100644 designer_chart/src/com/fr/plugin/chart/range/component/GradualIntervalConfigPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/range/component/GradualLegendPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/range/component/LegendGradientBar.java create mode 100644 designer_chart/src/com/fr/plugin/chart/range/component/LegendLabelFormatPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/range/component/SectionIntervalConfigPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/range/component/SectionIntervalConfigPaneWithOutNum.java create mode 100644 designer_chart/src/com/fr/plugin/chart/range/component/SectionLegendPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/scatter/ScatterIndependentVanChartInterface.java create mode 100644 designer_chart/src/com/fr/plugin/chart/scatter/VanChartScatterConditionPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/scatter/VanChartScatterLabelContentPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/scatter/VanChartScatterPlotPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/scatter/VanChartScatterPlotTooltipPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/scatter/VanChartScatterRefreshTooltipContentPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/scatter/VanChartScatterSeriesPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/scatter/VanChartScatterTooltipContentPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/scatter/component/VanChartScatterLineTypeConditionPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/scatter/component/VanChartScatterLineTypePane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/scatter/component/VanChartScatterStylePane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/scatter/component/label/VanChartScatterLabelConditionPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/scatter/component/label/VanChartScatterPlotLabelDetailPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/scatter/component/label/VanChartScatterPlotLabelNoCheckPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/scatter/component/label/VanChartScatterPlotLabelPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/scatter/component/tooltip/VanChartScatterPlotTooltipNoCheckPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/scatter/component/tooltip/VanChartScatterTooltipConditionPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/scatter/data/VanChartScatterPlotTableDataContentPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/scatter/images/large.png create mode 100644 designer_chart/src/com/fr/plugin/chart/scatter/images/scatter.png create mode 100644 designer_chart/src/com/fr/plugin/chart/scatter/large/VanChartLargeModelMarkerConditionPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/scatter/large/VanChartLargeModelMarkerPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/structure/desinger/StructureIndependentVanChartInterface.java create mode 100644 designer_chart/src/com/fr/plugin/chart/structure/desinger/data/StructurePlotReportDataContentPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/structure/desinger/data/StructurePlotTableDataContentPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/structure/desinger/other/VanChartStructureConditionPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/structure/desinger/style/StructureNodeStylePane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/structure/desinger/style/VanChartStructureLabelContentPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/structure/desinger/style/VanChartStructureRefreshTooltipContentPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/structure/desinger/style/VanChartStructureSeriesPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/structure/desinger/style/VanChartStructureTooltipContentPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/structure/desinger/type/VanChartStructureTypePane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/structure/images/horizontal.png create mode 100644 designer_chart/src/com/fr/plugin/chart/structure/images/radial.png create mode 100644 designer_chart/src/com/fr/plugin/chart/structure/images/vertical.png create mode 100644 designer_chart/src/com/fr/plugin/chart/treemap/TreeMapIndependentVanChartInterface.java create mode 100644 designer_chart/src/com/fr/plugin/chart/treemap/VanChartTreeMapPlotPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/treemap/images/treeMap.png create mode 100644 designer_chart/src/com/fr/plugin/chart/treemap/style/VanChartTreeMapSeriesPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/vanchart/AbstractIndependentVanChartUI.java create mode 100644 designer_chart/src/com/fr/plugin/chart/vanchart/AbstractMultiCategoryVanChartUI.java create mode 100644 designer_chart/src/com/fr/plugin/chart/wordcloud/designer/WordCloudIndependentVanChartInterface.java create mode 100644 designer_chart/src/com/fr/plugin/chart/wordcloud/designer/data/WordCloudPlotReportDataContentPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/wordcloud/designer/data/WordCloudPlotTableDataContentPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/wordcloud/designer/other/VanChartWordCloudConditionPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/wordcloud/designer/style/VanChartWordCloudRefreshTootipContentPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/wordcloud/designer/style/VanChartWordCloudSeriesPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/wordcloud/designer/style/VanChartWordCloudTooltipContentPane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/wordcloud/designer/type/VanChartWordCloudTypePane.java create mode 100644 designer_chart/src/com/fr/plugin/chart/wordcloud/images/wordcloud.png diff --git a/designer_chart/src/com/fr/design/ChartTypeInterfaceManager.java b/designer_chart/src/com/fr/design/ChartTypeInterfaceManager.java index 06cfc242ac..8ef36de4c9 100644 --- a/designer_chart/src/com/fr/design/ChartTypeInterfaceManager.java +++ b/designer_chart/src/com/fr/design/ChartTypeInterfaceManager.java @@ -25,6 +25,43 @@ import com.fr.form.ui.ChartEditor; import com.fr.general.GeneralContext; import com.fr.general.IOUtils; import com.fr.general.Inter; +import com.fr.plugin.chart.PiePlot4VanChart; +import com.fr.plugin.chart.area.AreaIndependentVanChartInterface; +import com.fr.plugin.chart.area.VanChartAreaPlot; +import com.fr.plugin.chart.bar.BarIndependentVanChartInterface; +import com.fr.plugin.chart.bubble.BubbleIndependentVanChartInterface; +import com.fr.plugin.chart.bubble.VanChartBubblePlot; +import com.fr.plugin.chart.column.ColumnIndependentVanChartInterface; +import com.fr.plugin.chart.column.VanChartColumnPlot; +import com.fr.plugin.chart.custom.CustomIndependentVanChartInterface; +import com.fr.plugin.chart.custom.VanChartCustomPlot; +import com.fr.plugin.chart.drillmap.DrillMapIndependentVanChartInterface; +import com.fr.plugin.chart.drillmap.VanChartDrillMapPlot; +import com.fr.plugin.chart.funnel.VanChartFunnelPlot; +import com.fr.plugin.chart.funnel.designer.FunnelIndependentVanChartInterface; +import com.fr.plugin.chart.gantt.VanChartGanttPlot; +import com.fr.plugin.chart.gantt.designer.GanttIndependentVanChartInterface; +import com.fr.plugin.chart.gauge.GaugeIndependentVanChartInterface; +import com.fr.plugin.chart.gauge.VanChartGaugePlot; +import com.fr.plugin.chart.heatmap.VanChartHeatMapPlot; +import com.fr.plugin.chart.heatmap.designer.HeatMapIndependentVanChartInterface; +import com.fr.plugin.chart.line.LineIndependentVanChartInterface; +import com.fr.plugin.chart.line.VanChartLinePlot; +import com.fr.plugin.chart.map.MapIndependentVanChartInterface; +import com.fr.plugin.chart.map.VanChartMapPlot; +import com.fr.plugin.chart.multilayer.MultiPieIndependentVanChartInterface; +import com.fr.plugin.chart.multilayer.VanChartMultiPiePlot; +import com.fr.plugin.chart.pie.PieIndependentVanChartInterface; +import com.fr.plugin.chart.radar.RadarIndependentVanChartInterface; +import com.fr.plugin.chart.radar.VanChartRadarPlot; +import com.fr.plugin.chart.scatter.ScatterIndependentVanChartInterface; +import com.fr.plugin.chart.scatter.VanChartScatterPlot; +import com.fr.plugin.chart.structure.VanChartStructurePlot; +import com.fr.plugin.chart.structure.desinger.StructureIndependentVanChartInterface; +import com.fr.plugin.chart.treemap.TreeMapIndependentVanChartInterface; +import com.fr.plugin.chart.treemap.VanChartTreeMapPlot; +import com.fr.plugin.chart.wordcloud.VanChartWordCloudPlot; +import com.fr.plugin.chart.wordcloud.designer.WordCloudIndependentVanChartInterface; import com.fr.plugin.context.PluginContext; import com.fr.plugin.injectable.PluginModule; import com.fr.plugin.injectable.PluginSingleInjection; @@ -58,6 +95,7 @@ public class ChartTypeInterfaceManager implements ExtraChartDesignClassManagerPr static { readDefault(); + readVanChart(); StableFactory.registerMarkedObject(XML_TAG, classManager); } @@ -130,6 +168,36 @@ public class ChartTypeInterfaceManager implements ExtraChartDesignClassManagerPr aRowChart.createSlotImage(); } } + + private static void readVanChart() { + + if (chartTypeInterfaces.containsKey(ChartTypeManager.VAN_CHART_PRIORITY)) { + return; + } + CloseableContainedMap chartUIList = + new CloseableContainedMap(LinkedHashMap.class); + chartUIList.put(PiePlot4VanChart.VAN_CHART_PIE_PLOT, new PieIndependentVanChartInterface()); + chartUIList.put(VanChartColumnPlot.VAN_CHART_COLUMN_PLOT_ID, new ColumnIndependentVanChartInterface()); + chartUIList.put(VanChartColumnPlot.VAN_CHART_BAR_PLOT_ID, new BarIndependentVanChartInterface()); + chartUIList.put(VanChartLinePlot.VAN_CHART_LINE_PLOT, new LineIndependentVanChartInterface()); + chartUIList.put(VanChartAreaPlot.VAN_CHART_AREA_PLOT_ID, new AreaIndependentVanChartInterface()); + chartUIList.put(VanChartGaugePlot.VAN_CHART_GAUGE_PLOT, new GaugeIndependentVanChartInterface()); + chartUIList.put(VanChartRadarPlot.VAN_CHART_RADAR_PLOT, new RadarIndependentVanChartInterface()); + chartUIList.put(VanChartScatterPlot.VAN_CHART_SCATTER_PLOT_ID, new ScatterIndependentVanChartInterface()); + chartUIList.put(VanChartBubblePlot.VAN_CHART_BUBBLE_PLOT_ID, new BubbleIndependentVanChartInterface()); + chartUIList.put(VanChartCustomPlot.VAN_CHART_CUSTOM_PLOT_ID, new CustomIndependentVanChartInterface()); + chartUIList.put(VanChartMultiPiePlot.VAN_CHART_MULTILAYER_PLOT_ID, new MultiPieIndependentVanChartInterface()); + chartUIList.put(VanChartMapPlot.VAN_CHART_MAP_ID, new MapIndependentVanChartInterface()); + chartUIList.put(VanChartDrillMapPlot.VAN_CHART_DRILL_MAP_ID, new DrillMapIndependentVanChartInterface()); + chartUIList.put(VanChartTreeMapPlot.VAN_CHART_TREE_MAP_PLOT_ID, new TreeMapIndependentVanChartInterface()); + chartUIList.put(VanChartFunnelPlot.VAN_CHART_FUNNEL_PLOT_ID, new FunnelIndependentVanChartInterface()); + chartUIList.put(VanChartHeatMapPlot.VAN_CHART_HEAT_MAP_ID, new HeatMapIndependentVanChartInterface()); + chartUIList.put(VanChartWordCloudPlot.WORD_CLOUD_PLOT_ID, new WordCloudIndependentVanChartInterface()); + chartUIList.put(VanChartGanttPlot.VAN_CHART_GANTT_PLOT_ID, new GanttIndependentVanChartInterface()); + chartUIList.put(VanChartStructurePlot.STRUCTURE_PLOT_ID, new StructureIndependentVanChartInterface()); + + chartTypeInterfaces.put(ChartTypeManager.VAN_CHART_PRIORITY, chartUIList); + } private static void readDefault() { diff --git a/designer_chart/src/com/fr/design/images/form/toolbar/area.png b/designer_chart/src/com/fr/design/images/form/toolbar/area.png new file mode 100644 index 0000000000000000000000000000000000000000..0e690168c1e822fbdb774408b47eddba9acb5dba GIT binary patch literal 374 zcmV-+0g3*JP)ak%GHEE`RUF57LMYBnxl;vHF7(2hb3>7~BAI0TTm-VAKEx27mwq06{); UhzS?u@c;k-07*qoM6N<$f=42X5dZ)H literal 0 HcmV?d00001 diff --git a/designer_chart/src/com/fr/design/images/form/toolbar/bar.png b/designer_chart/src/com/fr/design/images/form/toolbar/bar.png new file mode 100644 index 0000000000000000000000000000000000000000..0913e05b1d27b7e9e75cd53dc00c5da520295bd5 GIT binary patch literal 178 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9GG!XV7ZFl&wkP*AeO zHKHUqKdq!Zu_%?nF(p4KRlzeiF+DXXH8G{K@MNkDP?5c-i(^Q|t)w1{m;dK8@<-%t zYZRPsBh1{I@PIer&;S4b5A14qdR_7Ke`jlfc4r-pb2UDbgx@VcZN#@Zf`P+;K}tZ7 UwmdKI;Vst09$)DqW}N^ literal 0 HcmV?d00001 diff --git a/designer_chart/src/com/fr/design/images/form/toolbar/bubble.png b/designer_chart/src/com/fr/design/images/form/toolbar/bubble.png new file mode 100644 index 0000000000000000000000000000000000000000..249e3cda0cd390510d683796c97507c46f436219 GIT binary patch literal 493 zcmV`0wS8m^#(bDN5~Ca8wC-Jjin?uqSen0 z*1|r5jZs+NTV}$r*$582-DURA%$qm!D_NGg+0$;_IoAPPZSOg8|FFu}c!$9$ur9s{ zl0@Bt)9(hmy36tn?sp`uq2;pcmRfDjC*71`!f2?~<%$Jhj`CEAiww^Oh-75YUB zmoAdk08~R6+Yl^b@kO!=55OwWw!+R6U{UfZe1G0VG6mg%CbtuK2M&OH*%>b1X4M3< z%4lWn$QzO9>!MPm!T9dzz2Q4B;>`_*Qp3WTeP~HbDr9O~pwr{h_%g9%#COIuA+v== j`pZOQCQ5ZPe+3u-(n`3u6dYA=00000NkvXXu0mjfse=}`FW zF@wU_hjqK&Fsd1uNHeVb>Y&5$$avzyp9})(Ou6?RCNX-<;%=BFe&9&t1`U>(Z}^W$ zH&!rJ`seU(9lB5ESEfIJ>~1lHmxa!GFb0=>{j6Q|_H+ zDf$gQ_6=(!SsMQE2Z$%I>Uc0dVfd;o@y9BqGf8;%-9ont!Q%Rr1 x8lmLRy1=4z=S?=ZAfAMz1p++G%nVFC3sWZRl)t za+t)}Wh~Fm@R41?uc6aWshUwkkzonbyXB|#4lIgf^oV6hs#|fvQ6VqE$xPP6mf_J) zhi@!8d_NkFZD(JZ9x~%2M@lx6$ZKUy4VGOgOp_ieY_pm4$92IT#uE(e3hDN8>*HOF zC7%6ZS-{ADAdz9qLnblTA3Q9rmzkeL{BUqe(NI|3E*ZdZM84C6L4=!8gN

^QR_8 z0duFn-zP>eM<(#Bm@hS9k?0h$M};koOoo~t8K&IhIKsd1O>4k&`2(|rKB^=Jgsf(a kwd9WND?CuF?9jl-ptC%9u2+y`G|zopr06m^_CIA2c literal 0 HcmV?d00001 diff --git a/designer_chart/src/com/fr/design/images/form/toolbar/funnel.png b/designer_chart/src/com/fr/design/images/form/toolbar/funnel.png new file mode 100644 index 0000000000000000000000000000000000000000..ff8239f8d5e2d45a4e0e7e96469d3fc637ca34ba GIT binary patch literal 276 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9GG!XV7ZFl&wkP*AeO zHKHUqKdq!Zu_%?nF(p4KRlzeiF+DXXH8G{K@MNkDP|-q97srr_TS*}^KEAMLW^Lf? zkPlk$U-3i(w}?bRqZXUYf&&fAJ^%j)i?s3RC@6gjIl!)P)PK>v{?lj8I1C&urB7_A zVb+myOkk2^^J$P~DB;pj)0?#5r&0+29o8kgnAT0R+Q`7XpD(g$&QkvqKXb~C^G^88 zWW>SX%D-<#^Qy!HSqvARusdim_A_z@nDXq1VK8D5*)O~?V;;v;XGR7_HiqxN^&Tgz SZ3+fDmci52&t;ucLK6T(d{{;R literal 0 HcmV?d00001 diff --git a/designer_chart/src/com/fr/design/images/form/toolbar/gantt.png b/designer_chart/src/com/fr/design/images/form/toolbar/gantt.png new file mode 100644 index 0000000000000000000000000000000000000000..08a6282f250c5f552900b9cb16cb9d0b40ea4a8c GIT binary patch literal 982 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|I14-?iy0WW zg+Z8+Vb&Z8pn}NEkcg59UmvUF{9L`nl>DSry^7odplSvNn+hu+GdHy)QK2F?C$HG5 z!d3~a!V1U+3F|8Y3;nDA{o-C@9zzrKDK}xwt{K19`Se z86_nJR{Hwo<>h+i#(Mch>H3D2mX`VkM*2oZx=P7{9O-#x!EwNQn0$BtH5O0c3d|4@L;p!@;Rg)$-uxQ=IP=XVj;LR z_;%i92LapNarfUYS+psdi7DuohYLqV#?FrY4;c3~soS;Ae_&qWz#+)kwEcn^2b1E$ z-ptD_SH8V7x;Lr(O3%}|6U)!toN1i>;LkBF4c%KT&!0yMot$U;-sUXV|IUOrGmOu% z2Y1}%jCf_F!CJugcy+N(mulrQMM-Dd!Y*+po4SJKSF3i|&r;&hiTP|IcT|RbGSit& z8nMCizXU8^8sc(dVJfG2PvNiM+2JA=3w~*aXS95?DRnN~&wFEEv#7h$H;X6s0ilhH zCRt3(T6@Ys;NHW9CyrG8mX$X1+hBW7%zVx=hqpre-n>oJov9di*OFNv;PoomSB*U! zJ~7=Y!kj`e&wN?Rcw;PPJY$`^&iBppA-0sncoRP1ZS>(3hp~bqD9z9(>sYeB} zSNYi*9ofWgFQL?*HAA-KL*$k~|Md!+yesDAZc&Kr2^Hn+jxLy)dqbsja$N4ga`TUy zw|Db1GhRFW;A?-u^jkfbxo3#Cgt5LU;XbZztoO=h3g_pC*88^XGfK9&fmGd)b++3BB?8 z0naRRy1(h)Q!!;`Vs13%JL9 zzi-v5CBKinihA9zRywmaRNPlTCAKN^qr2Xp{{b`a>|a!O<=L!)wZWjw=IQF^vd$@? F2>_epe^CGc literal 0 HcmV?d00001 diff --git a/designer_chart/src/com/fr/design/images/form/toolbar/gauge.png b/designer_chart/src/com/fr/design/images/form/toolbar/gauge.png new file mode 100644 index 0000000000000000000000000000000000000000..8ee7ab31f707f3f87caf6390e321c82105aedfc1 GIT binary patch literal 431 zcmV;g0Z{&lP)(pll`bG)X{VA6*jYM-m5p%+3MnE8x&RB8AXo>ogBeI; zBbY?6oSXya$z_C5ao}*@-2XlAK9{CxaL@OURaBT`ZsT1TsWG4OJrG%iDBb&_*Adq+r?}vYHK4)jjMT2Fk{chKdOsNyHDc zmw*?}3dfG=jORJf7B9pG*wN3E*wUONsB8k?fg*5(^9s5|W721BZy_|TdpTC{X;kZj zWZ~H@{lACL{UCJrL)L*ONRxC>3-6Zo?vE^&Sa2Anmo75F|v%z%R>v9AS6 zt{8^|zA~33C(-?`QK6bsy(;!cex;p#OxiFm)P$SoSyv!==_&ZMi7xvZZ+%Se-sk); ZzyMlll3$QReMbNQ002ovPDHLkV1iXpu2uj5 literal 0 HcmV?d00001 diff --git a/designer_chart/src/com/fr/design/images/form/toolbar/heatmap.png b/designer_chart/src/com/fr/design/images/form/toolbar/heatmap.png new file mode 100644 index 0000000000000000000000000000000000000000..6e6c2146c47835d0538cb6eca7b256b7dd8a0412 GIT binary patch literal 750 zcmVPx%s7XXYR5%fRlWj{BQ5462_s*T!nH^nMO>h8EZyVJe91t!%W?q%l8dHA3IIU}CD{}}NX zNFkY9&M`Ls9`n2s%N0S)ZiM~uMQAT`{)b4%U3}Qg%W;>Oicr6ul_jWFBWl_~{3DCh z_RNe;HmCTOx5yVIbq1Ec-+c=>e|wrMujldXe`L_+)}|`ywveDKc{J*wd`B`m6>#?2 z6jKW!rEcC(dySw>yi#RU411?uBCE~Vp%Xd-$YC*)^BWQ|L!ri&x|nY9w8o9wcrtQ zFy&Iw>aT`L;z*06?UD9cX)d}*+C8xH(o}ZQRErN#KSY^gi%Fb(43BY)(Aq z(4}Xj_DymtHLQ1GBVy+JWK{203BAUG&-pS^(|t7RaP3Q;p!+M)TpY0+r+@G+Cki)s zZVk}dd5YoAj>amRu>}<)WJFiOCRmPWZZ49|2B_I~!Z4&zE|Fc>%S5`Ho#_sS+got# zu)$#U1Zt7cvyZs*uE1cIOQ1(~@znyptvJ3b$%YQ8b!$Y`TUedIyqmSMbzA1|Gsm=9 g=cuo$HW-`1PuRQ#>N|^IS^xk507*qoM6N<$f{oO29RL6T literal 0 HcmV?d00001 diff --git a/designer_chart/src/com/fr/design/images/form/toolbar/line.png b/designer_chart/src/com/fr/design/images/form/toolbar/line.png new file mode 100644 index 0000000000000000000000000000000000000000..5bb2764652708cd09e1bb0b96e08db7331f14019 GIT binary patch literal 447 zcmV;w0YLtVP);3v0K^VN z835Gm0Hij+Y`&=(2I4cY*&R<{!Q!_7Af*75oPZ<@VuM_8K$`XSd6>B%0>uSD%?3aU zq~IYCe*oeD_3NuZ1||TV4w7SdwAbgx`j7Ss6JAGH0L3map=mw<#EC%LL4G{&pMmkB zJMYO>Xn=v#I7qO*m00z`1>~X)K(7fffL!qNpoIVsUjX6>AU+INubjQ_!+!f;FmWJ# z0EinvY=s$*769=Euor+PgF^HIC{WM?u0(99Ppa_7DWGrxc?;?~m>LB}km;c40AZly z2bcsj)Hi^l4eI;`s3jYa107@l$nOt8nxPs&3PAxk0j3!r0DA#lBUJMTqVfVXg%vsWZRl)t za+t)}Wh~Fm@R41?uc6aWshUwkkzonbyXB|#4lIgf^oV6hs#|fvQ6VqE$xPP6mf_J) zhi@!8d_NkFZD(JZ9x~%2M@lx6$ZKUy4VGOgOp_ieY_pm4$92IT#uE(e3hDN8>*HOF zC7%6ZS-{ADAdz9qLnblTA3Q9rmzkeL{BUqe(NI|3E*ZdZM84C6L4=!8gN

^QR_8 z0duFn-zP>eM<(#Bm@hS9k?0h$M};koOoo~t8K&IhIKsd1O>4k&`2(|rKB^=Jgsf(a kwd9WND?CuF?9jl-ptC%9u2+y`G|zopr06m^_CIA2c literal 0 HcmV?d00001 diff --git a/designer_chart/src/com/fr/design/images/form/toolbar/multiPie.png b/designer_chart/src/com/fr/design/images/form/toolbar/multiPie.png new file mode 100644 index 0000000000000000000000000000000000000000..b6bca9a3ebe316d1f83cbcd8357652531cdf02fb GIT binary patch literal 861 zcmV-j1ETziP)vCP|^=Aq{$;pU{n0m+>E3`b|ebZaBoG} z@Ci)a)eJ=Dl7(BgtpN+c5)^!kE3hQ$TpHzOe!B`7(gIHBJrvDIM6fn%bz+p*tCnZ( zY*a*Io!qdA;MmJ6X$^#t3^g$fiHjQ3Dwjk=U{rD)L?g&SDG0Bw8r&|mrjw?SO_+{c zWMdI%$EegXB0QgiY%i*L49aVas zXZ&Ijb(b7^&XN*;bR n-0O_nDgF5CfAqihM}PqUQ)GI6k}nhj00000NkvXXu0mjft-O5f literal 0 HcmV?d00001 diff --git a/designer_chart/src/com/fr/design/images/form/toolbar/pie.png b/designer_chart/src/com/fr/design/images/form/toolbar/pie.png new file mode 100644 index 0000000000000000000000000000000000000000..15885cd7b0e1df06edfcc953dd326bc8ace085e6 GIT binary patch literal 372 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9GG!XV7ZFl&wkP*AeO zHKHUqKdq!Zu_%?nF(p4KRlzeiF+DXXH8G{K@MNkD0|O(Yr;B4q#jT`2|Nq-Fn=P>T zypefARY9<^4ueO0!e;9_hS^qPCcaD#s~9_k8)nFNNH^|~Q~CaS!c%vJtqdysCU2O1 z_=P8>F;DPyn8SayhwsP2BJqYc$psP&TPv9bP8$obDVRz(v~eixUeM@q_C%YBg7ky~ z4pt1W6Pw!1>?PSgFzai7^ z#oTaif5Rm41q@R@t2OOuI(t6Al6giNkGKN!f^3-ymrk%QP+N0TQsDr@e9PF9Wt_@S QfFZ`<>FVdQ&MBb@048#U)c^nh literal 0 HcmV?d00001 diff --git a/designer_chart/src/com/fr/design/images/form/toolbar/radar.png b/designer_chart/src/com/fr/design/images/form/toolbar/radar.png new file mode 100644 index 0000000000000000000000000000000000000000..5343bef301a559fdb509e8d533d9b38e7421bb80 GIT binary patch literal 723 zcmV;^0xbQBP){K#GcjVJHfGC;D z3;|;xUJ~|@(8t8xvhe*E0EX)jOF$0j2O&B8;pg3jY99mMK3&Yl$wqg=XGw4vPo+{H zArAx7ch(P4`B5)7FIR2Z*X1%;#gg+CTkh@PrXg`VR<@J}SG1Kd{O$vvD1ZUQ{h~6k zo-=(~r?hDf$|b8`)-Mbyr5G~v*kW$tPs8&(Yj*lemcn~o8+yd|!v|hX#^V*0f($8$ zo8z9m45AMGs%Y>1h|2asRjA^J<%7kNt$c-EaArVdhi)A0y5;4Km(+K@vEwvsXMqY3 z5c)YH6fITKE#-+AXhIU-Tcc@LZP%2-t@^@7-y_&g0#sF6=;1GQKV{x|sv}EnYs8h% zBTY3!4)e#<;)M6t{F>$7`_AY-PXlei__s}sTFVT``Vo@Em7Pr!C9(Z-`QCBQ?=!EB z9(TIFJBxX+QMJIjU52)5(%jf%N+vj4i$rr6MjP~(G|0Gllj znGME!M%1;>V#O29J#c;|kc(pSw<&{IoaUK)QxEKsYBQYM;VIwui{yj*=1R*gYfXe} z6uFg52eZM7tCL6)7d~6}tpTW{6F>xx5w`tFILcoE1^`v9|9D=%(dzk)L?tdTW=bMzkxF`00V31GZj z0wW;d!|?et0}K$kWVjdkO!fJQvU6MlITs))38Ljd>M5iodUgh`A&Dg>`@4a0s^Ggm z%!>)S5I=py^s~2V+!YhbZwhFYiJ!~c_mn;F#kXQZ>6aT=b8wz+7UJ)HvEhkTC32+S z*zL4TdR0Jb`}*0AGoS);&s-X@-ob!qB!Q_Bqs}3EjO8wCqN13zthQkd9bnQNSiZU{ zjH8K1xCgmTupQk>05Y@Bfp1D1NlK5fG{}uA`n9u`1cgf$O=O*0uz=!{Q_A$=Pk;dc Xqcbh@aecxW00000NkvXXu0mjfKgqH6 literal 0 HcmV?d00001 diff --git a/designer_chart/src/com/fr/design/images/form/toolbar/structure.png b/designer_chart/src/com/fr/design/images/form/toolbar/structure.png new file mode 100644 index 0000000000000000000000000000000000000000..31720b5178ab0a04a4320b6241b3c135b3258ae1 GIT binary patch literal 1239 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+1|-AI^@Rf|#^NA%Cx&(BWL^R}oCO|{#S9GG z!XV7ZFl&wkP(fs7NJL45ua8x7ey(0(N`6wRUPW#JP&EUCO@$SZnVVXYs8ErclUHn2 zVXFjIVFhG^g!Ppaz)DK8ZIvQ?0~DO|i&7O#^-S~(l1AfjnEK zjFOT9D}DX)@^Za$W4-*MbbUihOG|wNBYh(yU7!lx;>x^|#0uTKVr7USFmqf|i<65o z3raHc^AtelCMM;Vme?vOfh>Xph&xL%(-1c06+^uR^q@XSM&D4+Kp$>4P^%3{)XKjo zGZknv$b36P8?Z_gF{nK@`XI}Z90TzwSQO}0J1!f2c(B=V`5aP@WME(x_jGX#u@GDv zoa+%BC}H>f-rKx)r~7|SRLTlV>#=kB&mkztruc$CGpNh;?9FyoBi&8%RW4GUK~6so zpWr&(@pJQv`mfq7lGB7$U5mO7XPleUdi&koy~~T=(RM`A#w8 z4}aFlzZ06Aa~x-Qx4u?a?5VOZd3ug%!Gn`&Gg1_s9O4d~`Jp@E;CaKtRwA-Tx*{Ki z1TCJCBV05)rHC*2MQ>uta_iif=?N_cNdiqm#~7}4mff!_d{!knr^>5rWd>(sXYri& zJ8BFfZ`oz54$fToxH9eyTgGR_6PK%YW>@i^Pj0!e%f|Dpf^AmP$z^=~n}0nEiFZ}v zZ8-fZDZi#9Z2Ng$kyABy&Xx6veGW6;x<^iCfzubcl`o9Tru_O?73h(8zSBWx@s83x z|IY8ZbHV0>|F%nKyqbSyK9m(LlYcMvax$AvwnzG$PM)Q{?RJ4zQnwzN#$Mvekt%%T z&c4Ixh0A}k2B!vG?h8;;d}1Ra*KqEfU-9~{yKhHLJ#4C!(j<@@=p0p~H)GGr?fu(6 ztJUsWuX091)$O*UDh3&pAkA9xGl(aI>Us2ub-&S7P+1dYQ#zk3g zaQRxqwy-ndXlL_+g}3@{Wymf0Ff;j59A}H3@Y$&x>-FzU7kz8R@@cm7gnZ>at1X_p zdoNgrbn5rRwF1UsJcn8j zux`dA7e0AWv~f!H)uP5i<`cJW zc%S)j@lEL0CSTvejQX8XN?w7VAGa;yyxskD*2K-M>u1kDE8Zy;%-Qm08W;Di0*MN@ z^Uv8|G}PvN<=Dv;#Z#HNWMjo8yKOP5A12M_G<5Uy@qD~eW04U@M~cWLaSoxy2ZdH2 zz1^cHWh$+5>ax%kE5lhyBCfH!j24@<&Ez@!{`azse_#FkSF}h4AFEZ`&rsxPS)bMP R_c*Au@pScbS?83{1OP@B2d@AC literal 0 HcmV?d00001 diff --git a/designer_chart/src/com/fr/design/images/form/toolbar/treeMap.png b/designer_chart/src/com/fr/design/images/form/toolbar/treeMap.png new file mode 100644 index 0000000000000000000000000000000000000000..09edd2b77ec413c2eead3db6bcddafc3ecafbc74 GIT binary patch literal 269 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+1|-AI^@Rf|&H|6fVg?3oVGw3ym^DWNC@5Lt z8c`CQpH@+2u$DqB_b`ZBbhKY7Yyk0WJBDTtpeq?X MUHx3vIVCg!01hT#rT_o{ literal 0 HcmV?d00001 diff --git a/designer_chart/src/com/fr/design/images/form/toolbar/wordcloud.png b/designer_chart/src/com/fr/design/images/form/toolbar/wordcloud.png new file mode 100644 index 0000000000000000000000000000000000000000..3423b0583d383b16698302b9b7f07de50b32f67b GIT binary patch literal 654 zcmV;90&)F`P)Px%NJ&INR5%f>QcX*gQ5ZevzOOTlqnRHeeFze5vV{;85d;y^u0_8fXc2DOMo>Fj z1=2Eb734o?AxgNZz>1nhN{lXSVdWI!q%))M$K0p$4lcxI6<)a9uXCPzp7T6Jn-P6@ zv>G}TB15;Eq+ugO+~+Nb!h!y(-`NZc=uPTL^>|0@wync@=I$R` z4bvv(4C!~oNrB{sB%VU-*J;s43SI)!uhH*{Q!3plDg`s1^v<3m=5?tbb0YkbzAcbd zIF z*vrDFwiHAkA3qT(1brQzo%*qx7A)j1PfWMhcZjzw z1^eUG9=v$1a!LWp9yTlw)&v?ZKD~2w=E~jAlKxY7`8`hl9}h&{lJj-7Z-Zdgx@Lwr zBWOSAG*rgC-UF?{UZDS9c;nU7tlTas{sn`rNbWg>JFVKys2_&(ZB?d@s1=u_q;LM# zz1#c0b0Ytc#x7kRk>r)E+a$G%PH^C+0*@-tf&%JU&Kwx>z;<*W>!)w()_(1mWl~+4 oCsH&Ghd=7T5%Cr^iwF4l3pvC9VySJWHUIzs07*qoM6N<$f-VCsP5=M^ literal 0 HcmV?d00001 diff --git a/designer_chart/src/com/fr/design/images/poly/toolbar/Plugin-ChartF_Drill_Map.png b/designer_chart/src/com/fr/design/images/poly/toolbar/Plugin-ChartF_Drill_Map.png new file mode 100644 index 0000000000000000000000000000000000000000..2f68dcf8f93961ff2c35ad672f12f4fe2ebbd134 GIT binary patch literal 423 zcmV;Y0a*TtP)W$GbM*7%PAdv;(yQyn<&-5Bc{%3a{qx=e3;^=q;qT;( RG~ECI002ovPDHLkV1nT{trGwM literal 0 HcmV?d00001 diff --git a/designer_chart/src/com/fr/design/images/poly/toolbar/Plugin-ChartF_NewBubble.png b/designer_chart/src/com/fr/design/images/poly/toolbar/Plugin-ChartF_NewBubble.png new file mode 100644 index 0000000000000000000000000000000000000000..e1ab5c31315627b1a2771f42f686865d92f62b6c GIT binary patch literal 503 zcmVF(q^})1U>-^Zb81m(L&cUl zD4PJaT~XDkq@oWvVpZ&8cu|+!j_=?3Faw_={7Ihe)<;&*^=qJ1j2!|lXkm^s@*H7} zgGvHd==4JjbVb0CqVmur!}qx~jGZiropX9cb| z3?6sgT)VYXqVmN5Kq$u*-O&GykRq?Q{7&3=bKwiK1L}}gpxb$jzcWs-NXBf5ok7A6`}SmzyO=nzYE@aotOXs002ovPDHLkV1n2^)aU>J literal 0 HcmV?d00001 diff --git a/designer_chart/src/com/fr/design/images/poly/toolbar/Plugin-ChartF_NewCustom.png b/designer_chart/src/com/fr/design/images/poly/toolbar/Plugin-ChartF_NewCustom.png new file mode 100644 index 0000000000000000000000000000000000000000..dd25ad04715b9f5844b9815f9b270fb030b32771 GIT binary patch literal 306 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9GG!XV7ZFl&wkP*AeO zHKHUqKdq!Zu_%?nF(p4KRlzeiF+DXXH8G{K@MNkDP|se=}`FW zF@wU_hjqK&Fsd1uNHeVb>Y&5$$avzyp9})(Ou6?RCNX-<;%=BFe&9&t1`U>(Z}^W$ zH&!rJ`seU(9lB5ESEfIJ>~1lHmxa!GFb0=>{j6Q|_H+ zDf$gQ_6=(!SsMQE2Z$%I>Uc0dVfd;o@y9BqGf8;%-9ont!Q%Rr1 x8lmLRy1=4z=S?=ZAfAMz1p++G%nVFC3a~_7%i38(`2_ITxiSmgEj+$Q|p@#SB!^3j?Z?t=RYKG!A3i^~hHkhRh|X;!#r!^>-ZveJI* zn4iQ7Yd;UKU;k|C^8IbI(*rv8EfAHQ-}&J2zfj}-m!%IMcD{OhtLTY6Z=W_u{*X%C zd}_{~e}B)V{q=aAv1xPpl;%xG<=ZWePPSQ`rM)O6`?-E?=zNLCdTs|5en3E zI{oq6J8OY+9^4(?Q>vz!RG!kFw8C0Cf9Wl$SB5Jd?{|IK7&UKQ@VvjhTI?4ZWWP*w z@~LB;SZiY9HoJJo(a zl7Ap{V?&?Zgw^+Tut`FlM3&hWKdY(Dlqkg-+%c%`kPHy*RWojaPsWmvLDR1 zvvkt<**LbJII%|RL6Q5xn&wUa-dzp;tbS{D+ymuOr^cGAw%*NIr+1kj(fe&9&+~Co z1kd(sOq*^g$FXm0Ud|RfN8r)VCDo5|-jqhhpKMAytn+zIxc=RkxUGQ|=Xf96x&$(= zt~kLp|JX7?x1R?8z8yPhey)0jW~}Y`V=LpZ!}ZB-J>LYRXa^@%`LZxi+gj= zx;Et*s7x0*@_NeM1?fvy%82*8o2qR$r_d~FA!99Te*8h-dM~lRuG}B$-~Kx3dOz)M zS@iAHwzOcwotGGo8f-Ve_Ihv5l{G0J>vslEEDSKu+;#i+&o8qzc`9ypzIyUM{#nc9 VmV;+s0rM>bgQu&X%Q~loCIGo~ehUBq literal 0 HcmV?d00001 diff --git a/designer_chart/src/com/fr/design/images/poly/toolbar/Plugin-ChartF_NewGantt.png b/designer_chart/src/com/fr/design/images/poly/toolbar/Plugin-ChartF_NewGantt.png new file mode 100644 index 0000000000000000000000000000000000000000..e5da857b6bd764788f31482bfb4201ac8ae9d62e GIT binary patch literal 1138 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+1|-AI^@Rf|#^NA%Cx&(BWL^R}oCO|{#S9GG z!XV7ZFl&wkP(fs7NJL45ua8x7ey(0(N`6wRUPW#JP&EUCO@$SZnVVXYs8ErclUHn2 zVXFjIVFhG^g!Ppaz)DK8ZIvQ?0~DO|i&7O#^-S~(l1AfjnEK zjFOT9D}DX)@^Za$W4-*MbbUihOG|wNBYh(yU7!lx;>x^|#0uTKVr7USFmqf|i<65o z3raHc^AtelCMM;Vme?vOfh>Xph&xL%(-1c06+^uR^q@XSM&D4+Kp$>4P^%3{)XKjo zGZknv$b36P8?Z_gF{nK@`XI}Z90TzwSQO}0J1!f2c(B=V`5aP@WME+0NKRuOI3v6gvAj8pE}dH<*CTet{pOoZ=O^b+ z`#e1(Eb{-CHP?9OA3wG9xtoIe)(c{XEZ^;Tu;JOS!++*&KGyirU{YH2wzn^SUu^f5 z_mlD!Im8gl`^JP-g;^xAz>RO_;_sJse{n24mvv%C$H#-;OII2%^=8U2o>`dqB<9}3 zyV`GAo@dNaJE7SclD)#=Pz1L#&))ewMn^1D4_G()h5EZa&A%bDE>SbAB1b-<%*a7N z`LPC$i1UA)opvPu$qPFESl-o z;lJ+yo9d34qAm~TM;S7G>5w~P{6#I5Z&QNzjBSfK4jgQf@H}?mCI1D(1*}!t{t0)Y~zJIJ@MqMGSL%OH>@)reZD7gM6=n(=1|ef z=A}iA5iS?xj)>=02zkyjiWI3d7oXy3f6B1RX2Ua)86^hi_&ISbp9Zy!}sOElp;Bi^r~%$2NX{--T%n%=>?{p)XMY(E!~ zHS_dzHvwIn)M>Y#m74J_eOgiPqMNd1;)(+b&il*Ts`mO-8D5caWc?<~q|N``!2F7O zpi!Df_|~XiiNJVo*O1j$6}NpXeB8Pz$@1|{h2Uwbo=th%y1`S8`J zN0vFfKJmIkzopr0P!ru3IG5A literal 0 HcmV?d00001 diff --git a/designer_chart/src/com/fr/design/images/poly/toolbar/Plugin-ChartF_NewGauge.png b/designer_chart/src/com/fr/design/images/poly/toolbar/Plugin-ChartF_NewGauge.png new file mode 100644 index 0000000000000000000000000000000000000000..2c62da86be9a23b8c3b02b2679cb139d562c36ec GIT binary patch literal 559 zcmV+~0?_@5P) zK~#9!v{gM$!%z%vA_lfpVqijm!~y6Ha)jKV?Zn#LAgo=|4KX#{87ej=GO)0P6F|k# z2`Sx?!e{iknAaDm5Vd5z{{&6bbap{|ZGzM5*Dj8P9D^f@R^Spm7k<7ts(to> z&trg&aAXFojpQR4z$dOC^neyPa)K_vDYz#x00ewaDHENXHtil$q0iUUdIDKPV0}Mf znsQ#vARlaa%LA@GTx6Y5WAe7xj`hV~eGI9P=z~*b0i{ z-f{kcdKEoh+bWiN92rHI63^Ycrv{b93b&ZfuIH}acBEy3A{L{jmj%alV%o4{Izfw> zFb#(WYwfY-=SHGpp1LMPnYK%E&qXpU%oIHG4CT0qL1D~}mmY)b1(j~_nt|By{ zNeBnv!5=_J1YK#GLWWzL-pv`owx9#EFEWibH0>fqn(=jN=l&N@r)CLFTKBQD;TG(Q xQVYgTkm73i8=GyXi#}-k=k4Uz^dIygzyS24*hWrHBlZ9Q002ovPDHLkV1nQe@)Q67 literal 0 HcmV?d00001 diff --git a/designer_chart/src/com/fr/design/images/poly/toolbar/Plugin-ChartF_NewHeatMap.png b/designer_chart/src/com/fr/design/images/poly/toolbar/Plugin-ChartF_NewHeatMap.png new file mode 100644 index 0000000000000000000000000000000000000000..0450c50073a40c0ef924b2470f13ed437e626152 GIT binary patch literal 6162 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 RG~ECI002ovPDHLkV1nT{trGwM literal 0 HcmV?d00001 diff --git a/designer_chart/src/com/fr/design/images/poly/toolbar/Plugin-ChartF_NewMultiPie.png b/designer_chart/src/com/fr/design/images/poly/toolbar/Plugin-ChartF_NewMultiPie.png new file mode 100644 index 0000000000000000000000000000000000000000..b6bca9a3ebe316d1f83cbcd8357652531cdf02fb GIT binary patch literal 861 zcmV-j1ETziP)vCP|^=Aq{$;pU{n0m+>E3`b|ebZaBoG} z@Ci)a)eJ=Dl7(BgtpN+c5)^!kE3hQ$TpHzOe!B`7(gIHBJrvDIM6fn%bz+p*tCnZ( zY*a*Io!qdA;MmJ6X$^#t3^g$fiHjQ3Dwjk=U{rD)L?g&SDG0Bw8r&|mrjw?SO_+{c zWMdI%$EegXB0QgiY%i*L49aVas zXZ&Ijb(b7^&XN*;bR n-0O_nDgF5CfAqihM}PqUQ)GI6k}nhj00000NkvXXu0mjft-O5f literal 0 HcmV?d00001 diff --git a/designer_chart/src/com/fr/design/images/poly/toolbar/Plugin-ChartF_NewRadar.png b/designer_chart/src/com/fr/design/images/poly/toolbar/Plugin-ChartF_NewRadar.png new file mode 100644 index 0000000000000000000000000000000000000000..754781f9fd9af3545d79eda9c8add80f3cd1eda5 GIT binary patch literal 1002 zcmV0se?bQMMXuUo9RefAhlw00QtP-;JyDNhH^Y$$Fg0q7M3cOx08&{Y>Sv(CwEPN z8HBZpjMrwCjq=&eiE+?|X#{Wq86a|OJi~h#d}f4o{urW?Ja&s*KLXT2xm6t&Obfsm zV1dk~l92~3KtIbo>%SH3Z5Z<2<4DU0BZrwhf)3PCS zWK=v?ja_s)on+Y!pcAO28#C|Ckee30BsT^lVsfe>>@P|7M|ICeHyR|lVSZJU7^{tV zy=zhv5q_yobFo*%bso4xBfKv&D;PU-D}K073fWjav~l%)6#g>kDdE}HXBKvBk} zB3XFn)yJj@pRUpI%b*QJL=DdN9Y_dH)MYJ2AU+2qY4I}%tWp>zeY$#(#?)soE+0w= z#$fLe(6})%=A^&_vk(w2?e*RqTF^&7oi&yXx(xz|n<4%H?4YXX0t#V`Z8o4OCdC=Q zmPm(yR4yqO$8vzzl!HPt>R>|9@A7FWjL(RJ_q!zSsyIpjVnqsdPre(4H*SLm2TcIQ zt_oNIC`nbc2T;NTY?y^RlH_r;mbe0@SSWzJHANquc=*+L3`tZv>lEN5qj{~2@}9Zq zIVQ6+#}siY4dPIUY1E{9FZjZegv|G_6;?H951`HydVfTxP<>NnD3+@`k8aCXdf#f! z8>mkA&ZC@6FMmcor!u0Z;Kpd>nkV8hPe?k-VTk94%C06>+IHRQ!-;{u(q#Y2{pr}W z)6SFvgvG+`Y~x0_Jh7sEhdG@uvZ%QvKJ4L^G^yhEx^mC5@oL7BkP{m!$9GR|+q8Vm zJ}#pQh%B{x)~Lh0$Vn&Nex;?=kC0t$F~%9AM(%7V%@unqv#2pLePOW~F`a7olql4^ z-{l@()}2&bXI*72XjMe(Wyh|X_yrTVS}4901{=a+T3nN^Xhfl+I5F^9U1op1ZrlK* z{1~Vp0=U(&g?|^DqJ#4p|9X!dTvD#hNI5qh{3ct~)@}@i5@&jycGIIHY;V}rAHM|{ Y00yv@$D4zJ>;M1&07*qoM6N<$g4>+GWB>pF literal 0 HcmV?d00001 diff --git a/designer_chart/src/com/fr/design/images/poly/toolbar/Plugin-ChartF_NewScatter.png b/designer_chart/src/com/fr/design/images/poly/toolbar/Plugin-ChartF_NewScatter.png new file mode 100644 index 0000000000000000000000000000000000000000..24a2aaa3e98b7bf970cc63f9122f74dfa30b1009 GIT binary patch literal 329 zcmeAS@N?(olHy`uVBq!ia0vp^Vj#@H1|*Mc$*~4foCO|{#S9GG!XV7ZFl&wkP*AeO zHKHUqKdq!Zu_%?nF(p4KRlzeiF+DXXH8G{K@MNkDP|-C{7srr_TSt>Wf1Q9 z_(Pl|M&1+a;`6pGWL$sn!i~1<9rN|PbKaOg zxOCbjQ|j2#>76|{(hrDFe395=`fTA&4#8zNCaZ+)tq5k-=w76%?N)S(>(-RKB`unU zPuU|SSyB{?$P;}UQiC5tOL+hiW Vlj=7`gMmI|@O1TaS?83{1OPtYe479O literal 0 HcmV?d00001 diff --git a/designer_chart/src/com/fr/design/images/poly/toolbar/Plugin-ChartF_NewTreeMap.png b/designer_chart/src/com/fr/design/images/poly/toolbar/Plugin-ChartF_NewTreeMap.png new file mode 100644 index 0000000000000000000000000000000000000000..09edd2b77ec413c2eead3db6bcddafc3ecafbc74 GIT binary patch literal 269 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+1|-AI^@Rf|&H|6fVg?3oVGw3ym^DWNC@5Lt z8c`CQpH@+2u$DqB_b`ZBbhKY7Yyk0WJBDTtpeq?X MUHx3vIVCg!01hT#rT_o{ literal 0 HcmV?d00001 diff --git a/designer_chart/src/com/fr/design/mainframe/chart/gui/style/series/XYScatterSeriesPane.java b/designer_chart/src/com/fr/design/mainframe/chart/gui/style/series/XYScatterSeriesPane.java index 1d66cb6207..96f0fff3ee 100644 --- a/designer_chart/src/com/fr/design/mainframe/chart/gui/style/series/XYScatterSeriesPane.java +++ b/designer_chart/src/com/fr/design/mainframe/chart/gui/style/series/XYScatterSeriesPane.java @@ -10,6 +10,7 @@ import com.fr.chart.chartglyph.ConditionAttr; import com.fr.chart.chartglyph.Marker; import com.fr.design.mainframe.chart.gui.ChartStylePane; import com.fr.general.ComparatorUtils; +import com.fr.plugin.chart.ConfigHelper; /** * 散点图 属性表 系列界面. @@ -57,7 +58,7 @@ public class XYScatterSeriesPane extends LineSeriesPane { attrList.remove(attr); } - if(!ComparatorUtils.equals(markerPane.getSelectedMarkder().getMarkerType(), Marker.NULL_M)){ + if(!ComparatorUtils.equals(markerPane.getSelectedMarkder().getMarkerType(), ConfigHelper.NULL_M)){ attrList.addDataSeriesCondition(new AttrMarkerType(markerPane.getSelectedMarkder().getMarkerType())); } } diff --git a/designer_chart/src/com/fr/plugin/.DS_Store b/designer_chart/src/com/fr/plugin/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..d215211c5bd3c919272317a20cc94c8f88327d99 GIT binary patch literal 6148 zcmeHK%}T>S5Z>*NCWzRBV2^w8)1Qf6TGo6OGavR}eZhB3z5Q@6obg)wG;A{I;-z7d>9U6X?L6al$hBX;J| z*zrSWEtVYrlL35pWj0_VX0r*)zrS~9?0ZpMuYd4Du~gpLHcZnnca8h*D4cg=JDx^u zdvYtEJa_15`zj3mm2ErM-f-Tl?4N}}YC3BPmcu6~Wl!T0-oVHman_v# zei%G}7c=rRQS8Ty@z5Itvt=?NF+dCu1DnWzzA%lQO*|Z(i5MUTe#HRZ4+0d?(wHff zR|gET1pq98TMF3NOJI)BXlcw8!VCykseme#>lTBnbnpuuXKBn7s&vM6^TGAbTz4p3 z?hfk<8P2$+kVayF82HKn_I@B0tpDdf_y01824a91*h~g^snhMW;cU9LuALHVtpM$V qqF`L6aFqgvEX5FurML getPlotSeriesPane(ChartStylePane parent, Plot plot){ + return new VanChartAreaSeriesPane(parent, plot); + } + + /** + * plot面板的标题 + * 插件兼容 + */ + public String getPlotTypeTitle4PopupWindow(){ + return VanChartAreaPlotPane.TITLE; + } + +} \ No newline at end of file diff --git a/designer_chart/src/com/fr/plugin/chart/area/VanChartAreaConditionPane.java b/designer_chart/src/com/fr/plugin/chart/area/VanChartAreaConditionPane.java new file mode 100644 index 0000000000..0591a6008c --- /dev/null +++ b/designer_chart/src/com/fr/plugin/chart/area/VanChartAreaConditionPane.java @@ -0,0 +1,84 @@ +package com.fr.plugin.chart.area; + +import com.fr.chart.base.AttrBackground; +import com.fr.chart.base.ChartConstants; +import com.fr.chart.chartattr.Plot; +import com.fr.design.chart.series.SeriesCondition.ChartConditionPane; +import com.fr.design.chart.series.SeriesCondition.DataSeriesConditionPane; +import com.fr.plugin.chart.attr.AttrDataSheet; +import com.fr.plugin.chart.base.AttrTooltip; +import com.fr.plugin.chart.attr.EffectHelper; +import com.fr.plugin.chart.VanChartAttrHelper; +import com.fr.plugin.chart.base.*; +import com.fr.plugin.chart.designer.PlotFactory; +import com.fr.plugin.chart.designer.other.condition.item.*; +import com.fr.plugin.chart.glyph.VanChartMultiCategoryDataPoint; +import com.fr.plugin.chart.scatter.large.VanChartLargeModelMarkerConditionPane; + +import java.awt.*; + +/** + * Created by Mitisky on 15/11/18. + */ +public class VanChartAreaConditionPane extends DataSeriesConditionPane { + private static final long serialVersionUID = -7180705321732069806L; + + public VanChartAreaConditionPane(Plot plot) { + super(plot); + } + + protected void initComponents() { + super.initComponents(); + //添加全部条件属性后被遮挡 + liteConditionPane.setPreferredSize(new Dimension(300, 400)); + } + + @Override + protected void addBasicAction() { + classPaneMap.put(AttrBackground.class, new VanChartSeriesColorConditionPane(this)); + classPaneMap.put(VanChartAttrTrendLine.class, new VanChartTrendLineConditionPane(this)); + classPaneMap.put(AttrAreaSeriesFillColorBackground.class, new VanChartAreaFillColorConditionPane(this, plot)); + classPaneMap.put(VanChartAttrLine.class, new VanChartLineTypeConditionPane(this)); + classPaneMap.put(AttrTooltip.class, new VanChartTooltipConditionPane(this, plot)); + //是否使用数据表 + if (plot.getDataSheet().isVisible()) { + classPaneMap.put(AttrDataSheet.class, new VanChartDataSheetContentPane(this, plot)); + } + if(PlotFactory.largeDataModel(plot)){ + classPaneMap.put(VanChartAttrMarker.class, new VanChartLargeModelMarkerConditionPane(this)); + } else { + classPaneMap.put(VanChartAttrMarker.class, new VanChartMarkerConditionPane(this)); + classPaneMap.put(AttrEffect.class, new VanChartEffectConditionPane(this, EffectHelper.getAreaPlotDefaultEffect())); + classPaneMap.put(AttrLabel.class, new VanChartLabelConditionPane(this, plot)); + } + } + + protected void addStyleAction() { + + } + + @Override + protected ChartConditionPane createListConditionPane() { + return new ChartConditionPane(){ + @Override + public String[] columns2Populate() { + return new String[]{ + ChartConstants.CATEGORY_INDEX, + ChartConstants.CATEGORY_NAME, + ChartConstants.SERIES_INDEX, + ChartConstants.SERIES_NAME, + ChartConstants.VALUE, + VanChartMultiCategoryDataPoint.CATEGORY_ARRAY, + }; + } + }; + } + + /** + * 返回图表class对象 + * @return class对象 + */ + public Class class4Correspond() { + return VanChartAreaPlot.class; + } +} \ No newline at end of file diff --git a/designer_chart/src/com/fr/plugin/chart/area/VanChartAreaPlotPane.java b/designer_chart/src/com/fr/plugin/chart/area/VanChartAreaPlotPane.java new file mode 100644 index 0000000000..2e31b4c93f --- /dev/null +++ b/designer_chart/src/com/fr/plugin/chart/area/VanChartAreaPlotPane.java @@ -0,0 +1,95 @@ +package com.fr.plugin.chart.area; + +import com.fr.chart.chartattr.Chart; +import com.fr.chart.chartattr.Plot; +import com.fr.design.mainframe.chart.gui.type.ChartImagePane; +import com.fr.general.FRLogger; +import com.fr.general.Inter; +import com.fr.plugin.chart.designer.type.AbstractVanChartTypePane; + +/** + * Created by Mitisky on 15/11/18. + */ +public class VanChartAreaPlotPane extends AbstractVanChartTypePane { + public static final String TITLE = Inter.getLocText("Plugin-ChartF_NewArea"); + private static final long serialVersionUID = -8161581682558781651L; + + @Override + protected String[] getTypeIconPath() { + + return new String[]{"/com/fr/plugin/chart/area/images/area.png", + "/com/fr/plugin/chart/area/images/stack.png", + "/com/fr/plugin/chart/area/images/percentStack.png", + "/com/fr/plugin/chart/area/images/custom.png", + }; + } + + @Override + protected String[] getTypeTipName() { + String area = Inter.getLocText("FR-Chart-Type_Area"); + String stack = Inter.getLocText("FR-Chart-Type_Stacked"); + String percent = Inter.getLocText("FR-Chart-Use_Percent"); + return new String[]{ + area, + stack + area, + percent + stack + area, + Inter.getLocText("FR-Chart-Mode_Custom") + }; + } + + /** + * 返回界面标题 + * @return 界面标题 + */ + public String title4PopupWindow() { + return Inter.getLocText("Plugin-ChartF_NewArea"); + } + + /** + * 更新界面内容 + */ + public void populateBean(Chart chart) { + for(ChartImagePane imagePane : typeDemo) { + imagePane.isPressing = false; + } + Plot plot = chart.getPlot(); + if(plot instanceof VanChartAreaPlot) { + lastTypeIndex = ((VanChartAreaPlot) plot).getVanChartPlotType().ordinal(); + typeDemo.get(lastTypeIndex).isPressing = true; + } + checkDemosBackground(); + } + + + /** + * 获取各图表类型界面ID, 本质是plotID + * + * @return 图表类型界面ID + */ + @Override + protected String getPlotTypeID() { + return VanChartAreaPlot.VAN_CHART_AREA_PLOT_ID; + } + + protected Plot getSelectedClonedPlot(){ + VanChartAreaPlot newPlot = null; + Chart[] areaChart = AreaIndependentVanChart.AreaVanChartTypes; + for(int i = 0, len = areaChart.length; i < len; i++){ + if(typeDemo.get(i).isPressing){ + newPlot = (VanChartAreaPlot)areaChart[i].getPlot(); + } + } + Plot cloned = null; + try { + cloned = (Plot)newPlot.clone(); + } catch (CloneNotSupportedException e) { + FRLogger.getLogger().error("Error In AreaChart"); + } + return cloned; + } + + public Chart getDefaultChart() { + return AreaIndependentVanChart.AreaVanChartTypes[0]; + } + +} \ No newline at end of file diff --git a/designer_chart/src/com/fr/plugin/chart/area/VanChartAreaSeriesPane.java b/designer_chart/src/com/fr/plugin/chart/area/VanChartAreaSeriesPane.java new file mode 100644 index 0000000000..e0bd8852e7 --- /dev/null +++ b/designer_chart/src/com/fr/plugin/chart/area/VanChartAreaSeriesPane.java @@ -0,0 +1,51 @@ +package com.fr.plugin.chart.area; + +import com.fr.chart.chartattr.Plot; +import com.fr.design.beans.BasicBeanPane; +import com.fr.design.layout.TableLayout; +import com.fr.design.layout.TableLayoutHelper; +import com.fr.design.mainframe.chart.gui.ChartStylePane; +import com.fr.plugin.chart.column.VanChartCustomStackAndAxisConditionPane; +import com.fr.plugin.chart.line.VanChartLineSeriesPane; + +import javax.swing.*; +import java.awt.*; + +public class VanChartAreaSeriesPane extends VanChartLineSeriesPane{ + + private static final long serialVersionUID = 5497989595104913025L; + + public VanChartAreaSeriesPane(ChartStylePane parent, Plot plot){ + super(parent, plot); + } + + protected JPanel getContentInPlotType(){ + + double p = TableLayout.PREFERRED; + double f = TableLayout.FILL; + double[] row = {p,p,p,p,p,p,p,p,p,p,p,p}; + double[] col = {f}; + + Component[][] components = new Component[][]{ + new Component[]{createStylePane()}, + new Component[]{stylePane == null ? null : new JSeparator()}, + new Component[]{createLineTypePane()}, + new Component[]{new JSeparator()}, + new Component[]{createMarkerPane()}, + new Component[]{new JSeparator()}, + new Component[]{createAreaFillColorPane()}, + new Component[]{new JSeparator()}, + new Component[]{createStackedAndAxisPane()}, + new Component[]{createLargeDataModelPane()}, + new Component[]{new JSeparator()}, + new Component[]{createTrendLinePane()}, + }; + + contentPane = TableLayoutHelper.createTableLayoutPane(components, row, col); + return contentPane; + } + + protected Class getStackAndAxisPaneClass() { + return VanChartCustomStackAndAxisConditionPane.class; + } +} \ No newline at end of file diff --git a/designer_chart/src/com/fr/plugin/chart/area/images/area.png b/designer_chart/src/com/fr/plugin/chart/area/images/area.png new file mode 100644 index 0000000000000000000000000000000000000000..013b0ab3cc0b27bad3222b357f044fc2fd04a0f7 GIT binary patch literal 1176 zcmV;J1ZVq+P)400009a7bBm000XU z000XU0RWnu7ytkO8FWQhbW?9;ba!ELWdK2BZ(?O2No`?gWm08fWO;GPWjp`?1SLsC zK~#9!?3r6k6jvC>XJ%*4?1jbI*<~-V%dQZ8vEIXr4@TmXPbKlaX>1eflP36LV%sMn zX|$qI6I`PYDt&0v7{Ldd-U1<|G;IKD6pgST5tbUS{3+|P=KD`!dT>uQh za98`d_4hVUq}=yl*FrRDn!1e;^BX?SWYlgL_Iz;CZ9Wsd2%u(v2!(NnV-L)o{GdRa zzm0xI<*85HUaoy{PIPhSVD1RWd7oh(J^t|Y4m@^jZW}IxFY&ed9Zt4Gbg_3|Jr{kN z-TyMK9D>7o@N3M7h~lKt55S?fgcLxcH_R5MXE`Kpo?7k~4$*(Xnr=g+3z57D15O&f zZ<%~9Fbu8K)uZnUt?|~PFhx_lLEddEDQi((mGo#Bx&>}@UbinP>f_n~YA?19@wDu8 zaqZx&Q<}^dAqA`|OPvX=PC;bbG02@MWXLe1w#w@fTOjpYvaItWvHp?AK^?PahOzb^RFRNR*Z zVe3#Q%Vk>fdFHzI11hDz-WFY2Ya(BQMD8{3QmE$COxm%TWl;KZV<80Y70mg+}GvZ6?rz>Bf#y zwvl3z&8uAM)pHhGItn%LupyxTO*d?vp9!3BxM!oAb`6Nq3?EIu)L#-Wm#pDG)6$75 zTjbxS*7@1Mmv%?;XZr@`ijuRAR(t!tDyL)(1%*AWVd}xoZd#canllqpQ&m{am@KuwaI|4mYD&FvCGPY&h z2+8UO#Zm>xuT|CLbJxYfI5DiWPR&_j*@X9d6Oy)9)eIf5yZ;bW#XP2Dt4Fg5-*774 zIG#(3@=B6Ty=Xj7mARD!iuXp*yZb6K=N@`}^OsDlk}kGBmk}m$U+@T<6ad1*m=ZyY zaKFhaj)Xv()2d>bfav{`NqQ$LAz9rK6mhRye}A!H@`k*U_QB%l04((bghf=|=t~K|tTrR?>Uj*4EYt48b+>?2}zxU7?DA q66q390!ly$C;=s)>l5^U0R{l)M8wBf`7w+D0000N>vw literal 0 HcmV?d00001 diff --git a/designer_chart/src/com/fr/plugin/chart/area/images/custom.png b/designer_chart/src/com/fr/plugin/chart/area/images/custom.png new file mode 100644 index 0000000000000000000000000000000000000000..319a873c333a82c68ce6b2494bd52d0b8c39f8d2 GIT binary patch literal 760 zcmV400009a7bBm000XU z000XU0RWnu7ytkO8FWQhbW?9;ba!ELWdK2BZ(?O2No`?gWm08fWO;GPWjp`?0)gHl>eE<}S!PP;KVP~-E|SB4Y&W(;>q|P1Hn9)I?1*hA}(H#f3tl%(N&a_x`R}EcP~fu@|&68ooEZB@LF>2D|Ut z(lt>NHPJZ6Nw^Fv5-%??jsva&z%e)hU*Hy$+9{%YVI|}!8RN`r;65CI{V=Z`MDwr- zwjw#D`Zxv0)tJ16tFRlgttvVI`xME^85#m7e29;W;X4#zdsyM5MEkU456&d%6E4G$ zi#jZXv#`DuMEjIsN3{pYAN}9Gu3L8J;ii^lI-g#e99c#3fnW0I zt8+a}Pr%J%XO@nRNB!f0B1$yfjqFi24AT%yBboC__A_0F&#Id{;b+vsK}EMQU4jMh z9A3f)-C(88S4UJ2bHB?-jpSo^2v>X=IZ|OS%$s_I-2-pG>fl<~0H5FmyceaKhF~46 z_DK$_MqY%8IwdF)VK1s93FPyVcWhKCcm~V-wGzouwR)!;Z1b8H_ToBw(SCOFWuK(m zkDDbKbg$P64A#H$F_4;w`Z8;;B)`Iikdl84qM5FD zM#`)um5)GHd!oC9(@vK{s^4a+sq_zQJq#zoKO0>h9B| zA9}+?)HMqq)v{%3gxcqwk<$4MxTAenY6Z!(y&N-96E)E$J0o{&*tH~^ietkcZz}N~ q8`{z}Q4=*$6E#s2?L5(60t^5aLEm#LNI2&J0000400009a7bBm000XU z000XU0RWnu7ytkO8FWQhbW?9;ba!ELWdK2BZ(?O2No`?gWm08fWO;GPWjp`?0%b`= zK~#9!V*LOAKf_1>ObjCgjCyp`qoW=j_2{TaM?Fddz(R^*hu)V7Kx+OVaeLx{V(|sU zDrO|LWt6<-qwiqwQT}GulNy*%3Hk#G;0|RG~g7t zs>CgPK7*0zw*-*8df0iCh5a2jpTvP!Ano<{H{YROUuCxRoA_TCRvzV-+T+U3{V?VK zf7Vw&zbH)k_lNTX%^UTk0v?gmx-9H(6@Pw}z4HBo_B~Sda`4}b113}P-`^$H{P`vD zkZ!#fQu7m+;N{wX|JWX}ay<{>6+15Q?=QzqVA8wv`{`<%N_~%#oIpii&x_A`iNkQ4oT|f`qhItYM zK#qnuT=*tjE!ziqCf2X=z!>*r=XsF+|3C8wY9v#-cvL`oX9>{3-+z9Q-$Y0)*h4h% z6wMn9!iuYk8JT`c1B?Gn41)|%&7+`dfSL8PIj{;?0?d0qhNVY&#SdAr^E^!b^;LTD zVDuzaJPN8tIQi}r{Qe=j`R{Mum&3AAkElijcLS@4o5QmAf~y)Cb{-|A8X2-49n94T z)jT@bs}ZWSjDWrRV0IqHL0yedD@N~vJUN)F5vq8!U9I@SQ1m3#+q#1pkTjc?o}T^y zNXZWpw?CXYbEX1KJUW!Y=m7SpM@Kz6>d{e;j(T*|qvQjC00RK7x literal 0 HcmV?d00001 diff --git a/designer_chart/src/com/fr/plugin/chart/area/images/stack.png b/designer_chart/src/com/fr/plugin/chart/area/images/stack.png new file mode 100644 index 0000000000000000000000000000000000000000..d41ca6010e93f47735d0c7031249cd14056a858d GIT binary patch literal 1215 zcmV;w1VH400009a7bBm000XU z000XU0RWnu7ytkO8FWQhbW?9;ba!ELWdK2BZ(?O2No`?gWm08fWO;GPWjp`?1WZXp zK~#9!?3!C_R7Dua=bLlRp6-p^ZTCWLv+cHqNYWaNfDI3%Wi|RBffpa)0Z8hDU=13@ zst-nNVg#+1#3qd~QRIav7tshN`p`gyNCZNv1h%DUOiQUZw(Z_#{2#j}NYbWfFU{F< zCYhYsIeRAa+yDRj&dg*cdM?(f=T8LRz;kpd^-Lj1~)75!OZ0d54H?D+bc?piuGv zAU72YX=%_rWLtQ-_O#opj2AneYGuf}sNU_+DY+yU4CR0{3R&eS1xd#bz)w(D&IjrA zUuyD%&b&;Nd$woA?vE^Q-TV@+kvLn+Bzpku7C?^A2kEc>YO}-j>o(}~p&7_U0R>Rw zzd*z`;JO+$1{2-KIlIagnow0rI9>dhu2cV9Nk`Qu-TwM7U*S9z#>XzkWWqAZ2!N{q zcL2?(qR=paMl=UqMjfaQsuveJjwg7w)fKq#5>z~cKzkKk1;wpemRRHLIW%9?tN6jX zsN;n~#|lJ`Zqcf4JdS2RW8$P`UN1)683~0GO@{7KcNF^mo3-k3ST*B@P4}QHQS98* z5~}z*Ah#mk4%XH?jutwWH!{%X^!@w{lZI8r2ZdU-W0sr zRQ2CG5RbipJXK1!sYR(s>{HbBUZ2t%ifDsoo;Q+=qWu+C9Dl6f>Qsy?=_tByz^Xe@ z$4i|%3IfeQ@|*fHM-w6#Kb8gbyWNq)+rRiT zcW12W-r>g-?e7N-<)GBp=pKY6lcj`PnMsG&r=~YWa=CbxXaZg3Ujp7{%?$vPQ14sB z*)Awo@)$GJYshBfE-9L(iGH}ndCxK-&YMxwH0bj~@3jS+*&DZ6bH8CtR$^-!>a9!7 z#FvZQ!x);9oQ|Xzz3G;6k`=hyG6l+&)C?|Vv8GWrPAA)%vzfSGh=-EI2d0SneNvqE ziQ<1q)BDjqm-lU)>mK6Ay*5458qVcn0U=tQu$#h|YoTLj8BI)aI-yB getPlotSeriesPane(ChartStylePane parent, Plot plot){ + return new VanChartColumnSeriesPane(parent, plot); + } + + /** + * 图表的属性界面数组 + * @return 属性界面 + */ + public AbstractChartAttrPane[] getAttrPaneArray(AttributeChangeListener listener){ + VanChartStylePane stylePane = new VanChartBarStylePane(listener); + VanChartOtherPane otherPane = new VanChartOtherPane(); + return new AbstractChartAttrPane[]{stylePane, otherPane}; + } + + /** + * plot面板的标题 + * 插件兼容 + */ + public String getPlotTypeTitle4PopupWindow(){ + return VanChartBarPlotPane.TITLE; + } + +} \ No newline at end of file diff --git a/designer_chart/src/com/fr/plugin/chart/bar/VanChartBarPlotPane.java b/designer_chart/src/com/fr/plugin/chart/bar/VanChartBarPlotPane.java new file mode 100644 index 0000000000..3156380fa6 --- /dev/null +++ b/designer_chart/src/com/fr/plugin/chart/bar/VanChartBarPlotPane.java @@ -0,0 +1,96 @@ +package com.fr.plugin.chart.bar; + +import com.fr.chart.chartattr.Chart; +import com.fr.chart.chartattr.Plot; +import com.fr.design.mainframe.chart.gui.type.ChartImagePane; +import com.fr.general.FRLogger; +import com.fr.general.Inter; +import com.fr.plugin.chart.column.VanChartColumnPlot; +import com.fr.plugin.chart.designer.type.AbstractVanChartTypePane; + +/** + * Created by Mitisky on 15/10/20. + */ +public class VanChartBarPlotPane extends AbstractVanChartTypePane { + public static final String TITLE = Inter.getLocText("Plugin-ChartF_NewBar"); + + private static final long serialVersionUID = 2879689884048643002L; + + @Override + protected String[] getTypeIconPath() { + return new String[]{"/com/fr/plugin/chart/bar/images/bar.png", + "/com/fr/plugin/chart/bar/images/stack.png", + "/com/fr/plugin/chart/bar/images/percentstack.png", + "/com/fr/plugin/chart/bar/images/custom.png", + }; + } + + @Override + protected String[] getTypeTipName() { + String bar = Inter.getLocText("FR-Chart-Type_Bar"); + String stack = Inter.getLocText("FR-Chart-Type_Stacked"); + String percent = Inter.getLocText("FR-Chart-Use_Percent"); + return new String[]{ + bar, + stack + bar, + percent + stack + bar, + Inter.getLocText("FR-Chart-Mode_Custom") + }; + } + + /** + * 返回界面标题 + * @return 界面标题 + */ + public String title4PopupWindow() { + return Inter.getLocText("Plugin-ChartF_NewBar"); + } + + /** + * 更新界面内容 + */ + public void populateBean(Chart chart) { + for(ChartImagePane imagePane : typeDemo) { + imagePane.isPressing = false; + } + Plot plot = chart.getPlot(); + if(plot instanceof VanChartColumnPlot) { + lastTypeIndex = ((VanChartColumnPlot)plot).getVanChartPlotType().ordinal(); + typeDemo.get(lastTypeIndex).isPressing = true; + } + checkDemosBackground(); + } + + /** + * 获取各图表类型界面ID, 本质是plotID + * + * @return 图表类型界面ID + */ + @Override + protected String getPlotTypeID() { + return VanChartColumnPlot.VAN_CHART_BAR_PLOT_ID; + } + + protected Plot getSelectedClonedPlot(){ + VanChartColumnPlot newPlot = null; + Chart[] barChart = BarIndependentVanChart.BarVanChartTypes; + for(int i = 0, len = barChart.length; i < len; i++){ + if(typeDemo.get(i).isPressing){ + newPlot = (VanChartColumnPlot)barChart[i].getPlot(); + } + } + + Plot cloned = null; + try { + cloned = (Plot)newPlot.clone(); + } catch (CloneNotSupportedException e) { + FRLogger.getLogger().error("Error In ColumnChart"); + } + return cloned; + } + + public Chart getDefaultChart() { + return BarIndependentVanChart.BarVanChartTypes[0]; + } + +} \ No newline at end of file diff --git a/designer_chart/src/com/fr/plugin/chart/bar/VanChartBarStylePane.java b/designer_chart/src/com/fr/plugin/chart/bar/VanChartBarStylePane.java new file mode 100644 index 0000000000..91b36e90b5 --- /dev/null +++ b/designer_chart/src/com/fr/plugin/chart/bar/VanChartBarStylePane.java @@ -0,0 +1,23 @@ +package com.fr.plugin.chart.bar; + +import com.fr.design.dialog.BasicPane; +import com.fr.design.gui.frpane.AttributeChangeListener; +import com.fr.plugin.chart.attr.plot.VanChartAxisPlot; +import com.fr.plugin.chart.designer.style.VanChartStylePane; +import com.fr.plugin.chart.designer.style.axis.bar.VanChartBarAxisPane; + +import java.util.List; + +/** + * Created by Mitisky on 16/6/8. + */ +public class VanChartBarStylePane extends VanChartStylePane { + public VanChartBarStylePane(AttributeChangeListener listener) { + super(listener); + } + + @Override + protected void createVanChartAxisPane(List paneList, VanChartAxisPlot plot) { + paneList.add(new VanChartBarAxisPane(plot, VanChartBarStylePane.this)); + } +} diff --git a/designer_chart/src/com/fr/plugin/chart/bar/images/bar.png b/designer_chart/src/com/fr/plugin/chart/bar/images/bar.png new file mode 100644 index 0000000000000000000000000000000000000000..06191f7ac37b5d313e06cf88e49253c5e164f83a GIT binary patch literal 290 zcmeAS@N?(olHy`uVBq!ia0vp^RzPgT!3Gj}al#cyaTa()7Bet#3xhBt!>lu^BtX(hO{qgvAx!{&w(;}Bn zAz4$moop@_V_bJf{}(U6lzf@ZwNps9qNlB=VNtNguRZTJ*Tg-0?Hn*gBQSYNs)~pz g(Dxry?=kT(umnk&tZn%60BAFVr>mdKI;Vst03CK{>i_@% literal 0 HcmV?d00001 diff --git a/designer_chart/src/com/fr/plugin/chart/bar/images/custom.png b/designer_chart/src/com/fr/plugin/chart/bar/images/custom.png new file mode 100644 index 0000000000000000000000000000000000000000..7356c36d867dee89b270eb83077bfa1e59453260 GIT binary patch literal 261 zcmeAS@N?(olHy`uVBq!ia0vp^RzPgT!3Gj}al#cyaTa()7Bet#3xhBt!>l0T^vIyZoRpFme;{SgyErT zSHYFeylqVEt^rewRvhr;&Tu$#zVVHD=VXtvH{NRcEDQ_{=ADLNzc;HD_UU)rvvi+# z%0#T(Zq@FeU-J2UXUgu)KK|}wh|XV;I~swDGPj4sO*(V>>Yo_jzC8k}TKb=osw*>- zCyFm}QPkfyyll#b@b%a>Y~Xk3=9waoH&kt^4WNzF36<&Y5tk> zH6h<0KMPr%7O}THb@nWcz(p=kUE}ngJbP0l+XkKS3q6C literal 0 HcmV?d00001 diff --git a/designer_chart/src/com/fr/plugin/chart/bubble/BubbleIndependentVanChartInterface.java b/designer_chart/src/com/fr/plugin/chart/bubble/BubbleIndependentVanChartInterface.java new file mode 100644 index 0000000000..bd9f0695e2 --- /dev/null +++ b/designer_chart/src/com/fr/plugin/chart/bubble/BubbleIndependentVanChartInterface.java @@ -0,0 +1,85 @@ +package com.fr.plugin.chart.bubble; + +import com.fr.chart.chartattr.Chart; +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.report.BubblePlotReportDataContentPane; +import com.fr.design.mainframe.chart.gui.data.table.AbstractTableDataContentPane; +import com.fr.design.mainframe.chart.gui.type.AbstractChartTypePane; +import com.fr.plugin.chart.bubble.data.VanChartBubblePlotTableDataContentPane; +import com.fr.plugin.chart.designer.other.VanChartOtherPane; +import com.fr.plugin.chart.designer.style.VanChartStylePane; +import com.fr.plugin.chart.vanchart.AbstractIndependentVanChartUI; + +/** + * Created by Mitisky on 16/3/31. + */ +public class BubbleIndependentVanChartInterface extends AbstractIndependentVanChartUI { + /** + * 图表的类型定义界面类型,就是属性表的第一个界面 + * + * @return 图表的类型定义界面类型 + */ + @Override + public AbstractChartTypePane getPlotTypePane() { + return new VanChartBubblePlotPane(); + } + + /** + * 图标路径 + * + * @return 图标路径 + */ + @Override + public String getIconPath() { + return "com/fr/design/images/form/toolbar/bubble.png"; + } + @Override + public BasicBeanPane getPlotSeriesPane(ChartStylePane parent, Plot plot){ + return new VanChartBubbleSeriesPane(parent, plot); + } + + @Override + public AbstractTableDataContentPane getTableDataSourcePane(Plot plot, ChartDataPane parent){ + if(((VanChartBubblePlot) plot).isForceBubble()){ + return super.getTableDataSourcePane(plot, parent); + } + return new VanChartBubblePlotTableDataContentPane(parent); + } + + @Override + public AbstractReportDataContentPane getReportDataSourcePane(Plot plot, ChartDataPane parent){ + if(((VanChartBubblePlot) plot).isForceBubble()){ + return super.getReportDataSourcePane(plot, parent); + } + return new BubblePlotReportDataContentPane(parent); + } + + /** + * 图表的属性界面数组 + * @return 属性界面 + */ + public AbstractChartAttrPane[] getAttrPaneArray(AttributeChangeListener listener){ + VanChartStylePane stylePane = new VanChartBubbleStylePane(listener); + VanChartOtherPane otherPane = new VanChartOtherPane(){ + protected BasicBeanPane createInteractivePane() { + return new VanChartBubbleInteractivePane(); + } + }; + return new AbstractChartAttrPane[]{stylePane, otherPane}; + } + + public ConditionAttributesPane getPlotConditionPane(Plot plot){ + return new VanChartBubbleConditionPane(plot); + } + + public String getPlotTypeTitle4PopupWindow(){ + return VanChartBubblePlotPane.TITLE; + } +} diff --git a/designer_chart/src/com/fr/plugin/chart/bubble/VanChartBubbleConditionPane.java b/designer_chart/src/com/fr/plugin/chart/bubble/VanChartBubbleConditionPane.java new file mode 100644 index 0000000000..77e06a5121 --- /dev/null +++ b/designer_chart/src/com/fr/plugin/chart/bubble/VanChartBubbleConditionPane.java @@ -0,0 +1,90 @@ +package com.fr.plugin.chart.bubble; + +import com.fr.chart.base.AttrAlpha; +import com.fr.chart.base.AttrBackground; +import com.fr.chart.chartattr.Plot; +import com.fr.design.chart.series.SeriesCondition.ChartConditionPane; +import com.fr.design.chart.series.SeriesCondition.DataSeriesConditionPane; +import com.fr.design.chart.series.SeriesCondition.LabelAlphaPane; +import com.fr.plugin.chart.attr.EffectHelper; +import com.fr.plugin.chart.base.AttrEffect; +import com.fr.plugin.chart.base.AttrLabel; +import com.fr.plugin.chart.base.AttrTooltip; +import com.fr.plugin.chart.base.VanChartAttrBubble; +import com.fr.plugin.chart.designer.PlotFactory; +import com.fr.plugin.chart.designer.other.condition.item.*; +import com.fr.plugin.chart.scatter.attr.ScatterAttrLabel; +import com.fr.plugin.chart.scatter.attr.ScatterAttrTooltip; +import com.fr.plugin.chart.scatter.component.label.VanChartScatterLabelConditionPane; +import com.fr.plugin.chart.scatter.component.tooltip.VanChartScatterTooltipConditionPane; + +import java.awt.*; + +/** + * Created by Mitisky on 16/3/31. + */ +public class VanChartBubbleConditionPane extends DataSeriesConditionPane { + private static final long serialVersionUID = -7180705321732069806L; + + public VanChartBubbleConditionPane(Plot plot) { + super(plot); + } + + protected void initComponents() { + super.initComponents(); + //添加全部条件属性后被遮挡 + liteConditionPane.setPreferredSize(new Dimension(300, 400)); + } + + private boolean forceBubble() { + return plot instanceof VanChartBubblePlot && ((VanChartBubblePlot) plot).isForceBubble(); + } + + @Override + protected ChartConditionPane createListConditionPane() { + return forceBubble() ? new ChartConditionPane() : new VanChartBubbleConditionSelectionPane(); + } + + @Override + protected void addBasicAction() { + classPaneMap.put(AttrBackground.class, new VanChartSeriesColorConditionPane(this)); + classPaneMap.put(VanChartAttrBubble.class, new VanChartBubbleSetConditionPane(this)); + classPaneMap.put(AttrAlpha.class, new LabelAlphaPane(this)); + + if(forceBubble()){ + addForceAction(); + } else if(PlotFactory.largeDataModel(plot)){ + addLargeAction(); + } else { + addNormalAction(); + } + } + + private void addNormalAction() { + classPaneMap.put(ScatterAttrLabel.class, new VanChartScatterLabelConditionPane(this, plot)); + classPaneMap.put(ScatterAttrTooltip.class, new VanChartScatterTooltipConditionPane(this, plot)); + classPaneMap.put(AttrEffect.class, new VanChartEffectConditionPane(this, EffectHelper.getBubblePlotDefaultEffect())); + } + + private void addForceAction() { + classPaneMap.put(AttrLabel.class, new VanChartLabelConditionPane(this, plot)); + classPaneMap.put(AttrTooltip.class, new VanChartTooltipConditionPane(this, plot)); + classPaneMap.put(AttrEffect.class, new VanChartEffectConditionPane(this, EffectHelper.getBubblePlotDefaultEffect())); + } + + private void addLargeAction() { + classPaneMap.put(ScatterAttrTooltip.class, new VanChartScatterTooltipConditionPane(this, plot)); + } + + + protected void addStyleAction() { + } + + /** + * 返回图表class对象 + * @return class对象 + */ + public Class class4Correspond() { + return VanChartBubblePlot.class; + } +} diff --git a/designer_chart/src/com/fr/plugin/chart/bubble/VanChartBubbleConditionSelectionPane.java b/designer_chart/src/com/fr/plugin/chart/bubble/VanChartBubbleConditionSelectionPane.java new file mode 100644 index 0000000000..0ea9262e6a --- /dev/null +++ b/designer_chart/src/com/fr/plugin/chart/bubble/VanChartBubbleConditionSelectionPane.java @@ -0,0 +1,22 @@ +package com.fr.plugin.chart.bubble; + +import com.fr.chart.base.ChartConstants; +import com.fr.design.chart.series.SeriesCondition.ChartConditionPane; +import com.fr.plugin.chart.scatter.VanChartScatterDataPoint; + +/** + * Created by Mitisky on 16/3/31. + */ +public class VanChartBubbleConditionSelectionPane extends ChartConditionPane { + + + public String[] columns2Populate() { + return new String[]{ + ChartConstants.SERIES_INDEX, + ChartConstants.SERIES_NAME, + VanChartScatterDataPoint.X, + VanChartScatterDataPoint.Y, + ChartConstants.VALUE + }; + } +} diff --git a/designer_chart/src/com/fr/plugin/chart/bubble/VanChartBubbleInteractivePane.java b/designer_chart/src/com/fr/plugin/chart/bubble/VanChartBubbleInteractivePane.java new file mode 100644 index 0000000000..62bcb60601 --- /dev/null +++ b/designer_chart/src/com/fr/plugin/chart/bubble/VanChartBubbleInteractivePane.java @@ -0,0 +1,27 @@ +package com.fr.plugin.chart.bubble; + +import com.fr.chart.chartattr.Plot; +import com.fr.general.Inter; +import com.fr.plugin.chart.base.VanChartConstants; +import com.fr.plugin.chart.designer.other.VanChartInteractivePaneWithOutSort; + +/** + * Created by Mitisky on 16/3/31. + */ +public class VanChartBubbleInteractivePane extends VanChartInteractivePaneWithOutSort { + protected String[] getNameArray() { + Plot plot = chart.getPlot(); + if(plot instanceof VanChartBubblePlot && ((VanChartBubblePlot) plot).isForceBubble()) { + return new String[]{Inter.getLocText("Plugin-ChartF_XYAxis"), Inter.getLocText("Chart-Use_None")}; + } + return super.getNameArray(); + } + + protected String[] getValueArray() { + Plot plot = chart.getPlot(); + if(plot instanceof VanChartBubblePlot && ((VanChartBubblePlot) plot).isForceBubble()) { + return new String[]{VanChartConstants.ZOOM_TYPE_XY, VanChartConstants.ZOOM_TYPE_NONE}; + } + return super.getValueArray(); + } +} diff --git a/designer_chart/src/com/fr/plugin/chart/bubble/VanChartBubblePlotPane.java b/designer_chart/src/com/fr/plugin/chart/bubble/VanChartBubblePlotPane.java new file mode 100644 index 0000000000..8987a6f9ac --- /dev/null +++ b/designer_chart/src/com/fr/plugin/chart/bubble/VanChartBubblePlotPane.java @@ -0,0 +1,171 @@ +package com.fr.plugin.chart.bubble; + +import com.fr.chart.base.AttrAlpha; +import com.fr.chart.base.DataSeriesCondition; +import com.fr.chart.chartattr.Chart; +import com.fr.chart.chartattr.Plot; +import com.fr.chart.chartglyph.ConditionAttr; +import com.fr.chart.chartglyph.ConditionCollection; +import com.fr.design.mainframe.chart.gui.type.ChartImagePane; +import com.fr.general.FRLogger; +import com.fr.general.Inter; +import com.fr.plugin.chart.base.VanChartTools; +import com.fr.plugin.chart.base.VanChartZoom; +import com.fr.plugin.chart.designer.type.AbstractVanChartTypePane; +import com.fr.plugin.chart.scatter.attr.ScatterAttrLabel; +import com.fr.plugin.chart.vanchart.VanChart; + +/** + * Created by Mitisky on 16/3/31. + */ +public class VanChartBubblePlotPane extends AbstractVanChartTypePane { + public static final String TITLE = Inter.getLocText("Plugin-ChartF_NewBubble");; + + private static final long serialVersionUID = -3481633368542654247L; + + private static final float FORCE_ALPHA = 1.0f; + + private static final float ALPHA = 0.7f; + + @Override + protected String[] getTypeIconPath() { + return new String[]{"/com/fr/plugin/chart/bubble/images/bubble.png", + "/com/fr/plugin/chart/bubble/images/force.png" + }; + } + + @Override + protected String[] getTypeTipName() { + return new String[]{ + Inter.getLocText("FR-Chart-Chart_BubbleChart"), + Inter.getLocText("Plugin-ChartF_NewForceBubble") + }; + } + + /** + * 返回界面标题 + * @return 界面标题 + */ + public String title4PopupWindow() { + return Inter.getLocText("Plugin-ChartF_NewBubble"); + } + + /** + * 更新界面内容 + */ + public void populateBean(Chart chart) { + for(ChartImagePane imagePane : typeDemo) { + imagePane.isPressing = false; + } + + + Plot plot = chart.getPlot(); + if(plot instanceof VanChartBubblePlot && ((VanChartBubblePlot)plot).isForceBubble()){ + lastTypeIndex = BubblePlotType.FORCE.ordinal(); + } else { + lastTypeIndex = BubblePlotType.NORMAL.ordinal(); + } + + typeDemo.get(lastTypeIndex).isPressing = true; + + checkDemosBackground(); + } + + private void removeDefaultAttr(ConditionAttr conditionAttr, Class targetClass) { + DataSeriesCondition attr = conditionAttr.getExisted(targetClass); + if (attr != null){ + conditionAttr.remove(targetClass); + } + } + + /** + * 获取各图表类型界面ID, 本质是plotID + * + * @return 图表类型界面ID + */ + @Override + protected String getPlotTypeID() { + return VanChartBubblePlot.VAN_CHART_BUBBLE_PLOT_ID; + } + + protected Plot getSelectedClonedPlot(){ + VanChartBubblePlot newPlot = null; + Chart[] bubbleChart = BubbleIndependentVanChart.BubbleVanChartTypes; + for(int i = 0, len = bubbleChart.length; i < len; i++){ + if(typeDemo.get(i).isPressing){ + newPlot = (VanChartBubblePlot)bubbleChart[i].getPlot(); + } + } + + Plot cloned = null; + try { + cloned = (Plot)newPlot.clone(); + } catch (CloneNotSupportedException e) { + FRLogger.getLogger().error("Error In BubbleChart"); + } + return cloned; + } + + public Chart getDefaultChart() { + return BubbleIndependentVanChart.BubbleVanChartTypes[0]; + } + + @Override + /** + * 力學氣泡圖切換到其他氣泡圖時,刪除條件屬性 + * 并且将bubbleAttr属性重置 + */ + protected void cloneOldConditionCollection(Plot oldPlot, Plot newPlot) throws CloneNotSupportedException{ + cloneOldDefaultAttrConditionCollection(oldPlot, newPlot); + } + + @Override + protected void cloneOldDefaultAttrConditionCollection(Plot oldPlot, Plot newPlot) throws CloneNotSupportedException{ + if (oldPlot.getConditionCollection() != null) { + ConditionCollection newCondition = new ConditionCollection(); + newCondition.setDefaultAttr((ConditionAttr) oldPlot.getConditionCollection().getDefaultAttr().clone()); + newPlot.setConditionCollection(newCondition); + + ConditionAttr attrList = newCondition.getDefaultAttr(); + + //根据气泡图类型,重设透明度属性 + removeDefaultAttr(attrList, AttrAlpha.class); + + //删除标签属性(防止切换到大数据气泡图标签属性会拷贝过去) + removeDefaultAttr(attrList, ScatterAttrLabel.class); + + AttrAlpha attrAlpha = new AttrAlpha(); + attrAlpha.setAlpha(((VanChartBubblePlot)newPlot).isForceBubble() ? FORCE_ALPHA : ALPHA); + + attrList.addDataSeriesCondition(attrAlpha); + } + } + + @Override + protected void cloneHotHyperLink(Plot oldPlot, Plot newPlot) throws CloneNotSupportedException { + if(oldPlot instanceof VanChartBubblePlot && newPlot instanceof VanChartBubblePlot){ + if(((VanChartBubblePlot) oldPlot).isForceBubble() == ((VanChartBubblePlot) newPlot).isForceBubble()){ + super.cloneHotHyperLink(oldPlot, newPlot); + } + } + } + + @Override + protected VanChartTools createVanChartTools() { + VanChartTools tools = new VanChartTools(); + tools.setSort(false); + return tools; + } + + /** + * 气泡图相同图表类型之间切换的时候,chart的部分属性也需要重置 + * @param chart + */ + @Override + protected void resetChartAttr4SamePlot(Chart chart){ + VanChartZoom vanChartZoom = new VanChartZoom(); + ((VanChart)chart).setVanChartZoom(vanChartZoom); + //重置监控刷新选项 + resetRefreshMoreLabelAttr((VanChart)chart); + } +} diff --git a/designer_chart/src/com/fr/plugin/chart/bubble/VanChartBubbleSeriesPane.java b/designer_chart/src/com/fr/plugin/chart/bubble/VanChartBubbleSeriesPane.java new file mode 100644 index 0000000000..6c9be8ef10 --- /dev/null +++ b/designer_chart/src/com/fr/plugin/chart/bubble/VanChartBubbleSeriesPane.java @@ -0,0 +1,92 @@ +package com.fr.plugin.chart.bubble; + +import com.fr.chart.chartattr.Plot; +import com.fr.chart.chartglyph.ConditionAttr; +import com.fr.design.beans.BasicBeanPane; +import com.fr.design.layout.TableLayout; +import com.fr.design.layout.TableLayoutHelper; +import com.fr.design.mainframe.chart.gui.ChartStylePane; +import com.fr.general.Inter; +import com.fr.plugin.chart.base.VanChartAttrBubble; +import com.fr.plugin.chart.bubble.component.VanChartBubblePane; +import com.fr.plugin.chart.custom.component.VanChartCustomAxisConditionPane; +import com.fr.plugin.chart.designer.TableLayout4VanChartHelper; +import com.fr.plugin.chart.designer.style.series.VanChartAbstractPlotSeriesPane; +import com.fr.plugin.chart.designer.style.series.VanChartCustomStackAndAxisEditPane; + +import javax.swing.*; +import java.awt.*; + +/** + * Created by Mitisky on 16/3/31. + */ +public class VanChartBubbleSeriesPane extends VanChartAbstractPlotSeriesPane { + private static final long serialVersionUID = 5595016643808487932L; + private VanChartBubblePane bubblePane; + + public VanChartBubbleSeriesPane(ChartStylePane parent, Plot plot) { + super(parent, plot); + } + + protected JPanel getContentInPlotType() { + + double p = TableLayout.PREFERRED; + double f = TableLayout.FILL; + double[] row = {p, p, p, p, p, p}; + double[] col = {f}; + + Component[][] components = new Component[][]{ + new Component[]{createBubblePane()}, + new Component[]{new JSeparator()}, + new Component[]{createStackedAndAxisPane()}, + new Component[]{createAlphaPane()}, + new Component[]{new JSeparator()}, + new Component[]{createLargeDataModelPane()} + + }; + + contentPane = TableLayoutHelper.createTableLayoutPane(components, row, col); + return contentPane; + } + + @Override + //堆积和坐标轴设置(自定义柱形图等用到) + protected JPanel createStackedAndAxisPane() { + stackAndAxisEditPane = new VanChartCustomStackAndAxisEditPane(){ + @Override + protected Class getStackAndAxisPaneClass() { + return VanChartCustomAxisConditionPane.class; + } + + @Override + protected String getPaneTitle(){ + return Inter.getLocText("Plugin-ChartF_Custom_Axis"); + } + }; + return stackAndAxisEditPane; + } + + private JPanel createBubblePane() { + bubblePane = new VanChartBubblePane(); + return TableLayout4VanChartHelper.createTableLayoutPaneWithTitle(Inter.getLocText("Plugin-ChartF_Bubble"), bubblePane); + } + + protected void populateCondition(ConditionAttr defaultAttr){ + super.populateCondition(defaultAttr); + if(bubblePane != null) { + VanChartAttrBubble attrBubble = (VanChartAttrBubble) defaultAttr.getExisted(VanChartAttrBubble.class); + bubblePane.populateBean(attrBubble); + } + } + + protected void updateCondition(ConditionAttr defaultAttr){ + super.updateCondition(defaultAttr); + if(bubblePane != null){ + VanChartAttrBubble attrBubble = (VanChartAttrBubble) defaultAttr.getExisted(VanChartAttrBubble.class); + if (attrBubble != null) { + defaultAttr.remove(attrBubble); + } + defaultAttr.addDataSeriesCondition(bubblePane.updateBean()); + } + } +} diff --git a/designer_chart/src/com/fr/plugin/chart/bubble/VanChartBubbleStylePane.java b/designer_chart/src/com/fr/plugin/chart/bubble/VanChartBubbleStylePane.java new file mode 100644 index 0000000000..e3e76be69b --- /dev/null +++ b/designer_chart/src/com/fr/plugin/chart/bubble/VanChartBubbleStylePane.java @@ -0,0 +1,57 @@ +package com.fr.plugin.chart.bubble; + +import com.fr.chart.chartattr.Plot; +import com.fr.design.dialog.BasicPane; +import com.fr.design.gui.frpane.AttributeChangeListener; +import com.fr.design.mainframe.chart.gui.style.series.ChartSeriesPane; +import com.fr.plugin.chart.bubble.force.VanChartForceBubbleAreaPane; +import com.fr.plugin.chart.bubble.force.VanChartForceBubbleLabelPane; +import com.fr.plugin.chart.bubble.force.VanChartForceBubbleTooltipPane; +import com.fr.plugin.chart.designer.style.background.VanChartAreaPane; +import com.fr.plugin.chart.scatter.component.VanChartScatterStylePane; + +import java.util.List; + +/** + * Created by Mitisky on 16/3/31. + */ +public class VanChartBubbleStylePane extends VanChartScatterStylePane { + + public VanChartBubbleStylePane(AttributeChangeListener listener) { + super(listener); + } + + @Override + protected void createVanChartLabelPane(List paneList) { + Plot plot = getChart().getPlot(); + + if(((VanChartBubblePlot) plot).isForceBubble()){ + paneList.add(new VanChartForceBubbleLabelPane(VanChartBubbleStylePane.this)); + } else { + super.createVanChartLabelPane(paneList); + } + } + + protected void addVanChartTooltipPane(List paneList){ + Plot plot = getChart().getPlot(); + if(((VanChartBubblePlot) plot).isForceBubble()){ + paneList.add(new VanChartForceBubbleTooltipPane(VanChartBubbleStylePane.this)); + } else { + super.addVanChartTooltipPane(paneList); + } + } + + @Override + protected void addVanChartAreaPane(List paneList) { + if (((VanChartBubblePlot)getChart().getPlot()).isForceBubble()){ + paneList.add(new VanChartForceBubbleAreaPane(getChart().getPlot(), VanChartBubbleStylePane.this)); + }else { + paneList.add(new VanChartAreaPane(getChart().getPlot(), VanChartBubbleStylePane.this)); + } + } + + @Override + protected ChartSeriesPane createChartSeriesPane() { + return new ChartSeriesPane(VanChartBubbleStylePane.this); + } +} diff --git a/designer_chart/src/com/fr/plugin/chart/bubble/component/VanChartBubblePane.java b/designer_chart/src/com/fr/plugin/chart/bubble/component/VanChartBubblePane.java new file mode 100644 index 0000000000..563341380e --- /dev/null +++ b/designer_chart/src/com/fr/plugin/chart/bubble/component/VanChartBubblePane.java @@ -0,0 +1,74 @@ +package com.fr.plugin.chart.bubble.component; + +import com.fr.design.beans.BasicBeanPane; +import com.fr.design.gui.ibutton.UIButtonGroup; +import com.fr.design.gui.ilable.UILabel; +import com.fr.design.gui.ispinner.UISpinner; +import com.fr.design.layout.TableLayout; +import com.fr.design.layout.TableLayoutHelper; +import com.fr.general.Inter; +import com.fr.plugin.chart.base.VanChartAttrBubble; + +import javax.swing.*; +import java.awt.*; + +/** + * Created by Mitisky on 16/3/31. + * 气泡大小等设置界面 + */ +public class VanChartBubblePane extends BasicBeanPane { + private UISpinner minDiameter; + private UISpinner maxDiameter; + private UIButtonGroup shadow; + private UIButtonGroup displayNegative; + + public VanChartBubblePane(){ + minDiameter = new UISpinner(0,Double.MAX_VALUE,1,0); + maxDiameter = new UISpinner(0,Double.MAX_VALUE,1,0); + shadow = new UIButtonGroup(new String[]{Inter.getLocText("Plugin-ChartF_Open"), + Inter.getLocText("Plugin-ChartF_Close")}); + displayNegative = new UIButtonGroup(new String[]{Inter.getLocText("Plugin-ChartF_Open"), + Inter.getLocText("Plugin-ChartF_Close")}); + + double p = TableLayout.PREFERRED; + double f = TableLayout.FILL; + double[] row = {p, p, p, p}; + double[] col = {p, f}; + + Component[][] components = new Component[][]{ + new Component[]{new UILabel(Inter.getLocText("Plugin-ChartF_MinDiameter")), minDiameter}, + new Component[]{new UILabel(Inter.getLocText("Plugin-ChartF_MaxDiameter")), maxDiameter}, + new Component[]{new UILabel(Inter.getLocText("Plugin-ChartF_Shadow")), shadow}, + new Component[]{new UILabel(Inter.getLocText("Plugin-ChartF_DisplayNegative")), displayNegative}, + + }; + JPanel content = TableLayoutHelper.createTableLayoutPane(components, row, col); + + this.setLayout(new BorderLayout()); + this.add(content, BorderLayout.CENTER); + } + + public void populateBean(VanChartAttrBubble bubble) { + if(bubble == null){ + bubble = new VanChartAttrBubble(); + } + minDiameter.setValue(bubble.getMinDiameter()); + maxDiameter.setValue(bubble.getMaxDiameter()); + shadow.setSelectedIndex(bubble.isShadow() ? 0 : 1); + displayNegative.setSelectedIndex(bubble.isDisplayNegative() ? 0 : 1); + } + + public VanChartAttrBubble updateBean() { + VanChartAttrBubble bubble = new VanChartAttrBubble(); + bubble.setMinDiameter(minDiameter.getValue()); + bubble.setMaxDiameter(maxDiameter.getValue()); + bubble.setShadow(shadow.getSelectedIndex() == 0); + bubble.setDisplayNegative(displayNegative.getSelectedIndex() == 0); + return bubble; + } + + @Override + public String title4PopupWindow() { + return Inter.getLocText("Plugin-ChartF_Bubble"); + } +} diff --git a/designer_chart/src/com/fr/plugin/chart/bubble/data/VanChartBubblePlotTableDataContentPane.java b/designer_chart/src/com/fr/plugin/chart/bubble/data/VanChartBubblePlotTableDataContentPane.java new file mode 100644 index 0000000000..007a1490db --- /dev/null +++ b/designer_chart/src/com/fr/plugin/chart/bubble/data/VanChartBubblePlotTableDataContentPane.java @@ -0,0 +1,184 @@ +package com.fr.plugin.chart.bubble.data; + +import com.fr.base.chart.chartdata.TopDefinitionProvider; +import com.fr.chart.base.ChartConstants; +import com.fr.chart.chartattr.BubblePlot; +import com.fr.chart.chartattr.ChartCollection; +import com.fr.chart.chartdata.BubbleTableDefinition; +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.layout.TableLayout; +import com.fr.design.layout.TableLayoutHelper; +import com.fr.design.mainframe.chart.gui.ChartDataPane; +import com.fr.design.mainframe.chart.gui.data.ChartDataFilterPane; +import com.fr.design.mainframe.chart.gui.data.table.AbstractTableDataContentPane; +import com.fr.general.ComparatorUtils; +import com.fr.general.Inter; +import com.fr.stable.ArrayUtils; +import com.fr.stable.StringUtils; + +import javax.swing.*; +import java.awt.*; +import java.util.List; + +public class VanChartBubblePlotTableDataContentPane extends AbstractTableDataContentPane { + + private static final Dimension PREFERRED_SIZE = new Dimension(100, 20); + protected UIComboBox seriesName; + protected UIComboBox xCombox; + protected UIComboBox yCombox; + protected UIComboBox bubbleSize; + + private ChartDataFilterPane dataScreeningPane; + + public VanChartBubblePlotTableDataContentPane(ChartDataPane parent) { + seriesName = new UIComboBox(); + xCombox = new UIComboBox(); + yCombox = new UIComboBox(); + + dataScreeningPane = new ChartDataFilterPane(new BubblePlot(), parent); + + seriesName.setPreferredSize(PREFERRED_SIZE); + xCombox.setPreferredSize(PREFERRED_SIZE); + yCombox.setPreferredSize(PREFERRED_SIZE); + + seriesName.addItem(Inter.getLocText("Chart-Use_None")); + + initBubbleSize(); + + double p = TableLayout.PREFERRED; + double f = TableLayout.FILL; + double[] columnSize = {f}; + double[] rowSize = { p, p,p,p}; + + double[] columnSize_north = {p, f}; + double[] rowSize_north = {p, p, p, p}; + + Component[][] components_north = new Component[][]{ + new Component[]{new UILabel(Inter.getLocText("Chart-Series_Name")+":", SwingConstants.RIGHT), seriesName}, + new Component[]{new UILabel("x :", SwingConstants.RIGHT), xCombox}, + new Component[]{new UILabel("y :", SwingConstants.RIGHT), yCombox}, + new Component[]{new UILabel(Inter.getLocText("FR-Chart_Bubble_Size")+":", SwingConstants.RIGHT), bubbleSize}, + }; + + JPanel north = TableLayoutHelper.createTableLayoutPane(components_north,rowSize_north,columnSize_north); + north.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 1)); + + Component[][] components = new Component[][]{ + new Component[]{north}, + new Component[]{new JSeparator()}, + new Component[]{new BoldFontTextLabel(Inter.getLocText("Chart-Data_Filter"))}, + new Component[]{dataScreeningPane} + }; + + + JPanel panel = TableLayoutHelper.createTableLayoutPane(components, rowSize, columnSize); + this.setLayout(new BorderLayout()); + this.add(panel, BorderLayout.CENTER); + + seriesName.addItemListener(tooltipListener); + xCombox.addItemListener(tooltipListener); + yCombox.addItemListener(tooltipListener); + bubbleSize.addItemListener(tooltipListener); + } + + protected void initBubbleSize() { + bubbleSize = new UIComboBox(); + bubbleSize.setPreferredSize(new Dimension(100, 20)); + } + + /** + * 检查box是否使用, donothing + * @param hasUse 是否使用. + */ + public void checkBoxUse(boolean hasUse) { + + } + + protected void refreshBoxListWithSelectTableData(List list) { + refreshBoxItems(seriesName, list); + seriesName.addItem(Inter.getLocText("Chart-Use_None")); + refreshBoxItems(xCombox, list); + refreshBoxItems(yCombox, list); + refreshBoxItems(bubbleSize, list); + } + + /** + * 清空所有的box设置 + */ + public void clearAllBoxList(){ + clearBoxItems(seriesName); + seriesName.addItem(Inter.getLocText("Chart-Use_None")); + clearBoxItems(xCombox); + clearBoxItems(yCombox); + clearBoxItems(bubbleSize); + } + + @Override + public void populateBean(ChartCollection collection) { + super.populateBean(collection); + TopDefinitionProvider top = collection.getSelectedChart().getFilterDefinition(); + if (!(top instanceof BubbleTableDefinition)) { + return; + } + BubbleTableDefinition definition = (BubbleTableDefinition) top; + + if(definition.getSeriesName() == null || ComparatorUtils.equals(StringUtils.EMPTY, definition.getSeriesName())) { + seriesName.setSelectedItem(Inter.getLocText("Chart-Use_None")); + } else { + combineCustomEditValue(seriesName, definition.getSeriesName()); + } + + combineCustomEditValue(xCombox, definition.getBubbleX()); + combineCustomEditValue(yCombox, definition.getBubbleY()); + //气泡图不配置“无” + populateBubbleSize(definition); + + dataScreeningPane.populateBean(collection); + } + + protected void populateBubbleSize(BubbleTableDefinition definition) { + if (ComparatorUtils.equals(definition.getBubbleSize(), Inter.getLocText("Chart-Use_None"))){ + combineCustomEditValue(bubbleSize, StringUtils.EMPTY); + }else { + combineCustomEditValue(bubbleSize, definition.getBubbleSize()); + } + } + + @Override + public void updateBean(ChartCollection collection) { + BubbleTableDefinition definition = new BubbleTableDefinition(); + collection.getSelectedChart().setFilterDefinition(definition); + + Object resultName = seriesName.getSelectedItem(); + Object resultX = xCombox.getSelectedItem(); + Object resultY = yCombox.getSelectedItem(); + Object resultSize = bubbleSize.getSelectedItem(); + + if(resultName == null || ArrayUtils.contains(ChartConstants.getNoneKeys(), resultName)) { + definition.setSeriesName(StringUtils.EMPTY); + } else { + definition.setSeriesName(resultName.toString()); + } + + if (resultX != null) { + definition.setBubbleX(resultX.toString()); + } + if (resultY != null) { + definition.setBubbleY(resultY.toString()); + } + if (resultSize != null) { + definition.setBubbleSize(resultSize.toString()); + } + + dataScreeningPane.updateBean(collection); + } + + /** + * 重新布局 + */ + public void redoLayoutPane(){ + dataScreeningPane.relayoutPane(this.isNeedSummaryCaculateMethod()); + } +} \ No newline at end of file diff --git a/designer_chart/src/com/fr/plugin/chart/bubble/force/VanChartBubbleRefreshTooltipPane.java b/designer_chart/src/com/fr/plugin/chart/bubble/force/VanChartBubbleRefreshTooltipPane.java new file mode 100644 index 0000000000..5db33768ce --- /dev/null +++ b/designer_chart/src/com/fr/plugin/chart/bubble/force/VanChartBubbleRefreshTooltipPane.java @@ -0,0 +1,28 @@ +package com.fr.plugin.chart.bubble.force; + +import com.fr.chart.chartattr.Plot; +import com.fr.plugin.chart.bubble.VanChartBubblePlot; +import com.fr.plugin.chart.designer.component.VanChartRefreshTooltipContentPane; +import com.fr.plugin.chart.designer.component.VanChartTooltipContentPane; +import com.fr.plugin.chart.designer.style.tooltip.VanChartPlotRefreshTooltipPane; +import com.fr.plugin.chart.scatter.VanChartScatterRefreshTooltipContentPane; + +/** + * Created by mengao on 2017/6/12. + */ +public class VanChartBubbleRefreshTooltipPane extends VanChartPlotRefreshTooltipPane { + + public VanChartBubbleRefreshTooltipPane(Plot plot) { + super(plot); + } + + @Override + protected VanChartTooltipContentPane getTooltipContentPane(Plot plot){ + if (((VanChartBubblePlot)plot).isForceBubble()) { + return new VanChartRefreshTooltipContentPane(parent, VanChartBubbleRefreshTooltipPane.this); + } else { + return new VanChartScatterRefreshTooltipContentPane(parent, VanChartBubbleRefreshTooltipPane.this); + } + + } +} diff --git a/designer_chart/src/com/fr/plugin/chart/bubble/force/VanChartForceBubbleAreaBackgroundPane.java b/designer_chart/src/com/fr/plugin/chart/bubble/force/VanChartForceBubbleAreaBackgroundPane.java new file mode 100644 index 0000000000..39e0b57deb --- /dev/null +++ b/designer_chart/src/com/fr/plugin/chart/bubble/force/VanChartForceBubbleAreaBackgroundPane.java @@ -0,0 +1,23 @@ +package com.fr.plugin.chart.bubble.force; + +import com.fr.design.gui.frpane.AbstractAttrNoScrollPane; +import com.fr.plugin.chart.designer.style.background.VanChartAreaBackgroundPane; + +import java.awt.*; + +//图表区|绘图区 边框和背景 +public class VanChartForceBubbleAreaBackgroundPane extends VanChartAreaBackgroundPane { + + + public VanChartForceBubbleAreaBackgroundPane(boolean isPlot, AbstractAttrNoScrollPane parent) { + super(isPlot, parent); + } + + @Override + protected Component[][] initComponents() { + return new Component[][]{ + new Component[]{chartBorderPane}, + new Component[]{chartBackgroundPane}, + }; + } +} \ No newline at end of file diff --git a/designer_chart/src/com/fr/plugin/chart/bubble/force/VanChartForceBubbleAreaPane.java b/designer_chart/src/com/fr/plugin/chart/bubble/force/VanChartForceBubbleAreaPane.java new file mode 100644 index 0000000000..1e5c780f7e --- /dev/null +++ b/designer_chart/src/com/fr/plugin/chart/bubble/force/VanChartForceBubbleAreaPane.java @@ -0,0 +1,26 @@ +package com.fr.plugin.chart.bubble.force; + +import com.fr.chart.chartattr.Plot; + +import com.fr.design.gui.frpane.AbstractAttrNoScrollPane; + + +import com.fr.plugin.chart.designer.style.VanChartStylePane; + +import com.fr.plugin.chart.designer.style.background.VanChartAreaPane; + + +/** + * 属性表, 图表样式-背景界面. + */ +public class VanChartForceBubbleAreaPane extends VanChartAreaPane { + + public VanChartForceBubbleAreaPane(Plot plot, VanChartStylePane parent) { + super(plot, parent); + } + + @Override + protected void initPlotPane(boolean b, AbstractAttrNoScrollPane parent) { + plotPane = new VanChartForceBubbleAreaBackgroundPane(true, parent); + } +} \ No newline at end of file diff --git a/designer_chart/src/com/fr/plugin/chart/bubble/force/VanChartForceBubbleLabelPane.java b/designer_chart/src/com/fr/plugin/chart/bubble/force/VanChartForceBubbleLabelPane.java new file mode 100644 index 0000000000..4886c9f1dd --- /dev/null +++ b/designer_chart/src/com/fr/plugin/chart/bubble/force/VanChartForceBubbleLabelPane.java @@ -0,0 +1,19 @@ +package com.fr.plugin.chart.bubble.force; + +import com.fr.chart.chartattr.Plot; +import com.fr.plugin.chart.designer.style.VanChartStylePane; +import com.fr.plugin.chart.designer.style.label.VanChartLabelPane; +import com.fr.plugin.chart.designer.style.label.VanChartPlotLabelPane; + +/** + * Created by Mitisky on 16/3/31. + */ +public class VanChartForceBubbleLabelPane extends VanChartLabelPane { + public VanChartForceBubbleLabelPane(VanChartStylePane parent) { + super(parent); + } + + protected VanChartPlotLabelPane getLabelPane(Plot plot) { + return new VanChartPlotLabelPane(plot, parent); + } +} diff --git a/designer_chart/src/com/fr/plugin/chart/bubble/force/VanChartForceBubbleTooltipPane.java b/designer_chart/src/com/fr/plugin/chart/bubble/force/VanChartForceBubbleTooltipPane.java new file mode 100644 index 0000000000..67f1412aa6 --- /dev/null +++ b/designer_chart/src/com/fr/plugin/chart/bubble/force/VanChartForceBubbleTooltipPane.java @@ -0,0 +1,18 @@ +package com.fr.plugin.chart.bubble.force; + +import com.fr.chart.chartattr.Plot; +import com.fr.plugin.chart.designer.style.VanChartStylePane; +import com.fr.plugin.chart.designer.style.tooltip.VanChartPlotTooltipPane; +import com.fr.plugin.chart.designer.style.tooltip.VanChartTooltipPane; + +/** + * Created by Mitisky on 16/3/31. + */ +public class VanChartForceBubbleTooltipPane extends VanChartTooltipPane { + public VanChartForceBubbleTooltipPane(VanChartStylePane parent) { + super(parent); + } + protected VanChartPlotTooltipPane getTooltipPane(Plot plot) { + return new VanChartPlotTooltipPane(plot, parent); + } +} diff --git a/designer_chart/src/com/fr/plugin/chart/bubble/images/bubble.png b/designer_chart/src/com/fr/plugin/chart/bubble/images/bubble.png new file mode 100644 index 0000000000000000000000000000000000000000..86853335dd793607712627eb2b4c00f22c8fd79e GIT binary patch literal 693 zcmV;m0!safP)400009a7bBm000XU z000XU0RWnu7ytkO8FWQhbW?9;ba!ELWdK2BZ(?O2No`?gWm08fWO;GPWjp`?0zyed zK~#9!?3h1DLQxdPpV1Jw)KsHQO+qcz7U*2)=o;#*;1D{fL((9qt3_+0QnNx^w4^vS z<(MtC2yS%_d=D-!O|M*iYUc-s+dJ_g`mcW_v}ByzDb3aQKNQb{ixBh&WD*!U9QRIm_1EL?fwZG&NW#SnG)4)L`J(V zrK1n&l^Ie~&NRH_^rQ6cT64l!M3s;Bj@jyU>|ZXS$_NRJ*%QFNxnjB* zkIBNS^WwG0Y0n3PkmBZMmAu+Z8Hv2{lM&{m-F><7^pUOsh~z^<&LQ%J?33(H+0UJI zi|oLJSmP%n7Qu58V$+Va4iA~1C5TKzqY}ENBgJu00aVKW;mYc-DlYYPJ!D$QVv48Qd;n@as}Xf literal 0 HcmV?d00001 diff --git a/designer_chart/src/com/fr/plugin/chart/bubble/images/force.png b/designer_chart/src/com/fr/plugin/chart/bubble/images/force.png new file mode 100644 index 0000000000000000000000000000000000000000..d6a7304a30c81e8d9d21586d579cbbb4cfa64824 GIT binary patch literal 772 zcmV+f1N;1mP)400009a7bBm000XU z000XU0RWnu7ytkO8FWQhbW?9;ba!ELWdK2BZ(?O2No`?gWm08fWO;GPWjp`?0+C5X zK~#9!>{zi*BQX%&AU=R}R1kE!ez&1OLQwDl+3vm|4HQH=(Z<^%BvL?=hEK?T00jt% z;+m|kp+F}B70rqKK^Vh0a+cYRLu@Y+^CZhz$8r32W}asp1Plg)!C){LjCa(0{n5_J zvw*IHkID7#RpFE9vWrFc4lW1Kh0wCgv%Lt1JK7Za*(=c{N9%^UzH%%(S~pV`)y5Lt zb=BbEO?E0fZCCK72393Il65z^ak0Sh9M&pe6eTQ)6jaATutS03>Vc z=l|q-7tmIqjpXkh_kUb@Ro$)QdjV~XO%O*&8PvRP5l`$D$pHKQXZO3v@zNnahx5cW zs%w`LB8{Am6|i!{tLsWj>d!~NUN)e6m}7|zaNl9s1R(X2BRc}ut@{?EsdG_o8e-J= z$BLvB9q8mS)6~OVs&4;p5Tmli~U4 zwQ8{;Mk7KIhbS~D3W_a|1%WT3q#{!BRFdJOGu-#>WnoN;N-T;Sts5i~q9DVmW8%JB zqPp!bQ+UfVO_ozwuFVzCcyvUBo2Tk%Ft$L&JdyEC745{B zm6~*6qWY~uev^~uy9fDPH?-E&*rHb`uI`M&vfj{I)@~JC63uTi|2)%Lwk+s0sdssi z#;|SCR;$&Rv#@rKUawbU6EYYK27|$1Fuprp1sDKpjT_%6IN?VC0000400009a7bBm000XU z000XU0RWnu7ytkO8FWQhbW?9;ba!ELWdK2BZ(?O2No`?gWm08fWO;GPWjp`?0?kQ8 zK~#9!>{l^s+dveSf=dfooUu!46EYSQ0!=7nvG!tb%@~Nibg4UJNCqcEGIXgkba4uy zzrdoqOQ8@x#!#}H|VD~OGgtwnFx`7=`_3X(j7*rE1#l*!XX6qS4r(WW*H zDrbhBoSNjypMPw;*@g4dtA}dlA)ysA7+V1_I{xUqfv_}i0tSe=hQw$xux@=#j5K$DcHz_^yA zY+D(3PHJcBpKes^OVzj}O`DNWvJvvVLEkG<-$P|g_GY85IUPz(Ox1mA3*#)#Wa>JU zt~y{UZVTg~Jt~w%((BZ3fqEaHnKQMxl%cd0Hs6aF+7sjR^G+F!C(Lzqj+|I!6jY^b zJ?+*>(WYkVDk=(l)E?s4DUw+UM@F@e;*yQ4XrJ}ddyAfRL~}GQ>Ku)7HA*5Il4o{iqx-lKb-OI6r=X>!#S`T_Dex~dcnI@N?DpNBYd zVnosE>uQyP#Q>g@M0Q)Lj0$pPq*D$3iuPonBTwv_rq-osPH;SU5r*TFqVJ^cClH&U znr+&3O`W4b=Hx~E1noIWq{@cYXRI getPlotSeriesPane(ChartStylePane parent, Plot plot){ + return new VanChartColumnSeriesPane(parent, plot); + } + + public String getPlotTypeTitle4PopupWindow(){ + return VanChartColumnPlotPane.TITLE; + } +} \ No newline at end of file diff --git a/designer_chart/src/com/fr/plugin/chart/column/VanChartColumnConditionPane.java b/designer_chart/src/com/fr/plugin/chart/column/VanChartColumnConditionPane.java new file mode 100644 index 0000000000..7bec7744b7 --- /dev/null +++ b/designer_chart/src/com/fr/plugin/chart/column/VanChartColumnConditionPane.java @@ -0,0 +1,82 @@ +package com.fr.plugin.chart.column; + +import com.fr.chart.base.AttrAlpha; +import com.fr.chart.base.AttrBackground; +import com.fr.chart.base.AttrBorder; +import com.fr.chart.base.ChartConstants; +import com.fr.chart.chartattr.Plot; +import com.fr.design.chart.series.SeriesCondition.ChartConditionPane; +import com.fr.design.chart.series.SeriesCondition.DataSeriesConditionPane; +import com.fr.design.chart.series.SeriesCondition.LabelAlphaPane; +import com.fr.plugin.chart.attr.AttrDataSheet; +import com.fr.plugin.chart.base.AttrTooltip; +import com.fr.plugin.chart.attr.EffectHelper; +import com.fr.plugin.chart.base.*; +import com.fr.plugin.chart.designer.other.condition.item.*; +import com.fr.plugin.chart.glyph.VanChartMultiCategoryDataPoint; + +import java.awt.*; + +/** + * Created by Mitisky on 15/9/28. + */ +public class VanChartColumnConditionPane extends DataSeriesConditionPane{ + private static final long serialVersionUID = -7180705321732069806L; + + public VanChartColumnConditionPane(Plot plot) { + super(plot); + } + + protected void initComponents() { + super.initComponents(); + //添加全部条件属性后被遮挡 + liteConditionPane.setPreferredSize(new Dimension(300, 400)); + } + + @Override + protected void addBasicAction() { + classPaneMap.put(AttrBackground.class, new VanChartSeriesColorConditionPane(this)); + classPaneMap.put(AttrAlpha.class, new LabelAlphaPane(this)); + classPaneMap.put(AttrBorder.class, new VanChartColumnLabelBorderPane(this)); + classPaneMap.put(AttrLabel.class, new VanChartLabelConditionPane(this, plot)); + classPaneMap.put(AttrFloatColor.class, new VanChartFloatColorConditionPane(this)); + classPaneMap.put(VanChartAttrTrendLine.class, new VanChartTrendLineConditionPane(this)); + classPaneMap.put(AttrSeriesImageBackground.class, new VanChartSeriesImageBackgroundConditionPane(this)); + classPaneMap.put(AttrEffect.class, new VanChartEffectConditionPane(this, EffectHelper.getColumnPlotDefaultEffect())); + classPaneMap.put(AttrTooltip.class, new VanChartTooltipConditionPane(this, plot)); + //是否使用数据表 + //自定义柱形图设置多X坐标轴时,不支持数据表 + if (plot.getDataSheet().isVisible() && ((VanChartColumnPlot) plot).getXAxisList().size() == 1) { + classPaneMap.put(AttrDataSheet.class, new VanChartDataSheetContentPane(this, plot)); + } + } + + protected void addStyleAction() { + + } + + @Override + protected ChartConditionPane createListConditionPane() { + return new ChartConditionPane(){ + @Override + public String[] columns2Populate() { + return new String[]{ + ChartConstants.CATEGORY_INDEX, + ChartConstants.CATEGORY_NAME, + ChartConstants.SERIES_INDEX, + ChartConstants.SERIES_NAME, + ChartConstants.VALUE, + VanChartMultiCategoryDataPoint.CATEGORY_ARRAY, + }; + } + }; + } + + /** + * 返回图表class对象 + * @return class对象 + */ + public Class class4Correspond() { + return VanChartColumnPlot.class; + } +} \ No newline at end of file diff --git a/designer_chart/src/com/fr/plugin/chart/column/VanChartColumnLabelBorderPane.java b/designer_chart/src/com/fr/plugin/chart/column/VanChartColumnLabelBorderPane.java new file mode 100644 index 0000000000..6dc0f3ccd1 --- /dev/null +++ b/designer_chart/src/com/fr/plugin/chart/column/VanChartColumnLabelBorderPane.java @@ -0,0 +1,34 @@ +package com.fr.plugin.chart.column; +import com.fr.chart.base.AttrBorder; +import com.fr.chart.base.DataSeriesCondition; +import com.fr.design.chart.comp.BorderAttriPane; +import com.fr.design.chart.series.SeriesCondition.LabelBorderPane; +import com.fr.design.condition.ConditionAttributesPane; + +/** + * Created by hufan on 2016/8/11. + */ +public class VanChartColumnLabelBorderPane extends LabelBorderPane { + public VanChartColumnLabelBorderPane(ConditionAttributesPane conditionAttributesPane) { + super(conditionAttributesPane); + } + + @Override + protected BorderAttriPane initBorderAttrPane(){ + return new ColumnBorderAttriPane(); + } + + public void populate(DataSeriesCondition condition) { + super.populate(condition); + if (condition instanceof AttrBorder) { + ((ColumnBorderAttriPane)linePane).setRadius(attrBorder.getRoundRadius()); + } + } + + public DataSeriesCondition update() { + super.update(); + attrBorder.setRoundRadius((int) ((ColumnBorderAttriPane)linePane).getRadius()); + attrBorder.setRoundBorder(true); + return attrBorder; + } +} diff --git a/designer_chart/src/com/fr/plugin/chart/column/VanChartColumnPlotPane.java b/designer_chart/src/com/fr/plugin/chart/column/VanChartColumnPlotPane.java new file mode 100644 index 0000000000..978823b573 --- /dev/null +++ b/designer_chart/src/com/fr/plugin/chart/column/VanChartColumnPlotPane.java @@ -0,0 +1,96 @@ +package com.fr.plugin.chart.column; + +import com.fr.chart.chartattr.Chart; +import com.fr.chart.chartattr.Plot; +import com.fr.design.mainframe.chart.gui.type.ChartImagePane; +import com.fr.general.FRLogger; +import com.fr.general.Inter; +import com.fr.plugin.chart.designer.type.AbstractVanChartTypePane; + +/** + * Created by Mitisky on 15/9/24. + */ +public class VanChartColumnPlotPane extends AbstractVanChartTypePane { + public static final String TITLE = Inter.getLocText("Plugin-ChartF_NewColumn"); + + private static final long serialVersionUID = 5950923001789733745L; + + + @Override + protected String[] getTypeIconPath() { + return new String[]{"/com/fr/plugin/chart/column/images/column.png", + "/com/fr/plugin/chart/column/images/stack.png", + "/com/fr/plugin/chart/column/images/percentstack.png", + "/com/fr/plugin/chart/column/images/custom.png", + }; + } + + @Override + protected String[] getTypeTipName() { + String column = Inter.getLocText("FR-Chart-Type_Column"); + String stack = Inter.getLocText("FR-Chart-Type_Stacked"); + String percent = Inter.getLocText("FR-Chart-Use_Percent"); + return new String[]{ + column, + stack + column, + percent + stack + column, + Inter.getLocText("FR-Chart-Mode_Custom") + }; + } + + /** + * 返回界面标题 + * @return 界面标题 + */ + public String title4PopupWindow() { + return Inter.getLocText("Plugin-ChartF_NewColumn"); + } + + /** + * 更新界面内容 + */ + public void populateBean(Chart chart) { + for(ChartImagePane imagePane : typeDemo) { + imagePane.isPressing = false; + } + Plot plot = chart.getPlot(); + if(plot instanceof VanChartColumnPlot) { + lastTypeIndex = ((VanChartColumnPlot)plot).getVanChartPlotType().ordinal(); + typeDemo.get(lastTypeIndex).isPressing = true; + } + checkDemosBackground(); + } + + /** + * 获取各图表类型界面ID, 本质是plotID + * + * @return 图表类型界面ID + */ + @Override + protected String getPlotTypeID() { + return VanChartColumnPlot.VAN_CHART_COLUMN_PLOT_ID; + } + + protected Plot getSelectedClonedPlot(){ + VanChartColumnPlot newPlot = null; + Chart[] columnChart = ColumnIndependentVanChart.ColumnVanChartTypes; + for(int i = 0, len = columnChart.length; i < len; i++){ + if(typeDemo.get(i).isPressing){ + newPlot = (VanChartColumnPlot)columnChart[i].getPlot(); + } + } + + Plot cloned = null; + try { + cloned = (Plot)newPlot.clone(); + } catch (CloneNotSupportedException e) { + FRLogger.getLogger().error("Error In ColumnChart"); + } + return cloned; + } + + public Chart getDefaultChart() { + return ColumnIndependentVanChart.ColumnVanChartTypes[0]; + } + +} \ No newline at end of file diff --git a/designer_chart/src/com/fr/plugin/chart/column/VanChartColumnSeriesPane.java b/designer_chart/src/com/fr/plugin/chart/column/VanChartColumnSeriesPane.java new file mode 100644 index 0000000000..cb418b1635 --- /dev/null +++ b/designer_chart/src/com/fr/plugin/chart/column/VanChartColumnSeriesPane.java @@ -0,0 +1,194 @@ +package com.fr.plugin.chart.column; + +import com.fr.base.background.ImageBackground; +import com.fr.chart.chartattr.Plot; +import com.fr.chart.chartglyph.ConditionAttr; +import com.fr.design.gui.frpane.UINumberDragPane; +import com.fr.design.gui.ibutton.UIButtonGroup; +import com.fr.design.gui.ilable.UILabel; +import com.fr.design.gui.ispinner.UISpinner; +import com.fr.design.layout.TableLayout; +import com.fr.design.layout.TableLayoutHelper; +import com.fr.design.mainframe.backgroundpane.ImageBackgroundQuickPane; +import com.fr.design.mainframe.chart.gui.ChartStylePane; +import com.fr.design.utils.gui.GUICoreUtils; +import com.fr.general.Inter; +import com.fr.plugin.chart.base.AttrSeriesImageBackground; +import com.fr.plugin.chart.designer.TableLayout4VanChartHelper; +import com.fr.plugin.chart.designer.component.border.VanChartBorderPane; +import com.fr.plugin.chart.designer.component.border.VanChartBorderWithRadiusPane; +import com.fr.plugin.chart.designer.style.series.VanChartAbstractPlotSeriesPane; +import com.fr.stable.Constants; + +import javax.swing.*; +import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; + +/** + * 新条形图系列界面 + */ +public class VanChartColumnSeriesPane extends VanChartAbstractPlotSeriesPane { + + private static final long serialVersionUID = -8875943419420081420L; + private UIButtonGroup isFixedWidth;//是否固定宽度 + private UISpinner columnWidth;//宽度 + + private UINumberDragPane categoryGap;//分类间隔 + private UINumberDragPane seriesGap;//系列间隔 + private UIButtonGroup isFillWithImage;//是否使用图片填充 + private ImageBackgroundQuickPane imagePane;//填充图片选择界面 + + public VanChartColumnSeriesPane(ChartStylePane parent, Plot plot) { + super(parent, plot); + } + + protected JPanel getContentInPlotType() { + double p = TableLayout.PREFERRED; + double f = TableLayout.FILL; + double[] columnSize = {f}; + double[] rowSize = {p,p,p,p,p,p,p,p,p,p}; + Component[][] components = new Component[][]{ + new Component[]{createStylePane()}, + new Component[]{stylePane == null ? null : new JSeparator()}, + new Component[]{createSeriesStylePane(new double[]{p,p}, new double[]{p,f})}, + new Component[]{new JSeparator()}, + new Component[]{createBorderPane()}, + new Component[]{createStackedAndAxisPane()}, + new Component[]{createTrendLinePane()}, + }; + + contentPane = TableLayoutHelper.createTableLayoutPane(components, rowSize, columnSize); + + return contentPane; + } + + //边框(有圆角) + protected VanChartBorderPane createDiffBorderPane() { + return new VanChartBorderWithRadiusPane(); + } + + private JPanel createSeriesStylePane(double[] row, double[] col) { + isFixedWidth = new UIButtonGroup(new String[]{Inter.getLocText("Plugin-ChartF_YES"), Inter.getLocText("Plugin-ChartF_NO")}); + columnWidth = new UISpinner(0,1000,1,0); + seriesGap = new UINumberDragPane(-100, 100); + categoryGap = new UINumberDragPane(0, 100); + isFillWithImage = new UIButtonGroup(new String[]{Inter.getLocText("Plugin-ChartF_YES"), Inter.getLocText("Plugin-ChartF_NO")}); + imagePane = new ImageBackgroundQuickPane(false); + + Component[][] components1 = new Component[][]{ + new Component[]{new UILabel(Inter.getLocText("Plugin-ChartF_Fixed_Column_Width")),isFixedWidth}, + new Component[]{null,columnWidth}, + }; + JPanel panel1 = TableLayoutHelper.createTableLayoutPane(components1, row, col); + + Component[][] components2 = new Component[][]{ + new Component[]{new UILabel(Inter.getLocText("FR-Chart-Gap_Series")),seriesGap}, + new Component[]{new UILabel(Inter.getLocText("FR-Chart-Gap_Category")),categoryGap}, + }; + JPanel panel2 = TableLayoutHelper.createTableLayoutPane(components2, row, col); + + Component[][] components3 = new Component[][]{ + new Component[]{new UILabel(Inter.getLocText("Plugin-ChartF_Filled_With_Image")),isFillWithImage}, + }; + JPanel panel3 = TableLayoutHelper.createTableLayoutPane(components3, row, col); + + JPanel panel = new JPanel(new BorderLayout(0, 4)); + panel.add(panel1, BorderLayout.NORTH); + panel.add(panel2, BorderLayout.CENTER); + panel.add(panel3, BorderLayout.SOUTH); + + JPanel borderPane = new JPanel(new BorderLayout()); + borderPane.add(panel, BorderLayout.NORTH); + borderPane.add(imagePane, BorderLayout.CENTER); + isFixedWidth.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + checkColumnWidth(); + } + }); + isFillWithImage.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + checkImagePane(); + } + }); + return TableLayout4VanChartHelper.createTableLayoutPaneWithTitle(Inter.getLocText("FR-Designer-Widget_Style"), borderPane); + } + + private void checkAll() { + checkColumnWidth(); + checkImagePane(); + } + + private void checkColumnWidth() { + columnWidth.setEnabled(isFixedWidth.getSelectedIndex() == 0); + } + + private void checkImagePane() { + GUICoreUtils.setEnabled(imagePane, isFillWithImage.getSelectedIndex() == 0); + } + + public void populateBean(Plot plot) { + if(plot == null) { + return; + } + super.populateBean(plot); + + if(plot instanceof VanChartColumnPlot){ + VanChartColumnPlot columnPlot4VanChart = (VanChartColumnPlot)plot; + + isFixedWidth.setSelectedIndex(columnPlot4VanChart.isFixedWidth() ? 0 : 1); + columnWidth.setValue(columnPlot4VanChart.getColumnWidth()); + categoryGap.populateBean(columnPlot4VanChart.getCategoryIntervalPercent()); + seriesGap.populateBean(columnPlot4VanChart.getSeriesOverlapPercent()); + isFillWithImage.setSelectedIndex(columnPlot4VanChart.isFilledWithImage() ? 0 : 1); + ConditionAttr defaultAttr = plot.getConditionCollection().getDefaultAttr(); + + if(columnPlot4VanChart.isFilledWithImage()){ + AttrSeriesImageBackground attrSeriesImageBackground = (AttrSeriesImageBackground)defaultAttr.getExisted(AttrSeriesImageBackground.class); + if(attrSeriesImageBackground != null){ + imagePane.populateBean(attrSeriesImageBackground.getSeriesBackground()); + } + } + } + checkAll(); + } + + public void updateBean(Plot plot) { + if(plot == null) { + return; + } + super.updateBean(plot); + + if(plot instanceof VanChartColumnPlot){ + VanChartColumnPlot columnPlot4VanChart = (VanChartColumnPlot)plot; + + columnPlot4VanChart.setFixedWidth(isFixedWidth.getSelectedIndex() == 0); + columnPlot4VanChart.setColumnWidth((int)columnWidth.getValue()); + columnPlot4VanChart.setCategoryIntervalPercent(categoryGap.updateBean()); + columnPlot4VanChart.setSeriesOverlapPercent(seriesGap.updateBean()); + columnPlot4VanChart.setFilledWithImage(isFillWithImage.getSelectedIndex() == 0); + ConditionAttr defaultAttr = plot.getConditionCollection().getDefaultAttr(); + if(isFillWithImage.getSelectedIndex() == 0){ + AttrSeriesImageBackground attrSeriesImageBackground = (AttrSeriesImageBackground)defaultAttr.getExisted(AttrSeriesImageBackground.class); + if(attrSeriesImageBackground == null){ + attrSeriesImageBackground = new AttrSeriesImageBackground(); + defaultAttr.addDataSeriesCondition(attrSeriesImageBackground); + } + attrSeriesImageBackground.setSeriesBackground(imagePane.updateBean()); + //设置背景图片平铺方式 + ImageBackground imageBackground = (ImageBackground) attrSeriesImageBackground.getSeriesBackground(); + if (imageBackground != null){ + imageBackground.setLayout(Constants.IMAGE_TILED); + } + + } else { + AttrSeriesImageBackground attrSeriesImageBackground = (AttrSeriesImageBackground)defaultAttr.getExisted(AttrSeriesImageBackground.class); + if(attrSeriesImageBackground != null){ + defaultAttr.remove(attrSeriesImageBackground); + } + } + } + } +} \ No newline at end of file diff --git a/designer_chart/src/com/fr/plugin/chart/column/VanChartCustomStackAndAxisConditionPane.java b/designer_chart/src/com/fr/plugin/chart/column/VanChartCustomStackAndAxisConditionPane.java new file mode 100644 index 0000000000..dfb8664e88 --- /dev/null +++ b/designer_chart/src/com/fr/plugin/chart/column/VanChartCustomStackAndAxisConditionPane.java @@ -0,0 +1,143 @@ +package com.fr.plugin.chart.column; + +import com.fr.chart.chartglyph.ConditionAttr; +import com.fr.data.condition.AbstractCondition; +import com.fr.data.condition.ListCondition; +import com.fr.design.beans.BasicBeanPane; +import com.fr.design.condition.LiteConditionPane; +import com.fr.design.gui.ibutton.UIButtonGroup; +import com.fr.design.gui.ilable.UILabel; +import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.design.layout.TableLayout; +import com.fr.design.layout.TableLayoutHelper; +import com.fr.design.utils.gui.GUICoreUtils; +import com.fr.general.Inter; +import com.fr.plugin.chart.base.AttrSeriesStackAndAxis; +import com.fr.plugin.chart.designer.style.series.VanChartSeriesConditionPane; + +import javax.swing.*; +import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; + +/** + * 堆积和坐标轴设置 + */ +public class VanChartCustomStackAndAxisConditionPane extends BasicBeanPane { + private static final long serialVersionUID = 2713124322060048526L; + + protected UIButtonGroup XAxis; + protected UIButtonGroup YAxis; + protected UIButtonGroup isStacked; + protected UIButtonGroup isPercentStacked; + + private LiteConditionPane liteConditionPane; + + public VanChartCustomStackAndAxisConditionPane(){ + + } + + private void doLayoutPane(){ + this.setLayout(new BoxLayout(this, BoxLayout.Y_AXIS)); + + //配置界面 + JPanel deployPane = FRGUIPaneFactory.createBorderLayout_L_Pane(); + this.add(deployPane); + + deployPane.setBorder(GUICoreUtils.createTitledBorder(Inter.getLocText("Plugin-ChartF_Deploy") + ":", null)); + deployPane.add(createDeployPane()); + + //条件界面 + JPanel conditionPane = FRGUIPaneFactory.createBorderLayout_L_Pane(); + this.add(conditionPane); + conditionPane.setBorder(BorderFactory.createEmptyBorder()); + + conditionPane.add(liteConditionPane = new VanChartSeriesConditionPane()); + liteConditionPane.setPreferredSize(new Dimension(300, 300)); + } + + private JPanel createDeployPane() + { + isStacked = new UIButtonGroup(new String[]{Inter.getLocText("Plugin-ChartF_YES"), Inter.getLocText("Plugin-ChartF_NO")}); + isPercentStacked = new UIButtonGroup(new String[]{Inter.getLocText("Plugin-ChartF_YES"), Inter.getLocText("Plugin-ChartF_NO")}); + double p = TableLayout.PREFERRED; + double[] columnSize = {p,p}; + double[] rowSize = {p,p,p,p}; + + return TableLayoutHelper.createTableLayoutPane(getDeployComponents(), rowSize, columnSize); + } + + protected Component[][] getDeployComponents() { + Component[][] components = new Component[][]{ + new Component[]{new UILabel(Inter.getLocText("ChartF-X_Axis")),XAxis}, + new Component[]{new UILabel(Inter.getLocText("ChartF-Y_Axis")),YAxis}, + new Component[]{new UILabel(Inter.getLocText("FR-Chart-Type_Stacked")),isStacked}, + new Component[]{new UILabel(Inter.getLocText("Plugin-ChartF_PercentStacked")),isPercentStacked}, + }; + + isStacked.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + checkBox(); + } + }); + return components; + } + + @Override + protected String title4PopupWindow() { + return Inter.getLocText("Plugin-ChartF_StackAndSeries"); + } + + private void checkBox() { + isPercentStacked.setEnabled(isStacked.getSelectedIndex() == 0); + } + + public void populateBean(ConditionAttr conditionAttr){ + AttrSeriesStackAndAxis seriesStackAndAxis = (AttrSeriesStackAndAxis)conditionAttr.getExisted(AttrSeriesStackAndAxis.class); + XAxis = new UIButtonGroup(seriesStackAndAxis.getXAxisNamesArray()); + YAxis = new UIButtonGroup(seriesStackAndAxis.getYAxisNameArray()); + + doLayoutPane(); + XAxis.setSelectedIndex(seriesStackAndAxis.getXAxisIndex()); + YAxis.setSelectedIndex(seriesStackAndAxis.getYAxisIndex()); + isStacked.setSelectedIndex(seriesStackAndAxis.isStacked() ? 0 : 1); + isPercentStacked.setSelectedIndex(seriesStackAndAxis.isPercentStacked() ? 0 : 1); + + if (conditionAttr.getCondition() == null) { + this.liteConditionPane.populateBean(new ListCondition()); + } else { + this.liteConditionPane.populateBean(conditionAttr.getCondition()); + } + + checkBox(); + } + + public void updateBean(ConditionAttr conditionAttr){ + AttrSeriesStackAndAxis seriesStackAndAxis = (AttrSeriesStackAndAxis)conditionAttr.getExisted(AttrSeriesStackAndAxis.class); + + seriesStackAndAxis.setXAxisIndex(XAxis.getSelectedIndex()); + seriesStackAndAxis.setYAxisIndex(YAxis.getSelectedIndex()); + + updateStackAndPercent(seriesStackAndAxis); + + AbstractCondition con = (AbstractCondition) this.liteConditionPane.updateBean(); + conditionAttr.setCondition(con); + } + + protected void updateStackAndPercent(AttrSeriesStackAndAxis seriesStackAndAxis) { + seriesStackAndAxis.setStacked(isStacked.getSelectedIndex() == 0); + if(seriesStackAndAxis.isStacked()){ + seriesStackAndAxis.setPercentStacked(isPercentStacked.getSelectedIndex() == 0); + } else { + seriesStackAndAxis.setPercentStacked(false); + } + } + + public ConditionAttr updateBean(){ + ConditionAttr conditionAttr = new ConditionAttr(); + updateBean(conditionAttr); + return conditionAttr; + } + +} \ No newline at end of file diff --git a/designer_chart/src/com/fr/plugin/chart/column/images/column.png b/designer_chart/src/com/fr/plugin/chart/column/images/column.png new file mode 100644 index 0000000000000000000000000000000000000000..4561cf945b49ec635f1bbf5513da8f3293cd20a4 GIT binary patch literal 304 zcmeAS@N?(olHy`uVBq!ia0vp^RzPgT!3Gj}al#cyaTa()7Bet#3xhBt!>lkoS;-NW;Tw zUsqM3&ev=={0<0p%wEuBz_9WKi+V&8=Z2hyM=C;{Z=@IKD=I!carghsF15Y?c22i> z4m2e|!n5$jL%X~$A7@mXZ~3eAKV&J#)fqot8?O#>n;ziA`8WToko?{FxM#mC-iJ*( z+neQ+Qc^5+H-B%wd-0dqZ#_5d4D9Xf(OcLelw1V{xl#7guNf+GVxxl>!Cz|JKP*Oa}`!Rcp|xQ*y^9 z$la4rwiCa5nXk&y>i$))9})Y#=XsR~x{6%fpc!-bN2c|r#T`no(%qbA7pgDno#(&5 zyE?QhV^MbMvW!KqKYe|uBSXV3H~!+TZGY?H_O-vl>+!10 zw^nm*Uo8L6=Q=4Dzio`%^e^IqzLJI`r&mCe(3Ax%wo{K+WM0)vd(pS*oxSy~-AR5) z?)NK{;%+WB^kWI0zOvex-_z%*&!TpfWk$9TJ^s6DUgxegef8j5OxO1~ZJ=!mg{v8u Z8KmTm|F`dYsSXri@O1TaS?83{1OV7eX}|yg literal 0 HcmV?d00001 diff --git a/designer_chart/src/com/fr/plugin/chart/column/images/stack.png b/designer_chart/src/com/fr/plugin/chart/column/images/stack.png new file mode 100644 index 0000000000000000000000000000000000000000..ef43ac25878a8b8e9a09b5dabfda7c1dbf2ac903 GIT binary patch literal 300 zcmeAS@N?(olHy`uVBq!ia0vp^RzPgT!3Gj}al#cyaTa()7Bet#3xhBt!>lAz{0$j8`EpM;WuIw#EVNxqc!>eO4~ z_q|)EivLt!Em*=We1G2MWt&Ply#ktqz6gKP|K{0gr@d)W`R^qz^Ow4Og0ymdKI;Vst0Aw+5S^xk5 literal 0 HcmV?d00001 diff --git a/designer_chart/src/com/fr/plugin/chart/custom/CustomIndependentVanChartInterface.java b/designer_chart/src/com/fr/plugin/chart/custom/CustomIndependentVanChartInterface.java new file mode 100644 index 0000000000..473cdbce92 --- /dev/null +++ b/designer_chart/src/com/fr/plugin/chart/custom/CustomIndependentVanChartInterface.java @@ -0,0 +1,56 @@ +package com.fr.plugin.chart.custom; + +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.type.AbstractChartTypePane; +import com.fr.plugin.chart.custom.other.VanChartCustomOtherPane; +import com.fr.plugin.chart.custom.style.VanChartCustomStylePane; +import com.fr.plugin.chart.designer.other.VanChartOtherPane; +import com.fr.plugin.chart.designer.style.VanChartStylePane; +import com.fr.plugin.chart.vanchart.AbstractIndependentVanChartUI; + +/** + * Created by Mitisky on 16/2/16. + */ +public class CustomIndependentVanChartInterface extends AbstractIndependentVanChartUI { + /** + * 图表的类型定义界面类型,就是属性表的第一个界面 + * + * @return 图表的类型定义界面类型 + */ + @Override + public AbstractChartTypePane getPlotTypePane() { + return new VanChartCustomPlotPane(); + } + + /** + * 图标路径 + * + * @return 图标路径 + */ + @Override + public String getIconPath() { + return "com/fr/design/images/form/toolbar/custom.png"; + } + + + @Override + /** + * 图表的属性界面数组 + * @return 属性界面 + */ + public AbstractChartAttrPane[] getAttrPaneArray(AttributeChangeListener listener){ + VanChartStylePane stylePane = new VanChartCustomStylePane(listener); + VanChartOtherPane otherPane = new VanChartCustomOtherPane(); + return new AbstractChartAttrPane[]{stylePane, otherPane}; + } + + public ChartDataPane getChartDataPane(AttributeChangeListener listener){ + return new VanChartCustomDataPane(listener); + } + + public String getPlotTypeTitle4PopupWindow(){ + return VanChartCustomPlotPane.TITLE; + } +} \ No newline at end of file diff --git a/designer_chart/src/com/fr/plugin/chart/custom/CustomPlotDesignerPaneFactory.java b/designer_chart/src/com/fr/plugin/chart/custom/CustomPlotDesignerPaneFactory.java new file mode 100644 index 0000000000..b4f4138a4c --- /dev/null +++ b/designer_chart/src/com/fr/plugin/chart/custom/CustomPlotDesignerPaneFactory.java @@ -0,0 +1,134 @@ +package com.fr.plugin.chart.custom; + +import com.fr.chart.chartattr.Plot; +import com.fr.design.beans.BasicBeanPane; +import com.fr.design.mainframe.chart.gui.ChartDataPane; +import com.fr.design.mainframe.chart.gui.data.table.AbstractTableDataContentPane; +import com.fr.design.mainframe.chart.gui.data.table.CategoryPlotTableDataContentPane; +import com.fr.general.FRLogger; +import com.fr.plugin.chart.PiePlot4VanChart; +import com.fr.plugin.chart.attr.plot.VanChartAxisPlot; +import com.fr.plugin.chart.attr.plot.VanChartPlot; +import com.fr.plugin.chart.bubble.VanChartBubblePlot; +import com.fr.plugin.chart.custom.CustomPlotFactory; +import com.fr.plugin.chart.custom.component.CustomPlotLocationPane; +import com.fr.plugin.chart.custom.type.CustomPlotType; +import com.fr.plugin.chart.bubble.data.VanChartBubblePlotTableDataContentPane; +import com.fr.plugin.chart.scatter.data.VanChartScatterPlotTableDataContentPane; +import com.fr.plugin.chart.designer.style.VanChartStylePane; +import com.fr.plugin.chart.designer.style.axis.VanChartAxisPane; +import com.fr.plugin.chart.designer.style.axis.gauge.VanChartGaugeAxisPane; +import com.fr.plugin.chart.gauge.VanChartGaugePlot; +import com.fr.plugin.chart.radar.VanChartRadarPlot; +import com.fr.plugin.chart.scatter.VanChartScatterPlot; + +import java.lang.reflect.Constructor; +import java.util.HashMap; +import java.util.Map; + +/** + * Created by Mitisky on 16/6/23. + */ +public class CustomPlotDesignerPaneFactory { + + //图表类型对应数据配置界面 + private static Map, Class> plotTableDataContentPaneMap = new HashMap, Class>(); + + + + + //图表类型对应的位置面板 + private static Map, Class>> plotPositionMap = new HashMap, Class>>(); + + static { + plotPositionMap.put(PiePlot4VanChart.class, CustomPlotLocationPane.class); + plotPositionMap.put(VanChartRadarPlot.class, CustomPlotLocationPane.class); + plotPositionMap.put(VanChartGaugePlot.class, CustomPlotLocationPane.class); + } + + /** + * 根据图表类型创建位置面板 + * @param plot 图表 + * @return 位置面板 + */ + public static BasicBeanPane createCustomPlotPositionPane(Plot plot) { + Class key = plot.getClass(); + if(plotPositionMap.containsKey(key)){ + try{ + Class> cl = plotPositionMap.get(key); + Constructor > constructor = cl.getConstructor(); + return constructor.newInstance(); + } catch (Exception e){ + FRLogger.getLogger().error(e.getMessage()); + } + } + return null; + } + + + /** + * 每种类型对应的数据配置界面 + * @return + */ + static { + plotTableDataContentPaneMap.put(VanChartScatterPlot.class, VanChartScatterPlotTableDataContentPane.class); + plotTableDataContentPaneMap.put(VanChartBubblePlot.class, VanChartBubblePlotTableDataContentPane.class); + } + + /** + * 根据图表类型创建数据配置 + * @param plot 图表 + * @param parent + * @return 数据配置界面 + */ + public static AbstractTableDataContentPane createCustomPlotTableDataContentPane(Plot plot, ChartDataPane parent) { + Class key = plot.getClass(); + if(plotTableDataContentPaneMap.containsKey(key)){ + try{ + Class cl = plotTableDataContentPaneMap.get(key); + Constructor constructor = cl.getConstructor(ChartDataPane.class); + return constructor.newInstance(parent); + } catch (Exception e){ + FRLogger.getLogger().error(e.getMessage()); + } + } + return new CategoryPlotTableDataContentPane(parent); + } + + + /** + * plotType是否需要建立新的坐标系面板 + */ + private static Map> diffAxisMap = new HashMap>(); + static { + diffAxisMap.put(CustomPlotType.POINTER_360, VanChartGaugeAxisPane.class); + diffAxisMap.put(CustomPlotType.POINTER_180, VanChartGaugeAxisPane.class); + diffAxisMap.put(CustomPlotType.RING, VanChartGaugeAxisPane.class); + diffAxisMap.put(CustomPlotType.SLOT, VanChartGaugeAxisPane.class); + diffAxisMap.put(CustomPlotType.CUVETTE, VanChartGaugeAxisPane.class); + diffAxisMap.put(CustomPlotType.RADAR, null);//默认的为null,直接new,不用反射 + diffAxisMap.put(CustomPlotType.STACK_RADAR, null); + } + + public static Boolean isUseDiffAxisPane(VanChartPlot plot){ + CustomPlotType customPlotType = CustomPlotFactory.getCustomType(plot); + return diffAxisMap.containsKey(customPlotType); + } + + public static VanChartAxisPane createAxisPane(VanChartAxisPlot plot, VanChartStylePane parent) { + CustomPlotType key = CustomPlotFactory.getCustomType((VanChartPlot)plot); + if(diffAxisMap.containsKey(key)){ + try{ + Class cl = diffAxisMap.get(key); + if(cl != null) { + Constructor constructor = cl.getConstructor(VanChartAxisPlot.class, VanChartStylePane.class); + return constructor.newInstance(plot, parent); + } + } catch (Exception e){ + FRLogger.getLogger().error(e.getMessage()); + } + } + return new VanChartAxisPane(plot,parent); + } + +} diff --git a/designer_chart/src/com/fr/plugin/chart/custom/VanChartCustomDataPane.java b/designer_chart/src/com/fr/plugin/chart/custom/VanChartCustomDataPane.java new file mode 100644 index 0000000000..73a95537a3 --- /dev/null +++ b/designer_chart/src/com/fr/plugin/chart/custom/VanChartCustomDataPane.java @@ -0,0 +1,66 @@ +package com.fr.plugin.chart.custom; + +import com.fr.chart.chartattr.Chart; +import com.fr.chart.chartattr.ChartCollection; +import com.fr.design.gui.frpane.AttributeChangeListener; +import com.fr.design.mainframe.chart.gui.ChartDataPane; + +import javax.swing.*; +import java.awt.*; + +/** + * Created by Fangjie on 2016/4/29. + */ +public class VanChartCustomDataPane extends ChartDataPane { + private VanChartCustomPlotDataContentsTabPane contentsTabPane; + private Chart chart; + public VanChartCustomDataPane(AttributeChangeListener listener) { + super(listener); + } + + @Override + protected JPanel createContentPane() { + JPanel content = new JPanel(new BorderLayout()); + if (chart == null) { + return content; + } + + contentsTabPane = new VanChartCustomPlotDataContentsTabPane((VanChartCustomPlot)chart.getPlot(), VanChartCustomDataPane.this, listener); + + content.add(contentsTabPane, BorderLayout.CENTER); + return content; + + + } + + public void populate(ChartCollection collection) { + this.chart = collection.getSelectedChart(); + this.remove(leftContentPane); + initContentPane(); + this.removeAttributeChangeListener(); + contentsTabPane.populateBean(collection); + this.addAttributeChangeListener(listener); + this.initAllListeners(); + + } + + @Override + /** + * 返回绑定的属性事件. + * @param listener 增加监听 + */ + public void addAttributeChangeListener(AttributeChangeListener listener) { + super.addAttributeChangeListener(listener); + contentsTabPane.addAttributeChangeListener(listener); + } + + @Override + /** + * 保存 数据界面内容 + */ + public void update(ChartCollection collection){ + if(contentsTabPane != null) { + contentsTabPane.updateBean(collection); + } + } +} diff --git a/designer_chart/src/com/fr/plugin/chart/custom/VanChartCustomPlotDataContentsTabPane.java b/designer_chart/src/com/fr/plugin/chart/custom/VanChartCustomPlotDataContentsTabPane.java new file mode 100644 index 0000000000..f3c91a3a71 --- /dev/null +++ b/designer_chart/src/com/fr/plugin/chart/custom/VanChartCustomPlotDataContentsTabPane.java @@ -0,0 +1,175 @@ +package com.fr.plugin.chart.custom; + +import com.fr.base.chart.chartdata.TopDefinitionProvider; +import com.fr.chart.chartattr.ChartCollection; +import com.fr.design.gui.frpane.AttributeChangeListener; +import com.fr.design.mainframe.chart.gui.ChartDataPane; +import com.fr.plugin.chart.attr.plot.VanChartPlot; +import com.fr.plugin.chart.custom.component.VanChartCustomPlotTabPane; +import com.fr.plugin.chart.custom.component.VanChartDataPane; +import com.fr.plugin.chart.custom.type.CustomPlotType; + +import javax.swing.*; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * Created by Fangjie on 2016/4/29. + */ +public class VanChartCustomPlotDataContentsTabPane extends VanChartCustomPlotTabPane { + public VanChartCustomPlotDataContentsTabPane(VanChartCustomPlot plot, VanChartCustomDataPane parent, AttributeChangeListener listener) { + super(plot, parent, listener); + } + + @Override + protected void initTabTitle() { + + if (plot == null){ + return; + } + + List customPlotList = plot.getCustomPlotList(); + NameArray = new String[Math.min(customPlotList.size(), paneList.size())]; + for (int i = 0; i < customPlotList.size() && i < paneList.size(); i++) { + JPanel pane = paneList.get(i); + //获取点的tooltip作为标题 + VanChartPlot vanChartPlot = customPlotList.get(i); + CustomPlotType plotType = CustomPlotFactory.getCustomType(vanChartPlot); + + NameArray[i] = CustomPlotFactory.getTitle(plotType); + centerPane.add(pane, NameArray[i]); + } + } + + @Override + protected List initPaneList() { + + if (plot == null){ + return null; + } + + List paneList = new ArrayList(); + + List customPlotList = plot.getCustomPlotList(); + + for (int i = 0; i < customPlotList.size(); i++){ + //根据不同的plot创建不同的数据配置界面 + ChartDataPane contentPane = new VanChartDataPane(listener); + paneList.add(contentPane); + } + + return paneList; + } + + @Override + public void populateBean(ChartCollection chartCollection){ + + plot = (VanChartCustomPlot) chartCollection.getSelectedChart().getPlot(); + + if (paneList == null){ + paneList = initPaneList(); + } + + if (paneList != null){ + + try { + + List customPlotList = plot.getCustomPlotList(); + + + for (int i = 0; i < paneList.size() && i < customPlotList.size(); i++) { + //將plot包裝起来,主要是为了获取dataDefinition + ChartCollection cloneCollection = (ChartCollection) chartCollection.clone(); + + //设置collection的plot + cloneCollection.getSelectedChart().setPlot(customPlotList.get(i)); + + //获取definitionMap中的dataDefinition + TopDefinitionProvider definition = chartCollection.getSelectedChart().getFilterDefinition(); + TopDefinitionProvider dataDefinition = null; + if (definition != null && definition instanceof CustomDefinition) { + Map definitionProviderMap = ((CustomDefinition)definition).getDefinitionProviderMap(); + dataDefinition = definitionProviderMap.get(CustomPlotFactory.getCustomType(customPlotList.get(i))); + } + cloneCollection.getSelectedChart().setFilterDefinition(dataDefinition); + + ((ChartDataPane) paneList.get(i)).populate(cloneCollection); + } + }catch (Exception e){ + return; + } + } + } + + @Override + public ChartCollection updateBean() { + return null; + } + + @Override + public void updateBean(ChartCollection collection){ + if (paneList == null || plot == null){ + return; + } + try { + + Map definitionMap = new HashMap(); + + //已经有的数据配置不允许重置 + + for (int i = 0; i < paneList.size() && i < plot.getCustomPlotList().size(); i++) { + //将plot包裝起来,主要是为了获取dataDefinition + ChartCollection cloneCollection = (ChartCollection) collection.clone(); + + //设置Collection的plot + cloneCollection.getSelectedChart().setPlot(plot.getCustomPlotList().get(i)); + + //重置 + cloneCollection.getSelectedChart().setFilterDefinition(null); + + //更新 + ((ChartDataPane) paneList.get(i)).update(cloneCollection); + + CustomPlotFactory.setCustomCategoryAttr(plot); + + //将处理好的dataDefinition剥离出来并存储 + definitionMap.put(CustomPlotFactory.getCustomType(plot.getCustomPlotList().get(i)), cloneCollection.getSelectedChart().getFilterDefinition()); + + } + + CustomDefinition customDefinition = new CustomDefinition(); + customDefinition.setDefinitionProviderMap(definitionMap); + collection.getSelectedChart().setFilterDefinition(customDefinition); + + }catch (Exception e){ + return; + } + } + + @Override + public boolean accept(Object ob) { + return false; + } + + @Override + public String title4PopupWindow() { + return null; + } + + @Override + public void reset() { + + } + + /** + * 返回绑定的属性事件. + * @param listener 增加监听 + */ + public void addAttributeChangeListener(AttributeChangeListener listener) { + for (int i = 0; i < paneList.size(); i++){ + ((ChartDataPane) paneList.get(i)).addAttributeChangeListener(listener); + } + } +} diff --git a/designer_chart/src/com/fr/plugin/chart/custom/VanChartCustomPlotPane.java b/designer_chart/src/com/fr/plugin/chart/custom/VanChartCustomPlotPane.java new file mode 100644 index 0000000000..94be28fd21 --- /dev/null +++ b/designer_chart/src/com/fr/plugin/chart/custom/VanChartCustomPlotPane.java @@ -0,0 +1,296 @@ +package com.fr.plugin.chart.custom; + +import com.fr.base.chart.chartdata.TopDefinitionProvider; +import com.fr.chart.base.DataSeriesCondition; +import com.fr.chart.chartattr.Chart; +import com.fr.chart.chartattr.Plot; +import com.fr.chart.chartglyph.ConditionAttr; +import com.fr.chart.chartglyph.ConditionCollection; +import com.fr.design.layout.TableLayout; +import com.fr.design.layout.TableLayoutHelper; +import com.fr.design.mainframe.chart.gui.type.ChartImagePane; +import com.fr.general.FRLogger; +import com.fr.general.Inter; +import com.fr.plugin.chart.base.VanChartTools; +import com.fr.plugin.chart.base.VanChartAttrLine; +import com.fr.plugin.chart.custom.component.VanChartCustomPlotSelectPane; +import com.fr.plugin.chart.custom.type.CustomPlotType; +import com.fr.plugin.chart.custom.type.CustomStyle; +import com.fr.plugin.chart.custom.CustomPlotFactory; +import com.fr.plugin.chart.designer.type.AbstractVanChartTypePane; +import com.fr.plugin.chart.vanchart.VanChart; + +import javax.swing.*; +import java.awt.*; +import java.util.HashMap; +import java.util.Map; + +/** + * Created by Mitisky on 16/2/16. + */ +public class VanChartCustomPlotPane extends AbstractVanChartTypePane { + public static final String TITLE = Inter.getLocText("Plugin-ChartF_NewCustom"); + + //是否选择自定义 + private boolean isCustom = false; + + private static final long serialVersionUID = -3481633368542654247L; + + //切换到自定义组合图时,显示的版面 + private JPanel customPane; + private VanChartCustomPlotSelectPane customSelectPane; + + private JPanel autoPane; + + //自定义和自动版面的容器,cardLayOut布局 + private JPanel contentPane; + + protected Component[][] getPaneComponents(JPanel typePane){ + + initContent(); + + return new Component[][]{ + new Component[]{typePane}, + new Component[]{stylePane}, + new Component[]{contentPane} + }; + } + + + private void initContent() { + double p = TableLayout.PREFERRED; + double f = TableLayout.FILL; + + autoPane = new JPanel(); + + customSelectPane = new VanChartCustomPlotSelectPane(); + + Component[][] components = new Component[][]{ + new Component[]{new JSeparator()}, + new Component[]{customSelectPane} + }; + + double[] columnSize = {p, f}; + double[] rowSize = {p, p}; + customPane = TableLayoutHelper.createTableLayoutPane(components, rowSize , columnSize); + + contentPane = new JPanel(new CardLayout()){ + @Override + public Dimension getPreferredSize() { + if(isCustom){ + return customPane.getPreferredSize(); + } else{ + return new Dimension(autoPane.getWidth(), 0); + } + } + }; + contentPane.add(autoPane, "auto"); + contentPane.add(customPane, "custom"); + } + + private void checkCardPane() { + CardLayout cardLayout = (CardLayout) contentPane.getLayout(); + if (isCustom) { + cardLayout.show(contentPane, "custom"); + } else { + cardLayout.show(contentPane, "auto"); + } + } + + + + @Override + protected String[] getTypeIconPath() { + return new String[]{"/com/fr/plugin/chart/custom/images/column_line.png", + "/com/fr/plugin/chart/custom/images/column_area.png", + "/com/fr/plugin/chart/custom/images/stack_column_line.png", + "/com/fr/plugin/chart/custom/images/custom.png", + + }; + } + + @Override + protected String[] getTypeTipName() { + return new String[]{ + Inter.getLocText("Plugin-ChartF_NewCustom_ColumnLine"), + Inter.getLocText("Plugin-ChartF_NewCustom_ColumnArea"), + Inter.getLocText("Plugin-ChartF_NewCustom_StackColumnLine"), + Inter.getLocText("Plugin-ChartF_NewCustom_Custom") + }; + } + + @Override + /** + * 返回界面标题 + * @return 界面标题 + */ + public String title4PopupWindow() { + return Inter.getLocText("Plugin-ChartF_NewCustom"); + } + + + @Override + public void updateBean(Chart chart) { + + //保存上次选中的值,其会在super中更新 + int lastState = lastTypeIndex; + + super.updateBean(chart); + + //如果上次的状态和这次的装填不在同一个页面,说明同一个图表內切换了,需要情況数据配置 + if (lastState != lastTypeIndex) { + chart.setFilterDefinition(null); + } + + Chart[] customChart = CustomIndependentVanChart.CustomVanChartTypes; + for(int i = 0, len = customChart.length; i < len; i++){ + if(typeDemo.get(i).isPressing){ + if (i == customChart.length-1){ + isCustom = true; + + //先重置自定义组合面板,如果不重置,无法获取选择顺序 + if (lastState == customChart.length-1 && samePlot) { + //更新数据配置,刪除已经不在的图表数据 + dealCustomDefinition(chart); + + customSelectPane.updateBean(chart); + }else if (samePlot){//如果是同一个图表切换过来,则重置面板 + customSelectPane.populateBean(chart); + } + } + }else { + isCustom = false; + } + } + + checkCardPane(); + + } + + private void dealCustomDefinition(Chart chart) { + CustomDefinition definition = (CustomDefinition) chart.getFilterDefinition(); + + if (definition == null){ + return; + } + + Map definitionMap = definition.getDefinitionProviderMap(); + + if (definitionMap == null){ + return; + } + + Map newDefinitionMap = new HashMap(); + + VanChartCustomPlot customPlot = (VanChartCustomPlot) chart.getPlot(); + for (int i = 0; i < customPlot.getCustomPlotList().size(); i++){ + CustomPlotType plotType = CustomPlotFactory.getCustomType(customPlot.getCustomPlotList().get(i)); + TopDefinitionProvider definitionProvider = definitionMap.get(plotType); + + newDefinitionMap.put(plotType, definitionProvider); + } + + definition.setDefinitionProviderMap(newDefinitionMap); + } + + /** + * 不同图表切換,重置chart屬性 + * @param chart + * @param newPlot + */ + @Override + protected void resetChartAttr(Chart chart, Plot newPlot){ + super.resetChartAttr(chart, newPlot); + //切换图表清空数据配置 + chart.setFilterDefinition(null); + //设置默认不排序 + VanChartTools tools = ((VanChart)chart).getVanChartTools(); + if (tools != null) { + tools.setSort(false); + } + } + + /** + * 更新界面内容 + */ + public void populateBean(Chart chart) { + for(ChartImagePane imagePane : typeDemo) { + imagePane.isPressing = false; + } + + //获取上次选中的图标 + VanChartCustomPlot customPlot = (VanChartCustomPlot)chart.getPlot(); + lastTypeIndex = customPlot.getCustomStyle().ordinal(); + typeDemo.get(lastTypeIndex).isPressing = true; + + isCustom = customPlot.getCustomStyle() == CustomStyle.CUSTOM; + + //自定义选择时,更新自定义面板 + if (isCustom){ + customSelectPane.populateBean(chart); + } + + checkCardPane(); + + checkDemosBackground(); + + } + + /** + * 获取各图表类型界面ID, 本质是plotID + * + * @return 图表类型界面ID + */ + @Override + protected String getPlotTypeID() { + return VanChartCustomPlot.VAN_CHART_CUSTOM_PLOT_ID; + } + + protected Plot getSelectedClonedPlot(){ + VanChartCustomPlot newPlot = null; + Chart[] customChart = CustomIndependentVanChart.CustomVanChartTypes; + for(int i = 0, len = customChart.length; i < len; i++){ + if(typeDemo.get(i).isPressing){ + newPlot = (VanChartCustomPlot)customChart[i].getPlot(); + } + } + Plot cloned = null; + try { + cloned = (Plot)newPlot.clone(); + } catch (CloneNotSupportedException e) { + FRLogger.getLogger().error("Error In ScatterChart"); + } + return cloned; + } + + public Chart getDefaultChart() { + return CustomIndependentVanChart.CustomVanChartTypes[0]; + } + + @Override + /** + *删除配置的条件属性 + */ + protected void cloneOldConditionCollection(Plot oldPlot, Plot newPlot) throws CloneNotSupportedException{ + cloneOldDefaultAttrConditionCollection(oldPlot, newPlot); + } + + @Override + /** + * 删除线型配置 + */ + protected void cloneOldDefaultAttrConditionCollection(Plot oldPlot, Plot newPlot) throws CloneNotSupportedException{ + if (oldPlot.getConditionCollection() != null) { + ConditionCollection newCondition = new ConditionCollection(); + newCondition.setDefaultAttr((ConditionAttr) oldPlot.getConditionCollection().getDefaultAttr().clone()); + newPlot.setConditionCollection(newCondition); + + //删除线型设置 + ConditionAttr attrList = newCondition.getDefaultAttr(); + DataSeriesCondition attr = attrList.getExisted(VanChartAttrLine.class); + if (attr != null){ + attrList.remove(VanChartAttrLine.class); + } + } + } +} \ No newline at end of file diff --git a/designer_chart/src/com/fr/plugin/chart/custom/component/CategoryCustomPlotTableDataContentPane.java b/designer_chart/src/com/fr/plugin/chart/custom/component/CategoryCustomPlotTableDataContentPane.java new file mode 100644 index 0000000000..ac1b055386 --- /dev/null +++ b/designer_chart/src/com/fr/plugin/chart/custom/component/CategoryCustomPlotTableDataContentPane.java @@ -0,0 +1,27 @@ +package com.fr.plugin.chart.custom.component; + +import com.fr.design.mainframe.chart.gui.ChartDataPane; +import com.fr.design.mainframe.chart.gui.data.table.CategoryPlotTableDataContentPane; + +/** + * Created by Fangjie on 2016/5/18. + */ +public class CategoryCustomPlotTableDataContentPane extends CategoryPlotTableDataContentPane { + public CategoryCustomPlotTableDataContentPane() { + super(); + } + + public CategoryCustomPlotTableDataContentPane(ChartDataPane parent) { + super(parent); + } + + /** + * 检查 某些Box是否可用 + * 分类不可用 + * @param hasUse 是否使用 + */ + public void checkBoxUse(boolean hasUse) { + categoryCombox.setEnabled(false); + checkSeriseUse(hasUse); + } +} diff --git a/designer_chart/src/com/fr/plugin/chart/custom/component/ChartImageCheckOutPane.java b/designer_chart/src/com/fr/plugin/chart/custom/component/ChartImageCheckOutPane.java new file mode 100644 index 0000000000..fc36decc9d --- /dev/null +++ b/designer_chart/src/com/fr/plugin/chart/custom/component/ChartImageCheckOutPane.java @@ -0,0 +1,103 @@ +package com.fr.plugin.chart.custom.component; + +import com.fr.design.constants.UIConstants; +import com.fr.design.dialog.BasicPane; +import com.fr.design.event.UIObserver; +import com.fr.design.event.UIObserverListener; +import com.fr.plugin.chart.custom.CustomPlotFactory; +import com.fr.plugin.chart.custom.type.CustomPlotType; + +import javax.swing.*; +import javax.swing.event.ChangeEvent; +import javax.swing.event.ChangeListener; +import java.awt.*; +import java.util.ArrayList; + +/** + * Created by Fangjie on 2016/4/19. + */ +public class ChartImageCheckOutPane extends BasicPane implements UIObserver { + + private JCheckBox checkBox; + private CustomPlotType customPlotType; + private ArrayList changeListeners = new ArrayList(); + + public ChartImageCheckOutPane(CustomPlotType type){ + this(type, false); + } + + public ChartImageCheckOutPane( CustomPlotType type, boolean isSelected){ + this.customPlotType = type; + + initCheckBox(isSelected); + + this.add(checkBox, BorderLayout.CENTER); + } + + public CustomPlotType getCustomPlotType() { + return customPlotType; + } + + private void initCheckBox(boolean isSelected) { + this.checkBox = new JCheckBox(); + this.checkBox.setSelected(isSelected); + //设置提示 + this.checkBox.setToolTipText(CustomPlotFactory.getTooltipText(this.customPlotType)); + //背景 + checkBox.setIcon(new ImageIcon(getClass().getResource(getIconPath(customPlotType,isSelected)))); + + this.setLayout(new BorderLayout()); + } + + private String getIconPath(CustomPlotType customPlotType, boolean isSelected) { + return isSelected ? CustomPlotFactory.getTypeIconPath(customPlotType)[0] : CustomPlotFactory.getTypeIconPath(customPlotType)[1]; + } + + + public JCheckBox getCheckBox() { + return checkBox; + } + + public void checkIconImage(){ + checkBox.setIcon(new ImageIcon(getClass().getResource(getIconPath(customPlotType, checkBox.isSelected())))); + } + + public void setPaneBorder(boolean isRightLine, boolean isBottomLine){ + this.setBorder(BorderFactory.createMatteBorder(1, 1, isBottomLine ? 1 : 0, isRightLine ? 1 : 0, UIConstants.LINE_COLOR)); + } + + public void setSelected(boolean isSelected){ + checkBox.setSelected(isSelected); + } + + public boolean isSelected(){ + return checkBox.isSelected(); + } + + + + @Override + protected String title4PopupWindow() { + return null; + } + + public void fireStateChange() { + for (int i = 0; i < changeListeners.size(); i++) { + changeListeners.get(i).stateChanged(new ChangeEvent(this)); + } + } + + @Override + public void registerChangeListener(final UIObserverListener listener) { + changeListeners.add(new ChangeListener() { + public void stateChanged(ChangeEvent e) { + listener.doChange(); + } + }); + } + + @Override + public boolean shouldResponseChangeListener() { + return false; + } +} diff --git a/designer_chart/src/com/fr/plugin/chart/custom/component/CustomPlotLocationPane.java b/designer_chart/src/com/fr/plugin/chart/custom/component/CustomPlotLocationPane.java new file mode 100644 index 0000000000..b3bd29de89 --- /dev/null +++ b/designer_chart/src/com/fr/plugin/chart/custom/component/CustomPlotLocationPane.java @@ -0,0 +1,84 @@ +package com.fr.plugin.chart.custom.component; + +import com.fr.chart.chartattr.Plot; +import com.fr.design.beans.BasicBeanPane; +import com.fr.design.gui.ilable.UILabel; +import com.fr.design.gui.ispinner.UISpinner; +import com.fr.design.layout.TableLayoutHelper; +import com.fr.general.Inter; +import com.fr.plugin.chart.PiePlot4VanChart; +import com.fr.plugin.chart.attr.plot.VanChartPositionPlot; +import com.fr.plugin.chart.base.Position; +import com.fr.plugin.chart.designer.TableLayout4VanChartHelper; + +import javax.swing.*; +import java.awt.*; + +/** + * Created by Fangjie on 2016/4/26. + */ +public class CustomPlotLocationPane extends BasicBeanPane{ + private UISpinner radius; + private UISpinner xDirection; + private UISpinner yDirection; + private static final double MIN_ANGLE = PiePlot4VanChart.START_ANGLE; + private static final double MAX_ANGLE = PiePlot4VanChart.END_ANGLE; + + public CustomPlotLocationPane(){ + init(); + } + + private void init() { + radius = new UISpinner(MIN_ANGLE, MAX_ANGLE, 1, 50); + + xDirection = new UISpinner(0, 100, 1, 20); + yDirection = new UISpinner(0, 100, 1, 20); + + Component[][] components = new Component[][]{ + new Component[]{new UILabel(Inter.getLocText("Plugin-ChartF_Position") + "(%): " + Inter.getLocText("Plugin-ChartF_X_Direction"), SwingConstants.LEFT),xDirection}, + new Component[]{new UILabel(Inter.getLocText("Plugin-ChartF_Y_Direction"), SwingConstants.RIGHT),yDirection}, + new Component[]{new UILabel(Inter.getLocText("Plugin-ChartF_Radius") + "(px): ",SwingConstants.LEFT),radius} + + }; + JPanel panel = TableLayoutHelper.createTableLayoutPane(components, new double[]{-2, -2, -2}, new double[]{-2, -1}); + + this.setLayout(new BorderLayout(0,0)); + + this.add(TableLayout4VanChartHelper.createTableLayoutPaneWithTitle(Inter.getLocText("Plugin-ChartF_Location"), panel), BorderLayout.CENTER); + } + + @Override + public void populateBean(Plot plot) { + if (plot instanceof VanChartPositionPlot) { + Position position = ((VanChartPositionPlot) plot).getPosition(); + + if (position != null) { + radius.setValue(position.getRadius()); + xDirection.setValue(position.getX()); + yDirection.setValue(position.getY()); + } + } + } + + @Override + public void updateBean(Plot plot) { + if (plot instanceof VanChartPositionPlot) { + Position position = new Position(); + position.setRadius(radius.getValue()); + position.setX(xDirection.getValue()); + position.setY(yDirection.getValue()); + + ((VanChartPositionPlot) plot).setPosition(position); + } + } + + @Override + public Plot updateBean() { + return null; + } + + @Override + protected String title4PopupWindow() { + return null; + } +} diff --git a/designer_chart/src/com/fr/plugin/chart/custom/component/MeterCustomPlotReportDataContentPane.java b/designer_chart/src/com/fr/plugin/chart/custom/component/MeterCustomPlotReportDataContentPane.java new file mode 100644 index 0000000000..ec45eaf2ab --- /dev/null +++ b/designer_chart/src/com/fr/plugin/chart/custom/component/MeterCustomPlotReportDataContentPane.java @@ -0,0 +1,36 @@ +package com.fr.plugin.chart.custom.component; + +import com.fr.chart.chartdata.MeterReportDefinition; +import com.fr.design.gui.itextfield.UITextField; +import com.fr.design.mainframe.chart.gui.ChartDataPane; +import com.fr.design.mainframe.chart.gui.data.report.MeterPlotReportDataContentPane; + +import javax.swing.*; +import java.awt.*; + +/** + * Created by Fangjie on 2016/5/23. + */ +public class MeterCustomPlotReportDataContentPane extends MeterPlotReportDataContentPane{ + private UITextField singCateText; + public MeterCustomPlotReportDataContentPane(ChartDataPane parent) { + super(parent); + } + + @Override + protected Component getSingCatePane() { + return singCateText = new UITextField(); + } + + @Override + protected void populateSingCatePane(String name) { + singCateText.setText(name); + } + + @Override + protected void updateSingCatePane(MeterReportDefinition meterDefinition) { + + meterDefinition.setName(singCateText.getText()); + + } +} diff --git a/designer_chart/src/com/fr/plugin/chart/custom/component/MeterCustomPlotTableDataContentPane.java b/designer_chart/src/com/fr/plugin/chart/custom/component/MeterCustomPlotTableDataContentPane.java new file mode 100644 index 0000000000..efece3b851 --- /dev/null +++ b/designer_chart/src/com/fr/plugin/chart/custom/component/MeterCustomPlotTableDataContentPane.java @@ -0,0 +1,44 @@ +package com.fr.plugin.chart.custom.component; + +import com.fr.base.Utils; +import com.fr.chart.chartdata.MeterTableDefinition; +import com.fr.design.gui.itextfield.UITextField; +import com.fr.design.mainframe.chart.gui.ChartDataPane; +import com.fr.design.mainframe.chart.gui.data.table.MeterPlotTableDataContentPane; +import com.fr.plugin.chart.data.VanChartMeterCustomTableDefinition; + +import java.awt.*; + +/** + * Created by Fangjie on 2016/5/18. + */ +public class MeterCustomPlotTableDataContentPane extends MeterPlotTableDataContentPane { + private static final int TEXT_HT = 20; + private static final int TEXT_WD = 80; + private UITextField nameField; + public MeterCustomPlotTableDataContentPane(ChartDataPane parent) { + super(parent); + } + + @Override + protected Component getNameComponent() { + nameField = new UITextField(); + nameField.setPreferredSize(new Dimension(TEXT_WD, TEXT_HT)); + return nameField; + } + + @Override + protected void populateNameComponent(MeterTableDefinition meter) { + nameField.setText(meter.getName()); + } + + @Override + protected void updateNameComponent(MeterTableDefinition meter) { + meter.setName(Utils.objectToString(nameField.getText())); + } + + @Override + protected MeterTableDefinition getMeterTableDefinition(){ + return new VanChartMeterCustomTableDefinition(); + } +} diff --git a/designer_chart/src/com/fr/plugin/chart/custom/component/VanChartCustomAreaBackgroundPane.java b/designer_chart/src/com/fr/plugin/chart/custom/component/VanChartCustomAreaBackgroundPane.java new file mode 100644 index 0000000000..65241fc0b7 --- /dev/null +++ b/designer_chart/src/com/fr/plugin/chart/custom/component/VanChartCustomAreaBackgroundPane.java @@ -0,0 +1,19 @@ +package com.fr.plugin.chart.custom.component; + +import com.fr.design.gui.frpane.AbstractAttrNoScrollPane; +import com.fr.plugin.chart.custom.style.VanChartCustomAxisAreaPane; +import com.fr.plugin.chart.designer.style.background.VanChartAreaBackgroundPane; +import com.fr.plugin.chart.designer.style.background.VanChartAxisAreaPane; + +/** + * Created by Fangjie on 2016/5/19. + */ +public class VanChartCustomAreaBackgroundPane extends VanChartAreaBackgroundPane { + public VanChartCustomAreaBackgroundPane(boolean isPlot, AbstractAttrNoScrollPane parent) { + super(isPlot, parent); + } + + protected VanChartAxisAreaPane initAxisAreaPane() { + return new VanChartCustomAxisAreaPane(); + } +} diff --git a/designer_chart/src/com/fr/plugin/chart/custom/component/VanChartCustomAxisConditionPane.java b/designer_chart/src/com/fr/plugin/chart/custom/component/VanChartCustomAxisConditionPane.java new file mode 100644 index 0000000000..daa479a2ac --- /dev/null +++ b/designer_chart/src/com/fr/plugin/chart/custom/component/VanChartCustomAxisConditionPane.java @@ -0,0 +1,43 @@ +package com.fr.plugin.chart.custom.component; + +import com.fr.design.gui.ilable.UILabel; + +import com.fr.general.Inter; + +import com.fr.plugin.chart.base.AttrSeriesStackAndAxis; +import com.fr.plugin.chart.column.VanChartCustomStackAndAxisConditionPane; + +import java.awt.*; +/** + * 自定义坐标轴设置 + * 散点图和气泡图用到 + * 堆积和百分比属性为false + */ +public class VanChartCustomAxisConditionPane extends VanChartCustomStackAndAxisConditionPane { + + public VanChartCustomAxisConditionPane(){ + + } + + protected Component[][] getDeployComponents() { + Component[][] components = new Component[][]{ + new Component[]{new UILabel(Inter.getLocText("ChartF-X_Axis")),XAxis}, + new Component[]{new UILabel(Inter.getLocText("ChartF-Y_Axis")),YAxis}, + }; + + return components; + } + + @Override + protected String title4PopupWindow() { + return Inter.getLocText("Plugin-ChartF_Custom_Axis"); + } + + + @Override + protected void updateStackAndPercent(AttrSeriesStackAndAxis seriesStackAndAxis) { + seriesStackAndAxis.setStacked(false); + seriesStackAndAxis.setPercentStacked(false); + } + +} \ No newline at end of file diff --git a/designer_chart/src/com/fr/plugin/chart/custom/component/VanChartCustomPlotAxisPane.java b/designer_chart/src/com/fr/plugin/chart/custom/component/VanChartCustomPlotAxisPane.java new file mode 100644 index 0000000000..4b274e56e1 --- /dev/null +++ b/designer_chart/src/com/fr/plugin/chart/custom/component/VanChartCustomPlotAxisPane.java @@ -0,0 +1,55 @@ +package com.fr.plugin.chart.custom.component; + +import com.fr.chart.chartglyph.ConditionAttr; +import com.fr.chart.chartglyph.ConditionCollection; +import com.fr.plugin.chart.attr.plot.VanChartAxisPlot; +import com.fr.plugin.chart.attr.plot.VanChartPlot; +import com.fr.plugin.chart.attr.plot.VanChartRectanglePlot; +import com.fr.plugin.chart.base.AttrSeriesStackAndAxis; +import com.fr.plugin.chart.custom.CustomPlotDesignerPaneFactory; +import com.fr.plugin.chart.custom.VanChartCustomPlot; +import com.fr.plugin.chart.designer.style.VanChartStylePane; +import com.fr.plugin.chart.designer.style.axis.VanChartAxisPane; + +import java.util.List; + +/** + * Created by Fangjie on 2016/5/12. + */ +public class VanChartCustomPlotAxisPane extends VanChartAxisPane { + + public VanChartCustomPlotAxisPane(VanChartAxisPlot plot, VanChartStylePane parent) { + super(plot, parent); + } + + //删除此坐标轴相关堆积属性的设置 + protected void removeOthers(int axisIndex, boolean isXAxis){ + //堆积和坐标轴 + + VanChartCustomPlot customPlot = (VanChartCustomPlot)editingPlot; + List plotList = customPlot.getCustomPlotList(); + for (int k = 0; k < plotList.size(); k++) { + if (customPlot.getStandardAxisOrder().contains(k)){ + VanChartRectanglePlot vanChartPlot = (VanChartRectanglePlot) plotList.get(k); + if (vanChartPlot.isHaveAxis() && !CustomPlotDesignerPaneFactory.isUseDiffAxisPane(vanChartPlot)){ + remove(axisIndex, isXAxis, vanChartPlot); + } + } + } + } + + private void remove(int axisIndex, boolean isXAxis, VanChartRectanglePlot vanChartPlot){ + ConditionCollection stackAndAxisCondition = vanChartPlot.getStackAndAxisCondition(); + if (stackAndAxisCondition == null) { + return; + } + for (int i = 0, len = stackAndAxisCondition.getConditionAttrSize(); i < len; i++) { + ConditionAttr conditionAttr = stackAndAxisCondition.getConditionAttr(i); + AttrSeriesStackAndAxis stackAndAxis = (AttrSeriesStackAndAxis) conditionAttr.getExisted(AttrSeriesStackAndAxis.class); + int index = isXAxis ? stackAndAxis.getXAxisIndex() : stackAndAxis.getYAxisIndex(); + if (index == axisIndex) { + stackAndAxisCondition.removeConditionAttr(conditionAttr); + } + } + } +} diff --git a/designer_chart/src/com/fr/plugin/chart/custom/component/VanChartCustomPlotSelectPane.java b/designer_chart/src/com/fr/plugin/chart/custom/component/VanChartCustomPlotSelectPane.java new file mode 100644 index 0000000000..02761a1952 --- /dev/null +++ b/designer_chart/src/com/fr/plugin/chart/custom/component/VanChartCustomPlotSelectPane.java @@ -0,0 +1,396 @@ +package com.fr.plugin.chart.custom.component; + +import com.fr.chart.chartattr.Chart; +import com.fr.design.beans.BasicBeanPane; +import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.general.ComparatorUtils; +import com.fr.general.FRLogger; +import com.fr.general.Inter; +import com.fr.plugin.chart.attr.plot.VanChartPlot; +import com.fr.plugin.chart.attr.plot.VanChartRectanglePlot; +import com.fr.plugin.chart.custom.VanChartCustomPlot; +import com.fr.plugin.chart.custom.type.CustomPlotType; +import com.fr.plugin.chart.custom.type.CustomStyle; +import com.fr.plugin.chart.custom.CustomPlotDesignerPaneFactory; +import com.fr.plugin.chart.custom.CustomPlotFactory; + +import javax.swing.*; +import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.util.ArrayList; +import java.util.List; + +/** + * Created by Fangjie on 2016/4/19. + */ +public class VanChartCustomPlotSelectPane extends BasicBeanPane { + + private static final int NO_DIRTY = -1; + private static final int NOT_LAST = -1; + private static final int REC_WIDTH = 58; + private static final int REC_HEIGHT = 50; + private static final int CUSTOM_TYPE_NUM = 4; + + + public static final String MASSAGE = Inter.getLocText("Plugin-ChartF_At_Least_One_Chart"); + + private List customTypeList = new ArrayList(); + + //该列表记录上次每个checkout的状态 + private List oldSelectedList; + + //保存点击的checkout顺序 + private List selectedPlotTypeList = new ArrayList(); + + //将所有面板排布后的面板 + private JPanel content; + + + public VanChartCustomPlotSelectPane(){ + initCustomType(); + } + + private void initCustomType() { + + initAllCheckOutPane(); + + initContentPane(); + + updateOldSelectedList(); + + addCheckBoxListener(); + + checkoutSelected(); + } + + private void updateOldSelectedList() { + oldSelectedList = new ArrayList(); + for (int i = 0; i < customTypeList.size(); i++){ + oldSelectedList.add(customTypeList.get(i).getCheckBox().isSelected()); + } + } + + private void checkoutSelected() { + for (int i = 0; i < customTypeList.size(); i++){ + //根据是否选中重置背景 + customTypeList.get(i).checkIconImage(); + } + } + + private void initContentPane() { + + content = FRGUIPaneFactory.createNColumnGridInnerContainer_Pane(CUSTOM_TYPE_NUM, 0, 0); + for (int i = 0; i < customTypeList.size(); i++){ + customTypeList.get(i).setPreferredSize(new Dimension(REC_WIDTH,REC_HEIGHT)); + + //是否画右边线 + boolean isRightLine = (i == customTypeList.size() - 1) ? true : ((i + 1)%CUSTOM_TYPE_NUM == 0) ? true : false; + //是否画下边线 + int row = i / CUSTOM_TYPE_NUM; + int column = i % CUSTOM_TYPE_NUM; + boolean isBottomLine = ((row+1)*CUSTOM_TYPE_NUM + column < customTypeList.size()) ? false : true; + + customTypeList.get(i).setPaneBorder(isRightLine, isBottomLine); + + content.add(customTypeList.get(i)); + } + + this.setLayout(new BorderLayout()); + this.add(content, BorderLayout.CENTER); + } + + private void addCheckBoxListener() { + for (int i = 0; i < customTypeList.size(); i++){ + + //初始化每个customType的listener + + customTypeList.get(i).getCheckBox().addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent evt) { + int index = isLastSelected(); + if (index != NOT_LAST) {//如果是最后一个 + customTypeList.get(index).getCheckBox().setSelected(true); + + //彈出警告框 + JOptionPane.showMessageDialog(new JPanel(), MASSAGE,"", JOptionPane.WARNING_MESSAGE); + } + + //点击后更新已选顺序 + checkoutSelectedPlotTypeList(); + + //点击后,更新背景 + checkoutSelected(); + + //响应观察者事件,以便更新chart + fireDirty(); + } + }); + } + } + + + /** + * 根据选择更新顺序 + */ + private void checkoutSelectedPlotTypeList() { + int index = getDirtySelectedIndex(oldSelectedList); + + if (index == NO_DIRTY){ + return; + } + + boolean isAdd = getDirtyState(index); + + //获取选中的自定义图表类型 + CustomPlotType plotType = customTypeList.get(index).getCustomPlotType(); + + //根据类型处理增加或者删除 + dealSelectedPlotTypeList(isAdd, plotType, selectedPlotTypeList); + } + + private void fireDirty() { + int index = getDirtySelectedIndex(oldSelectedList); + if (index != NO_DIRTY) { + customTypeList.get(index).fireStateChange(); + } + } + + @Override + public void populateBean(Chart chart) { + + VanChartCustomPlot customPlot = (VanChartCustomPlot) chart.getPlot(); + + populateCustomTypeList(customPlot); + + populateSelectedPlotTypeList(customPlot); + + checkoutSelected(); + } + + private void populateSelectedPlotTypeList(VanChartCustomPlot customPlot) { + + selectedPlotTypeList = new ArrayList(); + + List customPlotList = customPlot.getCustomPlotList(); + + for (int i = 0; i < customPlotList.size(); i++){ + selectedPlotTypeList.add(CustomPlotFactory.getCustomType(customPlotList.get(i))); + } + } + + private void populateCustomTypeList(VanChartCustomPlot customPlot) { + if (customPlot.getCustomStyle() != CustomStyle.CUSTOM){ + return; + } + + List customPlotList = customPlot.getCustomPlotList(); + + oldSelectedList = new ArrayList(); + + for (int i = 0; i < customTypeList.size(); i++){ + boolean isSelected = false; + CustomPlotType customPlotType = customTypeList.get(i).getCustomPlotType(); + //更新选中项 + if (customPlotTypeContained(customPlotType, customPlotList)) { + isSelected = true; + } + + customTypeList.get(i).setSelected(isSelected); + + //同时设置oldList + oldSelectedList.add(isSelected); + } + + } + + private boolean customPlotTypeContained(CustomPlotType customPlotType, List customPlotList) { + boolean contained = false; + + for (int i = 0; i < customPlotList.size(); i++){ + if (ComparatorUtils.equals(customPlotType, CustomPlotFactory.getCustomType(customPlotList.get(i)))){ + contained = true; + break; + } + } + + return contained; + } + + @Override + public Chart updateBean() { + return null; + } + + @Override + public void updateBean(Chart chart) { + VanChartCustomPlot customPlot = (VanChartCustomPlot)chart.getPlot(); + + //根据选择的组合图更新,根据保存的顺序更新组合图 + updateCustomPlotList(customPlot); + + //响应完毕后,更新状态 + updateOldSelectedList(); + } + + private void updateCustomPlotList(VanChartCustomPlot customPlot) { + //根据selectedPlotTypeList更新customPlotList + //切换之后,给与全新构建的plotList,这回导致其他面板上的设置无效,也是合理的 + List newCustomPlotList = new ArrayList(); + List oldCustomPlotList = customPlot.getCustomPlotList(); + + //复制已经设置的plot + try { + for (int i = 0; i < oldCustomPlotList.size(); i++){ + VanChartPlot vanChartPlot = oldCustomPlotList.get(i); + if (selectedPlotTypeList.contains(CustomPlotFactory.getCustomType(vanChartPlot))){ + newCustomPlotList.add((VanChartPlot) vanChartPlot.clone()); + } + } + } catch (CloneNotSupportedException e) { + FRLogger.getLogger().error(e.getMessage()); + } + + + //没有复制到的plot重创 + for (int i = 0; i < selectedPlotTypeList.size(); i++){ + CustomPlotType customPlotType = selectedPlotTypeList.get(i); + if (!CustomPlotFactory.customPlotContains(newCustomPlotList, customPlotType)){ + VanChartPlot vanChartPlot = CustomPlotFactory.getCustomPlot(customPlotType); + vanChartPlot.setCustomType(CustomStyle.CUSTOM.toString()); + //设置公共属性 + setCommonAttr(vanChartPlot, customPlot); + + newCustomPlotList.add(vanChartPlot); + } + } + + customPlot.setCustomPlotList(newCustomPlotList); + } + + private void setCommonAttr(VanChartPlot vanChartPlot, VanChartCustomPlot customPlot) { + //坐标轴公共属性 + dealAxisAttr(vanChartPlot, customPlot); + } + + private void dealAxisAttr(VanChartPlot vanChartPlot, VanChartCustomPlot customPlot) { + if (vanChartPlot.isHaveAxis() && !CustomPlotDesignerPaneFactory.isUseDiffAxisPane(vanChartPlot) && customPlot.isHaveStandardAxis()){ + VanChartRectanglePlot rectanglePlot = (VanChartRectanglePlot)vanChartPlot; + + //指针指向同一个标准坐标轴 + rectanglePlot.setXAxisList(customPlot.getXAxisList()); + rectanglePlot.setYAxisList(customPlot.getYAxisList()); + } + } + + private void dealSelectedPlotTypeList(boolean isAdd, CustomPlotType plotType, List customPlotTypeList) { + + //根据isAdd删除或者增加 + if (isAdd){ + customPlotTypeList.add(plotType); + }else { + //定位选中的是那个plot + int index = -1; + + for (int i = 0; i < customPlotTypeList.size(); i++){ + if (ComparatorUtils.equals(plotType, customPlotTypeList.get(i))){ + index = i; + break; + } + } + + if (index == -1){ + return; + } + + customPlotTypeList.remove(index); + } + + } + + /** + * 获取id为index的图表是选中还是删除 + * 增加则返回true + * 删除返回false + * @param index + * @return + */ + private boolean getDirtyState(int index) { + boolean isAdd = true; + + boolean newState = customTypeList.get(index).getCheckBox().isSelected(); + boolean oldState = oldSelectedList.get(index); + + //true->false为删除;false->true为增加 + if (oldState == true && newState == false){ + isAdd = false; + }else if (oldState == false && newState == true){ + isAdd = true; + } + + return isAdd; + } + + @Override + protected String title4PopupWindow() { + return null; + } + + /** + * 如果是最后一个,则返回最后一个checkout的index + * 否则返回-1 + * @return + */ + private int isLastSelected() { + int count = 0; + int index = NOT_LAST; + for (int i = 0; i < customTypeList.size(); i++){ + if (customTypeList.get(i).getCheckBox().isSelected()){ + count++; + } + } + if (count == 0){ + //查找是哪一个变化了 + index = getDirtySelectedIndex(oldSelectedList); + } + return index; + } + + /** + * 获取改变状态的index + * 如果有两个都改变了,改函数获取的是排在前面的index + * 如果没找到 + * @param oldSelectedList + * @return + */ + private int getDirtySelectedIndex(List oldSelectedList) { + for (int i = 0; i < oldSelectedList.size(); i++){ + if ((oldSelectedList.get(i)) != customTypeList.get(i).getCheckBox().isSelected()){ + return i; + } + } + return NO_DIRTY; + } + + /** + * 构建所有可用的组合图面板 + */ + private void initAllCheckOutPane() { + //将所有工厂中的图表都加入到可选面板中 + + CustomPlotType[] customPlotTypes = CustomPlotType.getTypes(); + for(int i = 0; i < customPlotTypes.length; i++){ + boolean isSelected = false; + CustomPlotType customPlotType = customPlotTypes[i]; + //前两个默认选中 + if (i == 0 || i == 1) { + isSelected = true; + selectedPlotTypeList.add(customPlotType); + } + ChartImageCheckOutPane checkOutPane = new ChartImageCheckOutPane(customPlotType, isSelected); + + customTypeList.add(checkOutPane); + } + } + +} diff --git a/designer_chart/src/com/fr/plugin/chart/custom/component/VanChartCustomPlotTabPane.java b/designer_chart/src/com/fr/plugin/chart/custom/component/VanChartCustomPlotTabPane.java new file mode 100644 index 0000000000..755441d94b --- /dev/null +++ b/designer_chart/src/com/fr/plugin/chart/custom/component/VanChartCustomPlotTabPane.java @@ -0,0 +1,81 @@ +package com.fr.plugin.chart.custom.component; + +import com.fr.design.dialog.BasicPane; +import com.fr.design.gui.frpane.AttributeChangeListener; +import com.fr.design.mainframe.chart.gui.style.legend.AutoSelectedPane; +import com.fr.general.ComparatorUtils; +import com.fr.plugin.chart.designer.component.VanChartPlotMultiTabPane; + +import javax.swing.*; +import java.awt.*; + +/** + * Created by Fangjie on 2016/4/22. + */ +public abstract class VanChartCustomPlotTabPane extends VanChartPlotMultiTabPane { + private static final long serialVersionUID = 8633385688766835241L; + + public VanChartCustomPlotTabPane(E plot, BasicPane parent) { + this(plot, parent, null); + } + + public VanChartCustomPlotTabPane(E plot, BasicPane parent, AttributeChangeListener listener) { + super(plot, parent, listener); + } + + protected abstract void initTabTitle(); + + @Override + protected void initLayout() { + JPanel tabPanel = new JPanel(new BorderLayout()); + tabPanel.setBorder(BorderFactory.createMatteBorder(0, 0, 0, 0, getBackground())); + tabPanel.add(tabPane, BorderLayout.CENTER); + this.setLayout(new BorderLayout(0, 6)); + this.add(tabPanel, BorderLayout.NORTH); + this.add(centerPane, BorderLayout.CENTER); + } + + /** + * 设置选中的界面id + */ + public void setSelectedByIds(int level, String... id) { + tabPane.setSelectedIndex(-1); + for (int i = 0; i < paneList.size(); i++) { + if (ComparatorUtils.equals(id[level], NameArray[i])) { + tabPane.setSelectedIndex(i); + tabPane.tabChanged(i); + if (id.length >= level + 2) { + ((AutoSelectedPane)paneList.get(i)).setSelectedIndex(id[level + 1]); + } + break; + } + } + } + + @Override + public void relayoutWhenListChange() { + centerPane = new JPanel(cardLayout) { + @Override + public Dimension getPreferredSize() { + if (tabPane.getSelectedIndex() == -1) { + return super.getPreferredSize(); + } else { + return paneList.get(tabPane.getSelectedIndex()).getPreferredSize(); + } + } + }; + + //获取tab的标题 + initTabTitle(); + + tabPane = new VanChartCustomPlotUITabGroup(NameArray) { + @Override + public void tabChanged(int index) { + dealWithTabChanged(index); + } + }; + tabPane.setSelectedIndex(0); + tabPane.tabChanged(0); + initLayout(); + } +} diff --git a/designer_chart/src/com/fr/plugin/chart/custom/component/VanChartCustomPlotUITabGroup.java b/designer_chart/src/com/fr/plugin/chart/custom/component/VanChartCustomPlotUITabGroup.java new file mode 100644 index 0000000000..3819b76b25 --- /dev/null +++ b/designer_chart/src/com/fr/plugin/chart/custom/component/VanChartCustomPlotUITabGroup.java @@ -0,0 +1,130 @@ +package com.fr.plugin.chart.custom.component; + +import com.fr.design.constants.UIConstants; +import com.fr.design.gui.ibutton.UITabGroup; +import com.fr.design.gui.ibutton.UIToggleButton; + +import javax.swing.*; +import javax.swing.border.Border; +import java.awt.*; + +/** + * Created by Fangjie on 2016/4/21. + */ +public class VanChartCustomPlotUITabGroup extends UITabGroup{ + + private static final int WIDTH = 198; + private static final int BUTTON_HEIGHT = 30; + private int listNum = 0; + + public VanChartCustomPlotUITabGroup(Icon[] iconArray) { + super(iconArray); + } + + public VanChartCustomPlotUITabGroup(String[] textArray) { + super(textArray); + } + + @Override + protected LayoutManager getGridLayout(int number) { + //这个地方可以顺便获取list个数 + listNum = number; + return new GridBagLayout(); + } + + @Override + protected void paintBorder(Graphics g) { + Border border = getBorder(); + if (border != null) { + border.paintBorder(this, g, 0, 0, getWidth(), getHeight()); + } + } + + @Override + protected Border getGroupBorder() { + return BorderFactory.createEmptyBorder(1, 1, 1, 1); + } + + @Override + protected void initButton(UIToggleButton labelButton) { + + int ButtonWidth = WIDTH / 3; + if (listNum <= 1){ + return; + }else if (listNum == 2){ + ButtonWidth = WIDTH / 2; + } + + //将button加入到pane中,以便可以对边框进行控制 + labelButton.setRoundBorder(false); + labelButton.setBorderPainted(false); + + + + labelButtonList.add(labelButton); + + int index = labelButtonList.size() - 1; + + JPanel panel = getButtonPanel(labelButton, index); + + GridBagConstraints constraints=new GridBagConstraints(); + + int end = listNum % 3; + + if (end == 1 && index == 0){ + constraints.gridy = 0; + constraints.gridx = 0; + constraints.gridheight = 1; + constraints.gridwidth = 6; + ButtonWidth = WIDTH + 2; + }else if (end == 2 && (index == 0 || index == 1) && listNum != 2){ + constraints.gridy = 0; + constraints.gridx = index == 1 ? 4 : 0; + constraints.gridheight = 1; + constraints.gridwidth = index == 0 ? 4 : 2; + ButtonWidth = index == 0 ? ButtonWidth * 2 + 1 : ButtonWidth; + }else { + int l = ((index + ((end == 0) ? end : (3 - end))) / 3); + constraints.gridy = l; + constraints.gridx = ((index - (l * 3 - (end == 0 ? end : 3 - end))))*2; + constraints.gridheight = 1; + constraints.gridwidth = 2; + } + labelButton.setPreferredSize(new Dimension(ButtonWidth, BUTTON_HEIGHT)); + + this.add(panel, constraints); + } + + private JPanel getButtonPanel(UIToggleButton labelButton, int index) { + JPanel panel = new JPanel(); + panel.setLayout(new BorderLayout()); + panel.add(labelButton,BorderLayout.CENTER); + + setPanelBorder(panel, index); + + return panel; + } + + public void setPanelBorder(JPanel panel, int index) { + int end = listNum % 3; + int num = listNum; + + //调整index + if (end == 1 && index != 0){ + index += 2; + num += 2; + }else if (end == 2 && index != 0 && index != 1){ + index += 1; + num += 1; + } + boolean isRightLine = (index+1) % 3 == 0 ? true : false; + isRightLine = (end == 2 && index == 1) ? true : isRightLine; + isRightLine = (end == 1 && index == 0) ? true : isRightLine; + //是否画下边线 + int row = index / 3; + int column = index % 3; + boolean isBottomLine = ((row+1)*3 + column < num) ? false : true; + + panel.setBorder(BorderFactory.createMatteBorder(1, 1, isBottomLine ? 1 : 0, isRightLine ? 1 : 0, UIConstants.LINE_COLOR)); + } +} diff --git a/designer_chart/src/com/fr/plugin/chart/custom/component/VanChartDataPane.java b/designer_chart/src/com/fr/plugin/chart/custom/component/VanChartDataPane.java new file mode 100644 index 0000000000..cd0c729380 --- /dev/null +++ b/designer_chart/src/com/fr/plugin/chart/custom/component/VanChartDataPane.java @@ -0,0 +1,23 @@ +package com.fr.plugin.chart.custom.component; + +import com.fr.design.gui.frpane.AttributeChangeListener; +import com.fr.design.mainframe.chart.gui.ChartDataPane; +import com.fr.design.mainframe.chart.gui.data.NormalChartDataPane; + +import javax.swing.*; + +/** + * Created by Fangjie on 2016/5/18. + */ +public class VanChartDataPane extends ChartDataPane { + + public VanChartDataPane(AttributeChangeListener listener) { + super(listener); + } + + @Override + protected JPanel createContentPane() { + contentsPane = new NormalChartDataPane(listener, VanChartDataPane.this); + return contentsPane; + } +} diff --git a/designer_chart/src/com/fr/plugin/chart/custom/component/VanChartHyperLinkPane.java b/designer_chart/src/com/fr/plugin/chart/custom/component/VanChartHyperLinkPane.java new file mode 100644 index 0000000000..9f41e7b86f --- /dev/null +++ b/designer_chart/src/com/fr/plugin/chart/custom/component/VanChartHyperLinkPane.java @@ -0,0 +1,133 @@ +package com.fr.plugin.chart.custom.component; + +import com.fr.chart.chartattr.Plot; +import com.fr.chart.web.ChartHyperPoplink; +import com.fr.chart.web.ChartHyperRelateCellLink; +import com.fr.chart.web.ChartHyperRelateFloatLink; +import com.fr.design.ExtraDesignClassManager; +import com.fr.design.beans.BasicBeanPane; +import com.fr.design.chart.javascript.ChartEmailPane; +import com.fr.design.fun.HyperlinkProvider; +import com.fr.design.gui.controlpane.NameableCreator; +import com.fr.design.gui.frpane.UICorrelationComboBoxPane; +import com.fr.design.gui.imenutable.UIMenuNameableCreator; +import com.fr.general.Inter; +import com.fr.js.*; +import com.fr.plugin.chart.designer.other.HyperlinkMapFactory; +import com.fr.stable.bridge.StableFactory; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Set; + +/** + * Created by Fangjie on 2016/4/28. + */ +public class VanChartHyperLinkPane extends UICorrelationComboBoxPane { + + public VanChartHyperLinkPane() { + super(); + } + + public void populate(Plot plot) { + HashMap paneMap = getHyperlinkMap(plot); + + //安装平台内打开插件时,添加相应按钮 + Set providers = ExtraDesignClassManager.getInstance().getArray(HyperlinkProvider.XML_TAG); + for (HyperlinkProvider provider : providers) { + NameableCreator nc = provider.createHyperlinkCreator(); + //todo@shine9.0 + // paneMap.put(nc.getHyperlink(), nc.getUpdatePane()); + } + + java.util.List list = refreshList(paneMap); + refreshMenuAndAddMenuAction(list); + + java.util.List hyperList = new ArrayList(); + NameJavaScriptGroup nameGroup = populateHotHyperLink(plot); + for(int i = 0; nameGroup != null && i < nameGroup.size(); i++) { + NameJavaScript javaScript = nameGroup.getNameHyperlink(i); + if(javaScript != null && javaScript.getJavaScript() != null) { + JavaScript script = javaScript.getJavaScript(); + hyperList.add(new UIMenuNameableCreator(javaScript.getName(), script, getUseMap(paneMap, script.getClass()))); + } + } + + populateBean(hyperList); + doLayout(); + } + + protected NameJavaScriptGroup populateHotHyperLink(Plot plot) { + return plot.getHotHyperLink(); + } + + protected HashMap getHyperlinkMap(Plot plot){ + return HyperlinkMapFactory.getHyperlinkMap(plot); + } + + public void update(Plot plot) { + + NameJavaScriptGroup nameGroup = updateNameGroup(); + + updateHotHyperLink(plot, nameGroup); + } + + protected void updateHotHyperLink(Plot plot, NameJavaScriptGroup nameGroup) { + plot.setHotHyperLink(nameGroup); + } + + private NameJavaScriptGroup updateNameGroup() { + NameJavaScriptGroup nameGroup = new NameJavaScriptGroup(); + nameGroup.clear(); + + resetItemName(); + java.util.List list = updateBean(); + for(int i = 0; i < list.size(); i++) { + UIMenuNameableCreator menu = (UIMenuNameableCreator)list.get(i); + NameJavaScript nameJava = new NameJavaScript(menu.getName(), (JavaScript)menu.getObj()); + nameGroup.addNameHyperlink(nameJava); + } + + return nameGroup; + } + + + protected java.util.List refreshList(HashMap map) { + java.util.List list = new ArrayList(); + + list.add(new UIMenuNameableCreator(Inter.getLocText("Chart-Link_Reportlet"), + new ReportletHyperlink(), getUseMap(map, ReportletHyperlink.class))); + list.add(new UIMenuNameableCreator(Inter.getLocText("Chart-Link_Mail"), new EmailJavaScript(), ChartEmailPane.class)); + list.add(new UIMenuNameableCreator(Inter.getLocText("Chart-Link_Web"), + new WebHyperlink(), getUseMap(map, WebHyperlink.class))); + list.add(new UIMenuNameableCreator(Inter.getLocText("Chart-Link_Dynamic_Parameters"), + new ParameterJavaScript(), getUseMap(map, ParameterJavaScript.class))); + list.add(new UIMenuNameableCreator("JavaScript", new JavaScriptImpl(), getUseMap(map, JavaScriptImpl.class))); + + list.add(new UIMenuNameableCreator(Inter.getLocText("Chart-Float_Chart"), + new ChartHyperPoplink(), getUseMap(map, ChartHyperPoplink.class))); + list.add(new UIMenuNameableCreator(Inter.getLocText("Chart-Link_Cell"), + new ChartHyperRelateCellLink(), getUseMap(map, ChartHyperRelateCellLink.class))); + list.add(new UIMenuNameableCreator(Inter.getLocText("Chart-Link_Float"), + new ChartHyperRelateFloatLink(), getUseMap(map, ChartHyperRelateFloatLink.class))); + + FormHyperlinkProvider hyperlink = StableFactory.getMarkedInstanceObjectFromClass(FormHyperlinkProvider.XML_TAG, FormHyperlinkProvider.class); + list.add(new UIMenuNameableCreator(Inter.getLocText("Chart-Link_Form"), + hyperlink, getUseMap(map, FormHyperlinkProvider.class))); + + return list; + } + + protected Class getUseMap(HashMap map, Object key) { + if(map.get(key) != null){ + return (Class)map.get(key); + } + //引擎在这边放了个provider,当前表单对象 + for(Object tempKey : map.keySet()){ + if(((Class)tempKey).isAssignableFrom((Class)key)){ + return (Class)map.get(tempKey); + } + } + return null; + } +} diff --git a/designer_chart/src/com/fr/plugin/chart/custom/images/column_area.png b/designer_chart/src/com/fr/plugin/chart/custom/images/column_area.png new file mode 100644 index 0000000000000000000000000000000000000000..34a2c08c8304557ea5db44b4c2035a23f16596cf GIT binary patch literal 603 zcmV-h0;K(kP)400009a7bBm000XU z000XU0RWnu7ytkO8FWQhbW?9;ba!ELWdK2BZ(?O2No`?gWm08fWO;GPWjp`?0q99Y zK~#9!?3hnW0znkOpPLnCm{LMXf=Fc~h+R7*eUA=x@e>Gj?bg9h;3YbC45>?p=#rPf z@T5Uj7_la$h<_8MdCQJ0Vxgot>ifZSM`xGapYwL+?E(-4K@bE%5MzdJ5GVBoWe3|l zwd=bHEcWG^q(O)>ndkpLr!+39OQIw?r07MyxWh!y%Qh$2K6V8*g%j9 zYcA$3S(I!vCZJj}f?+n#yD<&-BjMd>>v2|l5>~voO1qS|Kv*e67CGpSrlqvEE~msNcK#$ zRT3wVR>>CP>6cX~WEYx0pd`Dm#Vr`xNvgBuui)tBGBzj|=RlI`N@|N<8FekG1!v@8 zDgk9xvNBS&uC~OBgaPcX7&Z^^V|guhG%`;wgLp$gk7*=Iq9jV9!$il=c7DJA$JZl+ pA`}YgfFKBhAP9mW#++{f1^`8IwFck400009a7bBm000XU z000XU0RWnu7ytkO8FWQhbW?9;ba!ELWdK2BZ(?O2No`?gWm08fWO;GPWjp`?0p>|W zK~#9!?3hnW0znkOpJD|SVufS}!7L~eq^L_CS~_&;ly?t#@e_FHBXsZ+c&U#dNL?bL z4tgk10wcprFvyTnq=Nn&db2poU`7hN?TGIO!wx$vJ3r>lzPAHF5ClOG1VQu}7BgO| z#3~-V+_f7!jk*k(lhq7Slqvo9JFWc^x+F@XJ&H}{$?fE0i+I^%{oT3fl60baq>rZL z2{s3|tdyb4(}!)~1N_Q?+D7cPZdX#2T$eU zPS)|-7^^YKug^hfJWay5s|>>A!|7xw)B2p#U4+@il-jSBXP}f@R-f0Sa400009a7bBm000XU z000XU0RWnu7ytkO8FWQhbW?9;ba!ELWdK2BZ(?O2No`?gWm08fWO;GPWjp`?0a{5! zK~#9!?3h0ef-n?^!FT{hM~=V^j3>~ERasb^Ogx5*D~q~z(i0d@AUBZF(HrQic_wHy z0%>h4zb|PD9VlP==e^eR0000006@#|O?51UxV~$T<5ZCG!^cUw9RS}iJVcxq~F`^_>sQeyFPFQqL@4??q-IC;kMzS5pB%fqm7QIxEe2}{; zDkTRMCD*heB`%8IC214Obx7JGs$J3s(Vs}#Aez*Xq(mfgQM4e*ElEylNbZ|<)+hy3 zl;Ul<9!eRGjnNm$;HM+1D8<`wb~B=~wWJaguT zp`zreB&VIq*BWV>evF-_$g<4$00000003w?Hvt9!3xSov5}?ba00000NkvXXu0mjf D;`zFK literal 0 HcmV?d00001 diff --git a/designer_chart/src/com/fr/plugin/chart/custom/images/custom/icon/area.png b/designer_chart/src/com/fr/plugin/chart/custom/images/custom/icon/area.png new file mode 100644 index 0000000000000000000000000000000000000000..35fa7d21862926b5700065d890c62185d9b30064 GIT binary patch literal 16329 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 A_W%F@ literal 0 HcmV?d00001 diff --git a/designer_chart/src/com/fr/plugin/chart/custom/images/custom/icon/bubble.png b/designer_chart/src/com/fr/plugin/chart/custom/images/custom/icon/bubble.png new file mode 100644 index 0000000000000000000000000000000000000000..b75e78bb53317bcfadc4e00ec7d683768e1a6123 GIT binary patch literal 15875 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 literal 0 HcmV?d00001 diff --git a/designer_chart/src/com/fr/plugin/chart/custom/images/custom/icon/column.png b/designer_chart/src/com/fr/plugin/chart/custom/images/custom/icon/column.png new file mode 100644 index 0000000000000000000000000000000000000000..73fe7be526ef3ff6612efeb8dd18288f748c2cc9 GIT binary patch literal 15461 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 UV1GHsbrL&q$qH@V;>@-G1&}t=_W%F@ literal 0 HcmV?d00001 diff --git a/designer_chart/src/com/fr/plugin/chart/custom/images/custom/icon/different_pie.png b/designer_chart/src/com/fr/plugin/chart/custom/images/custom/icon/different_pie.png new file mode 100644 index 0000000000000000000000000000000000000000..68d759c11d0c7b8bf388131c4684d242c90d29df GIT binary patch literal 16274 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 literal 0 HcmV?d00001 diff --git a/designer_chart/src/com/fr/plugin/chart/custom/images/custom/icon/pie.png b/designer_chart/src/com/fr/plugin/chart/custom/images/custom/icon/pie.png new file mode 100644 index 0000000000000000000000000000000000000000..6afa8095eb45e38ea7547ebd9d7d2e87b513d12c GIT binary patch literal 16280 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 H^4@;|&aaeG literal 0 HcmV?d00001 diff --git a/designer_chart/src/com/fr/plugin/chart/custom/images/custom/icon/pointer_180.png b/designer_chart/src/com/fr/plugin/chart/custom/images/custom/icon/pointer_180.png new file mode 100644 index 0000000000000000000000000000000000000000..b20420280c86e2573cdf86681f99cdf631c7ca9d GIT binary patch literal 16361 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 literal 0 HcmV?d00001 diff --git a/designer_chart/src/com/fr/plugin/chart/custom/images/custom/icon/pointer_360.png b/designer_chart/src/com/fr/plugin/chart/custom/images/custom/icon/pointer_360.png new file mode 100644 index 0000000000000000000000000000000000000000..d4058631fbdfac2c236c06670ddaa08e7bb93023 GIT binary patch literal 16778 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 literal 0 HcmV?d00001 diff --git a/designer_chart/src/com/fr/plugin/chart/custom/images/custom/icon/radar.png b/designer_chart/src/com/fr/plugin/chart/custom/images/custom/icon/radar.png new file mode 100644 index 0000000000000000000000000000000000000000..391e2f0d54cb1cf39fb67033eb8a3348ce38ebb7 GIT binary patch literal 17688 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 literal 0 HcmV?d00001 diff --git a/designer_chart/src/com/fr/plugin/chart/custom/images/custom/icon/ring.png b/designer_chart/src/com/fr/plugin/chart/custom/images/custom/icon/ring.png new file mode 100644 index 0000000000000000000000000000000000000000..f3bf1b31d8bd3a46ad86605c78045ce58183f246 GIT binary patch literal 16824 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 oTDoPuQ_jL|LqF3Oyt4=1y$Fn%O z+Ipd=sI5wUwAWgzrLAJE_yB5cu?4kK(Mx?%@PhSiAJ!^(Ckc;uz*(-<-gUoB*2-g_ z|Ji%b`JKH_=F7aHPMZ8ACx8P%(38q|#WeaGqu+u7PdG=~YGUcHftL6*8wB|cb-ulz z^`*~3ko2k{Ih9IPC1M)V6ozZbbRsOrWT9t6kSr?4f@`t}iknVk7|fBp8~ZDHT!S`} z_lj7Bs4Ovr-VmQ_C8p;lC2MlCG*T@uO3snxU~~WzLE+pSlhJI$aw2)IxETH0ISli- zt|?SjBrn>TkejMfb7M#=!4-#z`5HukawDW+s8}2kA$W-^Ku{5kpfD=rqf$&H!VrYp z`Qphr^e>rJtHY)#;yTmORwPePQ5Fn_?RI;ZT^L4MGhkFImBNSs76|zC48CoFnZk4U zW?Qg3NLL&MVbfR*7Ro@Hxz4zFI+;yH@_5cf-LKAdnJnFj%(hN;G(|WEx4>u^0{7*l z)pYwQkD^34Un-QO^EF~rfD^bdTqjQNO5_o&SE4Ca z1AXq{MvpnpwP@*NI4;njI^{=EPb{a8tB)~U<2>8s8fSYD zS{eM%XwPMJdv>}RdT;0BA#lg{aDQ|TyPhyJwU;}TYu2NK*hn2^$E`$k23;YK)A{bG z54(ZkWw7(Vz-ag%Y=jM;|L3;h@w)0yYy)^g{r|S1r;0Ut+?+vZ<#1O4cMUw=&bjyV z;m+zh5PEl_%=zbp(Opbe6z=LCR0j7N>&fh%pX%&JW43F4gaDymFzWp5boG=$*ED8V zPZ@OW@k}urD7m0B8!+tQ<@^VAAMexYn>|7vE*1;LG8h~NJ=BIA!kDTs(C4ttd7g+R zoj#z@r(>FjBMror%;o4IbUM1X%Hy`o)r0O)`lgS*--NqwID55c_bK*Q{^(iJUl|pM z#U=rOFqwYaRIJj^ts9?Ps= z?laqO>)hyb9cMb!vsccK@x`JajPSYAF%Nk#c;tJFQ`Elq-b2=?KHRZ$`8}^WhIQkA zd#&JFhCOw~qb^%7Ry7~|cEX**(mNY%*F#HfvZr{uyneyK z!M7&+Pa)b?VfIA^Y!12*9p$6m_u{nE+3JKQiv)s7e?ESDWcm2&Jb$iN)g|ka!4AEM zGbujn(9(vi^#!+YTO}_%RkLf*qycBm5sqr^LV2KKs!#sOg}w(z59p^&i&H8GW@cup zXU+O&d`Q1d$9gQyhb}J| zH{|#=ar4y8P>1(TLF@g=31f?vmX+9{vx$UbyW_L7{?CoLy6WPK8)vj#RQN3B#|18w zozE;@Y91Bkt$*Ss8q^XC|Gy!=hB4b5~PBYrZNuZuX=LSkfOU6HhI+-d>(eE^@X-o zwMlb2f+y8~dN{!E^pQ?Mn)F!;3o>Uh(;kmCiEU8Fb zJuGx>_GL%WA7$#YkAAtt(SQ5BW8+G1k){cIUH>Z9a7`OXjjB7JIBfX+S!cK3Joo*q zCsTND?rm%uv&FLdq^bQtnZpr3rTV~wFQ0gRqO_`LDEIq4X&2TTPT)J<_TH-3Nj{QdUw zU6(cmnpe;LtUp@5uzh9o-y#k=UTrw|bK1v+Kc2|mDhl>%Fzu*^3R^jCIWhkj)0i0Y z(a;Y*ORkO!-FWoZeREFa@4U6Ib>#cyNt=&?Nobl)b(vVd1IQe>u{ig(i#{J4fl0a-Q7MCXL#1 zBFoko6YVd4yKE|N(3iJckX<2T=LpuM*325dl6uj!YR0hx$+eB8x}E+R3Cn_@O&LS2 zA4Rmt_yOuOc|mL14@+C?zpYqwWXH{;q3_s^<<%3x&(wWsn)zIV`6PCqGk*MA%Wmwt zuG0Re5g8p@rQ!8I(NFJH4$Xx4`NJocy!F5rO7bVhHI8qpq7OYt8Jnain>5$)U)rZ{ AH2?qr literal 0 HcmV?d00001 diff --git a/designer_chart/src/com/fr/plugin/chart/custom/images/custom/icon/scatter.png b/designer_chart/src/com/fr/plugin/chart/custom/images/custom/icon/scatter.png new file mode 100644 index 0000000000000000000000000000000000000000..ef86df32ba5dca8cfda577405bae5705451a4774 GIT binary patch literal 15487 zcmeI3e{2)y8OJY#kt~q4j7~5H%sSSI7S8AMkJ!H24#p-V1CuOCOGrn<`R;Xc#P%8A zId&q^rkz&$V?ax3H?ggW#!z8nAXq9|Xb0N_rL7ns)I}`|rEIV;5Oh_m0#&!YXFIm@ z#(5Q~o%YXb$v>X=`##Te@8^A<*Z0po*|2h1WyS0YilQp(YW$*#f3O%m+H;+MYOQ>RH(=_H>F)iLUlkxKca}5CNKCNJYX?l~1|p zbX*?()`wZzke;G-x@oVT(9jZSF!+=>FxZSXMl_i@gWYN5Y&N^yyvSfSaaPvEv7CkB zoV?Y_n@oo6i}qB&U#_?m;v4-n*>uoy(;b=?<5@PDOd69GqY`gtIj7Ufn#`=(%)l9p z+8xz|6cbhFXM&8x@dH(i%P~z>q6RL6PHo2KzRV zE#@SNIiFY}9!_7HB(fk3A|R@%(2pzX7wb?oMeR_=Ntu(!O$_%W5Xj{&dcBcI(bTH8 zvRMmv2221r(c5vm*_;}lI!DI{4e7AuTC#(hj^zal2|Zh@gQ2aBYLFns>9 zszj?0~9@aiEHES{y+}v~gwu2$rglEjW^>AlR5h^>G=VdqTKij=mNNCIeQh z#ip+%XtD`RP_kMWht+On9CjfTbUIA}R7X-22{R^Dt*pXo?JlTdSj*{?tqH6jJvt(U z<@5;^6XGh+`_D~}G+^#X%bi%dPr8qJLDbJSkEpi?kX-Dj(fnoQJhN`{*zKGcf=v7Z z_wjQiJ3tiIUYStoS>p#$m5`Pc;=tPuD`X;_pNTr!4Gr&N_5Xsf{6E+TRp|O++c2@N z`U2a4o>2e4ZOB)#*davQf#hLF3V38-Vmp`F&(WPV(ye1V(WU=6@vw_wMG5Kd;au#P zv3%yt{1&|%!-@2KyV(R^ET?~FT?=K@bv53#P)1$zp7%#(&124HLxu~y^ncLI@!kY) z_JF6#X0zB_EIN#OG{`9sZt=_T99H%7#OBEQph8i{)dh|aNIF^Cu|UW=X11!}wk+L) znNfJt2k$r8+zscL_RO7PU*?beioVRKNGy^B0fILPE<7JZCAbhEc$475^FdUC3ju;R z2`)SzL?yToAb6AD!t+5?f(rqHHwi90A4Da%5FmJy;KK7kRDufuf;R~+JRd|QxDX(C zliNIdiT?*(>DI;ode~smAp9V zj^5=L=A>rslV5JV{n+tO%7;sngL~aS-ZJy31#0>K^U-;bd#2RW_qkG8Pw{OGiZO>4fYD%XIul|6hwSS(z9fpL?QfU9JNNVF9y#oKX~&M; zx7+8OEa~|5zrpq4#L&5yKl*#eBfs-NYo81+LC+C|$R>a#xA1e~Na0bs6>9v&XeHJ-a^D9}%uwy3)UQ$=b*M E3-eMT)Bpeg literal 0 HcmV?d00001 diff --git a/designer_chart/src/com/fr/plugin/chart/custom/images/custom/icon/selected/area.png b/designer_chart/src/com/fr/plugin/chart/custom/images/custom/icon/selected/area.png new file mode 100644 index 0000000000000000000000000000000000000000..2fac0316b45f12ee72929917ab0e1da9f907dc33 GIT binary patch literal 16383 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 Z$&S$x3-7evHoxy3J}V+*|ICz+{|h}R5efhR literal 0 HcmV?d00001 diff --git a/designer_chart/src/com/fr/plugin/chart/custom/images/custom/icon/selected/column.png b/designer_chart/src/com/fr/plugin/chart/custom/images/custom/icon/selected/column.png new file mode 100644 index 0000000000000000000000000000000000000000..6481b4de1dcdac08ede4d0884740f90cb4aaff4c GIT binary patch literal 15520 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 literal 0 HcmV?d00001 diff --git a/designer_chart/src/com/fr/plugin/chart/custom/images/custom/icon/selected/different_pie.png b/designer_chart/src/com/fr/plugin/chart/custom/images/custom/icon/selected/different_pie.png new file mode 100644 index 0000000000000000000000000000000000000000..aec7300393403506cf7039fd2ff612c3ffc69771 GIT binary patch literal 16323 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

    pA=iV!Wpnr-n*(xqERIOb=Zo2F#^8%7 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 b!Eu1=WBzNcTOQ`>-`@}P3-&Eu9J}ei6K(u@ literal 0 HcmV?d00001 diff --git a/designer_chart/src/com/fr/plugin/chart/custom/images/custom/icon/selected/pointer_360.png b/designer_chart/src/com/fr/plugin/chart/custom/images/custom/icon/selected/pointer_360.png new file mode 100644 index 0000000000000000000000000000000000000000..db13dc1a26e921c3effe5ffa31b398a1953c461f GIT binary patch literal 16831 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 CJ=gF6 literal 0 HcmV?d00001 diff --git a/designer_chart/src/com/fr/plugin/chart/custom/images/custom/icon/selected/radar.png b/designer_chart/src/com/fr/plugin/chart/custom/images/custom/icon/selected/radar.png new file mode 100644 index 0000000000000000000000000000000000000000..8d52d5f2636ca3126b85505474f21a4dcd1c70bf GIT binary patch literal 17719 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 literal 0 HcmV?d00001 diff --git a/designer_chart/src/com/fr/plugin/chart/custom/images/custom/icon/selected/same_pie.png b/designer_chart/src/com/fr/plugin/chart/custom/images/custom/icon/selected/same_pie.png new file mode 100644 index 0000000000000000000000000000000000000000..b5a159896516b088961876faaabdad74559bfb32 GIT binary patch literal 16216 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 literal 0 HcmV?d00001 diff --git a/designer_chart/src/com/fr/plugin/chart/custom/images/custom/icon/selected/scatter.png b/designer_chart/src/com/fr/plugin/chart/custom/images/custom/icon/selected/scatter.png new file mode 100644 index 0000000000000000000000000000000000000000..2a7ded617e9a082ae3ffd2ef92a723cf5ac0e5ce GIT binary patch literal 15549 zcmeI3e{d7W701sIY{!k8)-c7mfoKF63Y1697$p+iRF39*-ZDZ<`)7{ECEa`-F z#xk@8)3gZ*Q7$_;!O$aVYTzkf$q<}+7>vkYy=$<4? z^4i|Uh^^vEA-?&U?G_YpIz%s0f zX05#0%o_~4*h}xofWK@($<0@ntc<0DmR;{r)d0^hZEbCNZKgaW*vzn2tCcYr8KaSg zGw4veUlqc%KQuoYWHe3*2#G;CpvsD0r^OXqN~>zu>$ODjS8QFrKs=E@6k`V|GGQUW zuz3b%A}2|V`vh8p-pHj%A_Kg@2mERX`mq!G1w4wXggnY5DdX~_iQ%3&o$=fgUa!wL zVd{`tx(OnPA)U}ORNEc^Of?88tw9l#Zh}jhKhf${*`3&&F_AQ7(rX7{c@j5GiMmBf zA-Y30xK_S62n1CL)+&nE5v{VyQG~kU;z(8L7T3#uNofmx$Ht&8iTzGQ10{kA9IzfO zw80FEv6e01IarVEQbPf(%A_FCnMe$$BFXM{G=|Z@b1ZM>l4B&zL}S4IkpxwkQk3Mm zNpU2RcPl}kpgLrq&zuCql29svStBNmHyh;#W7I2ts%tXUUUXe=U%l#o$@Qa|l z!~qBLWLe@x$<3KfoInFJ05lNIR$7qUEQDz?xhz&7NG1@0=yWE#j|*L*h^<<;z|hfy zMN&i24EIw0k{O(Xy!zgb4xDP8c#7nm~pAf)*5pA#id$_Hf?#H#EGB(f$j(^8a8X zLc*pmw+&P4sxPq(=n3`z+lE9Hiypz>3?v6LTEL?NQ`@=deva*|(F0+8C)%_>Cmwb& ztSBMUJ*be&1nk=KP3D58OWz}JfWkZIO zytIGN=4W#1O#Fs(Tzke(v9Iz+VnttNR3sKjf&jsr1Q(tUq7qyP5WGon z;rSpc!G!?9n*AsWgJ9!WaKbzIrq|EMF z`*6mN4}(>U>wa0EJ#(mb9rxll>RZ$7HNK1c?Uq&U4TpSvrQZ~XKg(fyR@s&v&nh(U zDzY}-y*BL^dw*5&=FzU*Z|u8#?NX}g{C$^iuba2$!QHR=7Gynm_lZvz9az)wSbJai zPyHhg{qf+wp`o74y#uzv$LF5Tsyp4^_k~yg_Pp%ejPn}@cV~4rzFzUpKP$7mpsje? z_u&dx@rOTY)(zhpu&=wcK(ySuv?J^2w?DH~zWYXN%Ax7cY&-JZmoj&BrM*`Fw zKXh3)_lw$g%P-_U^7ha7bo}Pi?vI{Wac!lgZuN=lzozfzEUkKJEB}GA;Lh>+ z&t1Hk)wsa((474jxtqpE!+(&BM>_7Ws__l(I&hJDF7?8;oXY7NiZVS%etaJ_qr0!S UN%(lR_JDDDX+_B^E7ouSFXfm$@&Et; literal 0 HcmV?d00001 diff --git a/designer_chart/src/com/fr/plugin/chart/custom/images/custom/icon/selected/slot.png b/designer_chart/src/com/fr/plugin/chart/custom/images/custom/icon/selected/slot.png new file mode 100644 index 0000000000000000000000000000000000000000..920cf6cc0b302c92b40187d5f803785f1c3a286a GIT binary patch literal 16717 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 literal 0 HcmV?d00001 diff --git a/designer_chart/src/com/fr/plugin/chart/custom/images/custom/icon/selected/stack_radar.png b/designer_chart/src/com/fr/plugin/chart/custom/images/custom/icon/selected/stack_radar.png new file mode 100644 index 0000000000000000000000000000000000000000..b2e5a108e39abced6923d652130b6610d3b5b5b6 GIT binary patch literal 17900 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 literal 0 HcmV?d00001 diff --git a/designer_chart/src/com/fr/plugin/chart/custom/images/custom/icon/stack_radar.png b/designer_chart/src/com/fr/plugin/chart/custom/images/custom/icon/stack_radar.png new file mode 100644 index 0000000000000000000000000000000000000000..4019b360a6d878726a80ea55e84c0a1e5eeeb153 GIT binary patch literal 17845 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 ebF^obV5lsA^t$1duQf0sF?hQAxvX { + private VanChartCustomPlotConditionAttrTabPane conditionAttrPane; + private Chart chart; + @Override + protected JPanel createContentPane() { + JPanel contentPane = new JPanel(new BorderLayout()); + if(chart == null) { + return contentPane; + } + initConditionAttrPane((VanChartCustomPlot) chart.getPlot()); + if(conditionAttrPane != null) { + contentPane.add(conditionAttrPane, BorderLayout.CENTER); + } + return contentPane; + } + + private void initConditionAttrPane(VanChartCustomPlot plot) { + conditionAttrPane = new VanChartCustomPlotConditionAttrTabPane(plot, null); + } + + @Override + public void populateBean(Chart chart) { + this.chart = chart; + if(conditionAttrPane == null) { + this.remove(leftcontentPane); + layoutContentPane(); + } + if(conditionAttrPane != null) { + conditionAttrPane.populateBean((VanChartCustomPlot)chart.getPlot()); + } + } + + @Override + public void updateBean(Chart chart) { + + if (chart == null){ + return; + } + + if (conditionAttrPane != null) { + conditionAttrPane.updateBean((VanChartCustomPlot) chart.getPlot()); + } + } + + /** + * 是否显示滚动条 + * @return + */ + @Override + protected boolean isShowScrollBar() { + return false; + } + + @Override + protected String title4PopupWindow() { + return Inter.getLocText("Chart-Condition_Display"); + } +} diff --git a/designer_chart/src/com/fr/plugin/chart/custom/other/VanChartCustomInteractivePane.java b/designer_chart/src/com/fr/plugin/chart/custom/other/VanChartCustomInteractivePane.java new file mode 100644 index 0000000000..c4ed1ec2d3 --- /dev/null +++ b/designer_chart/src/com/fr/plugin/chart/custom/other/VanChartCustomInteractivePane.java @@ -0,0 +1,56 @@ +package com.fr.plugin.chart.custom.other; + +import com.fr.chart.chartattr.Plot; +import com.fr.general.Inter; +import com.fr.plugin.chart.attr.plot.VanChartPlot; +import com.fr.plugin.chart.custom.VanChartCustomPlot; +import com.fr.plugin.chart.custom.type.CustomStyle; +import com.fr.plugin.chart.designer.TableLayout4VanChartHelper; +import com.fr.plugin.chart.designer.other.AutoRefreshPane; +import com.fr.plugin.chart.designer.other.AutoRefreshPaneWithoutTooltip; +import com.fr.plugin.chart.designer.other.VanChartInteractivePane; +import com.fr.plugin.chart.vanchart.VanChart; + +import javax.swing.*; +import java.awt.*; + +/** + * Created by Fangjie on 2016/4/28. + */ +public class VanChartCustomInteractivePane extends VanChartInteractivePane { + + private VanChartCustomPlotHyperlinkPane hyperlinkPane; + + /** + * 组合图无排序按钮 + * @return + */ + @Override + protected Component[][] createToolBarComponents() { + return createToolBarComponentsWithOutSort(); + } + + protected JPanel createHyperlinkPane() { + hyperlinkPane = new VanChartCustomPlotHyperlinkPane(); + return TableLayout4VanChartHelper.createTitlePane(Inter.getLocText("M_Insert-Hyperlink"), hyperlinkPane, 0); + } + + @Override + protected void populateHyperlink(Plot plot) { + hyperlinkPane.populateBean(chart); + } + + @Override + protected void updateHyperlink(Plot plot){ + hyperlinkPane.updateBean(chart); + } + + protected AutoRefreshPane getMoreLabelPane(VanChartPlot plot) { + boolean isLargeModel = largeModel(plot); + //自定义组合图不支持自动数据点提示 + if (((VanChartCustomPlot)plot).getCustomStyle().equals(CustomStyle.CUSTOM)) { + return new AutoRefreshPaneWithoutTooltip((VanChart) chart, isLargeModel); + } + return new AutoRefreshPane((VanChart) chart, isLargeModel); + } +} diff --git a/designer_chart/src/com/fr/plugin/chart/custom/other/VanChartCustomOtherPane.java b/designer_chart/src/com/fr/plugin/chart/custom/other/VanChartCustomOtherPane.java new file mode 100644 index 0000000000..7538690586 --- /dev/null +++ b/designer_chart/src/com/fr/plugin/chart/custom/other/VanChartCustomOtherPane.java @@ -0,0 +1,19 @@ +package com.fr.plugin.chart.custom.other; + +import com.fr.chart.chartattr.Chart; +import com.fr.design.beans.BasicBeanPane; +import com.fr.plugin.chart.designer.other.VanChartOtherPane; + +/** + * Created by Fangjie on 2016/4/28. + */ +public class VanChartCustomOtherPane extends VanChartOtherPane { + protected BasicBeanPane createInteractivePane() { + return new VanChartCustomInteractivePane(); + } + + @Override + protected BasicBeanPane createConditionAttrPane() { + return new VanChartCustomConditionAttrPane(); + } +} diff --git a/designer_chart/src/com/fr/plugin/chart/custom/other/VanChartCustomPlotConditionAttrTabPane.java b/designer_chart/src/com/fr/plugin/chart/custom/other/VanChartCustomPlotConditionAttrTabPane.java new file mode 100644 index 0000000000..18285dfd16 --- /dev/null +++ b/designer_chart/src/com/fr/plugin/chart/custom/other/VanChartCustomPlotConditionAttrTabPane.java @@ -0,0 +1,112 @@ +package com.fr.plugin.chart.custom.other; + +import com.fr.design.dialog.BasicPane; +import com.fr.plugin.chart.attr.plot.VanChartPlot; +import com.fr.plugin.chart.custom.CustomPlotFactory; +import com.fr.plugin.chart.custom.VanChartCustomPlot; +import com.fr.plugin.chart.custom.component.VanChartCustomPlotTabPane; +import com.fr.plugin.chart.custom.type.CustomPlotType; +import com.fr.plugin.chart.designer.other.VanChartConditionAttrPane; + +import javax.swing.*; +import java.util.ArrayList; +import java.util.List; + +/** + * Created by Fangjie on 2016/4/28. + */ +public class VanChartCustomPlotConditionAttrTabPane extends VanChartCustomPlotTabPane { + public VanChartCustomPlotConditionAttrTabPane(VanChartCustomPlot plot, BasicPane parent) { + super(plot, parent); + } + + @Override + protected void initTabTitle() { + List customPlotList = plot.getCustomPlotList(); + NameArray = new String[paneList.size()]; + for (int i = 0, j = 0 ; i < paneList.size() && j < customPlotList.size(); i++, j++) { + if (customPlotList.get(j).isSupportDataSeriesCondition()) { + JPanel pane = paneList.get(i); + //获取点的tooltip作为标题 + VanChartPlot vanChartPlot = customPlotList.get(j); + + CustomPlotType plotType = CustomPlotFactory.getCustomType(vanChartPlot); + NameArray[i] = CustomPlotFactory.getTitle(plotType); + centerPane.add(pane, NameArray[i]); + }else { + //如果不支持,则i不动 + i -- ; + } + } + } + + @Override + protected List initPaneList() { + List paneList = new ArrayList(); + + List customPlotList = plot.getCustomPlotList(); + + for (int i = 0; i < customPlotList.size(); i++){ + if (customPlotList.get(i).isSupportDataSeriesCondition()) { + //根据不同的plot创建不同的数据配置界面 + VanChartConditionAttrPane contentPane = new VanChartConditionAttrPane(); + + paneList.add(contentPane); + } + } + + return paneList; + } + + @Override + public void populateBean(VanChartCustomPlot plot) { + List customPlotList = plot.getCustomPlotList(); + for (int i = 0, j = 0 ; i < paneList.size() && j < customPlotList.size(); i++, j++){ + if (customPlotList.get(j).isSupportDataSeriesCondition()) { + //获取相应点的属性,并更新界面 + VanChartPlot vanChartPlot = customPlotList.get(j); + + ((VanChartConditionAttrPane) paneList.get(i)).populateBean(vanChartPlot); + }else { + i -- ; + } + } + } + + @Override + public VanChartCustomPlot updateBean() { + return null; + } + + @Override + public void updateBean(VanChartCustomPlot plot) { + List customPlotList = plot.getCustomPlotList(); + for (int i = 0, j = 0; i < paneList.size() && j < customPlotList.size(); i++, j++){ + if (customPlotList.get(j).isSupportDataSeriesCondition()) { + //获取相应点的属性,并更新界面 + VanChartPlot vanChartPlot = customPlotList.get(j); + + VanChartConditionAttrPane conditionPane = (VanChartConditionAttrPane) paneList.get(i); + + conditionPane.updateBean(vanChartPlot); + }else { + i --; + } + } + } + + @Override + public boolean accept(Object ob) { + return false; + } + + @Override + public String title4PopupWindow() { + return null; + } + + @Override + public void reset() { + + } +} diff --git a/designer_chart/src/com/fr/plugin/chart/custom/other/VanChartCustomPlotHyperlinkPane.java b/designer_chart/src/com/fr/plugin/chart/custom/other/VanChartCustomPlotHyperlinkPane.java new file mode 100644 index 0000000000..56f5bff185 --- /dev/null +++ b/designer_chart/src/com/fr/plugin/chart/custom/other/VanChartCustomPlotHyperlinkPane.java @@ -0,0 +1,66 @@ +package com.fr.plugin.chart.custom.other; + +import com.fr.chart.chartattr.Chart; +import com.fr.design.dialog.BasicScrollPane; +import com.fr.plugin.chart.custom.VanChartCustomPlot; + +import javax.swing.*; +import java.awt.*; + +/** + * Created by Fangjie on 2016/4/28. + */ +public class VanChartCustomPlotHyperlinkPane extends BasicScrollPane { + private VanChartCustomPlotHyperlinkTabPane linkPane; + protected Chart chart; + @Override + protected JPanel createContentPane() { + JPanel contentPane = new JPanel(new BorderLayout()); + if(chart == null) { + return contentPane; + } + initLinkPane((VanChartCustomPlot) chart.getPlot()); + if(linkPane != null) { + contentPane.add(linkPane, BorderLayout.CENTER); + } + return contentPane; + } + + private void initLinkPane(VanChartCustomPlot plot) { + linkPane = new VanChartCustomPlotHyperlinkTabPane(plot, null); + } + + @Override + public void populateBean(Chart chart) { + this.chart = chart; + if(linkPane == null) { + this.remove(leftcontentPane); + layoutContentPane(); + } + if(linkPane != null) { + linkPane.populateBean((VanChartCustomPlot)chart.getPlot()); + } + } + + @Override + public void updateBean(Chart chart) { + this.chart = chart; + + if(linkPane != null) { + linkPane.updateBean((VanChartCustomPlot) chart.getPlot()); + } + } + + @Override + protected void layoutContentPane() { + leftcontentPane = createContentPane(); + leftcontentPane.setBorder(BorderFactory.createEmptyBorder(0,0,0,0)); + this.setLayout(new BorderLayout()); + this.add(leftcontentPane, BorderLayout.CENTER); + } + + @Override + protected String title4PopupWindow() { + return null; + } +} diff --git a/designer_chart/src/com/fr/plugin/chart/custom/other/VanChartCustomPlotHyperlinkTabPane.java b/designer_chart/src/com/fr/plugin/chart/custom/other/VanChartCustomPlotHyperlinkTabPane.java new file mode 100644 index 0000000000..073a845207 --- /dev/null +++ b/designer_chart/src/com/fr/plugin/chart/custom/other/VanChartCustomPlotHyperlinkTabPane.java @@ -0,0 +1,93 @@ +package com.fr.plugin.chart.custom.other; + +import com.fr.design.dialog.BasicPane; +import com.fr.plugin.chart.attr.plot.VanChartPlot; +import com.fr.plugin.chart.custom.CustomPlotFactory; +import com.fr.plugin.chart.custom.VanChartCustomPlot; +import com.fr.plugin.chart.custom.component.VanChartCustomPlotTabPane; +import com.fr.plugin.chart.custom.component.VanChartHyperLinkPane; +import com.fr.plugin.chart.custom.type.CustomPlotType; + +import javax.swing.*; +import java.util.ArrayList; +import java.util.List; + +/** + * Created by Fangjie on 2016/4/28. + */ +public class VanChartCustomPlotHyperlinkTabPane extends VanChartCustomPlotTabPane { + public VanChartCustomPlotHyperlinkTabPane(VanChartCustomPlot plot, BasicPane parent) { + super(plot, parent); + } + + @Override + protected void initTabTitle() { + List customPlotList = plot.getCustomPlotList(); + NameArray = new String[Math.min(customPlotList.size(), paneList.size())]; + for (int i = 0; i < customPlotList.size() && i < paneList.size(); i++) { + JPanel pane = paneList.get(i); + //获取点的tooltip作为标题 + VanChartPlot vanChartPlot = customPlotList.get(i); + CustomPlotType plotType = CustomPlotFactory.getCustomType(vanChartPlot); + String name = CustomPlotFactory.getTitle(plotType); + NameArray[i] = name.length() > 3 ? name.substring(0, 3) : name; + centerPane.add(pane, NameArray[i]); + } + } + + @Override + protected List initPaneList() { + List paneList = new ArrayList(); + + List customPlotList = plot.getCustomPlotList(); + + for (int i = 0; i < customPlotList.size(); i++){ + //根据不同的plot创建不同的数据配置界面 + VanChartHyperLinkPane contentPane = new VanChartHyperLinkPane(); + + paneList.add(contentPane); + } + + return paneList; + } + + @Override + public void populateBean(VanChartCustomPlot plot) { + List customPlotList = plot.getCustomPlotList(); + for (int i = 0; i < paneList.size() && i < customPlotList.size(); i++){ + //获取相应点的属性,并更新界面 + VanChartPlot vanChartPlot = customPlotList.get(i); + ((VanChartHyperLinkPane)paneList.get(i)).populate(vanChartPlot); + } + } + + @Override + public VanChartCustomPlot updateBean() { + return null; + } + + @Override + public void updateBean(VanChartCustomPlot plot) { + List customPlotList = plot.getCustomPlotList(); + for (int i = 0; i < paneList.size() && i < customPlotList.size(); i++){ + //获取相应点的属性,并更新界面 + VanChartPlot vanChartPlot = customPlotList.get(i); + ((VanChartHyperLinkPane)paneList.get(i)).update(vanChartPlot); + } + } + + @Override + public boolean accept(Object ob) { + return false; + } + + @Override + public String title4PopupWindow() { + return null; + } + + @Override + public void reset() { + + } +} diff --git a/designer_chart/src/com/fr/plugin/chart/custom/style/VanChartCustomAreaPane.java b/designer_chart/src/com/fr/plugin/chart/custom/style/VanChartCustomAreaPane.java new file mode 100644 index 0000000000..61c99cd406 --- /dev/null +++ b/designer_chart/src/com/fr/plugin/chart/custom/style/VanChartCustomAreaPane.java @@ -0,0 +1,21 @@ +package com.fr.plugin.chart.custom.style; + +import com.fr.chart.chartattr.Plot; +import com.fr.design.gui.frpane.AbstractAttrNoScrollPane; +import com.fr.plugin.chart.custom.component.VanChartCustomAreaBackgroundPane; +import com.fr.plugin.chart.designer.style.VanChartStylePane; +import com.fr.plugin.chart.designer.style.background.VanChartAreaPane; + +/** + * Created by Fangjie on 2016/5/19. + */ +public class VanChartCustomAreaPane extends VanChartAreaPane { + public VanChartCustomAreaPane(Plot plot, VanChartStylePane parent) { + super(plot, parent); + } + + @Override + protected void initPlotPane(boolean b, AbstractAttrNoScrollPane parent) { + plotPane = new VanChartCustomAreaBackgroundPane(true, parent); + } +} diff --git a/designer_chart/src/com/fr/plugin/chart/custom/style/VanChartCustomAxisAreaPane.java b/designer_chart/src/com/fr/plugin/chart/custom/style/VanChartCustomAxisAreaPane.java new file mode 100644 index 0000000000..64554aa539 --- /dev/null +++ b/designer_chart/src/com/fr/plugin/chart/custom/style/VanChartCustomAxisAreaPane.java @@ -0,0 +1,54 @@ +package com.fr.plugin.chart.custom.style; + +import com.fr.chart.chartattr.Plot; +import com.fr.plugin.chart.attr.plot.VanChartPlot; +import com.fr.plugin.chart.custom.VanChartCustomPlot; +import com.fr.plugin.chart.custom.CustomPlotDesignerPaneFactory; +import com.fr.plugin.chart.custom.CustomPlotFactory; +import com.fr.plugin.chart.designer.style.background.VanChartAxisAreaPane; + +import java.util.List; + + +/** + * Created by Fangjie on 2016/5/19. + */ +public class VanChartCustomAxisAreaPane extends VanChartAxisAreaPane { + + + @Override + public void updateBean(Plot plot){ + VanChartCustomPlot customPlot = (VanChartCustomPlot)plot; + + super.updateBean(customPlot); + + List vanChartPlotList = customPlot.getCustomPlotList(); + + //更新后同步坐标轴 + CustomPlotFactory.axisSynchronization(customPlot); + + //使用其他坐标轴的图形 + for (int i = 0; i < vanChartPlotList.size(); i++){ + if (vanChartPlotList.get(i).isSupportPlotBackground() && CustomPlotDesignerPaneFactory.isUseDiffAxisPane(vanChartPlotList.get(i))){ + super.updateBean(vanChartPlotList.get(i)); + } + } + } + + + public void populateBean(Plot plot){ + VanChartCustomPlot customPlot = (VanChartCustomPlot)plot; + + if (customPlot.isHaveStandardAxis()){ + super.populateBean(customPlot); + } else { + List vanChartPlotList = customPlot.getCustomPlotList(); + //使用其他坐標軸的圖形 + for (int i = 0; i < vanChartPlotList.size(); i++) { + if (vanChartPlotList.get(i).isSupportPlotBackground() && CustomPlotDesignerPaneFactory.isUseDiffAxisPane(vanChartPlotList.get(i))) { + super.populateBean(vanChartPlotList.get(i)); + } + } + } + } +} diff --git a/designer_chart/src/com/fr/plugin/chart/custom/style/VanChartCustomAxisPane.java b/designer_chart/src/com/fr/plugin/chart/custom/style/VanChartCustomAxisPane.java new file mode 100644 index 0000000000..b7e226d629 --- /dev/null +++ b/designer_chart/src/com/fr/plugin/chart/custom/style/VanChartCustomAxisPane.java @@ -0,0 +1,84 @@ +package com.fr.plugin.chart.custom.style; + +import com.fr.chart.chartattr.Chart; +import com.fr.design.dialog.BasicScrollPane; +import com.fr.design.mainframe.chart.PaneTitleConstants; +import com.fr.plugin.chart.custom.VanChartCustomPlot; +import com.fr.plugin.chart.designer.style.VanChartStylePane; +import com.fr.plugin.chart.vanchart.VanChart; + +import javax.swing.*; +import java.awt.*; + + +/** + * Created by Fangjie on 2016/4/27. + */ +public class VanChartCustomAxisPane extends BasicScrollPane { + private static final long serialVersionUID = -2974722365840564105L; + private VanChartCustomAxisTabPane axisPane; + private Chart chart; + protected VanChartStylePane parent; + + public VanChartCustomAxisPane(VanChartStylePane parent) { + super(); + this.parent = parent; + } + + @Override + protected JPanel createContentPane() { + JPanel contentPane = new JPanel(new BorderLayout()); + if(chart == null) { + return contentPane; + } + initAxisPane((VanChartCustomPlot) chart.getPlot()); + contentPane.add(axisPane, BorderLayout.CENTER); + return contentPane; + } + + private void initAxisPane(VanChartCustomPlot plot) { + axisPane = new VanChartCustomAxisTabPane(plot, parent); + } + + @Override + public void populateBean(Chart chart) { + this.chart = chart; + + if(axisPane == null){ + this.remove(leftcontentPane); + layoutContentPane(); + parent.initAllListeners(); + } + + if(axisPane != null) { + axisPane.populateBean((VanChartCustomPlot) chart.getPlot()); + } + } + + @Override + public void updateBean(Chart chart){ + if(chart == null){ + return; + } + VanChartCustomPlot plot = (VanChartCustomPlot) chart.getPlot(); + axisPane.updateBean(plot); + } + + @Override + protected void layoutContentPane() { + leftcontentPane = createContentPane(); + leftcontentPane.setBorder(BorderFactory.createEmptyBorder()); + this.setLayout(new BorderLayout()); + this.add(leftcontentPane, BorderLayout.CENTER); + } + + @Override + public VanChart updateBean() { + return null; + } + + @Override + protected String title4PopupWindow() { + return PaneTitleConstants.CHART_STYLE_AXIS_TITLE; + } +} diff --git a/designer_chart/src/com/fr/plugin/chart/custom/style/VanChartCustomAxisTabPane.java b/designer_chart/src/com/fr/plugin/chart/custom/style/VanChartCustomAxisTabPane.java new file mode 100644 index 0000000000..8fc7a774c1 --- /dev/null +++ b/designer_chart/src/com/fr/plugin/chart/custom/style/VanChartCustomAxisTabPane.java @@ -0,0 +1,156 @@ +package com.fr.plugin.chart.custom.style; + +import com.fr.design.dialog.BasicPane; +import com.fr.general.Inter; +import com.fr.plugin.chart.attr.plot.VanChartAxisPlot; +import com.fr.plugin.chart.attr.plot.VanChartPlot; +import com.fr.plugin.chart.custom.CustomPlotDesignerPaneFactory; +import com.fr.plugin.chart.custom.CustomPlotFactory; +import com.fr.plugin.chart.custom.VanChartCustomPlot; +import com.fr.plugin.chart.custom.component.VanChartCustomPlotAxisPane; +import com.fr.plugin.chart.custom.component.VanChartCustomPlotTabPane; +import com.fr.plugin.chart.custom.type.CustomPlotType; +import com.fr.plugin.chart.designer.style.VanChartStylePane; +import com.fr.plugin.chart.designer.style.axis.VanChartAxisPane; +import com.fr.plugin.chart.vanchart.VanChart; + +import javax.swing.*; +import java.util.ArrayList; +import java.util.List; + +/** + * Created by Fangjie on 2016/4/27. + */ +public class VanChartCustomAxisTabPane extends VanChartCustomPlotTabPane { + + public VanChartCustomAxisTabPane(VanChartCustomPlot plot, BasicPane parent) { + super(plot, parent); + } + + @Override + protected List initPaneList() { + List paneList = new ArrayList(); + + VanChartCustomPlot customPlot = plot; + + List customPlotList = customPlot.getCustomPlotList(); + + /** + * 判断是否有使用标准坐标轴的点 + */ + ArrayList plotOrder = customPlot.getDiffAxisOrder(); + + for (int i = 0; i < customPlotList.size(); i++){ + //根据不同的plotOrder创建不同的数据配置界面 + if (plotOrder.contains(i)) { + VanChartAxisPane contentPane = CustomPlotDesignerPaneFactory.createAxisPane((VanChartAxisPlot) customPlotList.get(i), (VanChartStylePane) parent); + paneList.add(contentPane); + } + } + + //判断是否使用标准坐标轴系,标准坐标系即使用customPlot的坐标轴属性,如果有,放在最后 + if (customPlot.isHaveStandardAxis()){ + VanChartAxisPane contentPane = new VanChartCustomPlotAxisPane(customPlot, (VanChartStylePane) parent); + paneList.add(contentPane); + } + + return paneList; + } + + @Override + protected void initTabTitle(){ + VanChartCustomPlot customPlot = plot; + List customPlotList = customPlot.getCustomPlotList(); + ArrayList plotOrder = customPlot.getDiffAxisOrder(); + + NameArray = new String[Math.min(customPlotList.size(), paneList.size())]; + + + for (int i = 0;i < paneList.size() && i < plotOrder.size(); i++) { + JPanel pane = paneList.get(i); + + VanChartPlot vanChartPlot = customPlotList.get(plotOrder.get(i)); + CustomPlotType plotType = CustomPlotFactory.getCustomType(vanChartPlot); + + NameArray[i] = CustomPlotFactory.getTitle(plotType); + centerPane.add(pane, NameArray[i]); + } + + //如果有标准坐标系,则放在最后一个tab按钮上 + if (customPlot.isHaveStandardAxis()){ + JPanel pane = paneList.get(paneList.size() - 1); + + //获取点的tooltip作为标题 + NameArray[paneList.size() - 1] = Inter.getLocText("Plugin-ChartF_Rectangular_Coordinate_System"); + centerPane.add(pane, NameArray[paneList.size() - 1]); + } + } + + @Override + /** + * 标准坐标轴属性存在最外层的customPlot的坐标轴变量中 + * 不使用标准坐标轴的坐标轴属性存在相应的plot中的坐标轴变量中 + */ + public void populateBean(VanChartCustomPlot plot) { + List customPlotList = plot.getCustomPlotList(); + + ArrayList plotOrder = plot.getDiffAxisOrder(); + + for (int i = 0; i < paneList.size() && i < plotOrder.size(); i++){ + //先更新标准坐标轴界面 + //获取相应点的属性,并更新界面 + VanChartPlot vanChartPlot = customPlotList.get(plotOrder.get(i)); + ((VanChartAxisPane)paneList.get(i)).populateBean(vanChartPlot); + } + + if (plot.isHaveStandardAxis()){ + ((VanChartAxisPane)paneList.get(paneList.size() - 1)).populateBean(plot); + + } + } + + @Override + public VanChartCustomPlot updateBean() { + return null; + } + + @Override + public void updateBean(VanChartCustomPlot plot) { + VanChartCustomPlot customPlot = plot; + List customPlotList = customPlot.getCustomPlotList(); + + ArrayList plotOrder = customPlot.getDiffAxisOrder(); + + for (int i = 0; i < paneList.size() && i < plotOrder.size(); i++){ + //获取相应点的属性,并更新界面 + VanChartPlot vanChartPlot = customPlotList.get(plotOrder.get(i)); + ((VanChartAxisPane)paneList.get(i)).updateBean(vanChartPlot); + } + + if (customPlot.isHaveStandardAxis()){ + //用VanChart包裝plot + VanChart chart = new VanChart(); + chart.setPlot(customPlot); + ((VanChartAxisPane)paneList.get(paneList.size() - 1)).updateBean(chart); + + } + + //将标准坐标轴属性存入使用标准坐标轴的点的坐标轴变量中 + CustomPlotFactory.axisSynchronization(plot); + } + + @Override + public boolean accept(Object ob) { + return false; + } + + @Override + public String title4PopupWindow() { + return null; + } + + @Override + public void reset() { + + } +} diff --git a/designer_chart/src/com/fr/plugin/chart/custom/style/VanChartCustomLabelPane.java b/designer_chart/src/com/fr/plugin/chart/custom/style/VanChartCustomLabelPane.java new file mode 100644 index 0000000000..1fc0affd55 --- /dev/null +++ b/designer_chart/src/com/fr/plugin/chart/custom/style/VanChartCustomLabelPane.java @@ -0,0 +1,73 @@ +package com.fr.plugin.chart.custom.style; + + +import com.fr.chart.chartattr.Chart; +import com.fr.design.dialog.BasicScrollPane; +import com.fr.design.mainframe.chart.PaneTitleConstants; + +import com.fr.plugin.chart.custom.VanChartCustomPlot; +import com.fr.plugin.chart.designer.style.VanChartStylePane; + +import javax.swing.*; +import java.awt.*; + +/** + * Created by Fangjie on 2016/4/22. + */ +public class VanChartCustomLabelPane extends BasicScrollPane { + private VanChartCustomPlotLabelTabPane labelPane; + private Chart chart; + protected VanChartStylePane parent; + private static final long serialVersionUID = -5449293740965811991L; + + public VanChartCustomLabelPane(VanChartStylePane parent) { + super(); + this.parent = parent; + } + + @Override + protected JPanel createContentPane() { + JPanel contentPane = new JPanel(new BorderLayout()); + if(chart == null) { + return contentPane; + } + initLabelPane((VanChartCustomPlot) chart.getPlot()); + + contentPane.add(labelPane, BorderLayout.NORTH); + return contentPane; + } + + private void initLabelPane(VanChartCustomPlot plot) { + labelPane = new VanChartCustomPlotLabelTabPane(plot, parent); + } + + @Override + public void populateBean(Chart chart) { + this.chart = chart; + + if(labelPane == null){ + this.remove(leftcontentPane); + layoutContentPane(); + parent.initAllListeners(); + } + + if(labelPane != null) { + labelPane.populateBean((VanChartCustomPlot)chart.getPlot()); + } + } + + + @Override + public void updateBean(Chart chart) { + if(chart == null) { + return; + } + + labelPane.updateBean((VanChartCustomPlot)chart.getPlot()); + } + + @Override + protected String title4PopupWindow() { + return PaneTitleConstants.CHART_STYLE_LABEL_TITLE; + } +} diff --git a/designer_chart/src/com/fr/plugin/chart/custom/style/VanChartCustomPlotLabelTabPane.java b/designer_chart/src/com/fr/plugin/chart/custom/style/VanChartCustomPlotLabelTabPane.java new file mode 100644 index 0000000000..15cba4ff78 --- /dev/null +++ b/designer_chart/src/com/fr/plugin/chart/custom/style/VanChartCustomPlotLabelTabPane.java @@ -0,0 +1,115 @@ +package com.fr.plugin.chart.custom.style; + +import com.fr.chart.base.DataSeriesCondition; +import com.fr.chart.chartglyph.ConditionAttr; +import com.fr.design.dialog.BasicPane; +import com.fr.plugin.chart.attr.plot.VanChartPlot; +import com.fr.plugin.chart.base.AttrLabel; +import com.fr.plugin.chart.custom.VanChartCustomPlot; +import com.fr.plugin.chart.custom.component.VanChartCustomPlotTabPane; +import com.fr.plugin.chart.custom.type.CustomPlotType; +import com.fr.plugin.chart.custom.CustomPlotFactory; +import com.fr.plugin.chart.designer.PlotFactory; +import com.fr.plugin.chart.designer.style.VanChartStylePane; +import com.fr.plugin.chart.designer.style.label.VanChartPlotLabelPane; + +import javax.swing.*; +import java.util.ArrayList; +import java.util.List; + +/** + * Created by Fangjie on 2016/4/22. + */ +public class VanChartCustomPlotLabelTabPane extends VanChartCustomPlotTabPane { + public VanChartCustomPlotLabelTabPane(VanChartCustomPlot plot, BasicPane parent) { + super(plot, parent); + } + + @Override + protected void initTabTitle() { + List customPlotList = plot.getCustomPlotList(); + NameArray = new String[Math.min(customPlotList.size(), paneList.size())]; + for (int i = 0; i < customPlotList.size() && i < paneList.size(); i++) { + JPanel pane = paneList.get(i); + //获取点的tooltip作为标题 + VanChartPlot vanChartPlot = customPlotList.get(i); + CustomPlotType plotType = CustomPlotFactory.getCustomType(vanChartPlot); + + NameArray[i] = CustomPlotFactory.getTitle(plotType); + centerPane.add(pane, NameArray[i]); + } + } + + + @Override + protected List initPaneList() { + List paneList = new ArrayList(); + + List customPlotList = plot.getCustomPlotList(); + + for (int i = 0; i < customPlotList.size(); i++){ + //根据不同的plot创建不同的数据配置界面 + VanChartPlotLabelPane contentPane = PlotFactory.createPlotLabelPane(customPlotList.get(i), (VanChartStylePane) parent); + + paneList.add(contentPane); + } + + return paneList; + } + + @Override + public void populateBean(VanChartCustomPlot plot) { + List customPlotList = plot.getCustomPlotList(); + for (int i = 0; i < paneList.size() && i < customPlotList.size(); i++){ + //获取相应点的属性,并更新界面 + VanChartPlot vanChartPlot = customPlotList.get(i); + DataSeriesCondition attr = vanChartPlot.getAttrLabelFromConditionCollection(); + ((VanChartPlotLabelPane)paneList.get(i)).populate((AttrLabel) attr); + } + } + + @Override + public VanChartCustomPlot updateBean() { + return null; + } + + @Override + public void updateBean(VanChartCustomPlot plot) { + + if (plot == null){ + return; + } + + List customPlotList = plot.getCustomPlotList(); + for (int i = 0; i < paneList.size() && i < customPlotList.size(); i++) { + ConditionAttr attrList = customPlotList.get(i).getConditionCollection().getDefaultAttr(); + DataSeriesCondition attr = customPlotList.get(i).getAttrLabelFromConditionCollection(); + if (attr != null) { + attrList.remove(attr); + } + + VanChartPlotLabelPane labelPane = (VanChartPlotLabelPane) paneList.get(i); + AttrLabel attrLabel = labelPane.update(); + + if (attrLabel != null) { + attrList.addDataSeriesCondition(attrLabel); + } + + } + } + + @Override + public boolean accept(Object ob) { + return false; + } + + @Override + public String title4PopupWindow() { + return null; + } + + @Override + public void reset() { + + } +} diff --git a/designer_chart/src/com/fr/plugin/chart/custom/style/VanChartCustomPlotSeriesPane.java b/designer_chart/src/com/fr/plugin/chart/custom/style/VanChartCustomPlotSeriesPane.java new file mode 100644 index 0000000000..767bb27ab2 --- /dev/null +++ b/designer_chart/src/com/fr/plugin/chart/custom/style/VanChartCustomPlotSeriesPane.java @@ -0,0 +1,84 @@ +package com.fr.plugin.chart.custom.style; + +import com.fr.chart.chartattr.Plot; +import com.fr.design.beans.BasicBeanPane; +import com.fr.design.layout.TableLayout; +import com.fr.design.layout.TableLayoutHelper; +import com.fr.design.mainframe.chart.gui.style.series.AbstractPlotSeriesPane; + +import javax.swing.*; +import java.awt.*; + +/** + * Created by Fangjie on 2016/4/26. + */ +public class VanChartCustomPlotSeriesPane extends BasicBeanPane { + private static final int WIDTH = 210; + private static final int DELTA_HEIGHT = 300; + private BasicBeanPane axisPane; + private AbstractPlotSeriesPane seriesPane; + public VanChartCustomPlotSeriesPane(BasicBeanPane axisPane, AbstractPlotSeriesPane seriesPane) { + this.axisPane = axisPane; + this.seriesPane = seriesPane; + + initContentPane(); + } + + private void initContentPane() { + + seriesPane.setPreferredSize(new Dimension(WIDTH, (int) (seriesPane.getPreferredSize().getHeight() + DELTA_HEIGHT))); + + double p = TableLayout.PREFERRED; + double f = TableLayout.FILL; + + double[] columnSize = {f}; + double[] rowSize = {p, p, p}; + + if (axisPane == null) { + this.add(seriesPane); + }else { + Component[][] components = new Component[][]{ + new Component[]{axisPane}, + new Component[]{new JSeparator()}, + new Component[]{seriesPane} + }; + this.add(TableLayoutHelper.createTableLayoutPane(components, rowSize, columnSize)); + } + + } + + + @Override + protected String title4PopupWindow() { + return null; + } + + @Override + public void populateBean(Plot plot) { + //获取位置信息 + if (axisPane != null) { + axisPane.populateBean(plot); + } + //获取界面信息 + seriesPane.populateBean(plot); + } + + @Override + public void updateBean(Plot plot) { + if(plot == null) { + return; + } + if(seriesPane != null) { + seriesPane.updateBean(plot); + } + if (axisPane != null){ + axisPane.updateBean(plot); + } + } + + @Override + public Plot updateBean() { + return null; + } + +} diff --git a/designer_chart/src/com/fr/plugin/chart/custom/style/VanChartCustomPlotSeriesTabPane.java b/designer_chart/src/com/fr/plugin/chart/custom/style/VanChartCustomPlotSeriesTabPane.java new file mode 100644 index 0000000000..5171f0be2c --- /dev/null +++ b/designer_chart/src/com/fr/plugin/chart/custom/style/VanChartCustomPlotSeriesTabPane.java @@ -0,0 +1,116 @@ +package com.fr.plugin.chart.custom.style; + +import com.fr.chart.chartattr.Plot; +import com.fr.design.ChartTypeInterfaceManager; +import com.fr.design.beans.BasicBeanPane; +import com.fr.design.dialog.BasicPane; +import com.fr.design.mainframe.chart.gui.style.series.AbstractPlotSeriesPane; +import com.fr.plugin.chart.attr.plot.VanChartPlot; +import com.fr.plugin.chart.custom.CustomPlotDesignerPaneFactory; +import com.fr.plugin.chart.custom.CustomPlotFactory; +import com.fr.plugin.chart.custom.VanChartCustomPlot; +import com.fr.plugin.chart.custom.component.VanChartCustomPlotTabPane; +import com.fr.plugin.chart.custom.type.CustomPlotType; +import com.fr.plugin.chart.designer.style.VanChartStylePane; + +import javax.swing.*; +import java.util.ArrayList; +import java.util.List; + +/** + * Created by Fangjie on 2016/4/22. + */ +public class VanChartCustomPlotSeriesTabPane extends VanChartCustomPlotTabPane { + public VanChartCustomPlotSeriesTabPane(VanChartCustomPlot plot, BasicPane parent) { + super(plot, parent); + } + + @Override + protected void initTabTitle() { + List customPlotList = plot.getCustomPlotList(); + NameArray = new String[Math.min(customPlotList.size(), paneList.size())]; + for (int i = 0; i < customPlotList.size() && i < paneList.size(); i++) { + JPanel pane = paneList.get(i); + //获取点的tooltip作为标题 + VanChartPlot vanChartPlot = customPlotList.get(i); + CustomPlotType plotType = CustomPlotFactory.getCustomType(vanChartPlot); + + NameArray[i] = CustomPlotFactory.getTitle(plotType); + centerPane.add(pane, NameArray[i]); + } + } + + @Override + protected List initPaneList() { + /** + * 獲取不同plot的系列面板 + */ + List paneList = new ArrayList(); + + List customPlotList = plot.getCustomPlotList(); + + for (int i = 0; i < customPlotList.size(); i++){ + //根据不同的plot创建不同的数据配置界面 + AbstractPlotSeriesPane seriesPane = (AbstractPlotSeriesPane) ChartTypeInterfaceManager.getInstance().getPlotSeriesPane((VanChartStylePane)parent, customPlotList.get(i)); + //根据不同的plot获取不同的控制控制位置界面,从Factory中获取 + BasicBeanPane plotPositionPane = CustomPlotDesignerPaneFactory.createCustomPlotPositionPane(customPlotList.get(i)); + + VanChartCustomPlotSeriesPane contentPane = new VanChartCustomPlotSeriesPane(plotPositionPane, seriesPane); + + paneList.add(contentPane); + } + + return paneList; + } + + @Override + public void populateBean(VanChartCustomPlot plot) { + /** + * 更新各个点的系列界面 + */ + List customPlotList = plot.getCustomPlotList(); + for (int i = 0; i < paneList.size() && i < customPlotList.size(); i++){ + //获取相应点的属性,并更新界面 + VanChartPlot vanChartPlot = customPlotList.get(i); + + ((VanChartCustomPlotSeriesPane)paneList.get(i)).populateBean(vanChartPlot); + } + + } + + @Override + public VanChartCustomPlot updateBean() { + return null; + } + + @Override + public void updateBean(VanChartCustomPlot plot) { + /** + * 更新每个图表的数据 + */ + List customPlotList = plot.getCustomPlotList(); + for (int i = 0; i < paneList.size() && i < customPlotList.size(); i++){ + //获取相应点的属性,并更新界面 + VanChartPlot vanChartPlot = customPlotList.get(i); + + VanChartCustomPlotSeriesPane plotSeriesPane = (VanChartCustomPlotSeriesPane) paneList.get(i); + + plotSeriesPane.updateBean(vanChartPlot); + } + } + + @Override + public boolean accept(Object ob) { + return false; + } + + @Override + public String title4PopupWindow() { + return null; + } + + @Override + public void reset() { + + } +} diff --git a/designer_chart/src/com/fr/plugin/chart/custom/style/VanChartCustomPlotTooltipTabPane.java b/designer_chart/src/com/fr/plugin/chart/custom/style/VanChartCustomPlotTooltipTabPane.java new file mode 100644 index 0000000000..09bdddb9fd --- /dev/null +++ b/designer_chart/src/com/fr/plugin/chart/custom/style/VanChartCustomPlotTooltipTabPane.java @@ -0,0 +1,118 @@ +package com.fr.plugin.chart.custom.style; + +import com.fr.chart.base.DataSeriesCondition; +import com.fr.chart.chartglyph.ConditionAttr; +import com.fr.design.dialog.BasicPane; +import com.fr.plugin.chart.attr.plot.VanChartPlot; +import com.fr.plugin.chart.base.AttrTooltip; +import com.fr.plugin.chart.custom.CustomPlotFactory; +import com.fr.plugin.chart.custom.VanChartCustomPlot; +import com.fr.plugin.chart.custom.component.VanChartCustomPlotTabPane; +import com.fr.plugin.chart.custom.type.CustomPlotType; +import com.fr.plugin.chart.designer.PlotFactory; +import com.fr.plugin.chart.designer.style.VanChartStylePane; +import com.fr.plugin.chart.designer.style.tooltip.VanChartPlotTooltipPane; +import com.fr.plugin.chart.scatter.attr.ScatterAttrTooltip; + +import javax.swing.*; +import java.util.ArrayList; +import java.util.List; + +/** + * Created by Fangjie on 2016/4/22. + */ +public class VanChartCustomPlotTooltipTabPane extends VanChartCustomPlotTabPane { + public VanChartCustomPlotTooltipTabPane(VanChartCustomPlot plot, BasicPane parent) { + super(plot, parent); + } + + @Override + protected void initTabTitle() { + List customPlotList = plot.getCustomPlotList(); + NameArray = new String[Math.min(customPlotList.size(), paneList.size())]; + for (int i = 0; i < customPlotList.size() && i < paneList.size(); i++) { + JPanel pane = paneList.get(i); + //获取点的tooltip作为标题 + VanChartPlot vanChartPlot = customPlotList.get(i); + CustomPlotType plotType = CustomPlotFactory.getCustomType(vanChartPlot); + + NameArray[i] = CustomPlotFactory.getTitle(plotType); + centerPane.add(pane, NameArray[i]); + } + } + + @Override + protected List initPaneList() { + List paneList = new ArrayList(); + + List customPlotList = plot.getCustomPlotList(); + + for (int i = 0; i < customPlotList.size(); i++){ + //根据不同的plot创建不同的数据配置界面 + VanChartPlotTooltipPane contentPane = PlotFactory.createPlotTooltipPane(customPlotList.get(i), (VanChartStylePane) parent); + paneList.add(contentPane); + } + + return paneList; + } + + @Override + public void populateBean(VanChartCustomPlot plot) { + List customPlotList = plot.getCustomPlotList(); + for (int i = 0; i < paneList.size() && i < customPlotList.size(); i++){ + //获取相应点的属性,并更新界面 + VanChartPlot vanChartPlot = customPlotList.get(i); + DataSeriesCondition attr = vanChartPlot.getAttrTooltipFromConditionCollection(); + ((VanChartPlotTooltipPane)paneList.get(i)).populate((AttrTooltip) attr); + } + } + + @Override + public VanChartCustomPlot updateBean() { + return null; + } + + @Override + public void updateBean(VanChartCustomPlot plot) { + if(plot == null) { + return; + } + + List customPlotList = plot.getCustomPlotList(); + for (int i = 0; i < paneList.size() && i < customPlotList.size(); i++){ + //获取相应点的属性,并更新界面 + VanChartPlot vanChartPlot = customPlotList.get(i); + + ConditionAttr attrList = vanChartPlot.getConditionCollection().getDefaultAttr(); + + //移除所有数据点提示相关属性 + if(attrList.getExisted(AttrTooltip.class) != null){ + attrList.remove(AttrTooltip.class); + }else if (attrList.getExisted(ScatterAttrTooltip.class) != null){ + attrList.remove(ScatterAttrTooltip.class); + } + + VanChartPlotTooltipPane tooltipPane = (VanChartPlotTooltipPane) paneList.get(i); + + AttrTooltip attrTooltip = tooltipPane.update(); + if (attrTooltip != null) { + attrList.addDataSeriesCondition(attrTooltip); + } + } + } + + @Override + public boolean accept(Object ob) { + return false; + } + + @Override + public String title4PopupWindow() { + return null; + } + + @Override + public void reset() { + + } +} diff --git a/designer_chart/src/com/fr/plugin/chart/custom/style/VanChartCustomSeriesPane.java b/designer_chart/src/com/fr/plugin/chart/custom/style/VanChartCustomSeriesPane.java new file mode 100644 index 0000000000..267f1e64c4 --- /dev/null +++ b/designer_chart/src/com/fr/plugin/chart/custom/style/VanChartCustomSeriesPane.java @@ -0,0 +1,145 @@ +package com.fr.plugin.chart.custom.style; + +import com.fr.chart.chartattr.Chart; +import com.fr.design.layout.TableLayout; +import com.fr.design.layout.TableLayoutHelper; +import com.fr.design.mainframe.chart.gui.ChartStylePane; +import com.fr.design.mainframe.chart.gui.style.ChartFillStylePane; +import com.fr.design.mainframe.chart.gui.style.series.ChartSeriesPane; +import com.fr.plugin.chart.attr.plot.VanChartPlot; +import com.fr.plugin.chart.custom.VanChartCustomPlot; +import com.fr.plugin.chart.designer.component.VanChartBeautyPane; + +import javax.swing.*; +import java.awt.*; + + +/** + * Created by Fangjie on 2016/4/22. + */ +public class VanChartCustomSeriesPane extends ChartSeriesPane { + + private JPanel seriesPane; + protected VanChartCustomPlotSeriesTabPane plotSeriesPane; + private ChartFillStylePane fillStylePane;//配色 + private VanChartBeautyPane stylePane;//风格 + + + + public VanChartCustomSeriesPane(ChartStylePane parent) { + super(parent); + } + + protected JPanel createContentPane() { + JPanel contentPane = new JPanel(new BorderLayout()); + if(chart == null) { + return contentPane; + } + initSeriesPane((VanChartCustomPlot) chart.getPlot()); + + //公共使用的部分 + seriesPane.add(plotSeriesPane, BorderLayout.CENTER); + + //每种不同的图表单独的设置部分 + if(seriesPane != null) { + contentPane.add(seriesPane, BorderLayout.CENTER); + } + return contentPane; + } + + /** + * 创建組合图系列界面 + */ + private void initSeriesPane(VanChartCustomPlot plot) { + + seriesPane = new JPanel(new BorderLayout(0, 10)); + //获取公共的属性面板 + seriesPane.add(initCommonPane(), BorderLayout.NORTH); + + plotSeriesPane = new VanChartCustomPlotSeriesTabPane(plot, parent); + } + + private JPanel initCommonPane() { + + double p = TableLayout.PREFERRED; + double f = TableLayout.FILL; + double[] row = {p,p,p,p}; + double[] col = {f}; + + fillStylePane = new ChartFillStylePane(); + + stylePane = new VanChartBeautyPane(); + + Component[][] components = new Component[][]{ + new Component[]{fillStylePane}, //配色 + new Component[]{new JSeparator()}, + new Component[]{stylePane},//风格 + new Component[]{new JSeparator()} + }; + + return TableLayoutHelper.createTableLayoutPane(components, row, col); + + } + + /** + * 保存界面属性 + */ + @Override + public void updateBean(Chart chart) { + + if(chart == null) { + return; + } + + VanChartCustomPlot plot = (VanChartCustomPlot) chart.getPlot(); + + if (fillStylePane != null){ + plot.setPlotFillStyle(fillStylePane.updateBean()); + } + if(stylePane != null) { + plot.setPlotStyle(stylePane.updateBean()); + + //风格属性传递 + for (int i = 0; i < plot.getCustomPlotList().size(); i++){ + VanChartPlot vanChartPlot = plot.getCustomPlotList().get(i); + vanChartPlot.setPlotStyle(plot.getPlotStyle()); + } + + } + if (seriesPane != null){ + plotSeriesPane.updateBean(plot); + } + } + + /** + * 更新界面 + */ + @Override + public void populateBean(Chart chart) { + this.chart = chart; + if(seriesPane == null) { + this.remove(leftcontentPane); + layoutContentPane(); + parent.initAllListeners(); + } + if(seriesPane != null) { + //更新渐变色和风格 + VanChartCustomPlot plot = (VanChartCustomPlot) chart.getPlot(); + if(plot == null) { + return; + } + + + if(fillStylePane != null) {//配色 + fillStylePane.populateBean(plot.getPlotFillStyle()); + } + if(stylePane != null){//风格 + stylePane.populateBean(plot.getPlotStyle()); + } + + //更新不同点的系列界面 + plotSeriesPane.populateBean(plot); + } + } + +} diff --git a/designer_chart/src/com/fr/plugin/chart/custom/style/VanChartCustomStylePane.java b/designer_chart/src/com/fr/plugin/chart/custom/style/VanChartCustomStylePane.java new file mode 100644 index 0000000000..9ce02be6a6 --- /dev/null +++ b/designer_chart/src/com/fr/plugin/chart/custom/style/VanChartCustomStylePane.java @@ -0,0 +1,71 @@ +package com.fr.plugin.chart.custom.style; + +import com.fr.chart.chartattr.ChartCollection; +import com.fr.design.dialog.BasicPane; +import com.fr.design.gui.frpane.AttributeChangeListener; +import com.fr.design.mainframe.chart.gui.style.series.ChartSeriesPane; +import com.fr.plugin.chart.attr.plot.VanChartAxisPlot; +import com.fr.plugin.chart.custom.CustomPlotFactory; +import com.fr.plugin.chart.custom.VanChartCustomPlot; +import com.fr.plugin.chart.designer.style.VanChartStylePane; + +import java.util.List; + +/** + * Created by Fangjie on 2016/4/22. + */ +public class VanChartCustomStylePane extends VanChartStylePane { + public VanChartCustomStylePane(AttributeChangeListener listener) { + super(listener); + } + + /** + * 根据不同的plot类型创建不同的标签界面 + * @param paneList + */ + @Override + protected void createVanChartLabelPane(List paneList) { + paneList.add(new VanChartCustomLabelPane(VanChartCustomStylePane.this)); + } + + /** + * 根据不同的plot类型创建不同的数据点提示界面 + * @param paneList + */ + @Override + protected void addVanChartTooltipPane(List paneList){ + paneList.add(new VanChartCustomTooltipPane(VanChartCustomStylePane.this)); + } + + /** + * 组合图以外的新图表类型都是使用ChartSeriesPane然后通过接口创建不同的seriesStyleContentPane + * 组合图类型不走那个接口,因为需要的系列界面完全是新的,需要像标签界面那样处理 + * @return + */ + @Override + protected ChartSeriesPane createChartSeriesPane() { + return new VanChartCustomSeriesPane(VanChartCustomStylePane.this); + } + + /** + * 当所有图表都不支持坐标轴时,则无坐标轴选项,否则创建和自定义柱形图一样的坐标轴 + * @param paneList + */ + @Override + protected void createVanChartAxisPane(List paneList, VanChartAxisPlot plot) { + paneList.add(new VanChartCustomAxisPane(VanChartCustomStylePane.this)); + } + + + @Override + protected void addVanChartAreaPane(List paneList) { + paneList.add(new VanChartCustomAreaPane(getChart().getPlot(), VanChartCustomStylePane.this)); + } + + @Override + public void update(ChartCollection collection) { + super.update(collection); + CustomPlotFactory.dataSheetSynchronization((VanChartCustomPlot) collection.getSelectedChart().getPlot()); + } + +} diff --git a/designer_chart/src/com/fr/plugin/chart/custom/style/VanChartCustomTooltipPane.java b/designer_chart/src/com/fr/plugin/chart/custom/style/VanChartCustomTooltipPane.java new file mode 100644 index 0000000000..5a2ec5bbfc --- /dev/null +++ b/designer_chart/src/com/fr/plugin/chart/custom/style/VanChartCustomTooltipPane.java @@ -0,0 +1,73 @@ +package com.fr.plugin.chart.custom.style; + +import com.fr.chart.chartattr.Chart; +import com.fr.design.dialog.BasicScrollPane; +import com.fr.general.Inter; +import com.fr.plugin.chart.custom.VanChartCustomPlot; +import com.fr.plugin.chart.designer.style.VanChartStylePane; + +import javax.swing.*; +import java.awt.*; + +/** + * Created by Fangjie on 2016/4/22. + */ +public class VanChartCustomTooltipPane extends BasicScrollPane { + + private static final long serialVersionUID = -2974722365840564105L; + private VanChartCustomPlotTooltipTabPane tooltipPane; + private Chart chart; + protected VanChartStylePane parent; + + + public VanChartCustomTooltipPane(VanChartStylePane parent){ + super(); + this.parent = parent; + } + + @Override + protected JPanel createContentPane() { + JPanel contentPane = new JPanel(new BorderLayout()); + if(chart == null) { + return contentPane; + } + initTooltipPane((VanChartCustomPlot) chart.getPlot()); + contentPane.add(tooltipPane, BorderLayout.NORTH); + return contentPane; + } + + private void initTooltipPane(VanChartCustomPlot plot) { + tooltipPane = new VanChartCustomPlotTooltipTabPane(plot, parent); + } + + + @Override + public void populateBean(Chart chart) { + this.chart = chart; + + if(tooltipPane == null){ + this.remove(leftcontentPane); + layoutContentPane(); + parent.initAllListeners(); + } + + if(tooltipPane != null) { + tooltipPane.populateBean((VanChartCustomPlot) chart.getPlot()); + } + } + + @Override + public void updateBean(Chart chart) { + if(chart == null) { + return; + } + + tooltipPane.updateBean((VanChartCustomPlot)chart.getPlot()); + + } + + @Override + protected String title4PopupWindow() { + return Inter.getLocText("Plugin-Chart_Tooltip"); + } +} diff --git a/designer_chart/src/com/fr/plugin/chart/designer/PlotFactory.java b/designer_chart/src/com/fr/plugin/chart/designer/PlotFactory.java new file mode 100644 index 0000000000..3e6aff6c21 --- /dev/null +++ b/designer_chart/src/com/fr/plugin/chart/designer/PlotFactory.java @@ -0,0 +1,359 @@ +package com.fr.plugin.chart.designer; + +import com.fr.base.chart.chartdata.model.LargeDataModel; +import com.fr.chart.chartattr.Plot; +import com.fr.data.core.FormatField; +import com.fr.design.gui.icombobox.UIComboBoxRenderer; +import com.fr.design.gui.style.FormatPane; +import com.fr.general.ComparatorUtils; +import com.fr.general.FRLogger; +import com.fr.general.Inter; +import com.fr.plugin.chart.area.VanChartAreaPlot; +import com.fr.plugin.chart.bubble.VanChartBubblePlot; +import com.fr.plugin.chart.bubble.force.VanChartBubbleRefreshTooltipPane; +import com.fr.plugin.chart.column.VanChartColumnPlot; +import com.fr.plugin.chart.designer.component.VanChartLabelContentPane; +import com.fr.plugin.chart.designer.component.VanChartRefreshTooltipContentPane; +import com.fr.plugin.chart.designer.component.VanChartTooltipContentPane; +import com.fr.plugin.chart.designer.style.*; +import com.fr.plugin.chart.designer.style.label.VanChartGaugePlotLabelPane; +import com.fr.plugin.chart.designer.style.label.VanChartPlotLabelPane; +import com.fr.plugin.chart.designer.style.tooltip.VanChartPlotRefreshTooltipPane; +import com.fr.plugin.chart.designer.style.tooltip.VanChartPlotTooltipPane; +import com.fr.plugin.chart.drillmap.VanChartDrillMapPlot; +import com.fr.plugin.chart.funnel.VanChartFunnelPlot; +import com.fr.plugin.chart.funnel.designer.style.VanChartFunnelLabelContentPane; +import com.fr.plugin.chart.funnel.designer.style.VanChartFunnelRefreshTooltipContentPane; +import com.fr.plugin.chart.funnel.designer.style.VanChartFunnelTooltipContentPane; +import com.fr.plugin.chart.gantt.VanChartGanttPlot; +import com.fr.plugin.chart.gantt.designer.style.VanChartGanttLabelContentPane; +import com.fr.plugin.chart.gantt.designer.style.tooltip.VanChartGanttPlotTooltipPane; +import com.fr.plugin.chart.gantt.designer.style.tooltip.VanChartGanttTooltipContentPane; +import com.fr.plugin.chart.gauge.VanChartGaugePlot; +import com.fr.plugin.chart.gauge.VanChartGaugePlotRefreshTooltipPane; +import com.fr.plugin.chart.gauge.VanChartGaugePlotTooltipPane; +import com.fr.plugin.chart.heatmap.VanChartHeatMapPlot; +import com.fr.plugin.chart.line.VanChartLinePlot; +import com.fr.plugin.chart.map.VanChartMapPlot; +import com.fr.plugin.chart.map.designer.style.label.VanChartMapLabelContentPane; +import com.fr.plugin.chart.map.designer.style.tooltip.VanChartMapRefreshTooltipContentPane; +import com.fr.plugin.chart.map.designer.style.tooltip.VanChartMapTooltipContentPane; +import com.fr.plugin.chart.multilayer.VanChartMultiPiePlot; +import com.fr.plugin.chart.multilayer.style.VanChartMultiPieLabelContentPane; +import com.fr.plugin.chart.multilayer.style.VanChartMultiPiePlotTooltipPane; +import com.fr.plugin.chart.multilayer.style.VanChartMultiPieTooltipContentPane; +import com.fr.plugin.chart.multilayer.style.VanChartMutiPieRefreshTooltipContentPane; +import com.fr.plugin.chart.scatter.VanChartScatterPlot; +import com.fr.plugin.chart.scatter.VanChartScatterPlotTooltipPane; +import com.fr.plugin.chart.scatter.VanChartScatterRefreshTooltipContentPane; +import com.fr.plugin.chart.scatter.component.label.VanChartScatterPlotLabelPane; +import com.fr.plugin.chart.structure.VanChartStructurePlot; +import com.fr.plugin.chart.structure.desinger.style.VanChartStructureLabelContentPane; +import com.fr.plugin.chart.structure.desinger.style.VanChartStructureRefreshTooltipContentPane; +import com.fr.plugin.chart.structure.desinger.style.VanChartStructureTooltipContentPane; +import com.fr.plugin.chart.treemap.VanChartTreeMapPlot; +import com.fr.plugin.chart.wordcloud.VanChartWordCloudPlot; +import com.fr.plugin.chart.wordcloud.designer.style.VanChartWordCloudRefreshTootipContentPane; +import com.fr.plugin.chart.wordcloud.designer.style.VanChartWordCloudTooltipContentPane; + +import javax.swing.*; +import java.awt.*; +import java.lang.reflect.Constructor; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; + +/** + * Created by Mitisky on 16/3/1. + * 图表配置界面的工厂 + */ +public class PlotFactory { + + private static Set> autoAdjustLabelPlots = new HashSet>(); + + static { + autoAdjustLabelPlots.add(VanChartColumnPlot.class); + autoAdjustLabelPlots.add(VanChartLinePlot.class); + autoAdjustLabelPlots.add(VanChartAreaPlot.class); + autoAdjustLabelPlots.add(VanChartStructurePlot.class); + } + + public static boolean plotAutoAdjustLabelPosition(Plot plot){ + return autoAdjustLabelPlots.contains(plot.getClass()); + } + /** + * + * 标签Map + */ + private static Map, Class> labelMap = new HashMap, Class>(); + static { + labelMap.put(VanChartGaugePlot.class, VanChartGaugePlotLabelPane.class); + labelMap.put(VanChartScatterPlot.class, VanChartScatterPlotLabelPane.class); + labelMap.put(VanChartBubblePlot.class, VanChartScatterPlotLabelPane.class); + } + + /** + * 图例Map + */ + private static Map, Class> legendMap = new HashMap, Class>(); + static { + legendMap.put(VanChartGaugePlot.class, VanLegendPaneWidthOutHighlight.class); + legendMap.put(VanChartMultiPiePlot.class, VanLegendPaneWidthOutHighlight.class); + legendMap.put(VanChartScatterPlot.class, VanChartRangeLegendPane.class); + legendMap.put(VanChartBubblePlot.class, VanChartRangeLegendPane.class); + legendMap.put(VanChartMapPlot.class, VanChartRangeLegendPane.class); + legendMap.put(VanChartDrillMapPlot.class, VanChartRangeLegendPane.class); + legendMap.put(VanChartHeatMapPlot.class, HeatMapRangeLegendPane.class); + legendMap.put(VanChartWordCloudPlot.class, VanChartRangeLegendPane.class); + } + + /** + * 数据点提示Map + */ + private static Map, Class> toolTipMap = new HashMap, Class>(); + static { + toolTipMap.put(VanChartGaugePlot.class, VanChartGaugePlotTooltipPane.class); + toolTipMap.put(VanChartScatterPlot.class, VanChartScatterPlotTooltipPane.class); + toolTipMap.put(VanChartBubblePlot.class, VanChartScatterPlotTooltipPane.class); + toolTipMap.put(VanChartMultiPiePlot.class, VanChartMultiPiePlotTooltipPane.class); + toolTipMap.put(VanChartTreeMapPlot.class, VanChartMultiPiePlotTooltipPane.class); + toolTipMap.put(VanChartGanttPlot.class, VanChartGanttPlotTooltipPane.class); + } + + private static Map, Class> labelContentMap = new HashMap, Class>(); + + static { + labelContentMap.put(VanChartMapPlot.class, VanChartMapLabelContentPane.class); + labelContentMap.put(VanChartDrillMapPlot.class, VanChartMapLabelContentPane.class); + labelContentMap.put(VanChartMultiPiePlot.class, VanChartMultiPieLabelContentPane.class); + labelContentMap.put(VanChartTreeMapPlot.class, VanChartMultiPieLabelContentPane.class); + labelContentMap.put(VanChartFunnelPlot.class, VanChartFunnelLabelContentPane.class); + labelContentMap.put(VanChartHeatMapPlot.class, VanChartMapLabelContentPane.class); + labelContentMap.put(VanChartGanttPlot.class, VanChartGanttLabelContentPane.class); + labelContentMap.put(VanChartStructurePlot.class, VanChartStructureLabelContentPane.class); + } + + private static Map, Class> tooltipContentMap = new HashMap, Class>(); + + static { + tooltipContentMap.put(VanChartMapPlot.class, VanChartMapTooltipContentPane.class); + tooltipContentMap.put(VanChartDrillMapPlot.class, VanChartMapTooltipContentPane.class); + tooltipContentMap.put(VanChartMultiPiePlot.class, VanChartMultiPieTooltipContentPane.class); + tooltipContentMap.put(VanChartTreeMapPlot.class, VanChartMultiPieTooltipContentPane.class); + tooltipContentMap.put(VanChartFunnelPlot.class, VanChartFunnelTooltipContentPane.class); + tooltipContentMap.put(VanChartHeatMapPlot.class, VanChartMapTooltipContentPane.class); + tooltipContentMap.put(VanChartWordCloudPlot.class, VanChartWordCloudTooltipContentPane.class); + tooltipContentMap.put(VanChartGanttPlot.class, VanChartGanttTooltipContentPane.class); + tooltipContentMap.put(VanChartStructurePlot.class, VanChartStructureTooltipContentPane.class); + } + + + + /** + * 监控刷新 自动数据点提示Map + */ + + + private static Map, Class> refreshToolTipMap = new HashMap, Class>(); + static { + refreshToolTipMap.put(VanChartGaugePlot.class, VanChartGaugePlotRefreshTooltipPane.class); + refreshToolTipMap.put(VanChartBubblePlot.class, VanChartBubbleRefreshTooltipPane.class); + + } + private static Map, Class> refreshTooltipContentMap = new HashMap, Class>(); + + static { + refreshTooltipContentMap.put(VanChartMapPlot.class, VanChartMapRefreshTooltipContentPane.class); + refreshTooltipContentMap.put(VanChartHeatMapPlot.class, VanChartMapRefreshTooltipContentPane.class); + refreshTooltipContentMap.put(VanChartDrillMapPlot.class, VanChartMapRefreshTooltipContentPane.class); + refreshTooltipContentMap.put(VanChartScatterPlot.class, VanChartScatterRefreshTooltipContentPane.class); + refreshTooltipContentMap.put(VanChartBubblePlot.class, VanChartScatterRefreshTooltipContentPane.class); + refreshTooltipContentMap.put(VanChartMultiPiePlot.class, VanChartMutiPieRefreshTooltipContentPane.class); + refreshTooltipContentMap.put(VanChartTreeMapPlot.class, VanChartMutiPieRefreshTooltipContentPane.class); + refreshTooltipContentMap.put(VanChartFunnelPlot.class, VanChartFunnelRefreshTooltipContentPane.class); + refreshTooltipContentMap.put(VanChartWordCloudPlot.class, VanChartWordCloudRefreshTootipContentPane.class); + refreshTooltipContentMap.put(VanChartStructurePlot.class, VanChartStructureRefreshTooltipContentPane.class); + + } + + /** + * 根据图表类型创建标签界面 + * @param plot 图表 + * @param stylePane 样式界面 + * @return 标签界面 + */ + public static VanChartPlotLabelPane createPlotLabelPane(Plot plot, VanChartStylePane stylePane) { + Class key = plot.getClass(); + if(labelMap.containsKey(key)){ + try{ + Class cl = labelMap.get(key); + Constructor constructor = cl.getConstructor(Plot.class, VanChartStylePane.class); + return constructor.newInstance(plot, stylePane); + } catch (Exception e){ + FRLogger.getLogger().error(e.getMessage()); + } + } + return new VanChartPlotLabelPane(plot, stylePane); + } + + /** + * 根据图表类型创建图例界面 + * @param plot 图表 + * @param stylePane 样式界面 + * @return 图例界面 + */ + public static VanChartPlotLegendPane createPlotLegendPane(Plot plot, VanChartStylePane stylePane) { + Class key = plot.getClass(); + if(legendMap.containsKey(key)){ + try{ + Class cl = legendMap.get(key); + Constructor constructor = cl.getConstructor(VanChartStylePane.class); + return constructor.newInstance(stylePane); + } catch (Exception e){ + FRLogger.getLogger().error(e.getMessage()); + } + } + return new VanChartPlotLegendPane(stylePane); + } + + /** + * 根据图表类型创建数据点提示界面 + * @param plot 图表 + * @param stylePane 样式界面 + * @return 数据点提示界面 + */ + public static VanChartPlotTooltipPane createPlotTooltipPane(Plot plot, VanChartStylePane stylePane) { + Class key = plot.getClass(); + if(toolTipMap.containsKey(key)){ + try{ + Class cl = toolTipMap.get(key); + Constructor constructor = cl.getConstructor(Plot.class, VanChartStylePane.class); + return constructor.newInstance(plot, stylePane); + } catch (Exception e){ + FRLogger.getLogger().error(e.getMessage()); + } + } + return new VanChartPlotTooltipPane(plot, stylePane); + } + + /** + * 根据图表类型创建标签的具体内容界面.分类名系列名等 + * @param plot 图表 + * @param parent 样式界面 + * @param showOnPane formatpane用到 + * @return 标签的具体内容界面 + */ + public static VanChartTooltipContentPane createPlotLabelContentPane(Plot plot, VanChartStylePane parent, JPanel showOnPane){ + Class key = plot.getClass(); + if(labelContentMap.containsKey(key)){ + try{ + Class cl = labelContentMap.get(key); + Constructor constructor = cl.getConstructor(VanChartStylePane.class, JPanel.class); + return constructor.newInstance(parent, showOnPane); + } catch (Exception e){ + FRLogger.getLogger().error(e.getMessage()); + } + } + return new VanChartLabelContentPane(parent, showOnPane); + } + + /** + * 根据图表类型创建数据点提示的具体内容界面.分类名系列名等 + * @param plot 图表 + * @param parent 样式界面 + * @param showOnPane formatpane用到 + * @return 数据点提示的具体内容界面 + */ + public static VanChartTooltipContentPane createPlotTooltipContentPane(Plot plot, VanChartStylePane parent, JPanel showOnPane){ + Class key = plot.getClass(); + if(tooltipContentMap.containsKey(key)){ + try{ + Class cl = tooltipContentMap.get(key); + Constructor constructor = cl.getConstructor(VanChartStylePane.class, JPanel.class); + return constructor.newInstance(parent, showOnPane); + } catch (Exception e){ + FRLogger.getLogger().error(e.getMessage()); + } + } + return new VanChartTooltipContentPane(parent, showOnPane); + } + + + + /** + * 根据图表类型创建数据点提示界面 + * @param plot 图表 + * @return 数据点提示界面 + */ + public static VanChartPlotTooltipPane createPlotRefreshTooltipPane(Plot plot) { + Class key = plot.getClass(); + if(refreshToolTipMap.containsKey(key)){ + try{ + Class cl = refreshToolTipMap.get(key); + Constructor constructor = cl.getConstructor(Plot.class); + return constructor.newInstance(plot); + } catch (Exception e){ + FRLogger.getLogger().error(e.getMessage()); + } + } + return new VanChartPlotRefreshTooltipPane(plot); + } + /** + * 根据图表类型创建监控刷新中数据点提示的具体内容界面.分类名系列名等 + * @param plot 图表 + * @param parent 交互属性界面 + * @param showOnPane formatpane用到 + * @return 数据点提示的具体内容界面 + */ + public static VanChartTooltipContentPane createPlotRefreshTooltipContentPane(Plot plot, VanChartStylePane parent, JPanel showOnPane){ + Class key = plot.getClass(); + if(refreshTooltipContentMap.containsKey(key)){ + try{ + Class cl = refreshTooltipContentMap.get(key); + Constructor constructor = cl.getConstructor(VanChartStylePane.class, JPanel.class); + return constructor.newInstance(parent, showOnPane); + } catch (Exception e){ + FRLogger.getLogger().error(e.getMessage()); + } + } + return new VanChartRefreshTooltipContentPane(parent, showOnPane); + } + + public static FormatPane createAutoFormatPane(){ + FormatPane formatPane = new FormatPane(){ + + protected UIComboBoxRenderer createComBoxRender(){ + return new UIComboBoxRenderer() { + @Override + public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { + JLabel label = (JLabel) super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); + if (value instanceof Integer) { + String text = ComparatorUtils.equals(value, FormatField.FormatContents.NULL) + ? Inter.getLocText("Plugin-ChartF_Auto") + : FormatField.getInstance().getName((Integer) value); + label.setText(" " + text); + } + return label; + } + }; + } + }; + + formatPane.setComboBoxModel(true); + + return formatPane; + } + + /** + * 判断是否为大数据模式 + */ + public static boolean largeDataModel(Plot plot){ + return plot != null && plot.getDataProcessor().getMark() == LargeDataModel.MARK; + } + + public static boolean lineMapLargeModel(Plot plot){ + return plot instanceof VanChartMapPlot && ((VanChartMapPlot) plot).getLineMapDataProcessor().getMark() == LargeDataModel.MARK; + } +} + diff --git a/designer_chart/src/com/fr/plugin/chart/designer/TableLayout4VanChartHelper.java b/designer_chart/src/com/fr/plugin/chart/designer/TableLayout4VanChartHelper.java new file mode 100644 index 0000000000..8a16a472ca --- /dev/null +++ b/designer_chart/src/com/fr/plugin/chart/designer/TableLayout4VanChartHelper.java @@ -0,0 +1,77 @@ +package com.fr.plugin.chart.designer; + +import com.fr.design.constants.LayoutConstants; +import com.fr.design.gui.ilable.UILabel; +import com.fr.design.layout.TableLayout; +import com.fr.design.layout.TableLayoutHelper; + +import javax.swing.*; +import java.awt.*; + +/** + * 布局 标题+组件 + */ +public class TableLayout4VanChartHelper { + + private static final int SMALL_GAP = 20; + /** + * 标题布局(二级菜单距左边框46) + * @param title 标题 + * @param component 组件 + * @return 布局好的组件 + */ + public static JPanel createTableLayoutPaneWithTitle(String title, Component component){ + return TableLayout4VanChartHelper.createTitlePane(title, component, LayoutConstants.CHART_ATTR_TOMARGIN); + } + + /** + * 标题布局(二级菜单距左边框46) + * @param label 标题label + * @param component 组件 + * @return 布局好的组件 + */ + public static JPanel createTableLayoutPaneWithUILabel(UILabel label, Component component){ + return TableLayout4VanChartHelper.createTitlePaneWithUILabel(label, component, LayoutConstants.CHART_ATTR_TOMARGIN); + } + + /** + * 标题布局(三级菜单距二级左侧20) + * @param title 标题 + * @param component 组件 + * @return 布局好的组件 + */ + public static JPanel createTableLayoutPaneWithSmallTitle(String title, Component component){ + return TableLayout4VanChartHelper.createTitlePane(title, component, TableLayout4VanChartHelper.SMALL_GAP); + } + + /** + * 标题布局(指定gap) + * @param title 标题 + * @param component 组件 + * @param gap 距左侧距离 + * @return 布局好的组件 + */ + public static JPanel createTitlePane(String title, Component component, int gap){ + return createTitlePaneWithUILabel(new UILabel(title), component, gap); + } + + /** + * 标题布局(指定gap) + * @param label 标题label + * @param component 组件 + * @param gap 距左侧距离 + * @return 布局好的组件 + */ + public static JPanel createTitlePaneWithUILabel(UILabel label, Component component, int gap){ + double p = TableLayout.PREFERRED; + double f = TableLayout.FILL; + double[] columnSize = {gap, f}; + double[] rowSize = {p, p}; + Component[][] components = new Component[][]{ + new Component[]{label,null}, + new Component[]{null,component}, + }; + return TableLayoutHelper.createTableLayoutPane(components, rowSize, columnSize); + } + +} \ No newline at end of file diff --git a/designer_chart/src/com/fr/plugin/chart/designer/component/ConditionUIMenuNameableCreator.java b/designer_chart/src/com/fr/plugin/chart/designer/component/ConditionUIMenuNameableCreator.java new file mode 100644 index 0000000000..5b78f970a8 --- /dev/null +++ b/designer_chart/src/com/fr/plugin/chart/designer/component/ConditionUIMenuNameableCreator.java @@ -0,0 +1,44 @@ +package com.fr.plugin.chart.designer.component; + +import com.fr.chart.chartattr.Plot; +import com.fr.design.beans.BasicBeanPane; +import com.fr.design.condition.ConditionAttributesPane; +import com.fr.design.gui.imenutable.UIMenuNameableCreator; +import com.fr.general.FRLogger; + +import java.lang.reflect.Constructor; + +/** + * Created by hufan on 2016/11/15. + */ +public class ConditionUIMenuNameableCreator extends UIMenuNameableCreator { + private Plot plot; + + public ConditionUIMenuNameableCreator(Plot plot, String name, Object obj, Class paneClazz) { + super(name, obj, paneClazz); + this.plot = plot; + } + + public UIMenuNameableCreator clone() { + Object cloneObj = null; + try { + cloneObj = obj.getClass().newInstance(); + } catch (InstantiationException e) { + FRLogger.getLogger().error("UIMenuNameableCreator InstantiationException"); + } catch (IllegalAccessException e) { + FRLogger.getLogger().error("UIMenuNameableCreator IllegalAccessException"); + } + return new ConditionUIMenuNameableCreator(plot, name, cloneObj, (Class) this.paneClazz); + + } + + public BasicBeanPane getPane() { + try { + Constructor constructor = paneClazz.getConstructor(Plot.class); + return constructor.newInstance(plot); + } catch (Exception e) { + FRLogger.getLogger().error(e.getMessage(), e); + } + return null; + } +} diff --git a/designer_chart/src/com/fr/plugin/chart/designer/component/VanChartAreaSeriesFillColorPane.java b/designer_chart/src/com/fr/plugin/chart/designer/component/VanChartAreaSeriesFillColorPane.java new file mode 100644 index 0000000000..0387dd365d --- /dev/null +++ b/designer_chart/src/com/fr/plugin/chart/designer/component/VanChartAreaSeriesFillColorPane.java @@ -0,0 +1,64 @@ +package com.fr.plugin.chart.designer.component; + +import com.fr.design.dialog.BasicPane; +import com.fr.design.gui.frpane.UINumberDragPane; +import com.fr.design.layout.TableLayout; +import com.fr.design.layout.TableLayoutHelper; +import com.fr.general.Inter; +import com.fr.plugin.chart.VanChartAttrHelper; +import com.fr.plugin.chart.base.AttrAreaSeriesFillColorBackground; +import com.fr.plugin.chart.designer.component.background.VanChartMarkerBackgroundPane; + +import java.awt.*; + +/** + * 面积图填充色设置界面 + */ +public class VanChartAreaSeriesFillColorPane extends BasicPane { + private static final long serialVersionUID = 9166866984438854779L; + private VanChartMarkerBackgroundPane fillColorPane; + private UINumberDragPane transparent; + + public VanChartAreaSeriesFillColorPane() { + double p = TableLayout.PREFERRED; + double f = TableLayout.FILL; + double[] row = {p,p}; + double[] col = {f}; + fillColorPane = new VanChartMarkerBackgroundPane(); + transparent = new UINumberDragPane(0, 100); + + Component[][] components = new Component[][]{ + new Component[]{fillColorPane}, + new Component[]{transparent}, + }; + + this.add(TableLayoutHelper.createTableLayoutPane(components, row, col)); + } + + protected String title4PopupWindow(){ + return Inter.getLocText("Plugin-ChartF_FillColor"); + } + + public void populate(AttrAreaSeriesFillColorBackground fillColorBackground) { + if(fillColorBackground == null){ + fillColorBackground = new AttrAreaSeriesFillColorBackground(); + } + fillColorPane.populate(fillColorBackground.getColorBackground()); + transparent.populateBean(fillColorBackground.getAlpha() * VanChartAttrHelper.PERCENT); + } + + public AttrAreaSeriesFillColorBackground update() { + AttrAreaSeriesFillColorBackground fillColorBackground = new AttrAreaSeriesFillColorBackground(); + fillColorBackground.setColorBackground(fillColorPane.update()); + fillColorBackground.setAlpha(transparent.updateBean()/VanChartAttrHelper.PERCENT); + return fillColorBackground; + } + + /** + * 检查透明的设置是否有效 + * @param enable + */ + public void checkoutAlpha(boolean enable) { + transparent.setEnabled(enable); + } +} \ No newline at end of file diff --git a/designer_chart/src/com/fr/plugin/chart/designer/component/VanChartBeautyPane.java b/designer_chart/src/com/fr/plugin/chart/designer/component/VanChartBeautyPane.java new file mode 100644 index 0000000000..c4f58b2f39 --- /dev/null +++ b/designer_chart/src/com/fr/plugin/chart/designer/component/VanChartBeautyPane.java @@ -0,0 +1,68 @@ +package com.fr.plugin.chart.designer.component; + +import com.fr.chart.base.ChartConstants; +import com.fr.design.beans.BasicBeanPane; +import com.fr.design.gui.icombobox.UIComboBox; +import com.fr.design.layout.TableLayout; +import com.fr.design.layout.TableLayoutHelper; +import com.fr.general.Inter; + +import javax.swing.*; +import java.awt.*; + +/** + * Created by Mitisky on 15/9/8. + */ +//系列-风格 +public class VanChartBeautyPane extends BasicBeanPane { + private UIComboBox styleBox; + + public VanChartBeautyPane() { + styleBox = new UIComboBox(getNameArray()); + + double p = TableLayout.PREFERRED; + double f = TableLayout.FILL; + double[] columnSize = { f }; + double[] rowSize = { p}; + Component[][] components = new Component[][]{ + new Component[]{styleBox}, + } ; + JPanel panel = TableLayoutHelper.createTableLayoutPane4Chart(new String[]{"Plugin-Chart_Style"}, components, rowSize, columnSize); + this.setLayout(new BorderLayout()); + this.add(panel,BorderLayout.CENTER); + } + + protected String[] getNameArray(){ + return new String[]{Inter.getLocText("Chart-Default_Name"), + Inter.getLocText("Plugin-Chart_TopDownShade") + }; + } + @Override + public void populateBean(Integer ob) { + int finalIndex; + switch (ob){ + case ChartConstants.STYLE_NONE: finalIndex = 0; break; + case ChartConstants.STYLE_SHADE: finalIndex = 1; break; + default: finalIndex = 0; + } + styleBox.setSelectedIndex(finalIndex); + } + + @Override + public Integer updateBean() { + int index = styleBox.getSelectedIndex(); + int style; + switch (index){ + case 0: style = ChartConstants.STYLE_NONE; break; + case 1: style = ChartConstants.STYLE_SHADE; break; + default: style = ChartConstants.STYLE_NONE; + } + return style; + } + + @Override + protected String title4PopupWindow() { + return ""; + } + +} \ No newline at end of file diff --git a/designer_chart/src/com/fr/plugin/chart/designer/component/VanChartFillStylePane4Condition.java b/designer_chart/src/com/fr/plugin/chart/designer/component/VanChartFillStylePane4Condition.java new file mode 100644 index 0000000000..ee431e1c8f --- /dev/null +++ b/designer_chart/src/com/fr/plugin/chart/designer/component/VanChartFillStylePane4Condition.java @@ -0,0 +1,41 @@ +package com.fr.plugin.chart.designer.component; + +import com.fr.design.layout.TableLayout; +import com.fr.design.layout.TableLayoutHelper; +import com.fr.design.mainframe.chart.gui.style.ChartFillStylePane; + +import javax.swing.*; +import java.awt.*; + +/** + * 配色 只有下拉框控件无配色title。 条件属性 配色中用到 + */ +public class VanChartFillStylePane4Condition extends ChartFillStylePane { + private static final long serialVersionUID = 2470094484790112401L; + + @Override + protected void initLayout() { + customPane.setPreferredSize(new Dimension(200, 130)); + colorGradient.setPreferredSize(new Dimension(120, 30)); + + double p = TableLayout.PREFERRED; + double f = TableLayout.FILL; + double[] columnSize = { f }; + double[] rowSize = { p, p}; + Component[][] components = new Component[][]{ + new Component[]{styleSelectBox}, + new Component[]{customPane} + } ; + JPanel panel = TableLayoutHelper.createTableLayoutPane(components,rowSize,columnSize); + this.setLayout(new BorderLayout()); + this.add(panel,BorderLayout.CENTER); + } + + @Override + public Dimension getPreferredSize() { + if(styleSelectBox.getSelectedIndex() != styleSelectBox.getItemCount() - 1) { + return new Dimension(styleSelectBox.getPreferredSize().width, 20); + } + return super.getPreferredSize(); + } +} \ No newline at end of file diff --git a/designer_chart/src/com/fr/plugin/chart/designer/component/VanChartFloatPositionPane.java b/designer_chart/src/com/fr/plugin/chart/designer/component/VanChartFloatPositionPane.java new file mode 100644 index 0000000000..753bcd389f --- /dev/null +++ b/designer_chart/src/com/fr/plugin/chart/designer/component/VanChartFloatPositionPane.java @@ -0,0 +1,81 @@ +package com.fr.plugin.chart.designer.component; + +import com.fr.chart.chartattr.Chart; +import com.fr.design.beans.BasicBeanPane; +import com.fr.design.gui.ilable.UILabel; +import com.fr.design.gui.ispinner.UISpinner; +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.*; + +/** + * 悬浮位置 标题和图例用到 + */ +public class VanChartFloatPositionPane extends BasicBeanPane { + private static final long serialVersionUID = -4773313488161065678L; + private UISpinner floatPosition_x; + private UISpinner floatPosition_y; + + public VanChartFloatPositionPane(){ + + this.setLayout(new BorderLayout()); + + this.add(new UILabel(Inter.getLocText("plugin-ChartF_XYFromTheUpLeft")), BorderLayout.CENTER); + + this.add(createCustomFloatPositionPane(), BorderLayout.SOUTH); + } + + private JPanel createCustomFloatPositionPane(){ + floatPosition_x = new UISpinner(0,100,1,0); + floatPosition_y = new UISpinner(0,100,1,0); + double p = TableLayout.PREFERRED; + double f = TableLayout.FILL; + double[] columnSize = {p, f}; + double[] rowSize = {p,p}; + Component[][] components = new Component[][]{ + new Component[]{new UILabel(Inter.getLocText("plugin-ChartF_positionX")+": "),floatPosition_x}, + new Component[]{new UILabel(Inter.getLocText("plugin-ChartF_positionY")+": "),floatPosition_y} + }; + + return TableLayoutHelper.createTableLayoutPane(components, rowSize, columnSize); + } + + public void setFloatPosition_x(double floatPosition_x) { + this.floatPosition_x.setValue(floatPosition_x); + } + + public void setFloatPosition_y(double floatPosition_y) { + this.floatPosition_y.setValue(floatPosition_y); + } + + public double getFloatPosition_x() { + return floatPosition_x.getValue(); + } + + public double getFloatPosition_y() { + return floatPosition_y.getValue(); + } + + + /** + * 弹出框标题 + * @return 标题 + */ + public String title4PopupWindow() { + return StringUtils.EMPTY; + } + + @Override + public Chart updateBean() { + return null; + } + + @Override + public void populateBean(Chart ob) { + + } +} \ No newline at end of file diff --git a/designer_chart/src/com/fr/plugin/chart/designer/component/VanChartHtmlLabelPane.java b/designer_chart/src/com/fr/plugin/chart/designer/component/VanChartHtmlLabelPane.java new file mode 100644 index 0000000000..107ec5b667 --- /dev/null +++ b/designer_chart/src/com/fr/plugin/chart/designer/component/VanChartHtmlLabelPane.java @@ -0,0 +1,199 @@ +package com.fr.plugin.chart.designer.component; + +import com.fr.design.DesignerEnvManager; +import com.fr.design.constants.KeyWords; +import com.fr.design.gui.autocomplete.AutoCompletion; +import com.fr.design.gui.autocomplete.BasicCompletion; +import com.fr.design.gui.autocomplete.DefaultCompletionProvider; +import com.fr.design.gui.ibutton.UIToggleButton; +import com.fr.design.gui.icheckbox.UICheckBox; +import com.fr.design.gui.icontainer.UIScrollPane; +import com.fr.design.gui.itextfield.UITextField; +import com.fr.design.gui.syntax.ui.rsyntaxtextarea.RSyntaxTextArea; +import com.fr.design.gui.syntax.ui.rsyntaxtextarea.SyntaxConstants; +import com.fr.design.layout.TableLayout; +import com.fr.design.layout.TableLayoutHelper; +import com.fr.general.Inter; +import com.fr.plugin.chart.base.VanChartHtmlLabel; +import com.fr.plugin.chart.designer.style.VanChartStylePane; + +import javax.swing.*; +import javax.swing.event.DocumentEvent; +import javax.swing.event.DocumentListener; +import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; + +/** + * Created by Mitisky on 16/2/19. + */ +public class VanChartHtmlLabelPane extends JPanel{ + + private static final long serialVersionUID = -5512128966013558611L; + private static final int JS_HEIGHT = 100; + + private RSyntaxTextArea contentTextArea; + private UIToggleButton useHtml; + + private UICheckBox isCustomWidth; + private UITextField customWidth; + private UICheckBox isCustomHeight; + private UITextField customHeight; + + private VanChartStylePane parent; + + public void setCustomFormatterText(String text){ + contentTextArea.setText(text); + } + + public void setParent(VanChartStylePane parent) { + this.parent = parent; + } + + public VanChartHtmlLabelPane() { + useHtml = new UIToggleButton(Inter.getLocText("Plugin-ChartF_Html")); + JPanel widthAndHeightPane = createWidthAndHeightPane(); + double p = TableLayout.PREFERRED; + double f = TableLayout.FILL; + double[] columnSize = {f}; + double[] rowSize = {p, p, p}; + + Component[][] components = new Component[][]{ + new Component[]{createJSContentPane()}, + new Component[]{useHtml}, + new Component[]{widthAndHeightPane} + }; + + JPanel contentPane = TableLayoutHelper.createTableLayoutPane(components, rowSize, columnSize); + + this.setLayout(new BorderLayout()); + this.add(contentPane, BorderLayout.CENTER); + } + + private JComponent createJSContentPane() { + contentTextArea = new RSyntaxTextArea(); + contentTextArea.setCloseCurlyBraces(true); + contentTextArea.setLineWrap(true); + contentTextArea.setSyntaxEditingStyle(SyntaxConstants.SYNTAX_STYLE_JAVASCRIPT); + contentTextArea.setCodeFoldingEnabled(true); + contentTextArea.setAntiAliasingEnabled(true); + contentTextArea.getDocument().addDocumentListener(new DocumentListener() { + @Override + public void insertUpdate(DocumentEvent e) { + fireJSChange(); + } + + @Override + public void removeUpdate(DocumentEvent e) { + fireJSChange(); + } + + @Override + public void changedUpdate(DocumentEvent e) { + fireJSChange(); + } + }); + + DefaultCompletionProvider provider = new DefaultCompletionProvider(); + + for (String key : KeyWords.JAVASCRIPT) { + provider.addCompletion(new BasicCompletion(provider, key)); + } + + AutoCompletion ac = new AutoCompletion(provider); + String shortCuts = DesignerEnvManager.getEnvManager().getAutoCompleteShortcuts(); + + ac.setTriggerKey(KeyStroke.getKeyStroke(shortCuts.replace("+", "pressed"))); + ac.install(contentTextArea); + + return new UIScrollPane(contentTextArea){ + @Override + public Dimension getPreferredSize() { + return new Dimension(super.getPreferredSize().width, JS_HEIGHT); + } + }; + } + + private void fireJSChange() { + if(parent != null){ + parent.attributeChanged(); + } + } + + protected JPanel createWidthAndHeightPane() { + isCustomWidth = new UICheckBox(Inter.getLocText("Plugin-ChartF_Custom_Width")); + customWidth = new UITextField(6); + isCustomHeight = new UICheckBox(Inter.getLocText("Plugin-ChartF_Custom_Height")); + customHeight = new UITextField(6); + + isCustomWidth.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + checkWidth(); + } + }); + isCustomHeight.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + checkHeight(); + } + }); + double p = TableLayout.PREFERRED; + double f = TableLayout.FILL; + double[] columnSize = { p, f }; + double[] rowSize = { p, p}; + + Component[][] components = new Component[][]{ + new Component[]{isCustomWidth, customWidth}, + new Component[]{isCustomHeight, customHeight}, + }; + return TableLayoutHelper.createTableLayoutPane(components, rowSize, columnSize); + } + + private void checkWidth() { + customWidth.setEnabled(isCustomWidth.isSelected()); + } + + private void checkHeight() { + customHeight.setEnabled(isCustomHeight.isSelected()); + } + + private void checkBoxUse() { + checkHeight(); + checkWidth(); + } + + public void populate(VanChartHtmlLabel htmlLabel){ + if(htmlLabel == null){ + return; + } + setCustomFormatterText(htmlLabel.getCustomText()); + useHtml.setSelected(htmlLabel.isUseHtml()); + populateWidthAndHeight(htmlLabel); + } + + protected void populateWidthAndHeight(VanChartHtmlLabel htmlLabel) { + isCustomWidth.setSelected(htmlLabel.isCustomWidth()); + customWidth.setText(htmlLabel.getWidth()); + isCustomHeight.setSelected(htmlLabel.isCustomHeight()); + customHeight.setText(htmlLabel.getHeight()); + checkBoxUse(); + } + + public void update(VanChartHtmlLabel htmlLabel) { + if(htmlLabel == null){ + return; + } + htmlLabel.setCustomText(contentTextArea.getText()); + htmlLabel.setUseHtml(useHtml.isSelected()); + updateWidthAndHeight(htmlLabel); + } + + protected void updateWidthAndHeight(VanChartHtmlLabel htmlLabel) { + htmlLabel.setCustomWidth(isCustomWidth.isSelected()); + htmlLabel.setWidth(customWidth.getText()); + htmlLabel.setCustomHeight(isCustomHeight.isSelected()); + htmlLabel.setHeight(customHeight.getText()); + } +} diff --git a/designer_chart/src/com/fr/plugin/chart/designer/component/VanChartHtmlLabelPaneWithOutWidthAndHeight.java b/designer_chart/src/com/fr/plugin/chart/designer/component/VanChartHtmlLabelPaneWithOutWidthAndHeight.java new file mode 100644 index 0000000000..3204cec2ab --- /dev/null +++ b/designer_chart/src/com/fr/plugin/chart/designer/component/VanChartHtmlLabelPaneWithOutWidthAndHeight.java @@ -0,0 +1,23 @@ +package com.fr.plugin.chart.designer.component; + +import com.fr.plugin.chart.base.VanChartHtmlLabel; + +import javax.swing.*; + +/** + * Created by Mitisky on 16/2/19. + * 不能设置宽高 + */ +public class VanChartHtmlLabelPaneWithOutWidthAndHeight extends VanChartHtmlLabelPane { + private static final long serialVersionUID = -9213286452724939880L; + + protected JPanel createWidthAndHeightPane() { + return new JPanel(); + } + + protected void populateWidthAndHeight(VanChartHtmlLabel htmlLabel) { + } + protected void updateWidthAndHeight(VanChartHtmlLabel htmlLabel) { + } + +} diff --git a/designer_chart/src/com/fr/plugin/chart/designer/component/VanChartLabelContentPane.java b/designer_chart/src/com/fr/plugin/chart/designer/component/VanChartLabelContentPane.java new file mode 100644 index 0000000000..182adca90f --- /dev/null +++ b/designer_chart/src/com/fr/plugin/chart/designer/component/VanChartLabelContentPane.java @@ -0,0 +1,18 @@ +package com.fr.plugin.chart.designer.component; + +import com.fr.plugin.chart.designer.style.VanChartStylePane; + +import javax.swing.*; + +public class VanChartLabelContentPane extends VanChartTooltipContentPane { + + private static final long serialVersionUID = 5630276526789839288L; + + public VanChartLabelContentPane(VanChartStylePane parent, JPanel showOnPane) { + super(parent, showOnPane); + } + + protected VanChartHtmlLabelPane createHtmlLabelPane() { + return new VanChartHtmlLabelPane(); + } +} diff --git a/designer_chart/src/com/fr/plugin/chart/designer/component/VanChartLineTypePane.java b/designer_chart/src/com/fr/plugin/chart/designer/component/VanChartLineTypePane.java new file mode 100644 index 0000000000..df37ecced0 --- /dev/null +++ b/designer_chart/src/com/fr/plugin/chart/designer/component/VanChartLineTypePane.java @@ -0,0 +1,95 @@ +package com.fr.plugin.chart.designer.component; + +import com.fr.design.dialog.BasicPane; +import com.fr.design.gui.ibutton.UIButtonGroup; +import com.fr.design.gui.icombobox.LineComboBox; +import com.fr.design.gui.ilable.UILabel; +import com.fr.design.layout.TableLayout; +import com.fr.design.layout.TableLayoutHelper; +import com.fr.general.Inter; +import com.fr.plugin.chart.type.LineStyle; +import com.fr.plugin.chart.base.VanChartAttrLine; +import com.fr.stable.Constants; +import com.fr.stable.CoreConstants; + +import javax.swing.*; +import java.awt.*; + +/** + * line相关设置 + */ +public class VanChartLineTypePane extends BasicPane { + + private static final long serialVersionUID = -6581862503009962973L; + protected LineComboBox lineWidth;//线型 + protected UIButtonGroup lineStyle;//形态 + protected UIButtonGroup nullValueBreak;//空值断开 + + public VanChartLineTypePane() { + lineWidth = new LineComboBox(CoreConstants.STRIKE_LINE_STYLE_ARRAY_4_CHART); + + createLineStyle(); + + nullValueBreak = new UIButtonGroup(new String[]{Inter.getLocText("Plugin-ChartF_Open"), Inter.getLocText("Plugin-ChartF_Close")}); + + this.setLayout(new BorderLayout()); + double p = TableLayout.PREFERRED; + double f = TableLayout.FILL; + this.add(createContentPane(p, f), BorderLayout.CENTER); + } + + protected void createLineStyle() { + String[] textArray = new String[]{Inter.getLocText("Plugin-ChartF_NormalLine"), + Inter.getLocText("Plugin-ChartF_StepLine"), Inter.getLocText("Plugin-ChartF_CurveLine")}; + lineStyle = new UIButtonGroup(textArray, LineStyle.values()); + } + + protected JPanel createContentPane(double p, double f) { + double[] row = {p, p, p, p, p, p}; + double[] col = {p, f}; + + Component[][] components = new Component[][]{ + new Component[]{new UILabel(Inter.getLocText("Plugin-ChartF_LineStyle"))}, + new Component[]{lineWidth, null}, + new Component[]{new UILabel(Inter.getLocText("FR-Chart-Style_Present"))}, + new Component[]{lineStyle, null}, + new Component[]{new UILabel(Inter.getLocText("Plugin-ChartF_Null_Value_Break"))}, + new Component[]{nullValueBreak, null}, + }; + + return TableLayoutHelper.createTableLayoutPane(components, row, col); + } + + public void checkLarge(boolean large){ + if(large){ + lineWidth.setSelectedLineStyle(Constants.LINE_NONE); + } + lineWidth.setEnabled(!large); + lineStyle.setEnabled(!large); + } + + protected String title4PopupWindow() { + return Inter.getLocText("Plugin-ChartF_Line"); + } + + public void populate(VanChartAttrLine line) { + if (line == null) { + line = initVanChartAttrLine(); + } + lineWidth.setSelectedLineStyle(line.getLineWidth()); + lineStyle.setSelectedItem(line.getLineStyle()); + nullValueBreak.setSelectedIndex(line.isNullValueBreak() ? 0 : 1); + } + + protected VanChartAttrLine initVanChartAttrLine() { + return new VanChartAttrLine(); + } + + public VanChartAttrLine update() { + VanChartAttrLine line = new VanChartAttrLine(); + line.setLineWidth(lineWidth.getSelectedLineStyle()); + line.setLineStyle(lineStyle.getSelectedItem()); + line.setNullValueBreak(nullValueBreak.getSelectedIndex() == 0); + return line; + } +} \ No newline at end of file diff --git a/designer_chart/src/com/fr/plugin/chart/designer/component/VanChartLineWidthPane.java b/designer_chart/src/com/fr/plugin/chart/designer/component/VanChartLineWidthPane.java new file mode 100644 index 0000000000..3703458444 --- /dev/null +++ b/designer_chart/src/com/fr/plugin/chart/designer/component/VanChartLineWidthPane.java @@ -0,0 +1,27 @@ +package com.fr.plugin.chart.designer.component; + +import com.fr.design.gui.ilable.UILabel; +import com.fr.design.layout.TableLayoutHelper; +import com.fr.general.Inter; + +import javax.swing.*; +import java.awt.*; + +/** + * 线-线型 + */ +public class VanChartLineWidthPane extends VanChartLineTypePane { + private static final long serialVersionUID = 4537158946119294689L; + + protected JPanel createContentPane(double p, double f) { + double[] row = {p, p}; + double[] col = {p,f}; + + Component[][] components = new Component[][]{ + new Component[]{new UILabel(Inter.getLocText("Plugin-ChartF_LineStyle")), lineWidth}, + new Component[]{new UILabel(Inter.getLocText("Plugin-ChartF_Null_Value_Break")), nullValueBreak}, + }; + + return TableLayoutHelper.createTableLayoutPane(components, row, col); + } +} \ No newline at end of file diff --git a/designer_chart/src/com/fr/plugin/chart/designer/component/VanChartMarkerPane.java b/designer_chart/src/com/fr/plugin/chart/designer/component/VanChartMarkerPane.java new file mode 100644 index 0000000000..16a5dde8cc --- /dev/null +++ b/designer_chart/src/com/fr/plugin/chart/designer/component/VanChartMarkerPane.java @@ -0,0 +1,120 @@ +package com.fr.plugin.chart.designer.component; + +import com.fr.design.beans.BasicBeanPane; +import com.fr.design.dialog.BasicPane; +import com.fr.design.gui.ibutton.UIButtonGroup; +import com.fr.general.Inter; +import com.fr.plugin.chart.base.VanChartAttrMarker; +import com.fr.plugin.chart.designer.component.marker.VanChartCommonMarkerPane; +import com.fr.plugin.chart.designer.component.marker.VanChartImageMarkerPane; + +import javax.swing.*; +import javax.swing.event.ChangeEvent; +import javax.swing.event.ChangeListener; +import java.awt.*; + +/** + * 标记点设置界面 + */ +public class VanChartMarkerPane extends BasicPane { + private static final long serialVersionUID = 7206339620703021514L; + private UIButtonGroup commonORCustom; + private JPanel centerPane; + private CardLayout cardLayout; + + private BasicBeanPane commonMarkerPane; + + private BasicBeanPane imageMarkerPane; + + public VanChartMarkerPane() { + this.setLayout(new BorderLayout(0, 4)); + + String[] array = new String[]{Inter.getLocText("Plugin-ChartF_Rule"), Inter.getLocText("Plugin-ChartF_Custom")}; + commonORCustom = new UIButtonGroup(array, array); + + commonORCustom.addChangeListener(new ChangeListener() { + @Override + public void stateChanged(ChangeEvent e) { + checkCenterPane(); + } + }); + + commonMarkerPane = createCommonMarkerPane(); + imageMarkerPane = createImageMarkerPane(); + + cardLayout = new CardLayout(); + centerPane = new JPanel(cardLayout) { + + @Override + public Dimension getPreferredSize() { + if(commonORCustom.getSelectedIndex() == 0){ + return commonMarkerPane.getPreferredSize(); + } else { + return imageMarkerPane.getPreferredSize(); + } + } + }; + centerPane.add(commonMarkerPane, Inter.getLocText("Plugin-ChartF_Rule")); + centerPane.add(imageMarkerPane, Inter.getLocText("Plugin-ChartF_Custom")); + + layoutComponents(); + } + + public void checkLargePlot(boolean large){ + if(large){ + commonORCustom.setSelectedIndex(0); + checkCenterPane(); + } + commonORCustom.setEnabled(!large); + } + + protected BasicBeanPane createImageMarkerPane() { + return new VanChartImageMarkerPane(); + } + + protected BasicBeanPane createCommonMarkerPane() { + return new VanChartCommonMarkerPane(); + } + + protected void layoutComponents() { + this.add(commonORCustom, BorderLayout.NORTH); + this.add(centerPane, BorderLayout.CENTER); + } + + protected void layoutComponentsWithOutNorth() { + this.add(centerPane, BorderLayout.CENTER); + } + + private void checkCenterPane() { + cardLayout.show(centerPane, commonORCustom.getSelectedItem()); + } + + protected String title4PopupWindow(){ + return Inter.getLocText("Plugin-ChartF_Marker"); + } + + public void populate(VanChartAttrMarker marker) { + if(marker == null){ + marker = new VanChartAttrMarker(); + } + commonORCustom.setSelectedIndex(marker.isCommon() ? 0 : 1); + if(marker.isCommon()){ + commonMarkerPane.populateBean(marker); + } else { + imageMarkerPane.populateBean(marker); + } + + checkCenterPane(); + } + + public VanChartAttrMarker update() { + VanChartAttrMarker marker = new VanChartAttrMarker(); + if(commonORCustom.getSelectedIndex() == 0){ + commonMarkerPane.updateBean(marker); + } else { + imageMarkerPane.updateBean(marker); + } + return marker; + } + +} \ No newline at end of file diff --git a/designer_chart/src/com/fr/plugin/chart/designer/component/VanChartPlotMultiTabPane.java b/designer_chart/src/com/fr/plugin/chart/designer/component/VanChartPlotMultiTabPane.java new file mode 100644 index 0000000000..3e1fa02f78 --- /dev/null +++ b/designer_chart/src/com/fr/plugin/chart/designer/component/VanChartPlotMultiTabPane.java @@ -0,0 +1,104 @@ +package com.fr.plugin.chart.designer.component; +import java.awt.BorderLayout; +import java.awt.CardLayout; +import java.awt.Dimension; +import java.util.List; + +import javax.swing.JPanel; + +import com.fr.design.beans.FurtherBasicBeanPane; +import com.fr.design.dialog.BasicPane; +import com.fr.design.gui.frpane.AttributeChangeListener; +import com.fr.design.gui.ibutton.UITabGroup; + +/** + * + * 标准的多层Tab切换类型. + * @author kunsnat E-mail:kunsnat@gmail.com + * @version 创建时间:2013-4-22 上午10:31:03 + */ +public abstract class VanChartPlotMultiTabPane extends FurtherBasicBeanPane{ + private static final long serialVersionUID = 2298609199400393886L; + protected UITabGroup tabPane; + protected String[] NameArray; + protected JPanel centerPane; + protected CardLayout cardLayout; + protected List paneList; + + //提供一个可以根据plot信息创建paneList的类 + protected E plot; + //承载该容器的父类容器 + protected BasicPane parent; + + //屬性變化的監聽器,在構造數據配置面板時用到 + protected AttributeChangeListener listener = null; + + protected abstract List initPaneList(); + + public abstract void populateBean(T ob); + public abstract void updateBean(T ob); + + public VanChartPlotMultiTabPane(E plot, BasicPane parent) { + this(plot, parent, null); + } + + public VanChartPlotMultiTabPane(E plot, BasicPane parent, AttributeChangeListener listener) { + this.plot = plot; + this.parent = parent; + this.listener = listener; + cardLayout = new CardLayout(); + paneList = initPaneList(); + relayoutWhenListChange(); + } + + public int getSelectedIndex() { + return tabPane.getSelectedIndex(); + } + + /** + * 当List中的界面变化时, 重新布局 + */ + public void relayoutWhenListChange() { + centerPane = new JPanel(cardLayout) { + @Override + public Dimension getPreferredSize() { + if (tabPane.getSelectedIndex() == -1) { + return super.getPreferredSize(); + } else { + return paneList.get(tabPane.getSelectedIndex()).getPreferredSize(); + } + } + }; + NameArray = new String[paneList.size()]; + for (int i = 0; i < paneList.size(); i++) { + BasicPane pane = (BasicPane) paneList.get(i); + NameArray[i] = pane.getTitle(); + centerPane.add(pane, NameArray[i]); + } + + tabPane = new UITabGroup(NameArray) { + @Override + public void tabChanged(int index) { + dealWithTabChanged(index); + } + }; + tabPane.setSelectedIndex(0); + tabPane.tabChanged(0); + initLayout(); + } + + protected void dealWithTabChanged(int index) { + cardLayout.show(centerPane, NameArray[index]); + tabChanged(); + } + + protected void tabChanged() { + + } + + protected void initLayout() { + this.setLayout(new BorderLayout(0, 4)); + this.add(tabPane, BorderLayout.NORTH); + this.add(centerPane, BorderLayout.CENTER); + } +} \ No newline at end of file diff --git a/designer_chart/src/com/fr/plugin/chart/designer/component/VanChartRefreshTooltipContentPane.java b/designer_chart/src/com/fr/plugin/chart/designer/component/VanChartRefreshTooltipContentPane.java new file mode 100644 index 0000000000..8bd8fc4e16 --- /dev/null +++ b/designer_chart/src/com/fr/plugin/chart/designer/component/VanChartRefreshTooltipContentPane.java @@ -0,0 +1,42 @@ +package com.fr.plugin.chart.designer.component; + +import com.fr.plugin.chart.designer.component.format.ChangedPercentFormatPaneWithCheckBox; +import com.fr.plugin.chart.designer.component.format.ChangedValueFormatPaneWithCheckBox; +import com.fr.plugin.chart.designer.style.VanChartStylePane; + +import javax.swing.*; +import java.awt.*; + +/** + * Created by mengao on 2017/6/5. + */ +public class VanChartRefreshTooltipContentPane extends VanChartTooltipContentPane { + + public VanChartRefreshTooltipContentPane(VanChartStylePane parent, JPanel showOnPane) { + super(null, showOnPane); + } + + protected double[] getRowSize(double p){ + return new double[]{p,p,p,p,p,p}; + } + + @Override + protected void initFormatPane(VanChartStylePane parent, JPanel showOnPane) { + super.initFormatPane(parent, showOnPane); + + changedValueFormatPane = new ChangedValueFormatPaneWithCheckBox(parent, showOnPane); + changedPercentFormatPane = new ChangedPercentFormatPaneWithCheckBox(parent, showOnPane); + } + + protected Component[][] getPaneComponents(){ + return new Component[][]{ + new Component[]{categoryNameFormatPane,null}, + new Component[]{seriesNameFormatPane,null}, + new Component[]{valueFormatPane,null}, + new Component[]{changedValueFormatPane,null}, + new Component[]{percentFormatPane,null}, + new Component[]{changedPercentFormatPane,null}, + }; + } + +} diff --git a/designer_chart/src/com/fr/plugin/chart/designer/component/VanChartTooltipContentPane.java b/designer_chart/src/com/fr/plugin/chart/designer/component/VanChartTooltipContentPane.java new file mode 100644 index 0000000000..d36cc405d0 --- /dev/null +++ b/designer_chart/src/com/fr/plugin/chart/designer/component/VanChartTooltipContentPane.java @@ -0,0 +1,226 @@ +package com.fr.plugin.chart.designer.component; + +import com.fr.design.beans.BasicBeanPane; +import com.fr.design.gui.ibutton.UIButtonGroup; +import com.fr.design.layout.TableLayout; +import com.fr.design.layout.TableLayoutHelper; +import com.fr.general.Inter; +import com.fr.plugin.chart.base.AttrTooltipContent; +import com.fr.plugin.chart.designer.TableLayout4VanChartHelper; +import com.fr.plugin.chart.designer.component.format.*; +import com.fr.plugin.chart.designer.style.VanChartStylePane; + +import javax.swing.*; +import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; + +/** + * 内容界面 。数据点提示 + */ +public class VanChartTooltipContentPane extends BasicBeanPane { + + private static final long serialVersionUID = 8825929000117843641L; + + protected UIButtonGroup content; + protected ValueFormatPaneWithCheckBox valueFormatPane; + protected PercentFormatPaneWithCheckBox percentFormatPane; + protected CategoryNameFormatPaneWithCheckBox categoryNameFormatPane; + protected SeriesNameFormatPaneWithCheckBox seriesNameFormatPane; + + //监控刷新时,自动数据点提示使用 + protected ChangedValueFormatPaneWithCheckBox changedValueFormatPane; + protected ChangedPercentFormatPaneWithCheckBox changedPercentFormatPane; + + private JPanel centerPane; + private VanChartHtmlLabelPane htmlLabelPane; + + private VanChartStylePane parent; + private JPanel showOnPane; + + public VanChartTooltipContentPane(VanChartStylePane parent, JPanel showOnPane){ + this.parent = parent; + this.showOnPane = showOnPane; + + this.setLayout(new BorderLayout()); + this.add(createLabelContentPane(),BorderLayout.CENTER); + } + + private JPanel createLabelContentPane() { + content = new UIButtonGroup(new String[]{Inter.getLocText("Plugin-ChartF_Common"), + Inter.getLocText("Plugin-ChartF_Custom")}); + + initFormatPane(parent, showOnPane); + + double p = TableLayout.PREFERRED; + double f = TableLayout.FILL; + double[] columnSize = {f, p}; + double[] rowSize = getRowSize(p); + + final JPanel commonPanel = TableLayoutHelper.createTableLayoutPane(getPaneComponents(), rowSize, columnSize); + + htmlLabelPane = createHtmlLabelPane(); + htmlLabelPane.setParent(parent); + + centerPane = new JPanel(new CardLayout()){ + @Override + public Dimension getPreferredSize() { + if(content.getSelectedIndex() == 0){ + return commonPanel.getPreferredSize(); + } else { + return new Dimension(commonPanel.getPreferredSize().width,htmlLabelPane.getPreferredSize().height); + } + } + }; + centerPane.add(htmlLabelPane, Inter.getLocText("Plugin-ChartF_Custom")); + centerPane.add(commonPanel,Inter.getLocText("Plugin-ChartF_Common")); + + initContentListener(); + + JPanel contentPane = new JPanel(new BorderLayout(0, 4)); + contentPane.add(content, BorderLayout.NORTH); + contentPane.add(centerPane, BorderLayout.CENTER); + + return createTableLayoutPaneWithTitle(Inter.getLocText("Plugin-ChartF_Content"), contentPane); + } + + protected VanChartHtmlLabelPane createHtmlLabelPane() { + return new VanChartHtmlLabelPaneWithOutWidthAndHeight(); + } + + protected void initFormatPane(VanChartStylePane parent, JPanel showOnPane){ + categoryNameFormatPane = new CategoryNameFormatPaneWithCheckBox(parent, showOnPane); + seriesNameFormatPane = new SeriesNameFormatPaneWithCheckBox(parent, showOnPane); + valueFormatPane = new ValueFormatPaneWithCheckBox(parent, showOnPane); + percentFormatPane = new PercentFormatPaneWithCheckBox(parent, showOnPane); + } + + protected JPanel createTableLayoutPaneWithTitle(String title, Component component) { + return TableLayout4VanChartHelper.createTableLayoutPaneWithTitle(title, component); + } + + protected double[] getRowSize(double p){ + return new double[]{p,p,p,p}; + } + + protected Component[][] getPaneComponents(){ + return new Component[][]{ + new Component[]{categoryNameFormatPane,null}, + new Component[]{seriesNameFormatPane,null}, + new Component[]{valueFormatPane,null}, + new Component[]{percentFormatPane,null}, + }; + } + + private void initContentListener() { + content.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + checkCardPane(); + } + }); + } + + + private void checkCardPane() { + CardLayout cardLayout = (CardLayout) centerPane.getLayout(); + if (content.getSelectedIndex() == 1) { + cardLayout.show(centerPane,Inter.getLocText("Plugin-ChartF_Custom")); + if(isDirty()){ + setCustomFormatterText(); + setDirty(false); + } + } else { + cardLayout.show(centerPane, Inter.getLocText("Plugin-ChartF_Common")); + } + } + + protected void setCustomFormatterText() { + htmlLabelPane.setCustomFormatterText(updateBean().getFormatterTextFromCommon()); + } + + public boolean isDirty() { + return categoryNameFormatPane.isDirty() || seriesNameFormatPane.isDirty() || valueFormatPane.isDirty() || percentFormatPane.isDirty(); + } + + public void setDirty(boolean isDirty) { + categoryNameFormatPane.setDirty(isDirty); + seriesNameFormatPane.setDirty(isDirty); + valueFormatPane.setDirty(isDirty); + percentFormatPane.setDirty(isDirty); + + if (changedValueFormatPane != null) { + changedValueFormatPane.setDirty(isDirty); + } + if (changedPercentFormatPane != null) { + changedPercentFormatPane.setDirty(isDirty); + } + } + + @Override + protected String title4PopupWindow() { + return ""; + } + + + @Override + public void populateBean(AttrTooltipContent attrTooltipContent){ + if(attrTooltipContent == null){ + return; + } + + content.setSelectedIndex(attrTooltipContent.isCommon() ? 0 : 1); + + populateFormatPane(attrTooltipContent); + + htmlLabelPane.populate(attrTooltipContent.getHtmlLabel()); + if(!attrTooltipContent.isCommon()){ + setDirty(false); + } + checkCardPane(); + } + + protected void populateFormatPane(AttrTooltipContent attrTooltipContent) { + categoryNameFormatPane.populate(attrTooltipContent.getCategoryFormat()); + seriesNameFormatPane.populate(attrTooltipContent.getSeriesFormat()); + valueFormatPane.populate(attrTooltipContent.getValueFormat()); + percentFormatPane.populate(attrTooltipContent.getPercentFormat()); + + if (changedValueFormatPane != null) { + changedValueFormatPane.populate(attrTooltipContent.getChangedValueFormat()); + } + if (changedPercentFormatPane != null) { + changedPercentFormatPane.populate(attrTooltipContent.getChangedPercentFormat()); + } + } + + public AttrTooltipContent updateBean() { + AttrTooltipContent attrTooltipContent = createAttrTooltip(); + + attrTooltipContent.setCommon(content.getSelectedIndex() == 0); + + updateFormatPane(attrTooltipContent); + + htmlLabelPane.update(attrTooltipContent.getHtmlLabel()); + + return attrTooltipContent; + } + + protected AttrTooltipContent createAttrTooltip() { + return new AttrTooltipContent(); + } + + protected void updateFormatPane(AttrTooltipContent attrTooltipContent) { + categoryNameFormatPane.update(attrTooltipContent.getCategoryFormat()); + seriesNameFormatPane.update(attrTooltipContent.getSeriesFormat()); + valueFormatPane.update(attrTooltipContent.getValueFormat()); + percentFormatPane.update(attrTooltipContent.getPercentFormat()); + + if (changedValueFormatPane != null) { + changedValueFormatPane.update(attrTooltipContent.getChangedValueFormat()); + } + if (changedPercentFormatPane != null) { + changedPercentFormatPane.update(attrTooltipContent.getChangedPercentFormat()); + } + } +} \ No newline at end of file diff --git a/designer_chart/src/com/fr/plugin/chart/designer/component/VanChartTrendLinePane.java b/designer_chart/src/com/fr/plugin/chart/designer/component/VanChartTrendLinePane.java new file mode 100644 index 0000000000..1bf26b3bde --- /dev/null +++ b/designer_chart/src/com/fr/plugin/chart/designer/component/VanChartTrendLinePane.java @@ -0,0 +1,101 @@ +package com.fr.plugin.chart.designer.component; + +import com.fr.chart.base.AttrColor; +import com.fr.chart.base.AttrLineStyle; +import com.fr.chart.base.LineStyleInfo; +import com.fr.design.dialog.BasicPane; +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.ispinner.UISpinner; +import com.fr.design.gui.itextfield.UITextField; +import com.fr.design.layout.TableLayout; +import com.fr.design.layout.TableLayoutHelper; +import com.fr.design.style.color.ColorSelectBox; +import com.fr.general.Inter; +import com.fr.plugin.chart.base.TrendLineType; +import com.fr.plugin.chart.base.VanChartAttrTrendLine; +import com.fr.plugin.chart.base.VanChartConstants; + +import javax.swing.*; +import java.awt.*; + +/** + * Created by Mitisky on 15/10/19. + */ +public class VanChartTrendLinePane extends BasicPane{ + private static final TrendLineType[] TYPES = new TrendLineType[] {TrendLineType.EXP, TrendLineType.LINE, TrendLineType.LOG, TrendLineType.POLY}; + + private UITextField trendLineName; + private ColorSelectBox trendLineColor; + private LineComboBox trendLineStyle;//线型 + + private UIComboBox trendLineType;//趋势线函数类型 + private UISpinner prePeriod; + private UISpinner afterPeriod; + + public VanChartTrendLinePane() { + this.setLayout(new BorderLayout()); + double p = TableLayout.PREFERRED; + double f = TableLayout.FILL; + double[] row = {p,p,p,p,p}; + double[] col = {p,f}; + trendLineName = new UITextField(); + trendLineColor = new ColorSelectBox(100); + trendLineStyle = new LineComboBox(VanChartConstants.ALERT_LINE_STYLE); + + trendLineType = new UIComboBox(TYPES); + prePeriod = new UISpinner(0,Integer.MAX_VALUE,1,0); + afterPeriod = new UISpinner(0,Integer.MAX_VALUE,1,0); + double[] r = {p,p}; + double[] c = {p,f,p}; + Component[][] periodComps = new Component[][]{ + new Component[]{new UILabel(Inter.getLocText("Chart_TrendLine_Forward")), prePeriod, new UILabel(Inter.getLocText("Plugin-ChartF_Cycle"))}, + new Component[]{new UILabel(Inter.getLocText("Plugin-ChartF_After_Period")), afterPeriod, new UILabel(Inter.getLocText("Plugin-ChartF_Cycle"))}, + }; + JPanel periodPane = TableLayoutHelper.createTableLayoutPane(periodComps, r, c); + + + Component[][] components = new Component[][]{ + new Component[]{new UILabel(Inter.getLocText("Plugin-ChartF_Name")), trendLineName}, + new Component[]{new UILabel(Inter.getLocText("Plugin-ChartF_LineStyle")), trendLineStyle}, + new Component[]{new UILabel(Inter.getLocText("FR-Chart-Color_Color")), trendLineColor}, + new Component[]{new UILabel(Inter.getLocText("Plugin-ChartF_type")), trendLineType}, + new Component[]{new UILabel(Inter.getLocText("Plugin-ChartF_Period")), periodPane} + }; + + JPanel panel = TableLayoutHelper.createTableLayoutPane(components, row, col); + this.add(panel, BorderLayout.CENTER); + } + protected String title4PopupWindow(){ + return Inter.getLocText("Chart-Trend_Line"); + } + + public void populate(VanChartAttrTrendLine trendLine) { + if(trendLine != null){ + trendLineName.setText(trendLine.getTrendLineName()); + LineStyleInfo lineStyleInfo = trendLine.getLineStyleInfo(); + trendLineColor.setSelectObject(lineStyleInfo.getAttrLineColor().getSeriesColor()); + trendLineStyle.setSelectedLineStyle(lineStyleInfo.getAttrLineStyle().getLineStyle()); + trendLineType.setSelectedItem(trendLine.getTrendLineType()); + prePeriod.setValue(trendLine.getPrePeriod()); + afterPeriod.setValue(trendLine.getAfterPeriod()); + } + } + + public VanChartAttrTrendLine update() { + VanChartAttrTrendLine trendLine = new VanChartAttrTrendLine(); + trendLine.setTrendLineName(trendLineName.getText()); + + LineStyleInfo lineStyleInfo = trendLine.getLineStyleInfo(); + lineStyleInfo.setAttrLineStyle(new AttrLineStyle(trendLineStyle.getSelectedLineStyle())); + lineStyleInfo.setAttrLineColor(new AttrColor(trendLineColor.getSelectObject())); + + trendLine.setTrendLineType((TrendLineType) trendLineType.getSelectedItem()); + trendLine.setPrePeriod((int) prePeriod.getValue()); + trendLine.setAfterPeriod((int) afterPeriod.getValue()); + + return trendLine; + } + +} \ No newline at end of file diff --git a/designer_chart/src/com/fr/plugin/chart/designer/component/VanChartUIMenuNameableCreator.java b/designer_chart/src/com/fr/plugin/chart/designer/component/VanChartUIMenuNameableCreator.java new file mode 100644 index 0000000000..3f41920d98 --- /dev/null +++ b/designer_chart/src/com/fr/plugin/chart/designer/component/VanChartUIMenuNameableCreator.java @@ -0,0 +1,28 @@ +package com.fr.plugin.chart.designer.component; + +import com.fr.design.beans.BasicBeanPane; +import com.fr.design.gui.imenutable.UIMenuNameableCreator; +import com.fr.general.FRLogger; +import com.fr.stable.FCloneable; + +/** + * 新的obj是clone出来的,非new + */ +public class VanChartUIMenuNameableCreator extends UIMenuNameableCreator { + public VanChartUIMenuNameableCreator(String name, FCloneable obj, Class paneClazz) { + super(name, obj, paneClazz); + } + /** + * 覆盖的clone方法 + */ + public UIMenuNameableCreator clone() { + Object cloneObj = null; + try { + cloneObj = ((FCloneable)obj).clone(); + } catch (CloneNotSupportedException e){ + FRLogger.getLogger().error("VanChartUIMenuNameableCreator CloneNotSupportedException"); + } + return new UIMenuNameableCreator(name, cloneObj, this.paneClazz); + + } +} \ No newline at end of file diff --git a/designer_chart/src/com/fr/plugin/chart/designer/component/background/VanChartBackgroundPane.java b/designer_chart/src/com/fr/plugin/chart/designer/component/background/VanChartBackgroundPane.java new file mode 100644 index 0000000000..9fa866a0de --- /dev/null +++ b/designer_chart/src/com/fr/plugin/chart/designer/component/background/VanChartBackgroundPane.java @@ -0,0 +1,165 @@ +package com.fr.plugin.chart.designer.component.background; + +import com.fr.base.background.ImageBackground; +import com.fr.chart.chartglyph.GeneralInfo; +import com.fr.design.dialog.BasicPane; +import com.fr.design.gui.frpane.UINumberDragPane; +import com.fr.design.gui.ibutton.UIToggleButton; +import com.fr.design.gui.icombobox.UIComboBox; +import com.fr.design.gui.ilable.UILabel; +import com.fr.design.layout.TableLayout; +import com.fr.design.layout.TableLayoutHelper; +import com.fr.design.mainframe.backgroundpane.BackgroundQuickPane; +import com.fr.design.mainframe.backgroundpane.ColorBackgroundQuickPane; +import com.fr.design.mainframe.backgroundpane.ImageBackgroundQuickPane; +import com.fr.design.mainframe.backgroundpane.NullBackgroundQuickPane; +import com.fr.general.Background; +import com.fr.general.Inter; +import com.fr.stable.Constants; + +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.ArrayList; +import java.util.List; + +/** + * 图表 属性表.背景设置 界面.(包括 无, 颜色, 图片, 渐变)+开启阴影 + * 图片背景没有布局方式,默认为拉伸。 + */ +public class VanChartBackgroundPane extends BasicPane { + private static final long serialVersionUID = 6955952013135176051L; + private static final double ALPHA_V = 100.0; + protected List paneList; + + protected UIComboBox typeComboBox; + protected UINumberDragPane transparent; + protected UIToggleButton shadow; + + protected JPanel centerPane; + + public VanChartBackgroundPane() { + initComponents(); + + double p = TableLayout.PREFERRED; + double f = TableLayout.FILL; + + double[] columnSize = {p, f}; + double[] rowSize = { p,p,p,p,p}; + + JPanel panel = TableLayoutHelper.createTableLayoutPane4Chart(new String[]{"Background"}, getPaneComponents(), rowSize, columnSize); + this.setLayout(new BorderLayout()); + this.add(panel,BorderLayout.CENTER); + this.add(new JSeparator(), BorderLayout.SOUTH); + } + + protected void initComponents() { + typeComboBox = new UIComboBox(); + final CardLayout cardlayout = new CardLayout(); + paneList = new ArrayList(); + + initList(); + + centerPane = new JPanel(cardlayout) { + + @Override + public Dimension getPreferredSize() {// AUGUST:使用当前面板的的高度 + int index = typeComboBox.getSelectedIndex(); + return new Dimension(super.getPreferredSize().width, paneList.get(index).getPreferredSize().height); + } + }; + for (int i = 0; i < paneList.size(); i++) { + BackgroundQuickPane pane = paneList.get(i); + typeComboBox.addItem(pane.title4PopupWindow()); + centerPane.add(pane, pane.title4PopupWindow()); + } + + typeComboBox.addItemListener(new ItemListener() { + + @Override + public void itemStateChanged(ItemEvent e) { + cardlayout.show(centerPane, (String)typeComboBox.getSelectedItem()); + fireStateChanged(); + } + }); + + transparent = new UINumberDragPane(0, 100); + } + + protected Component[][] getPaneComponents() { + shadow = new UIToggleButton(Inter.getLocText("plugin-ChartF_OpenShadow")); + return new Component[][]{ + new Component[]{typeComboBox, null}, + new Component[]{centerPane, null}, + new Component[]{new UILabel(Inter.getLocText("Plugin-Chart_Alpha")), transparent}, + new Component[]{shadow, null}, + }; + } + + protected void initList() { + paneList.add(new NullBackgroundQuickPane()); + paneList.add(new ColorBackgroundQuickPane()); + paneList.add(new ImageBackgroundQuickPane(false)); + paneList.add(new VanChartGradientPane()); + } + + + private void fireStateChanged() { + Object[] listeners = listenerList.getListenerList(); + ChangeEvent e = null; + + for (int i = listeners.length - 2; i >= 0; i -= 2) { + if (listeners[i] == ChangeListener.class) { + if (e == null) { + e = new ChangeEvent(this); + } + ((ChangeListener)listeners[i + 1]).stateChanged(e); + } + } + } + + /** + * 返回标题 + * @return 标题 + */ + public String title4PopupWindow() { + return ""; + } + + public void populate(GeneralInfo attr) { + if(attr == null) { + return; + } + Background background = attr.getBackground(); + double alpha = attr.getAlpha() * ALPHA_V; + transparent.populateBean(alpha); + if(shadow != null){ + shadow.setSelected(attr.isShadow()); + } + for (int i = 0; i < paneList.size(); i++) { + BackgroundQuickPane pane = paneList.get(i); + if (pane.accept(background)) { + pane.populateBean(background); + typeComboBox.setSelectedIndex(i); + return; + } + } + } + + public void update(GeneralInfo attr) { + if (attr == null) { + attr = new GeneralInfo(); + } + attr.setBackground(paneList.get(typeComboBox.getSelectedIndex()).updateBean()); + if(attr.getBackground() instanceof ImageBackground){ + ((ImageBackground) attr.getBackground()).setLayout(Constants.IMAGE_EXTEND); + } + attr.setAlpha((float) (transparent.updateBean() / ALPHA_V)); + if(shadow != null){ + attr.setShadow(shadow.isSelected()); + } + } +} \ No newline at end of file diff --git a/designer_chart/src/com/fr/plugin/chart/designer/component/background/VanChartBackgroundPaneWithOutImageAndShadow.java b/designer_chart/src/com/fr/plugin/chart/designer/component/background/VanChartBackgroundPaneWithOutImageAndShadow.java new file mode 100644 index 0000000000..99c853edf0 --- /dev/null +++ b/designer_chart/src/com/fr/plugin/chart/designer/component/background/VanChartBackgroundPaneWithOutImageAndShadow.java @@ -0,0 +1,58 @@ +package com.fr.plugin.chart.designer.component.background; + +import com.fr.design.gui.ilable.UILabel; +import com.fr.design.layout.TableLayout; +import com.fr.design.layout.TableLayoutHelper; +import com.fr.design.mainframe.backgroundpane.ColorBackgroundQuickPane; +import com.fr.design.mainframe.backgroundpane.NullBackgroundQuickPane; +import com.fr.general.Inter; + +import javax.swing.*; +import java.awt.*; + +/** + * Created by Mitisky on 16/6/29. + * 默认+颜色.+透明度 + */ +public class VanChartBackgroundPaneWithOutImageAndShadow extends VanChartBackgroundPane { + + public VanChartBackgroundPaneWithOutImageAndShadow() { + initComponents(); + + double p = TableLayout.PREFERRED; + double f = TableLayout.FILL; + + double[] columnSize = {p, f}; + double[] rowSize = { p,p,p,p,p}; + + JPanel panel = TableLayoutHelper.createTableLayoutPane(getPaneComponents(),rowSize,columnSize); + this.setLayout(new BorderLayout()); + this.add(panel,BorderLayout.CENTER); + } + + @Override + protected void initList() { + paneList.add(new NullBackgroundQuickPane(){ + /** + * 名称 + * + * @return 名称 + */ + @Override + public String title4PopupWindow() { + return Inter.getLocText("Chart-Default_Name"); + } + }); + paneList.add(new ColorBackgroundQuickPane()); + } + + @Override + protected Component[][] getPaneComponents() { + return new Component[][]{ + new Component[]{typeComboBox, null}, + new Component[]{centerPane, null}, + new Component[]{new UILabel(Inter.getLocText("Plugin-Chart_Alpha")), transparent}, + }; + } +} + diff --git a/designer_chart/src/com/fr/plugin/chart/designer/component/background/VanChartBackgroundWithOutImagePane.java b/designer_chart/src/com/fr/plugin/chart/designer/component/background/VanChartBackgroundWithOutImagePane.java new file mode 100644 index 0000000000..b39aa918a9 --- /dev/null +++ b/designer_chart/src/com/fr/plugin/chart/designer/component/background/VanChartBackgroundWithOutImagePane.java @@ -0,0 +1,22 @@ +package com.fr.plugin.chart.designer.component.background; + +import com.fr.design.mainframe.backgroundpane.ColorBackgroundQuickPane; +import com.fr.design.mainframe.backgroundpane.NullBackgroundQuickPane; + +/** + * 图表 属性表.背景设置 界面.(包括 无, 颜色, 渐变)+开启阴影 + */ + +public class VanChartBackgroundWithOutImagePane extends VanChartBackgroundPane { + private static final long serialVersionUID = 1322979785605013853L; + + public VanChartBackgroundWithOutImagePane() { + super(); + } + + protected void initList() { + paneList.add(new NullBackgroundQuickPane()); + paneList.add(new ColorBackgroundQuickPane()); + paneList.add(new VanChartGradientPane()); + } +} \ No newline at end of file diff --git a/designer_chart/src/com/fr/plugin/chart/designer/component/background/VanChartBackgroundWithOutShadowWithRadiusPane.java b/designer_chart/src/com/fr/plugin/chart/designer/component/background/VanChartBackgroundWithOutShadowWithRadiusPane.java new file mode 100644 index 0000000000..46b9a283e3 --- /dev/null +++ b/designer_chart/src/com/fr/plugin/chart/designer/component/background/VanChartBackgroundWithOutShadowWithRadiusPane.java @@ -0,0 +1,49 @@ +package com.fr.plugin.chart.designer.component.background; + +import com.fr.chart.chartglyph.GeneralInfo; +import com.fr.design.gui.ilable.UILabel; +import com.fr.design.gui.ispinner.UISpinner; +import com.fr.general.Inter; + +import java.awt.*; + +/** + * 图表 属性表.背景设置 界面.(包括 无, 颜色, 渐变) + 圆角半径 + */ +public class VanChartBackgroundWithOutShadowWithRadiusPane extends VanChartBackgroundWithOutImagePane { + private static final long serialVersionUID = -3387661350545592763L; + + private UISpinner radius; + + public VanChartBackgroundWithOutShadowWithRadiusPane(){ + super(); + } + + protected Component[][] getPaneComponents() { + radius = new UISpinner(0,1000,1,0); + return new Component[][]{ + new Component[]{typeComboBox, null}, + new Component[]{centerPane, null}, + new Component[]{new UILabel(Inter.getLocText("Plugin-Chart_Alpha")), transparent}, + new Component[]{new UILabel(Inter.getLocText("plugin-ChartF_Radius")+":"),radius} + }; + } + + public void populate(GeneralInfo attr) { + if(attr == null) { + return; + } + super.populate(attr); + radius.setValue(attr.getRoundRadius()); + + } + + public void update(GeneralInfo attr) { + super.update(attr); + if (attr == null) { + attr = new GeneralInfo(); + } + attr.setRoundRadius((int)radius.getValue()); + } + +} \ No newline at end of file diff --git a/designer_chart/src/com/fr/plugin/chart/designer/component/background/VanChartGradientPane.java b/designer_chart/src/com/fr/plugin/chart/designer/component/background/VanChartGradientPane.java new file mode 100644 index 0000000000..b4adb66065 --- /dev/null +++ b/designer_chart/src/com/fr/plugin/chart/designer/component/background/VanChartGradientPane.java @@ -0,0 +1,105 @@ +package com.fr.plugin.chart.designer.component.background; + +import com.fr.base.background.GradientBackground; +import com.fr.design.event.UIObserverListener; +import com.fr.design.gui.ibutton.UIButtonGroup; +import com.fr.design.gui.ilable.UILabel; +import com.fr.design.layout.TableLayout; +import com.fr.design.layout.TableLayoutHelper; +import com.fr.design.mainframe.backgroundpane.GradientBackgroundQuickPane; +import com.fr.design.style.background.gradient.FixedGradientBar; +import com.fr.general.Background; +import com.fr.general.Inter; + +import javax.swing.*; +import javax.swing.event.ChangeEvent; +import javax.swing.event.ChangeListener; +import java.awt.*; + +/** + * 渐变色设置界面,bar无法拖拽 + */ +public class VanChartGradientPane extends GradientBackgroundQuickPane { + protected static final int CHART_GRADIENT_WIDTH = 150; + private static final long serialVersionUID = 256594362341221087L; + + private FixedGradientBar gradientBar; + private UIButtonGroup directionPane; + + public VanChartGradientPane() { + constructPane(); + } + + protected void constructPane(){ + String[] textArray = {Inter.getLocText("Utils-Left_to_Right"), Inter.getLocText("Utils-Top_to_Bottom")}; + Integer[] valueArray = {GradientBackground.LEFT2RIGHT, GradientBackground.TOP2BOTTOM}; + directionPane = new UIButtonGroup(textArray, valueArray); + directionPane.setSelectedIndex(0); + gradientBar = new FixedGradientBar(4, CHART_GRADIENT_WIDTH); + + double p = TableLayout.PREFERRED; + double f = TableLayout.FILL; + double[] columnSize = {p, f}; + double[] rowSize = {p, p, p}; + + Component[][] components = new Component[][]{ + new Component[]{gradientBar, null}, + new Component[]{new UILabel(Inter.getLocText("Plugin-Chart_Gradient_Direction") + ":")}, + new Component[]{directionPane} + }; + JPanel Gradient = TableLayoutHelper.createTableLayoutPane(components, rowSize, columnSize); + this.setLayout(new BorderLayout()); + this.add(Gradient, BorderLayout.CENTER); + } + + public void populateBean(Background background) { + GradientBackground bg = (GradientBackground) background; + this.gradientBar.getSelectColorPointBtnP1().setColorInner(bg.getStartColor()); + this.gradientBar.getSelectColorPointBtnP2().setColorInner(bg.getEndColor()); + directionPane.setSelectedItem(bg.getDirection()); + this.gradientBar.repaint(); + } + + public GradientBackground updateBean() { + GradientBackground gb = new GradientBackground(gradientBar.getSelectColorPointBtnP1().getColorInner(), gradientBar.getSelectColorPointBtnP2().getColorInner()); + gb.setDirection(directionPane.getSelectedItem()); + + return gb; + } + + /** + * 给组件登记一个观察者监听事件 + * + * @param listener 观察者监听事件 + */ + public void registerChangeListener(final UIObserverListener listener) { + gradientBar.addChangeListener(new ChangeListener() { + public void stateChanged(ChangeEvent e) { + listener.doChange(); + } + }); + directionPane.addChangeListener(new ChangeListener() { + public void stateChanged(ChangeEvent e) { + listener.doChange(); + } + }); + } + + /** + * 是否接受 + * @param background 背景 + * @return 是则返回true + */ + public boolean accept(Background background) { + return background instanceof GradientBackground; + } + + /** + * 名称 + * @return 名称 + */ + public String title4PopupWindow() { + return Inter.getLocText("Plugin-Chart_Gradient_Color"); + } + +} \ No newline at end of file diff --git a/designer_chart/src/com/fr/plugin/chart/designer/component/background/VanChartMarkerBackgroundPane.java b/designer_chart/src/com/fr/plugin/chart/designer/component/background/VanChartMarkerBackgroundPane.java new file mode 100644 index 0000000000..9bd5c773ee --- /dev/null +++ b/designer_chart/src/com/fr/plugin/chart/designer/component/background/VanChartMarkerBackgroundPane.java @@ -0,0 +1,70 @@ +package com.fr.plugin.chart.designer.component.background; + +import com.fr.base.background.ColorBackground; +import com.fr.design.layout.TableLayout; +import com.fr.design.layout.TableLayoutHelper; +import com.fr.design.mainframe.backgroundpane.BackgroundQuickPane; +import com.fr.design.mainframe.backgroundpane.ColorBackgroundQuickPane; +import com.fr.design.mainframe.backgroundpane.NullBackgroundQuickPane; +import com.fr.general.Inter; + +import javax.swing.*; +import java.awt.*; + +/** + * 系列色(无背景颜色)、颜色面板 + */ +public class VanChartMarkerBackgroundPane extends VanChartBackgroundPane { + private static final long serialVersionUID = -1032221277140976934L; + + public VanChartMarkerBackgroundPane(){ + initComponents(); + + double p = TableLayout.PREFERRED; + double f = TableLayout.FILL; + + double[] columnSize = {p, f}; + double[] rowSize = {p, p}; + + JPanel panel = TableLayoutHelper.createTableLayoutPane(getPaneComponents(), rowSize, columnSize); + this.setLayout(new BorderLayout()); + this.add(panel,BorderLayout.CENTER); + } + + protected Component[][] getPaneComponents() { + return new Component[][]{ + new Component[]{typeComboBox, null}, + new Component[]{centerPane, null} + }; + } + + protected void initList() { + paneList.add(new NullBackgroundQuickPane(){ + @Override + public String title4PopupWindow() { + return Inter.getLocText("Plugin-ChartF_SeriesColor"); + } + + }); + paneList.add(new ColorBackgroundQuickPane()); + } + + public void populate(ColorBackground colorBackground) { + if(colorBackground == null) { + return; + } + + for (int i = 0; i < paneList.size(); i++) { + BackgroundQuickPane pane = paneList.get(i); + if (pane.accept(colorBackground)) { + pane.populateBean(colorBackground); + typeComboBox.setSelectedIndex(i); + return; + } + } + } + + public ColorBackground update() { + return (ColorBackground)paneList.get(typeComboBox.getSelectedIndex()).updateBean(); + } +} \ No newline at end of file diff --git a/designer_chart/src/com/fr/plugin/chart/designer/component/border/VanChartBorderPane.java b/designer_chart/src/com/fr/plugin/chart/designer/component/border/VanChartBorderPane.java new file mode 100644 index 0000000000..c706892870 --- /dev/null +++ b/designer_chart/src/com/fr/plugin/chart/designer/component/border/VanChartBorderPane.java @@ -0,0 +1,98 @@ +package com.fr.plugin.chart.designer.component.border; + + +import com.fr.chart.base.AttrBorder; +import com.fr.chart.chartglyph.GeneralInfo; +import com.fr.design.dialog.BasicPane; +import com.fr.design.gui.icombobox.LineComboBox; +import com.fr.design.gui.ilable.UILabel; +import com.fr.design.layout.TableLayout; +import com.fr.design.layout.TableLayoutHelper; +import com.fr.design.style.color.ColorSelectBox; +import com.fr.general.Inter; +import com.fr.stable.CoreConstants; + +import javax.swing.*; +import java.awt.*; + +//线型 + 颜色 +public class VanChartBorderPane extends BasicPane { + private static final long serialVersionUID = -7770029552989609464L; + protected LineComboBox currentLineCombo; + protected ColorSelectBox currentLineColorPane; + + public VanChartBorderPane() { + initComponents(); + } + + protected void initComponents() { + currentLineCombo = new LineComboBox(CoreConstants.STRIKE_LINE_STYLE_ARRAY_4_CHART); + currentLineColorPane = new ColorSelectBox(100); + double p = TableLayout.PREFERRED; + double f = TableLayout.FILL; + double[] columnSize = { p,f }; + double[] rowSize = {p, p, p}; + Component[][] components = getUseComponent(); + JPanel panel = TableLayoutHelper.createTableLayoutPane4Chart(new String[]{"Border"}, components, rowSize, columnSize); + this.setLayout(new BorderLayout()); + this.add(panel,BorderLayout.CENTER); + } + + protected Component[][] getUseComponent() { + return new Component[][]{ + new Component[]{new UILabel(Inter.getLocText("Plugin-ChartF_LineStyle")+":"),currentLineCombo}, + new Component[]{new UILabel(Inter.getLocText("FR-Chart-Color_Color")+":"),currentLineColorPane}, + }; + } + + /** + * 标题 + * @return 标题 + */ + public String title4PopupWindow() { + return null; + } + + public void populate(GeneralInfo attr) { + if(attr == null) { + return; + } + currentLineCombo.setSelectedLineStyle(attr.getBorderStyle()); + currentLineColorPane.setSelectObject(attr.getBorderColor()); + + } + + public void update(GeneralInfo attr) { + if(attr == null) { + attr = new GeneralInfo(); + } + attr.setBorderStyle(currentLineCombo.getSelectedLineStyle()); + attr.setBorderColor(currentLineColorPane.getSelectObject()); + + } + + public void update(AttrBorder attrBorder){ + if(attrBorder == null){ + return; + } + attrBorder.setBorderStyle(currentLineCombo.getSelectedLineStyle()); + attrBorder.setBorderColor(currentLineColorPane.getSelectObject()); + } + + public void populate(AttrBorder attr) { + if(attr == null) { + return; + } + currentLineCombo.setSelectedLineStyle(attr.getBorderStyle()); + currentLineColorPane.setSelectObject(attr.getBorderColor()); + } + + public AttrBorder update() { + AttrBorder attr = new AttrBorder(); + + attr.setBorderStyle(currentLineCombo.getSelectedLineStyle()); + attr.setBorderColor(currentLineColorPane.getSelectObject()); + + return attr; + } +} \ No newline at end of file diff --git a/designer_chart/src/com/fr/plugin/chart/designer/component/border/VanChartBorderWithAlphaPane.java b/designer_chart/src/com/fr/plugin/chart/designer/component/border/VanChartBorderWithAlphaPane.java new file mode 100644 index 0000000000..a794f0cbc0 --- /dev/null +++ b/designer_chart/src/com/fr/plugin/chart/designer/component/border/VanChartBorderWithAlphaPane.java @@ -0,0 +1,51 @@ +package com.fr.plugin.chart.designer.component.border; + +import com.fr.design.gui.frpane.UINumberDragPane; +import com.fr.design.gui.ilable.UILabel; +import com.fr.general.Inter; +import com.fr.plugin.chart.VanChartAttrHelper; +import com.fr.plugin.chart.base.AttrBorderWithAlpha; + +import javax.swing.*; +import java.awt.*; + +/** + * Created by Mitisky on 16/5/19. + * 边框,线型/颜色/不透明度 + */ +public class VanChartBorderWithAlphaPane extends VanChartBorderPane{ + private UINumberDragPane transparent; + + @Override + protected void initComponents() { + transparent = new UINumberDragPane(0,100); + this.add(new JSeparator(), BorderLayout.SOUTH); + + super.initComponents(); + } + + @Override + protected Component[][] getUseComponent() { + return new Component[][]{ + new Component[]{new UILabel(Inter.getLocText("Plugin-ChartF_LineStyle")+":"),currentLineCombo}, + new Component[]{new UILabel(Inter.getLocText("FR-Chart-Color_Color")+":"),currentLineColorPane}, + new Component[]{new UILabel(Inter.getLocText("Plugin-ChartF_Alpha")+":"), transparent} + }; + } + + public void populate(AttrBorderWithAlpha attr) { + if(attr == null){ + return; + } + super.populate(attr); + transparent.populateBean(attr.getAlpha() * VanChartAttrHelper.PERCENT); + } + + @Override + public AttrBorderWithAlpha update() { + AttrBorderWithAlpha attrBorderWithAlpha = new AttrBorderWithAlpha(); + super.update(attrBorderWithAlpha); + attrBorderWithAlpha.setAlpha(transparent.updateBean()/ VanChartAttrHelper.PERCENT); + return attrBorderWithAlpha; + } +} diff --git a/designer_chart/src/com/fr/plugin/chart/designer/component/border/VanChartBorderWithRadiusPane.java b/designer_chart/src/com/fr/plugin/chart/designer/component/border/VanChartBorderWithRadiusPane.java new file mode 100644 index 0000000000..9f6fa8ee2b --- /dev/null +++ b/designer_chart/src/com/fr/plugin/chart/designer/component/border/VanChartBorderWithRadiusPane.java @@ -0,0 +1,66 @@ +package com.fr.plugin.chart.designer.component.border; + +import com.fr.chart.base.AttrBorder; +import com.fr.chart.chartglyph.GeneralInfo; +import com.fr.design.gui.ilable.UILabel; +import com.fr.design.gui.ispinner.UISpinner; +import com.fr.general.Inter; + +import javax.swing.*; +import java.awt.*; + +/** + * 线型 + 颜色 + 圆角半径 + */ +public class VanChartBorderWithRadiusPane extends VanChartBorderPane { + private static final long serialVersionUID = -3937853702118283803L; + private UISpinner radius; + + @Override + protected void initComponents() { + radius = new UISpinner(0,1000,1,0); + this.add(new JSeparator(), BorderLayout.SOUTH); + super.initComponents(); + } + + @Override + protected Component[][] getUseComponent() { + return new Component[][]{ + new Component[]{new UILabel(Inter.getLocText("Plugin-ChartF_LineStyle")+":"),currentLineCombo}, + new Component[]{new UILabel(Inter.getLocText("FR-Chart-Color_Color")+":"),currentLineColorPane}, + new Component[]{new UILabel(Inter.getLocText("plugin-ChartF_Radius")+":"),radius} + } ; + } + + public void populate(GeneralInfo attr) { + super.populate(attr); + if(attr == null) { + return; + } + radius.setValue(attr.getRoundRadius()); + } + + public void update(GeneralInfo attr) { + super.update(attr); + attr.setRoundRadius((int)radius.getValue()); + } + + public void update(AttrBorder attrBorder) { + super.update(attrBorder); + attrBorder.setRoundRadius((int)radius.getValue()); + } + + public void populate(AttrBorder attr) { + super.populate(attr); + if(attr == null) { + return; + } + radius.setValue(attr.getRoundRadius()); + } + + public AttrBorder update() { + AttrBorder attr = super.update(); + attr.setRoundRadius((int)radius.getValue()); + return attr; + } +} \ No newline at end of file diff --git a/designer_chart/src/com/fr/plugin/chart/designer/component/format/CategoryNameFormatPaneWithCheckBox.java b/designer_chart/src/com/fr/plugin/chart/designer/component/format/CategoryNameFormatPaneWithCheckBox.java new file mode 100644 index 0000000000..c96f64d491 --- /dev/null +++ b/designer_chart/src/com/fr/plugin/chart/designer/component/format/CategoryNameFormatPaneWithCheckBox.java @@ -0,0 +1,23 @@ +package com.fr.plugin.chart.designer.component.format; + +import com.fr.general.Inter; +import com.fr.plugin.chart.designer.style.VanChartStylePane; + +import javax.swing.*; + +/** + * Created by Mitisky on 16/2/23. + */ +public class CategoryNameFormatPaneWithCheckBox extends VanChartFormatPaneWithCheckBox { + + private static final long serialVersionUID = -782523079199004032L; + + public CategoryNameFormatPaneWithCheckBox(VanChartStylePane parent, JPanel showOnPane) { + super(parent, showOnPane); + } + + @Override + protected String getCheckBoxText() { + return Inter.getLocText("Chart-Category_Name"); + } +} diff --git a/designer_chart/src/com/fr/plugin/chart/designer/component/format/ChangedPercentFormatPaneWithCheckBox.java b/designer_chart/src/com/fr/plugin/chart/designer/component/format/ChangedPercentFormatPaneWithCheckBox.java new file mode 100644 index 0000000000..2f510e4653 --- /dev/null +++ b/designer_chart/src/com/fr/plugin/chart/designer/component/format/ChangedPercentFormatPaneWithCheckBox.java @@ -0,0 +1,25 @@ +package com.fr.plugin.chart.designer.component.format; + +import com.fr.general.Inter; +import com.fr.plugin.chart.designer.style.VanChartStylePane; + +import javax.swing.*; + +/** + * Created by mengao on 2017/6/5. + */ +public class ChangedPercentFormatPaneWithCheckBox extends VanChartFormatPaneWithCheckBox { + + public ChangedPercentFormatPaneWithCheckBox(VanChartStylePane parent, JPanel showOnPane) { + super(parent, showOnPane); + } + + @Override + protected String getCheckBoxText() { + return Inter.getLocText("Plugin-ChartF_Change_Percent"); + } + + protected boolean isPercent() { + return true; + } +} diff --git a/designer_chart/src/com/fr/plugin/chart/designer/component/format/ChangedValueFormatPaneWithCheckBox.java b/designer_chart/src/com/fr/plugin/chart/designer/component/format/ChangedValueFormatPaneWithCheckBox.java new file mode 100644 index 0000000000..2c58324936 --- /dev/null +++ b/designer_chart/src/com/fr/plugin/chart/designer/component/format/ChangedValueFormatPaneWithCheckBox.java @@ -0,0 +1,21 @@ +package com.fr.plugin.chart.designer.component.format; + +import com.fr.general.Inter; +import com.fr.plugin.chart.designer.style.VanChartStylePane; + +import javax.swing.*; + +/** + * Created by mengao on 2017/6/9. + */ +public class ChangedValueFormatPaneWithCheckBox extends VanChartFormatPaneWithCheckBox{ + + public ChangedValueFormatPaneWithCheckBox(VanChartStylePane parent, JPanel showOnPane) { + super(parent, showOnPane); + } + + @Override + protected String getCheckBoxText() { + return Inter.getLocText("Plugin-ChartF_Change_Value"); + } +} diff --git a/designer_chart/src/com/fr/plugin/chart/designer/component/format/MapAreaNameFormatPaneWithCheckBox.java b/designer_chart/src/com/fr/plugin/chart/designer/component/format/MapAreaNameFormatPaneWithCheckBox.java new file mode 100644 index 0000000000..01fdaade9e --- /dev/null +++ b/designer_chart/src/com/fr/plugin/chart/designer/component/format/MapAreaNameFormatPaneWithCheckBox.java @@ -0,0 +1,21 @@ +package com.fr.plugin.chart.designer.component.format; + +import com.fr.general.Inter; +import com.fr.plugin.chart.designer.style.VanChartStylePane; + +import javax.swing.*; + +/** + * Created by Mitisky on 16/5/20. + * 地图的标签区域名只是改了之前的分类名的名字,读写什么的都一样 + */ +public class MapAreaNameFormatPaneWithCheckBox extends CategoryNameFormatPaneWithCheckBox { + public MapAreaNameFormatPaneWithCheckBox(VanChartStylePane parent, JPanel showOnPane) { + super(parent, showOnPane); + } + + @Override + protected String getCheckBoxText() { + return Inter.getLocText("FR-Chart-Area_Name"); + } +} diff --git a/designer_chart/src/com/fr/plugin/chart/designer/component/format/PercentFormatPaneWithCheckBox.java b/designer_chart/src/com/fr/plugin/chart/designer/component/format/PercentFormatPaneWithCheckBox.java new file mode 100644 index 0000000000..1324456a35 --- /dev/null +++ b/designer_chart/src/com/fr/plugin/chart/designer/component/format/PercentFormatPaneWithCheckBox.java @@ -0,0 +1,27 @@ +package com.fr.plugin.chart.designer.component.format; + +import com.fr.general.Inter; +import com.fr.plugin.chart.designer.style.VanChartStylePane; + +import javax.swing.*; + +/** + * Created by Mitisky on 16/2/23. + */ +public class PercentFormatPaneWithCheckBox extends VanChartFormatPaneWithCheckBox { + + private static final long serialVersionUID = 566737138492111631L; + + public PercentFormatPaneWithCheckBox(VanChartStylePane parent, JPanel showOnPane) { + super(parent, showOnPane); + } + + @Override + protected String getCheckBoxText() { + return Inter.getLocText("Chart-Use_Percent"); + } + + protected boolean isPercent() { + return true; + } +} diff --git a/designer_chart/src/com/fr/plugin/chart/designer/component/format/SeriesNameFormatPaneWithCheckBox.java b/designer_chart/src/com/fr/plugin/chart/designer/component/format/SeriesNameFormatPaneWithCheckBox.java new file mode 100644 index 0000000000..b2ad7bb6e0 --- /dev/null +++ b/designer_chart/src/com/fr/plugin/chart/designer/component/format/SeriesNameFormatPaneWithCheckBox.java @@ -0,0 +1,23 @@ +package com.fr.plugin.chart.designer.component.format; + +import com.fr.general.Inter; +import com.fr.plugin.chart.designer.style.VanChartStylePane; + +import javax.swing.*; + +/** + * Created by Mitisky on 16/2/23. + */ +public class SeriesNameFormatPaneWithCheckBox extends VanChartFormatPaneWithCheckBox { + + private static final long serialVersionUID = 6456517419221601327L; + + public SeriesNameFormatPaneWithCheckBox(VanChartStylePane parent, JPanel showOnPane) { + super(parent, showOnPane); + } + + @Override + protected String getCheckBoxText() { + return Inter.getLocText("Chart-Series_Name"); + } +} diff --git a/designer_chart/src/com/fr/plugin/chart/designer/component/format/ValueFormatPaneWithCheckBox.java b/designer_chart/src/com/fr/plugin/chart/designer/component/format/ValueFormatPaneWithCheckBox.java new file mode 100644 index 0000000000..f076cd9d33 --- /dev/null +++ b/designer_chart/src/com/fr/plugin/chart/designer/component/format/ValueFormatPaneWithCheckBox.java @@ -0,0 +1,23 @@ +package com.fr.plugin.chart.designer.component.format; + +import com.fr.general.Inter; +import com.fr.plugin.chart.designer.style.VanChartStylePane; + +import javax.swing.*; + +/** + * Created by Mitisky on 16/2/23. + */ +public class ValueFormatPaneWithCheckBox extends VanChartFormatPaneWithCheckBox { + + private static final long serialVersionUID = -8793617093976412625L; + + public ValueFormatPaneWithCheckBox(VanChartStylePane parent, JPanel showOnPane) { + super(parent, showOnPane); + } + + @Override + protected String getCheckBoxText() { + return Inter.getLocText("Chart-Use_Value"); + } +} diff --git a/designer_chart/src/com/fr/plugin/chart/designer/component/format/VanChartFormatPaneWithCheckBox.java b/designer_chart/src/com/fr/plugin/chart/designer/component/format/VanChartFormatPaneWithCheckBox.java new file mode 100644 index 0000000000..c91bb4495c --- /dev/null +++ b/designer_chart/src/com/fr/plugin/chart/designer/component/format/VanChartFormatPaneWithCheckBox.java @@ -0,0 +1,137 @@ +package com.fr.plugin.chart.designer.component.format; + +import com.fr.base.Style; +import com.fr.design.gui.frpane.UIBubbleFloatPane; +import com.fr.design.gui.ibutton.UIButton; +import com.fr.design.gui.icheckbox.UICheckBox; +import com.fr.design.gui.style.FormatPane; +import com.fr.general.Inter; +import com.fr.plugin.chart.base.format.AttrTooltipFormat; +import com.fr.plugin.chart.designer.style.VanChartStylePane; +import com.fr.stable.Constants; + +import javax.swing.*; +import java.awt.*; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import java.awt.event.MouseListener; +import java.text.Format; + +/** + * Created by Mitisky on 16/2/23. + */ +public abstract class VanChartFormatPaneWithCheckBox extends JPanel{ + private static final long serialVersionUID = -6563172546340480058L; + + private UICheckBox isSelectedBox; + private UIButton formatButton; + private FormatPane formatPane; + private Format format; + + private VanChartStylePane parent; + private JPanel showOnPane; + + private boolean isDirty; + + public VanChartFormatPaneWithCheckBox(VanChartStylePane parent, JPanel showOnPane) { + this.parent = parent; + this.showOnPane = showOnPane; + this.isDirty = true; + + this.setLayout(new BorderLayout()); + isSelectedBox = new UICheckBox(getCheckBoxText()); + formatButton = new UIButton(Inter.getLocText("Chart-Use_Format")); + this.add(isSelectedBox, BorderLayout.CENTER); + this.add(formatButton, BorderLayout.EAST); + + initFormatListener(); + isSelectedBox.addMouseListener(new MouseListener() { + @Override + public void mouseClicked(MouseEvent e) { + isDirty = true; + } + + @Override + public void mousePressed(MouseEvent e) { + + } + + @Override + public void mouseReleased(MouseEvent e) { + + } + + @Override + public void mouseEntered(MouseEvent e) { + + } + + @Override + public void mouseExited(MouseEvent e) { + + } + }); + } + + protected abstract String getCheckBoxText(); + + protected boolean isPercent() { + return false; + } + + private void initFormatListener() { + if(formatButton != null) { + formatButton.addMouseListener(new MouseAdapter() { + @Override + public void mouseReleased(MouseEvent e) { + if (!formatButton.isEnabled()) { + return; + } + + if(formatPane == null) { + formatPane = createFormatPane(); + } + Point comPoint = formatButton.getLocationOnScreen(); + Point arrowPoint = new Point(comPoint.x + formatButton.getWidth(), comPoint.y + formatButton.getHeight()); + UIBubbleFloatPane