1 package net.sf.openrocket.android.simulation;
\r
3 import java.util.ArrayList;
\r
4 import java.util.List;
\r
6 import net.sf.openrocket.R;
\r
7 import net.sf.openrocket.android.CurrentRocketHolder;
\r
8 import net.sf.openrocket.document.OpenRocketDocument;
\r
9 import net.sf.openrocket.simulation.FlightDataBranch;
\r
10 import net.sf.openrocket.simulation.FlightDataType;
\r
11 import net.sf.openrocket.simulation.FlightEvent;
\r
12 import android.app.AlertDialog;
\r
13 import android.app.Dialog;
\r
14 import android.os.Bundle;
\r
15 import android.support.v4.app.DialogFragment;
\r
16 import android.util.SparseBooleanArray;
\r
17 import android.view.LayoutInflater;
\r
18 import android.view.View;
\r
19 import android.view.ViewGroup;
\r
20 import android.widget.ArrayAdapter;
\r
21 import android.widget.Button;
\r
22 import android.widget.ListView;
\r
23 import android.widget.Spinner;
\r
24 import android.widget.TextView;
\r
26 public class SimulationPlotConfigDialog extends DialogFragment {
\r
28 public interface OnConfirmListener {
\r
29 public void onConfirm();
\r
32 private ListView eventList;
\r
33 private Spinner series1Spinner;
\r
34 private Spinner series2Spinner;
\r
36 private SimulationChart chart;
\r
37 private OnConfirmListener listener;
\r
39 public static SimulationPlotConfigDialog newInstance( SimulationChart chart ) {
\r
40 SimulationPlotConfigDialog d = new SimulationPlotConfigDialog();
\r
45 public void setOnConfirmListener(OnConfirmListener listener) {
\r
46 this.listener = listener;
\r
50 public Dialog onCreateDialog(Bundle savedInstanceState) {
\r
51 if (savedInstanceState != null ) {
\r
52 chart = (SimulationChart) savedInstanceState.getSerializable("chart");
\r
55 AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
\r
56 builder.setTitle(R.string.simulationPlotDialogTitle);
\r
58 final LayoutInflater inflater = getActivity().getLayoutInflater();
\r
59 View v = inflater.inflate(R.layout.simulation_plot_config_dialog, null);
\r
62 OpenRocketDocument rocketDocument = CurrentRocketHolder.getCurrentRocket().getRocketDocument();
\r
64 Button okButton = (Button) v.findViewById(R.id.simulationOkButton);
\r
65 okButton.setOnClickListener( new View.OnClickListener() {
\r
68 public void onClick(View v) {
\r
69 List<FlightEvent> eventsToShow = new ArrayList<FlightEvent>();
\r
71 SparseBooleanArray eventsSelected = eventList.getCheckedItemPositions();
\r
72 List<FlightEvent> flightEvents = chart.getFlightDataBranch(CurrentRocketHolder.getCurrentRocket().getRocketDocument()).getEvents();
\r
73 for( int i=0; i< flightEvents.size(); i++ ) {
\r
74 if ( eventsSelected.get(i) ) {
\r
75 FlightEvent event = flightEvents.get(i);
\r
76 eventsToShow.add( event );
\r
80 chart.setEvents(eventsToShow);
\r
82 chart.setSeries1((FlightDataType)series1Spinner.getSelectedItem());
\r
83 chart.setSeries2((FlightDataType)series2Spinner.getSelectedItem());
\r
85 if ( listener != null ) {
\r
86 listener.onConfirm();
\r
88 SimulationPlotConfigDialog.this.dismiss();
\r
93 series1Spinner = (Spinner) v.findViewById(R.id.simulationSeries1);
\r
94 series2Spinner = (Spinner) v.findViewById(R.id.simulationSeries2);
\r
96 List<FlightDataType> selectableSeries = new ArrayList<FlightDataType>();
\r
98 for( FlightDataType fdt : chart.getFlightDataBranch(rocketDocument).getTypes() ) {
\r
99 if ( fdt == FlightDataType.TYPE_TIME ) {
\r
101 selectableSeries.add(fdt);
\r
105 ArrayAdapter<FlightDataType> serieses = new ArrayAdapter<FlightDataType>(getActivity(),android.R.layout.simple_spinner_item,selectableSeries) {
\r
108 public View getView(int position, View convertView, ViewGroup parent) {
\r
109 View v = convertView;
\r
111 LayoutInflater li = inflater;
\r
112 v = li.inflate(android.R.layout.simple_spinner_item,null);
\r
114 FlightDataType fdt = this.getItem(position);
\r
115 ((TextView)v.findViewById(android.R.id.text1)).setText( fdt.toString() );
\r
121 series1Spinner.setAdapter(serieses);
\r
122 int selection1 = serieses.getPosition(chart.getSeries1());
\r
123 series1Spinner.setSelection(selection1);
\r
124 series2Spinner.setAdapter(serieses);
\r
125 int selection2 = serieses.getPosition(chart.getSeries2());
\r
126 series2Spinner.setSelection(selection2);
\r
128 eventList = (ListView) v.findViewById(R.id.simulationEventsList);
\r
130 FlightDataBranch data = chart.getFlightDataBranch(CurrentRocketHolder.getCurrentRocket().getRocketDocument());
\r
131 // Initialize the eventList
\r
133 ArrayAdapter<FlightEvent> events = new ArrayAdapter<FlightEvent>(getActivity(),android.R.layout.simple_list_item_1,data.getEvents()) {
\r
136 public View getView(int position, View convertView,
\r
137 ViewGroup parent) {
\r
138 View v = convertView;
\r
140 LayoutInflater li = inflater;
\r
141 v = li.inflate(android.R.layout.simple_list_item_multiple_choice,null);
\r
143 FlightEvent event = this.getItem(position);
\r
144 ((TextView)v.findViewById(android.R.id.text1)).setText( event.getType().toString() + " " + event.getTime() + " (s)" );
\r
149 eventList.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
\r
150 eventList.setAdapter(events);
\r
152 for( FlightEvent evt : chart.getEvents() ) {
\r
153 eventList.setItemChecked( events.getPosition(evt), true);
\r
156 return builder.create();
\r
161 public void onSaveInstanceState(Bundle arg0) {
\r
162 super.onSaveInstanceState(arg0);
\r
163 arg0.putSerializable("chart", chart);
\r