--- /dev/null
+package net.sf.openrocket.android.simulation;\r
+\r
+import java.util.ArrayList;\r
+import java.util.List;\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 class SimulationPlotConfigDialog extends DialogFragment {\r
+ \r
+ public interface OnConfirmListener {\r
+ public void onConfirm();\r
+ }\r
+\r
+ private ListView eventList;\r
+ private Spinner series1Spinner;\r
+ private Spinner series2Spinner;\r
+\r
+ private SimulationChart chart;\r
+ private OnConfirmListener listener;\r
+\r
+ public static SimulationPlotConfigDialog newInstance( SimulationChart chart ) {\r
+ SimulationPlotConfigDialog d = new SimulationPlotConfigDialog();\r
+ d.chart = chart;\r
+ return d;\r
+ }\r
+\r
+ public void setOnConfirmListener(OnConfirmListener listener) {\r
+ this.listener = listener;\r
+ }\r
+\r
+ @Override\r
+ public Dialog onCreateDialog(Bundle savedInstanceState) {\r
+ if (savedInstanceState != null ) {\r
+ chart = (SimulationChart) savedInstanceState.getSerializable("chart");\r
+ }\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_plot_config_dialog, null);\r
+ builder.setView(v);\r
+\r
+ OpenRocketDocument rocketDocument = CurrentRocketHolder.getCurrentRocket().getRocketDocument();\r
+\r
+ Button okButton = (Button) v.findViewById(R.id.simulationOkButton);\r
+ okButton.setOnClickListener( new View.OnClickListener() {\r
+\r
+ @Override\r
+ public void onClick(View v) {\r
+ List<FlightEvent> eventsToShow = new ArrayList<FlightEvent>();\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.add( event );\r
+ }\r
+ }\r
+ }\r
+ chart.setEvents(eventsToShow);\r
+\r
+ chart.setSeries1((FlightDataType)series1Spinner.getSelectedItem());\r
+ chart.setSeries2((FlightDataType)series2Spinner.getSelectedItem());\r
+\r
+ if ( listener != null ) {\r
+ listener.onConfirm();\r
+ }\r
+ SimulationPlotConfigDialog.this.dismiss();\r
+ }\r
+ \r
+ });\r
+\r
+ series1Spinner = (Spinner) v.findViewById(R.id.simulationSeries1);\r
+ series2Spinner = (Spinner) v.findViewById(R.id.simulationSeries2);\r
+\r
+ List<FlightDataType> selectableSeries = new ArrayList<FlightDataType>();\r
+ int index = 0;\r
+ for( FlightDataType fdt : chart.getFlightDataBranch(rocketDocument).getTypes() ) {\r
+ if ( fdt == FlightDataType.TYPE_TIME ) { \r
+ } else {\r
+ selectableSeries.add(fdt);\r
+ }\r
+ index++;\r
+ }\r
+ ArrayAdapter<FlightDataType> serieses = new ArrayAdapter<FlightDataType>(getActivity(),android.R.layout.simple_spinner_item,selectableSeries) {\r
+\r
+ @Override\r
+ public View getView(int position, View convertView, ViewGroup parent) {\r
+ View v = convertView;\r
+ if ( v == null ) {\r
+ LayoutInflater li = inflater;\r
+ v = li.inflate(android.R.layout.simple_spinner_item,null);\r
+ }\r
+ FlightDataType fdt = this.getItem(position);\r
+ ((TextView)v.findViewById(android.R.id.text1)).setText( fdt.toString() );\r
+ return v;\r
+ }\r
+\r
+ };\r
+ \r
+ series1Spinner.setAdapter(serieses);\r
+ int selection1 = serieses.getPosition(chart.getSeries1());\r
+ series1Spinner.setSelection(selection1);\r
+ series2Spinner.setAdapter(serieses);\r
+ int selection2 = serieses.getPosition(chart.getSeries2());\r
+ series2Spinner.setSelection(selection2);\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
+ @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
+ for( FlightEvent evt : chart.getEvents() ) {\r
+ eventList.setItemChecked( events.getPosition(evt), true);\r
+ }\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