16224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala/* 26224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala * Copyright 2012 AndroidPlot.com 36224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala * 46224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala * Licensed under the Apache License, Version 2.0 (the "License"); 56224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala * you may not use this file except in compliance with the License. 66224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala * You may obtain a copy of the License at 76224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala * 86224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala * http://www.apache.org/licenses/LICENSE-2.0 96224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala * 106224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala * Unless required by applicable law or agreed to in writing, software 116224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala * distributed under the License is distributed on an "AS IS" BASIS, 126224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 136224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala * See the License for the specific language governing permissions and 146224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala * limitations under the License. 156224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala */ 166224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala 176224eda509d436a575f801942337da92a6c18767Eino-Ville Talvalapackage com.androidplot.demos; 186224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala 196224eda509d436a575f801942337da92a6c18767Eino-Ville Talvalaimport android.app.Activity; 206224eda509d436a575f801942337da92a6c18767Eino-Ville Talvalaimport android.graphics.Color; 216224eda509d436a575f801942337da92a6c18767Eino-Ville Talvalaimport android.graphics.DashPathEffect; 226224eda509d436a575f801942337da92a6c18767Eino-Ville Talvalaimport android.graphics.Paint; 236224eda509d436a575f801942337da92a6c18767Eino-Ville Talvalaimport android.os.Bundle; 246224eda509d436a575f801942337da92a6c18767Eino-Ville Talvalaimport android.widget.CheckBox; 256224eda509d436a575f801942337da92a6c18767Eino-Ville Talvalaimport android.widget.CompoundButton; 266224eda509d436a575f801942337da92a6c18767Eino-Ville Talvalaimport com.androidplot.util.PixelUtils; 276224eda509d436a575f801942337da92a6c18767Eino-Ville Talvalaimport com.androidplot.xy.XYSeries; 286224eda509d436a575f801942337da92a6c18767Eino-Ville Talvalaimport com.androidplot.ui.*; 296224eda509d436a575f801942337da92a6c18767Eino-Ville Talvalaimport com.androidplot.xy.*; 306224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala 316224eda509d436a575f801942337da92a6c18767Eino-Ville Talvalaimport java.text.DecimalFormat; 326224eda509d436a575f801942337da92a6c18767Eino-Ville Talvalaimport java.text.FieldPosition; 336224eda509d436a575f801942337da92a6c18767Eino-Ville Talvalaimport java.text.NumberFormat; 346224eda509d436a575f801942337da92a6c18767Eino-Ville Talvalaimport java.text.ParsePosition; 356224eda509d436a575f801942337da92a6c18767Eino-Ville Talvalaimport java.util.Arrays; 366224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala 376224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala/** 386224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala * Demonstration of the usage of Marker and RectRegion. 396224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala */ 406224eda509d436a575f801942337da92a6c18767Eino-Ville Talvalapublic class XYRegionExampleActivity extends Activity { 416224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala 426224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala private static final float HOME_RUN_DIST = 325; 436224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala private static final int LINE_THICKNESS_DP = 2; 446224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala private static final int POINT_SIZE_DP = 6; 456224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala private XYPlot plot; 466224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala private final Number[] timHits = {105, 252, 220, 350, 12, 250, 353}; 476224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala private final Number[] nickHits = {110, 191, 61, 371, 289, 101, 10}; 486224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala private final Number[] joeHits = {25, 375, 364, 128, 178, 289, 346}; 496224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala private final Number[] jamesHits = {250, 285, 295, 211, 311, 365, 241}; 506224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala private LineAndPointFormatter timFormatter; 516224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala private LineAndPointFormatter nickFormatter; 526224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala private LineAndPointFormatter joeFormatter; 536224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala private LineAndPointFormatter jamesFormatter; 546224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala 556224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala private XYSeries timSeries; 566224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala private XYSeries nickSeries; 576224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala private XYSeries joeSeries; 586224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala private XYSeries jamesSeries; 596224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala 606224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala private RectRegion shortRegion; 616224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala private RectRegion warmupRegion; 626224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala private RectRegion homeRunRegion; 636224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala 646224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala //private XYRegionFormatter rf1; 656224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala private XYRegionFormatter shortRegionFormatter; 666224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala private XYRegionFormatter warmupRegionFormatter; 676224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala private XYRegionFormatter homeRunRegionFormatter; 686224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala //private XYRegionFormatter rf5; 696224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala 706224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala private CheckBox timCB; 716224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala private CheckBox nickCB; 726224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala private CheckBox joeCB; 736224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala private CheckBox jamesCB; 746224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala 756224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala private CheckBox r2CheckBox; 766224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala private CheckBox r3CheckBox; 776224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala private CheckBox r4CheckBox; 786224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala 796224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala public void onCreate(Bundle savedInstanceState) { 806224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala super.onCreate(savedInstanceState); 816224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala setContentView(R.layout.xyregion_example); 826224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala plot = (XYPlot) findViewById(R.id.xyRegionExamplePlot); 836224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala timCB = (CheckBox) findViewById(R.id.s1CheckBox); 846224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala timCB.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 856224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala @Override 866224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala public void onCheckedChanged(CompoundButton compoundButton, boolean b) { 876224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala onS1CheckBoxClicked(); 886224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala } 896224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala }); 906224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala 916224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala nickCB = (CheckBox) findViewById(R.id.s2CheckBox); 926224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala nickCB.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 936224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala @Override 946224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala public void onCheckedChanged(CompoundButton compoundButton, boolean b) { 956224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala onS2CheckBoxClicked(); 966224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala } 976224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala }); 986224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala 996224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala joeCB = (CheckBox) findViewById(R.id.s3CheckBox); 1006224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala joeCB.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 1016224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala @Override 1026224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala public void onCheckedChanged(CompoundButton compoundButton, boolean b) { 1036224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala onS3CheckBoxClicked(); 1046224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala } 1056224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala }); 1066224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala 1076224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala jamesCB = (CheckBox) findViewById(R.id.s4CheckBox); 1086224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala jamesCB.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 1096224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala @Override 1106224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala public void onCheckedChanged(CompoundButton compoundButton, boolean b) { 1116224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala onS4CheckBoxClicked(); 1126224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala } 1136224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala }); 1146224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala 1156224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala 1166224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala 1176224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala r2CheckBox = (CheckBox) findViewById(R.id.r2CheckBox); 1186224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala r2CheckBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 1196224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala @Override 1206224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala public void onCheckedChanged(CompoundButton compoundButton, boolean b) { 1216224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala onCheckBoxClicked(r2CheckBox, timFormatter, shortRegionFormatter, shortRegion); 1226224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala } 1236224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala }); 1246224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala 1256224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala r3CheckBox = (CheckBox) findViewById(R.id.r3CheckBox); 1266224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala r3CheckBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 1276224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala @Override 1286224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala public void onCheckedChanged(CompoundButton compoundButton, boolean b) { 1296224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala onCheckBoxClicked(r3CheckBox, nickFormatter, warmupRegionFormatter, warmupRegion); 1306224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala } 1316224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala }); 1326224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala 1336224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala r4CheckBox = (CheckBox) findViewById(R.id.r4CheckBox); 1346224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala r4CheckBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 1356224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala @Override 1366224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala public void onCheckedChanged(CompoundButton compoundButton, boolean b) { 1376224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala onCheckBoxClicked(r4CheckBox, nickFormatter, homeRunRegionFormatter, homeRunRegion); 1386224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala } 1396224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala }); 1406224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala 1416224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala seriesSetup(); 1426224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala markerSetup(); 1436224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala axisLabelSetup(); 1446224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala regionSetup(); 1456224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala makePlotPretty(); 1466224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala } 1476224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala 1486224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala private void onS1CheckBoxClicked() { 1496224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala if(timCB.isChecked()) { 1506224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala plot.addSeries(timSeries, timFormatter); 1516224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala r2CheckBox.setEnabled(true); 1526224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala } else { 1536224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala plot.removeSeries(timSeries); 1546224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala r2CheckBox.setEnabled(false); 1556224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala } 1566224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala plot.redraw(); 1576224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala } 1586224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala 1596224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala private void onS2CheckBoxClicked() { 1606224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala if(nickCB.isChecked()) { 1616224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala plot.addSeries(nickSeries, nickFormatter); 1626224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala r3CheckBox.setEnabled(true); 1636224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala r4CheckBox.setEnabled(true); 1646224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala } else { 1656224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala plot.removeSeries(nickSeries); 1666224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala r3CheckBox.setEnabled(false); 1676224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala r4CheckBox.setEnabled(false); 1686224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala } 1696224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala plot.redraw(); 1706224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala } 1716224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala 1726224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala private void onS3CheckBoxClicked() { 1736224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala if(joeCB.isChecked()) { 1746224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala plot.addSeries(joeSeries, joeFormatter); 1756224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala } else { 1766224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala plot.removeSeries(joeSeries); 1776224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala } 1786224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala plot.redraw(); 1796224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala } 1806224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala 1816224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala private void onS4CheckBoxClicked() { 1826224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala if(jamesCB.isChecked()) { 1836224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala plot.addSeries(jamesSeries, jamesFormatter); 1846224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala } else { 1856224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala plot.removeSeries(jamesSeries); 1866224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala } 1876224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala plot.redraw(); 1886224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala } 1896224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala 1906224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala /** 1916224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala * Processes a check box event 1926224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala * @param cb The checkbox event origin 1936224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala * @param lpf LineAndPointFormatter with which rr and rf are to be added/removed 1946224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala * @param rf The XYRegionFormatter with which rr should be rendered 1956224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala * @param rr The RectRegion to add/remove 1966224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala */ 1976224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala private void onCheckBoxClicked(CheckBox cb, LineAndPointFormatter lpf, 1986224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala XYRegionFormatter rf, RectRegion rr) { 1996224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala if(cb.isChecked()) { 2006224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala lpf.removeRegion(rr); 2016224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala } else { 2026224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala lpf.addRegion(rr, rf); 2036224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala } 2046224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala } 2056224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala 2066224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala /** 2076224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala * Cleans up the plot's general layout and color scheme 2086224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala */ 2096224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala private void makePlotPretty() { 2106224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala // use a 2x5 grid with room for 10 items: 2116224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala plot.getLegendWidget().setTableModel(new DynamicTableModel(4, 2)); 2126224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala 2136224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala // add a semi-transparent black background to the legend 2146224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala // so it's easier to see overlaid on top of our plot: 2156224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala Paint bgPaint = new Paint(); 2166224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala bgPaint.setColor(Color.BLACK); 2176224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala bgPaint.setStyle(Paint.Style.FILL); 2186224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala bgPaint.setAlpha(40); 2196224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala 2206224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala plot.getLegendWidget().setBackgroundPaint(bgPaint); 2216224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala 2226224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala // adjust the padding of the legend widget to look a little nicer: 2236224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala plot.getLegendWidget().setPadding(5, 5, 5, 5); 2246224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala 2256224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala plot.setRangeValueFormat(new NumberFormat() { 2266224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala @Override 2276224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala public StringBuffer format(double value, StringBuffer buffer, FieldPosition field) { 2286224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala return new StringBuffer(value + "'"); 2296224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala } 2306224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala 2316224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala @Override 2326224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala public StringBuffer format(long value, StringBuffer buffer, FieldPosition field) { 2336224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala throw new UnsupportedOperationException("Not yet implemented."); 2346224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala } 2356224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala 2366224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala @Override 2376224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala public Number parse(String string, ParsePosition position) { 2386224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala throw new UnsupportedOperationException("Not yet implemented."); 2396224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala } 2406224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala }); 2416224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala 2426224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala plot.setDomainValueFormat(new DecimalFormat("#")); 2436224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala 2446224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala plot.getLegendWidget().setWidth(PixelUtils.dpToPix(100), SizeLayoutType.FILL); 2456224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala 2466224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala 2476224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala // adjust the legend size so there is enough room 2486224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala // to draw the new legend grid: 2496224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala //plot.getLegendWidget().getHeightMetric().setLayoutType(SizeLayoutType.ABSOLUTE); 2506224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala //plot.getLegendWidget().getWidthMetric().setLayoutType(SizeLayoutType.ABSOLUTE); 2516224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala //plot.getLegendWidget().setSize( 2526224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala // new SizeMetrics(70, SizeLayoutType.ABSOLUTE, 80, SizeLayoutType.ABSOLUTE)); 2536224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala 2546224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala // reposition the grid so that it rests above the bottom-left 2556224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala // edge of the graph widget: 2566224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala 2576224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala plot.getLegendWidget().position( 2586224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala 125, 2596224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala XLayoutStyle.ABSOLUTE_FROM_LEFT, 2606224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala 65, 2616224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala YLayoutStyle.ABSOLUTE_FROM_TOP, 2626224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala AnchorPosition.LEFT_TOP); 2636224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala 2646224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala plot.getGraphWidget().setRangeLabelHorizontalOffset(-1); 2656224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala 2666224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala // add enough space to ensure range value labels arent cut off on the left/right: 2676224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala plot.getGraphWidget().setRangeLabelWidth(25); 2686224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala 2696224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala // add enough space to make sure domain value labels arent cut off on the bottom: 2706224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala plot.getGraphWidget().setDomainLabelWidth(15); 2716224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala 2726224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala plot.getGraphWidget().setDomainLabelVerticalOffset(-6); 2736224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala 2746224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala plot.setRangeBoundaries(0, BoundaryMode.FIXED, 500, BoundaryMode.FIXED); 2756224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala } 2766224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala 2776224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala /** 2786224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala * Create 4 XYSeries from the values defined above add add them to the plot. 2796224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala * Also add some arbitrary regions. 2806224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala */ 2816224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala private void seriesSetup() { 2826224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala 2836224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala 2846224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala // TIM 2856224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala timFormatter = new LineAndPointFormatter( 2866224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala Color.rgb(100, 25, 20), 2876224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala Color.rgb(100, 25, 20), 2886224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala null, null); 2896224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala timFormatter.getLinePaint().setStrokeWidth(PixelUtils.dpToPix(LINE_THICKNESS_DP)); 2906224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala timFormatter.getVertexPaint().setStrokeWidth(PixelUtils.dpToPix(POINT_SIZE_DP)); 2916224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala 2926224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala timSeries = new SimpleXYSeries(Arrays.asList(timHits), 2936224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala SimpleXYSeries.ArrayFormat.Y_VALS_ONLY, "Tim"); 2946224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala 2956224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala plot.addSeries(timSeries, timFormatter); 2966224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala 2976224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala // SERIES #2: 2986224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala nickFormatter = new LineAndPointFormatter( 2996224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala Color.rgb(100, 25, 200), 3006224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala Color.rgb(100, 25, 200), 3016224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala null, null); 3026224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala nickFormatter.getLinePaint().setStrokeWidth(PixelUtils.dpToPix(LINE_THICKNESS_DP)); 3036224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala nickFormatter.getVertexPaint().setStrokeWidth(PixelUtils.dpToPix(POINT_SIZE_DP)); 3046224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala 3056224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala 3066224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala 3076224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala nickSeries = new SimpleXYSeries(Arrays.asList(nickHits), 3086224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala SimpleXYSeries.ArrayFormat.Y_VALS_ONLY, "Nick"); 3096224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala 3106224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala plot.addSeries(nickSeries, nickFormatter); 3116224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala 3126224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala // SERIES #3: 3136224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala joeFormatter = new LineAndPointFormatter( 3146224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala Color.rgb(200, 25, 200), 3156224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala Color.rgb(200, 25, 200), 3166224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala null, null); 3176224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala joeFormatter.getLinePaint().setStrokeWidth(PixelUtils.dpToPix(LINE_THICKNESS_DP)); 3186224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala joeFormatter.getVertexPaint().setStrokeWidth(PixelUtils.dpToPix(POINT_SIZE_DP)); 3196224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala 3206224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala joeSeries = new SimpleXYSeries(Arrays.asList(joeHits), 3216224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala SimpleXYSeries.ArrayFormat.Y_VALS_ONLY, "Joe"); 3226224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala 3236224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala plot.addSeries(joeSeries, joeFormatter); 3246224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala 3256224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala // SERIES #4: 3266224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala jamesFormatter = new LineAndPointFormatter( 3276224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala Color.rgb(220, 25, 20), 3286224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala Color.rgb(220, 25, 20), 3296224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala null, null); 3306224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala 3316224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala jamesFormatter.getLinePaint().setStrokeWidth(PixelUtils.dpToPix(LINE_THICKNESS_DP)); 3326224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala jamesFormatter.getVertexPaint().setStrokeWidth(PixelUtils.dpToPix(POINT_SIZE_DP)); 3336224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala 3346224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala jamesSeries = new SimpleXYSeries(Arrays.asList(jamesHits), 3356224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala SimpleXYSeries.ArrayFormat.Y_VALS_ONLY,"James"); 3366224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala plot.addSeries(jamesSeries, jamesFormatter); 3376224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala 3386224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala plot.setRangeStep(XYStepMode.INCREMENT_BY_VAL, 100); 3396224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala //plot.setTicksPerRangeLabel(1); 3406224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala plot.setDomainStep(XYStepMode.INCREMENT_BY_VAL, 1); 3416224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala } 3426224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala 3436224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala /** 3446224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala * Add some color coded regions to our axis labels. 3456224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala */ 3466224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala private void axisLabelSetup() { 3476224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala // DOMAIN 3486224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala plot.getGraphWidget().addDomainAxisValueLabelRegion( 3496224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala Double.NEGATIVE_INFINITY, 2, new AxisValueLabelFormatter(Color.GRAY)); 3506224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala plot.getGraphWidget().addDomainAxisValueLabelRegion( 3516224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala 2, Double.POSITIVE_INFINITY, new AxisValueLabelFormatter(Color.WHITE)); 3526224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala // RANGE 3536224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala plot.getGraphWidget().addRangeAxisValueLabelRegion( 3546224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala Double.NEGATIVE_INFINITY, HOME_RUN_DIST, new AxisValueLabelFormatter(Color.RED)); 3556224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala plot.getGraphWidget().addRangeAxisValueLabelRegion( 3566224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala HOME_RUN_DIST, Double.POSITIVE_INFINITY, new AxisValueLabelFormatter(Color.GREEN)); 3576224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala } 3586224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala 3596224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala /** 3606224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala * Add some markers to our plot. 3616224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala */ 3626224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala private void markerSetup() { 3636224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala 3646224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala YValueMarker fenwayLfMarker = new YValueMarker( 3656224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala 380, // y-val to mark 3666224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala "Fenway Park LF Wall", // marker label 3676224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala new XPositionMetric( // object instance to set text positioning on the marker 3686224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala PixelUtils.dpToPix(5), // 5dp offset 3696224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala XLayoutStyle.ABSOLUTE_FROM_RIGHT), // offset origin 3706224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala Color.BLUE, // line paint color 3716224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala Color.BLUE); // text paint color 3726224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala 3736224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala YValueMarker attRfMarker = new YValueMarker( 3746224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala 309, // y-val to mark 3756224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala "ATT Park RF Wall", // marker label 3766224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala new XPositionMetric( // object instance to set text positioning on the marker 3776224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala PixelUtils.dpToPix(5), // 5dp offset 3786224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala XLayoutStyle.ABSOLUTE_FROM_RIGHT), // offset origin 3796224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala Color.CYAN, // line paint color 3806224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala Color.CYAN); // text paint color 3816224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala 3826224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala 3836224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala fenwayLfMarker.getTextPaint().setTextSize(PixelUtils.dpToPix(14)); 3846224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala attRfMarker.getTextPaint().setTextSize(PixelUtils.dpToPix(14)); 3856224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala 3866224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala DashPathEffect dpe = new DashPathEffect( 3876224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala new float[]{PixelUtils.dpToPix(2), PixelUtils.dpToPix(2)}, 0); 3886224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala 3896224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala fenwayLfMarker.getLinePaint().setPathEffect(dpe); 3906224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala attRfMarker.getLinePaint().setPathEffect(dpe); 3916224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala 3926224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala plot.addMarker(fenwayLfMarker); 3936224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala plot.addMarker(attRfMarker); 3946224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala } 3956224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala 3966224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala /** 3976224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala * Add some fill regions to our series data 3986224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala */ 3996224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala private void regionSetup() { 4006224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala 4016224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala 4026224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala // and another region: 4036224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala shortRegionFormatter = new XYRegionFormatter(Color.RED); 4046224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala shortRegionFormatter.getPaint().setAlpha(75); 4056224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala shortRegion = new RectRegion(2, Double.POSITIVE_INFINITY, Double.NEGATIVE_INFINITY, HOME_RUN_DIST, "Short"); 4066224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala timFormatter.addRegion(shortRegion, shortRegionFormatter); 4076224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala nickFormatter.addRegion(shortRegion, shortRegionFormatter); 4086224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala joeFormatter.addRegion(shortRegion, shortRegionFormatter); 4096224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala jamesFormatter.addRegion(shortRegion, shortRegionFormatter); 4106224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala 4116224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala // the next three regions are horizontal regions with minY/maxY 4126224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala // set to negative and positive infinity respectively. 4136224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala warmupRegionFormatter = new XYRegionFormatter(Color.WHITE); 4146224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala warmupRegionFormatter.getPaint().setAlpha(75); 4156224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala 4166224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala warmupRegion = new RectRegion(0, 2, Double.NEGATIVE_INFINITY, Double.POSITIVE_INFINITY, "Warmup"); 4176224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala timFormatter.addRegion(warmupRegion, warmupRegionFormatter); 4186224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala nickFormatter.addRegion(warmupRegion, warmupRegionFormatter); 4196224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala joeFormatter.addRegion(warmupRegion, warmupRegionFormatter); 4206224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala jamesFormatter.addRegion(warmupRegion, warmupRegionFormatter); 4216224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala 4226224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala homeRunRegionFormatter = new XYRegionFormatter(Color.GREEN); 4236224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala homeRunRegionFormatter.getPaint().setAlpha(75); 4246224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala 4256224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala homeRunRegion = new RectRegion(2, Double.POSITIVE_INFINITY, HOME_RUN_DIST, Double.POSITIVE_INFINITY, "H. Run"); 4266224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala timFormatter.addRegion(homeRunRegion, homeRunRegionFormatter); 4276224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala nickFormatter.addRegion(homeRunRegion, homeRunRegionFormatter); 4286224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala joeFormatter.addRegion(homeRunRegion, homeRunRegionFormatter); 4296224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala jamesFormatter.addRegion(homeRunRegion, homeRunRegionFormatter); 4306224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala 4316224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala nickFormatter.setFillDirection(FillDirection.RANGE_ORIGIN); 4326224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala } 4336224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala}