Merge commit '42b2e5ca519766e37ce6941ba4faecc9691cc403' into upstream
[debian/openrocket] / android / src / net / sf / openrocket / android / simulation / SimulationChart.java
index 807c58a77a48c74007ca2f9d709e8e7ac1db27b5..9fa41d7ec15924f73836ef85ed1867d6f9e293d8 100644 (file)
@@ -24,6 +24,7 @@ import net.sf.openrocket.document.OpenRocketDocument;
 import net.sf.openrocket.document.Simulation;\r
 import net.sf.openrocket.simulation.FlightDataBranch;\r
 import net.sf.openrocket.simulation.FlightDataType;\r
+import net.sf.openrocket.simulation.FlightEvent;\r
 import net.sf.openrocket.unit.Unit;\r
 \r
 import org.achartengine.chart.LineChart;\r
@@ -51,11 +52,12 @@ import android.graphics.Paint.Align;
  * \r
  */\r
 public class SimulationChart implements Serializable {\r
-       \r
+\r
        private final int simulationIndex;\r
        private transient FlightDataType series1;\r
        private transient FlightDataType series2;\r
-       \r
+       private transient List<FlightEvent> events;\r
+\r
        // Define 4 different colors and point styles to use for the series.\r
        // For now only 2 series are supported though.\r
        private final static int[] colors = new int[] { Color.BLUE, Color.YELLOW, Color.GREEN, Color.RED };\r
@@ -75,10 +77,26 @@ public class SimulationChart implements Serializable {
                this.series1 = series1;\r
        }\r
 \r
+       public FlightDataType getSeries1() {\r
+               return series1;\r
+       }\r
+\r
        public void setSeries2(FlightDataType series2) {\r
                this.series2 = series2;\r
        }\r
 \r
+       public FlightDataType getSeries2() {\r
+               return series2;\r
+       }\r
+\r
+       public void setEvents( List<FlightEvent> events ) {\r
+               this.events = events;\r
+       }\r
+\r
+       public List<FlightEvent> getEvents() {\r
+               return events;\r
+       }\r
+\r
        public FlightDataBranch getFlightDataBranch( OpenRocketDocument rocketDocument ) {\r
                Simulation sim = rocketDocument.getSimulation(simulationIndex);\r
                FlightDataBranch flightDataBranch = sim.getSimulatedData().getBranch(0);\r
@@ -102,6 +120,21 @@ public class SimulationChart implements Serializable {
                        series2 = flightDataBranch.getTypes()[2];\r
                }\r
 \r
+               if ( events == null ) {\r
+                       events = new ArrayList<FlightEvent>();\r
+                       for ( FlightEvent event : flightDataBranch.getEvents() ) {\r
+                               switch( event.getType()) {\r
+                               case LAUNCHROD:\r
+                               case APOGEE:\r
+                               case BURNOUT:\r
+                               case EJECTION_CHARGE:\r
+                                       events.add(event);\r
+                               default:\r
+                                       break;\r
+                               }\r
+                       }\r
+               }\r
+\r
                /*\r
                 * TODO -\r
                 * Figure out why you can pan all over the place even where there are no visible points.\r
@@ -124,6 +157,12 @@ public class SimulationChart implements Serializable {
                renderer.setShowGrid(true);\r
                renderer.setZoomButtonsVisible(true);\r
                renderer.setChartTitle(sim.getName());\r
+               renderer.setShowCustomTextGrid(true);\r
+               renderer.setXLabelsAlign(Align.RIGHT);\r
+               renderer.setXLabelsAngle(90);  // rotate right\r
+               for( FlightEvent event : events ) {\r
+                       renderer.addXTextLabel(event.getTime(), event.getType().toString());\r
+               }\r
 \r
                renderer.setMargins(new int[] { 50, 30, 0, 20 });\r
                {\r
@@ -172,7 +211,7 @@ public class SimulationChart implements Serializable {
 \r
                double ymax = computeMaxValueWithPadding( series1values );\r
                double xmax = Math.ceil( timevalues.get( timevalues.size()-1));\r
-               \r
+\r
                AndroidLogWrapper.d(SimulationChart.class,"ymax = " + ymax);\r
                renderer.setXAxisMax(xmax);\r
                renderer.setYAxisMax(ymax);\r
@@ -197,7 +236,7 @@ public class SimulationChart implements Serializable {
                        addXYSeries(dataset, series2.getName(), timevalues, series2values, 1);\r
                }\r
                XYChart chart = new LineChart(dataset, renderer);\r
-               \r
+\r
                return chart;\r
        }\r
 \r
@@ -227,7 +266,7 @@ public class SimulationChart implements Serializable {
                //  next 100 if 1000 < max < 10,000\r
                //  next 1000 if max >= 10,000\r
                double numdigits = Math.floor(Math.log10(max));\r
-               \r
+\r
                if ( numdigits <= 1.0 ) {\r
                        return 10.0;\r
                } else if ( numdigits <= 3.0 ) {\r
@@ -237,7 +276,7 @@ public class SimulationChart implements Serializable {
                } else {\r
                        return 1000.0 * ( Math.ceil( max / 1000.0 ));\r
                }\r
-               \r
+\r
        }\r
-       \r
+\r
 }\r