5f34a21f97534d765161adcc6d29d5013f5b7e51
[debian/openrocket] / android / src / net / sf / openrocket / android / simulation / SimulationPlotConfigDialog.java
1 package net.sf.openrocket.android.simulation;\r
2 \r
3 import java.util.ArrayList;\r
4 import java.util.HashMap;\r
5 import java.util.List;\r
6 import java.util.Map;\r
7 \r
8 import net.sf.openrocket.R;\r
9 import net.sf.openrocket.android.CurrentRocketHolder;\r
10 import net.sf.openrocket.document.OpenRocketDocument;\r
11 import net.sf.openrocket.simulation.FlightDataBranch;\r
12 import net.sf.openrocket.simulation.FlightDataType;\r
13 import net.sf.openrocket.simulation.FlightEvent;\r
14 import android.app.AlertDialog;\r
15 import android.app.Dialog;\r
16 import android.os.Bundle;\r
17 import android.support.v4.app.DialogFragment;\r
18 import android.util.SparseBooleanArray;\r
19 import android.view.LayoutInflater;\r
20 import android.view.View;\r
21 import android.view.ViewGroup;\r
22 import android.widget.ArrayAdapter;\r
23 import android.widget.Button;\r
24 import android.widget.ListView;\r
25 import android.widget.Spinner;\r
26 import android.widget.TextView;\r
27 \r
28 public class SimulationPlotConfigDialog extends DialogFragment {\r
29         \r
30         public interface OnConfirmListener {\r
31                 public void onConfirm();\r
32         }\r
33 \r
34         private ListView eventList;\r
35         private Spinner series1Spinner;\r
36         private Spinner series2Spinner;\r
37 \r
38         private SimulationChart chart;\r
39         private OnConfirmListener listener;\r
40 \r
41         public static SimulationPlotConfigDialog newInstance( SimulationChart chart ) {\r
42                 SimulationPlotConfigDialog d = new SimulationPlotConfigDialog();\r
43                 d.chart = chart;\r
44                 return d;\r
45         }\r
46 \r
47         public void setOnConfirmListener(OnConfirmListener listener) {\r
48                 this.listener = listener;\r
49         }\r
50 \r
51         @Override\r
52         public Dialog onCreateDialog(Bundle savedInstanceState) {\r
53                 if (savedInstanceState != null ) {\r
54                         chart = (SimulationChart) savedInstanceState.getSerializable("chart");\r
55                 }\r
56                 \r
57                 AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());\r
58                 builder.setTitle(R.string.simulationPlotDialogTitle);\r
59                 \r
60                 final LayoutInflater inflater = getActivity().getLayoutInflater();\r
61                 View v = inflater.inflate(R.layout.simulation_plot_config_dialog, null);\r
62                 builder.setView(v);\r
63 \r
64                 OpenRocketDocument rocketDocument = CurrentRocketHolder.getCurrentRocket().getRocketDocument();\r
65 \r
66                 Button okButton = (Button) v.findViewById(R.id.simulationOkButton);\r
67                 okButton.setOnClickListener( new View.OnClickListener() {\r
68 \r
69                         @Override\r
70                         public void onClick(View v) {\r
71                                 Map<Double,String> eventsToShow = new HashMap<Double,String>();\r
72                                 {\r
73                                         SparseBooleanArray eventsSelected = eventList.getCheckedItemPositions();\r
74                                         List<FlightEvent> flightEvents = chart.getFlightDataBranch(CurrentRocketHolder.getCurrentRocket().getRocketDocument()).getEvents();\r
75                                         for( int i=0; i< flightEvents.size(); i++ ) {\r
76                                                 if ( eventsSelected.get(i) ) {\r
77                                                         FlightEvent event = flightEvents.get(i);\r
78                                                         eventsToShow.put( event.getTime(), event.getType().toString());\r
79                                                 }\r
80                                         }\r
81                                 }\r
82                                 chart.setEvents(eventsToShow);\r
83 \r
84                                 chart.setSeries1((FlightDataType)series1Spinner.getSelectedItem());\r
85                                 chart.setSeries2((FlightDataType)series2Spinner.getSelectedItem());\r
86 \r
87                                 if ( listener != null ) {\r
88                                         listener.onConfirm();\r
89                                 }\r
90                                 SimulationPlotConfigDialog.this.dismiss();\r
91                         }\r
92                         \r
93                 });\r
94 \r
95                 series1Spinner = (Spinner) v.findViewById(R.id.simulationSeries1);\r
96                 series2Spinner = (Spinner) v.findViewById(R.id.simulationSeries2);\r
97 \r
98                 List<FlightDataType> selectableSeries = new ArrayList<FlightDataType>();\r
99                 for( FlightDataType fdt : chart.getFlightDataBranch(rocketDocument).getTypes() ) {\r
100                         if ( fdt == FlightDataType.TYPE_TIME ) { \r
101 \r
102                         } else {\r
103                                 selectableSeries.add(fdt);\r
104                         }\r
105                 }\r
106                 ArrayAdapter<FlightDataType> serieses = new ArrayAdapter<FlightDataType>(getActivity(),android.R.layout.simple_spinner_item,selectableSeries) {\r
107 \r
108                         @Override\r
109                         public View getView(int position, View convertView,     ViewGroup parent) {\r
110                                 View v = convertView;\r
111                                 if ( v == null ) {\r
112                                         LayoutInflater li = inflater;\r
113                                         v = li.inflate(android.R.layout.simple_spinner_item,null);\r
114                                 }\r
115                                 FlightDataType fdt = this.getItem(position);\r
116                                 ((TextView)v.findViewById(android.R.id.text1)).setText( fdt.toString() );\r
117                                 return v;\r
118                         }\r
119 \r
120                 };\r
121                 series1Spinner.setAdapter(serieses);\r
122                 series1Spinner.setSelection(0);\r
123                 series2Spinner.setAdapter(serieses);\r
124                 series2Spinner.setSelection(1);\r
125 \r
126                 eventList = (ListView) v.findViewById(R.id.simulationEventsList);\r
127 \r
128                 FlightDataBranch data = chart.getFlightDataBranch(CurrentRocketHolder.getCurrentRocket().getRocketDocument());\r
129                 // Initialize the eventList\r
130                 \r
131                 ArrayAdapter<FlightEvent> events = new ArrayAdapter<FlightEvent>(getActivity(),android.R.layout.simple_list_item_1,data.getEvents()) {\r
132 \r
133                         @Override\r
134                         public View getView(int position, View convertView,\r
135                                         ViewGroup parent) {\r
136                                 View v = convertView;\r
137                                 if ( v == null ) {\r
138                                         LayoutInflater li = inflater;\r
139                                         v = li.inflate(android.R.layout.simple_list_item_multiple_choice,null);\r
140                                 }\r
141                                 FlightEvent event = this.getItem(position);\r
142                                 ((TextView)v.findViewById(android.R.id.text1)).setText( event.getType().toString() + " " + event.getTime() + " (s)" );\r
143                                 return v;\r
144                         }\r
145 \r
146                 };\r
147                 eventList.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);\r
148                 eventList.setAdapter(events);\r
149 \r
150                 return builder.create();\r
151 \r
152         }\r
153 \r
154         @Override\r
155         public void onSaveInstanceState(Bundle arg0) {\r
156                 super.onSaveInstanceState(arg0);\r
157                 arg0.putSerializable("chart", chart);\r
158         }\r
159 \r
160 }\r