diff --git a/android/res/layout/simulation_series_dialog.xml b/android/res/layout/simulation_series_dialog.xml
index 0b28cfd6e..2f231db62 100644
--- a/android/res/layout/simulation_series_dialog.xml
+++ b/android/res/layout/simulation_series_dialog.xml
@@ -4,12 +4,14 @@
android:layout_height="match_parent"
android:orientation="vertical" >
-
+
+
+
+
diff --git a/android/res/layout/simulation_series_event_list_item.xml b/android/res/layout/simulation_series_event_list_item.xml
new file mode 100644
index 000000000..19eb9f2b2
--- /dev/null
+++ b/android/res/layout/simulation_series_event_list_item.xml
@@ -0,0 +1,11 @@
+
+
diff --git a/android/res/values/strings.xml b/android/res/values/strings.xml
index 41ca19b9d..fae70a50e 100644
--- a/android/res/values/strings.xml
+++ b/android/res/values/strings.xml
@@ -10,8 +10,9 @@
Download
About
Preferences
- Select Series
+ Change Plot
View Events
+ Select Series And Events
- Case
diff --git a/android/src/net/sf/openrocket/android/simulation/SimulationChart.java b/android/src/net/sf/openrocket/android/simulation/SimulationChart.java
index 807c58a77..afe1edb83 100644
--- a/android/src/net/sf/openrocket/android/simulation/SimulationChart.java
+++ b/android/src/net/sf/openrocket/android/simulation/SimulationChart.java
@@ -17,13 +17,16 @@ package net.sf.openrocket.android.simulation;
import java.io.Serializable;
import java.util.ArrayList;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
import net.sf.openrocket.android.util.AndroidLogWrapper;
import net.sf.openrocket.document.OpenRocketDocument;
import net.sf.openrocket.document.Simulation;
import net.sf.openrocket.simulation.FlightDataBranch;
import net.sf.openrocket.simulation.FlightDataType;
+import net.sf.openrocket.simulation.FlightEvent;
import net.sf.openrocket.unit.Unit;
import org.achartengine.chart.LineChart;
@@ -55,6 +58,7 @@ public class SimulationChart implements Serializable {
private final int simulationIndex;
private transient FlightDataType series1;
private transient FlightDataType series2;
+ private transient Map events;
// Define 4 different colors and point styles to use for the series.
// For now only 2 series are supported though.
@@ -79,6 +83,10 @@ public class SimulationChart implements Serializable {
this.series2 = series2;
}
+ public void setEvents( Map events ) {
+ this.events = events;
+ }
+
public FlightDataBranch getFlightDataBranch( OpenRocketDocument rocketDocument ) {
Simulation sim = rocketDocument.getSimulation(simulationIndex);
FlightDataBranch flightDataBranch = sim.getSimulatedData().getBranch(0);
@@ -101,6 +109,13 @@ public class SimulationChart implements Serializable {
if (series2== null) {
series2 = flightDataBranch.getTypes()[2];
}
+
+ if ( events == null ) {
+ events = new HashMap();
+ for ( FlightEvent event : flightDataBranch.getEvents() ) {
+ events.put(event.getTime(), event.getType().toString() );
+ }
+ }
/*
* TODO -
@@ -124,6 +139,12 @@ public class SimulationChart implements Serializable {
renderer.setShowGrid(true);
renderer.setZoomButtonsVisible(true);
renderer.setChartTitle(sim.getName());
+ renderer.setShowCustomTextGrid(true);
+ renderer.setXLabelsAlign(Align.RIGHT);
+ renderer.setXLabelsAngle(90); // rotate right
+ for( Map.Entry event : events.entrySet() ) {
+ renderer.addXTextLabel(event.getKey(), event.getValue());
+ }
renderer.setMargins(new int[] { 50, 30, 0, 20 });
{
diff --git a/android/src/net/sf/openrocket/android/simulation/SimulationSeriesDialog.java b/android/src/net/sf/openrocket/android/simulation/SimulationSeriesDialog.java
index 8d2c3c2f0..4ed667430 100644
--- a/android/src/net/sf/openrocket/android/simulation/SimulationSeriesDialog.java
+++ b/android/src/net/sf/openrocket/android/simulation/SimulationSeriesDialog.java
@@ -1,19 +1,27 @@
package net.sf.openrocket.android.simulation;
import java.util.ArrayList;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
import net.sf.openrocket.R;
import net.sf.openrocket.android.CurrentRocketHolder;
import net.sf.openrocket.document.OpenRocketDocument;
+import net.sf.openrocket.simulation.FlightDataBranch;
import net.sf.openrocket.simulation.FlightDataType;
+import net.sf.openrocket.simulation.FlightEvent;
+import android.app.AlertDialog;
+import android.app.Dialog;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
+import android.util.SparseBooleanArray;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Button;
+import android.widget.ListView;
import android.widget.Spinner;
import android.widget.TextView;
@@ -23,6 +31,7 @@ public class SimulationSeriesDialog extends DialogFragment {
public void onConfirm();
}
+ private ListView eventList;
private Spinner series1Spinner;
private Spinner series2Spinner;
@@ -40,24 +49,18 @@ public class SimulationSeriesDialog extends DialogFragment {
}
@Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
+ public Dialog onCreateDialog(Bundle savedInstanceState) {
if (savedInstanceState != null ) {
chart = (SimulationChart) savedInstanceState.getSerializable("chart");
}
- }
-
- @Override
- public void onSaveInstanceState(Bundle arg0) {
- super.onSaveInstanceState(arg0);
- arg0.putSerializable("chart", chart);
- }
-
- @Override
- public View onCreateView(final LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
-
- View v = inflater.inflate(R.layout.simulation_series_dialog, container, false);
+ AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
+ builder.setTitle(R.string.simulationPlotDialogTitle);
+
+ final LayoutInflater inflater = getActivity().getLayoutInflater();
+ View v = inflater.inflate(R.layout.simulation_series_dialog, null);
+ builder.setView(v);
+
OpenRocketDocument rocketDocument = CurrentRocketHolder.getCurrentRocket().getRocketDocument();
Button okButton = (Button) v.findViewById(R.id.simulationOkButton);
@@ -65,6 +68,19 @@ public class SimulationSeriesDialog extends DialogFragment {
@Override
public void onClick(View v) {
+ Map eventsToShow = new HashMap();
+ {
+ SparseBooleanArray eventsSelected = eventList.getCheckedItemPositions();
+ List flightEvents = chart.getFlightDataBranch(CurrentRocketHolder.getCurrentRocket().getRocketDocument()).getEvents();
+ for( int i=0; i< flightEvents.size(); i++ ) {
+ if ( eventsSelected.get(i) ) {
+ FlightEvent event = flightEvents.get(i);
+ eventsToShow.put( event.getTime(), event.getType().toString());
+ }
+ }
+ }
+ chart.setEvents(eventsToShow);
+
chart.setSeries1((FlightDataType)series1Spinner.getSelectedItem());
chart.setSeries2((FlightDataType)series2Spinner.getSelectedItem());
@@ -103,10 +119,42 @@ public class SimulationSeriesDialog extends DialogFragment {
};
series1Spinner.setAdapter(serieses);
+ series1Spinner.setSelection(0);
series2Spinner.setAdapter(serieses);
+ series2Spinner.setSelection(1);
+ eventList = (ListView) v.findViewById(R.id.simulationEventsList);
- return v;
+ FlightDataBranch data = chart.getFlightDataBranch(CurrentRocketHolder.getCurrentRocket().getRocketDocument());
+ // Initialize the eventList
+
+ ArrayAdapter events = new ArrayAdapter(getActivity(),android.R.layout.simple_list_item_1,data.getEvents()) {
+
+ @Override
+ public View getView(int position, View convertView,
+ ViewGroup parent) {
+ View v = convertView;
+ if ( v == null ) {
+ LayoutInflater li = inflater;
+ v = li.inflate(android.R.layout.simple_list_item_multiple_choice,null);
+ }
+ FlightEvent event = this.getItem(position);
+ ((TextView)v.findViewById(android.R.id.text1)).setText( event.getType().toString() + " " + event.getTime() + " (s)" );
+ return v;
+ }
+
+ };
+ eventList.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
+ eventList.setAdapter(events);
+
+ return builder.create();
+
+ }
+
+ @Override
+ public void onSaveInstanceState(Bundle arg0) {
+ super.onSaveInstanceState(arg0);
+ arg0.putSerializable("chart", chart);
}
}