Merge commit '42b2e5ca519766e37ce6941ba4faecc9691cc403' into upstream
[debian/openrocket] / android / src / net / sf / openrocket / android / simulation / SimulationPlotConfigDialog.java
diff --git a/android/src/net/sf/openrocket/android/simulation/SimulationPlotConfigDialog.java b/android/src/net/sf/openrocket/android/simulation/SimulationPlotConfigDialog.java
new file mode 100644 (file)
index 0000000..d22b8d7
--- /dev/null
@@ -0,0 +1,166 @@
+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