create changelog entry
[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.List;\r
5 \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
25 \r
26 public class SimulationPlotConfigDialog extends DialogFragment {\r
27         \r
28         public interface OnConfirmListener {\r
29                 public void onConfirm();\r
30         }\r
31 \r
32         private ListView eventList;\r
33         private Spinner series1Spinner;\r
34         private Spinner series2Spinner;\r
35 \r
36         private SimulationChart chart;\r
37         private OnConfirmListener listener;\r
38 \r
39         public static SimulationPlotConfigDialog newInstance( SimulationChart chart ) {\r
40                 SimulationPlotConfigDialog d = new SimulationPlotConfigDialog();\r
41                 d.chart = chart;\r
42                 return d;\r
43         }\r
44 \r
45         public void setOnConfirmListener(OnConfirmListener listener) {\r
46                 this.listener = listener;\r
47         }\r
48 \r
49         @Override\r
50         public Dialog onCreateDialog(Bundle savedInstanceState) {\r
51                 if (savedInstanceState != null ) {\r
52                         chart = (SimulationChart) savedInstanceState.getSerializable("chart");\r
53                 }\r
54                 \r
55                 AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());\r
56                 builder.setTitle(R.string.simulationPlotDialogTitle);\r
57                 \r
58                 final LayoutInflater inflater = getActivity().getLayoutInflater();\r
59                 View v = inflater.inflate(R.layout.simulation_plot_config_dialog, null);\r
60                 builder.setView(v);\r
61 \r
62                 OpenRocketDocument rocketDocument = CurrentRocketHolder.getCurrentRocket().getRocketDocument();\r
63 \r
64                 Button okButton = (Button) v.findViewById(R.id.simulationOkButton);\r
65                 okButton.setOnClickListener( new View.OnClickListener() {\r
66 \r
67                         @Override\r
68                         public void onClick(View v) {\r
69                                 List<FlightEvent> eventsToShow = new ArrayList<FlightEvent>();\r
70                                 {\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
77                                                 }\r
78                                         }\r
79                                 }\r
80                                 chart.setEvents(eventsToShow);\r
81 \r
82                                 chart.setSeries1((FlightDataType)series1Spinner.getSelectedItem());\r
83                                 chart.setSeries2((FlightDataType)series2Spinner.getSelectedItem());\r
84 \r
85                                 if ( listener != null ) {\r
86                                         listener.onConfirm();\r
87                                 }\r
88                                 SimulationPlotConfigDialog.this.dismiss();\r
89                         }\r
90                         \r
91                 });\r
92 \r
93                 series1Spinner = (Spinner) v.findViewById(R.id.simulationSeries1);\r
94                 series2Spinner = (Spinner) v.findViewById(R.id.simulationSeries2);\r
95 \r
96                 List<FlightDataType> selectableSeries = new ArrayList<FlightDataType>();\r
97                 int index = 0;\r
98                 for( FlightDataType fdt : chart.getFlightDataBranch(rocketDocument).getTypes() ) {\r
99                         if ( fdt == FlightDataType.TYPE_TIME ) { \r
100                         } else {\r
101                                 selectableSeries.add(fdt);\r
102                         }\r
103                         index++;\r
104                 }\r
105                 ArrayAdapter<FlightDataType> serieses = new ArrayAdapter<FlightDataType>(getActivity(),android.R.layout.simple_spinner_item,selectableSeries) {\r
106 \r
107                         @Override\r
108                         public View getView(int position, View convertView,     ViewGroup parent) {\r
109                                 View v = convertView;\r
110                                 if ( v == null ) {\r
111                                         LayoutInflater li = inflater;\r
112                                         v = li.inflate(android.R.layout.simple_spinner_item,null);\r
113                                 }\r
114                                 FlightDataType fdt = this.getItem(position);\r
115                                 ((TextView)v.findViewById(android.R.id.text1)).setText( fdt.toString() );\r
116                                 return v;\r
117                         }\r
118 \r
119                 };\r
120                 \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
127 \r
128                 eventList = (ListView) v.findViewById(R.id.simulationEventsList);\r
129 \r
130                 FlightDataBranch data = chart.getFlightDataBranch(CurrentRocketHolder.getCurrentRocket().getRocketDocument());\r
131                 // Initialize the eventList\r
132                 \r
133                 ArrayAdapter<FlightEvent> events = new ArrayAdapter<FlightEvent>(getActivity(),android.R.layout.simple_list_item_1,data.getEvents()) {\r
134 \r
135                         @Override\r
136                         public View getView(int position, View convertView,\r
137                                         ViewGroup parent) {\r
138                                 View v = convertView;\r
139                                 if ( v == null ) {\r
140                                         LayoutInflater li = inflater;\r
141                                         v = li.inflate(android.R.layout.simple_list_item_multiple_choice,null);\r
142                                 }\r
143                                 FlightEvent event = this.getItem(position);\r
144                                 ((TextView)v.findViewById(android.R.id.text1)).setText( event.getType().toString() + " " + event.getTime() + " (s)" );\r
145                                 return v;\r
146                         }\r
147 \r
148                 };\r
149                 eventList.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);\r
150                 eventList.setAdapter(events);\r
151 \r
152                 for( FlightEvent evt : chart.getEvents() ) {\r
153                         eventList.setItemChecked( events.getPosition(evt), true);\r
154                 }\r
155                 \r
156                 return builder.create();\r
157 \r
158         }\r
159 \r
160         @Override\r
161         public void onSaveInstanceState(Bundle arg0) {\r
162                 super.onSaveInstanceState(arg0);\r
163                 arg0.putSerializable("chart", chart);\r
164         }\r
165 \r
166 }\r