android:layout_height="match_parent"
android:orientation="vertical" >
- <!-- shim to get dialog correct size ?? -->
+ <!-- shim to get dialog correct size ?? -->
+ <!--
<View
android:layout_width="200dp"
android:layout_height="0px"
android:layout_margin="0px"
android:orientation="horizontal" />
+ -->
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:drawSelectorOnTop="true" />
+ <ListView
+ android:id="@+id/simulationEventsList"
+ android:layout_width="fill_parent"
+ android:layout_height="0dp"
+ android:layout_weight="1" />
+
<Button
android:id="@+id/simulationOkButton"
android:layout_width="70dp"
- android:layout_height="70dp"
+ android:layout_height="45dp"
android:layout_gravity="center_horizontal"
android:text="ok" />
\r
import java.io.Serializable;\r
import java.util.ArrayList;\r
+import java.util.HashMap;\r
import java.util.List;\r
+import java.util.Map;\r
\r
import net.sf.openrocket.android.util.AndroidLogWrapper;\r
import net.sf.openrocket.document.OpenRocketDocument;\r
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
private final int simulationIndex;\r
private transient FlightDataType series1;\r
private transient FlightDataType series2;\r
+ private transient Map<Double,String> 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
this.series2 = series2;\r
}\r
\r
+ public void setEvents( Map<Double,String> events ) {\r
+ this.events = events;\r
+ }\r
+ \r
public FlightDataBranch getFlightDataBranch( OpenRocketDocument rocketDocument ) {\r
Simulation sim = rocketDocument.getSimulation(simulationIndex);\r
FlightDataBranch flightDataBranch = sim.getSimulatedData().getBranch(0);\r
if (series2== null) {\r
series2 = flightDataBranch.getTypes()[2];\r
}\r
+ \r
+ if ( events == null ) {\r
+ events = new HashMap<Double,String>();\r
+ for ( FlightEvent event : flightDataBranch.getEvents() ) {\r
+ events.put(event.getTime(), event.getType().toString() );\r
+ }\r
+ }\r
\r
/*\r
* TODO -\r
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( Map.Entry<Double,String> event : events.entrySet() ) {\r
+ renderer.addXTextLabel(event.getKey(), event.getValue());\r
+ }\r
\r
renderer.setMargins(new int[] { 50, 30, 0, 20 });\r
{\r
package net.sf.openrocket.android.simulation;\r
\r
import java.util.ArrayList;\r
+import java.util.HashMap;\r
import java.util.List;\r
+import java.util.Map;\r
\r
import net.sf.openrocket.R;\r
import net.sf.openrocket.android.CurrentRocketHolder;\r
import net.sf.openrocket.document.OpenRocketDocument;\r
+import net.sf.openrocket.simulation.FlightDataBranch;\r
import net.sf.openrocket.simulation.FlightDataType;\r
+import net.sf.openrocket.simulation.FlightEvent;\r
+import android.app.AlertDialog;\r
+import android.app.Dialog;\r
import android.os.Bundle;\r
import android.support.v4.app.DialogFragment;\r
+import android.util.SparseBooleanArray;\r
import android.view.LayoutInflater;\r
import android.view.View;\r
import android.view.ViewGroup;\r
import android.widget.ArrayAdapter;\r
import android.widget.Button;\r
+import android.widget.ListView;\r
import android.widget.Spinner;\r
import android.widget.TextView;\r
\r
public void onConfirm();\r
}\r
\r
+ private ListView eventList;\r
private Spinner series1Spinner;\r
private Spinner series2Spinner;\r
\r
}\r
\r
@Override\r
- public void onCreate(Bundle savedInstanceState) {\r
- super.onCreate(savedInstanceState);\r
+ public Dialog onCreateDialog(Bundle savedInstanceState) {\r
if (savedInstanceState != null ) {\r
chart = (SimulationChart) savedInstanceState.getSerializable("chart");\r
}\r
- }\r
-\r
- @Override\r
- public void onSaveInstanceState(Bundle arg0) {\r
- super.onSaveInstanceState(arg0);\r
- arg0.putSerializable("chart", chart);\r
- }\r
-\r
- @Override\r
- public View onCreateView(final LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {\r
-\r
- View v = inflater.inflate(R.layout.simulation_series_dialog, container, false);\r
\r
+ AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());\r
+ builder.setTitle(R.string.simulationPlotDialogTitle);\r
+ \r
+ final LayoutInflater inflater = getActivity().getLayoutInflater();\r
+ View v = inflater.inflate(R.layout.simulation_series_dialog, null);\r
+ builder.setView(v);\r
+\r
OpenRocketDocument rocketDocument = CurrentRocketHolder.getCurrentRocket().getRocketDocument();\r
\r
Button okButton = (Button) v.findViewById(R.id.simulationOkButton);\r
\r
@Override\r
public void onClick(View v) {\r
+ Map<Double,String> eventsToShow = new HashMap<Double,String>();\r
+ {\r
+ SparseBooleanArray eventsSelected = eventList.getCheckedItemPositions();\r
+ List<FlightEvent> flightEvents = chart.getFlightDataBranch(CurrentRocketHolder.getCurrentRocket().getRocketDocument()).getEvents();\r
+ for( int i=0; i< flightEvents.size(); i++ ) {\r
+ if ( eventsSelected.get(i) ) {\r
+ FlightEvent event = flightEvents.get(i);\r
+ eventsToShow.put( event.getTime(), event.getType().toString());\r
+ }\r
+ }\r
+ }\r
+ chart.setEvents(eventsToShow);\r
+\r
chart.setSeries1((FlightDataType)series1Spinner.getSelectedItem());\r
chart.setSeries2((FlightDataType)series2Spinner.getSelectedItem());\r
\r
\r
};\r
series1Spinner.setAdapter(serieses);\r
+ series1Spinner.setSelection(0);\r
series2Spinner.setAdapter(serieses);\r
+ series2Spinner.setSelection(1);\r
+\r
+ eventList = (ListView) v.findViewById(R.id.simulationEventsList);\r
\r
+ FlightDataBranch data = chart.getFlightDataBranch(CurrentRocketHolder.getCurrentRocket().getRocketDocument());\r
+ // Initialize the eventList\r
+ \r
+ ArrayAdapter<FlightEvent> events = new ArrayAdapter<FlightEvent>(getActivity(),android.R.layout.simple_list_item_1,data.getEvents()) {\r
\r
- return v;\r
+ @Override\r
+ public View getView(int position, View convertView,\r
+ ViewGroup parent) {\r
+ View v = convertView;\r
+ if ( v == null ) {\r
+ LayoutInflater li = inflater;\r
+ v = li.inflate(android.R.layout.simple_list_item_multiple_choice,null);\r
+ }\r
+ FlightEvent event = this.getItem(position);\r
+ ((TextView)v.findViewById(android.R.id.text1)).setText( event.getType().toString() + " " + event.getTime() + " (s)" );\r
+ return v;\r
+ }\r
+\r
+ };\r
+ eventList.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);\r
+ eventList.setAdapter(events);\r
+\r
+ return builder.create();\r
+\r
+ }\r
+\r
+ @Override\r
+ public void onSaveInstanceState(Bundle arg0) {\r
+ super.onSaveInstanceState(arg0);\r
+ arg0.putSerializable("chart", chart);\r
}\r
\r
}\r