4ceb210f53e70a222c37ea26b49a8d856a4cbb34
[debian/openrocket] / android / src / net / sf / openrocket / android / rocket / Simulations.java
1 package net.sf.openrocket.android.rocket;\r
2 \r
3 import net.sf.openrocket.R;\r
4 import net.sf.openrocket.android.CurrentRocketHolder;\r
5 import net.sf.openrocket.android.util.AndroidLogWrapper;\r
6 import net.sf.openrocket.document.OpenRocketDocument;\r
7 import net.sf.openrocket.document.Simulation;\r
8 import net.sf.openrocket.simulation.FlightData;\r
9 import net.sf.openrocket.unit.Unit;\r
10 import net.sf.openrocket.unit.UnitGroup;\r
11 import android.app.Activity;\r
12 import android.content.SharedPreferences;\r
13 import android.os.Bundle;\r
14 import android.preference.PreferenceManager;\r
15 import android.support.v4.app.FragmentTransaction;\r
16 import android.view.LayoutInflater;\r
17 import android.view.View;\r
18 import android.view.ViewGroup;\r
19 import android.widget.AdapterView;\r
20 import android.widget.AdapterView.OnItemClickListener;\r
21 import android.widget.AdapterView.OnItemLongClickListener;\r
22 import android.widget.ArrayAdapter;\r
23 import android.widget.ListView;\r
24 import android.widget.TextView;\r
25 \r
26 import com.actionbarsherlock.app.SherlockFragment;\r
27 import com.actionbarsherlock.view.Menu;\r
28 import com.actionbarsherlock.view.MenuInflater;\r
29 import com.actionbarsherlock.view.MenuItem;\r
30 \r
31 public class Simulations extends SherlockFragment\r
32 implements SharedPreferences.OnSharedPreferenceChangeListener\r
33 {\r
34 \r
35         private final static String wizardFrag = "wizardFrag";\r
36 \r
37         public interface OnSimulationSelectedListener {\r
38                 public void onSimulationSelected( int simulationId );\r
39         }\r
40 \r
41         private ListView simulationList;\r
42         private OnSimulationSelectedListener listener;\r
43 \r
44         @Override\r
45         public View onCreateView(LayoutInflater inflater, ViewGroup container,\r
46                         Bundle savedInstanceState) {\r
47                 setHasOptionsMenu(true);\r
48                 View v = inflater.inflate(R.layout.rocket_simulations, container, false);\r
49                 simulationList = (ListView) v.findViewById(R.id.openrocketviewerSimulationList);\r
50                 return v;\r
51         }\r
52         \r
53         @Override\r
54         public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {\r
55                 inflater.inflate(R.menu.rocket_viewer_simulation_option_menu, menu);\r
56         }\r
57 \r
58         @Override\r
59         public boolean onOptionsItemSelected(MenuItem item) {\r
60                 switch (item.getItemId())\r
61                 {\r
62                 case R.id.menu_add:\r
63                         addSimulation();\r
64                         return true;\r
65                 default:\r
66                         return super.onOptionsItemSelected(item);\r
67                 }\r
68         }\r
69 \r
70         @Override\r
71         public void onAttach(Activity activity) {\r
72                 super.onAttach(activity);\r
73                 if ( activity instanceof OnSimulationSelectedListener ) {\r
74                         listener = (OnSimulationSelectedListener) activity;\r
75                 }\r
76         }\r
77 \r
78 \r
79         public void setListener(OnSimulationSelectedListener listener) {\r
80                 this.listener = listener;\r
81         }\r
82 \r
83         @Override\r
84         public void onActivityCreated(Bundle savedInstanceState) {\r
85                 super.onActivityCreated(savedInstanceState);\r
86 \r
87                 SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity());\r
88                 prefs.registerOnSharedPreferenceChangeListener(this);\r
89 \r
90         }\r
91 \r
92         @Override\r
93         public void onResume() {\r
94                 super.onResume();\r
95                 setup();\r
96 \r
97         }\r
98 \r
99         @Override\r
100         public void onDestroy() {\r
101                 super.onDestroy();\r
102 \r
103                 SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity());\r
104                 prefs.unregisterOnSharedPreferenceChangeListener(this);\r
105         }\r
106 \r
107         @Override\r
108         public void onSharedPreferenceChanged(SharedPreferences arg0, String arg1) {\r
109                 if ( this.isVisible() ) {\r
110                         setup();\r
111                 }\r
112         }\r
113 \r
114 \r
115         public void refreshSimulationList() {\r
116                 setup();\r
117         }\r
118         \r
119         private void setup() {\r
120                 final OpenRocketDocument rocketDocument = CurrentRocketHolder.getCurrentRocket().getRocketDocument();\r
121                 AndroidLogWrapper.d(Simulations.class,"activity = {0}", this.getActivity());\r
122 \r
123                 ArrayAdapter<Simulation> sims = new ArrayAdapter<Simulation>(this.getActivity(),android.R.layout.simple_list_item_2,rocketDocument.getSimulations()) {\r
124 \r
125                         @Override\r
126                         public View getView(int position, View convertView,     ViewGroup parent) {\r
127                                 View v = convertView;\r
128                                 if ( v == null ) {\r
129                                         LayoutInflater li = getActivity().getLayoutInflater();\r
130                                         v = li.inflate(android.R.layout.simple_list_item_2,null);\r
131                                 }\r
132                                 Simulation sim = this.getItem(position);\r
133                                 ((TextView)v.findViewById(android.R.id.text1)).setText( sim.getName() );\r
134                                 StringBuilder sb = new StringBuilder();\r
135                                 String motorConfig = sim.getOptions().getMotorConfigurationID();\r
136                                 sb.append("motors: ").append(rocketDocument.getRocket().getMotorConfigurationNameOrDescription(motorConfig));\r
137                                 Unit distanceUnit = UnitGroup.UNITS_DISTANCE.getDefaultUnit();\r
138                                 FlightData flightData  = sim.getSimulatedData();\r
139                                 if ( flightData != null ) {\r
140                                         sb.append(" apogee: ").append( distanceUnit.toStringUnit(flightData.getMaxAltitude()));\r
141                                         sb.append(" time: ").append(flightData.getFlightTime()).append("s");\r
142                                         ((TextView)v.findViewById(android.R.id.text2)).setText( sb.toString() );\r
143                                 } else {\r
144                                         ((TextView)v.findViewById(android.R.id.text2)).setText("No simulation data");\r
145                                 }\r
146                                 return v;\r
147                         }\r
148 \r
149                 };\r
150                 simulationList.setOnItemClickListener( new OnItemClickListener() {\r
151                         @Override\r
152                         public void onItemClick(AdapterView l, View v, int position, long id) {\r
153                                 if (listener != null ) {\r
154                                         listener.onSimulationSelected(position);\r
155                                 }\r
156                         }\r
157 \r
158                 });\r
159                 simulationList.setOnItemLongClickListener( new OnItemLongClickListener() {\r
160 \r
161                         @Override\r
162                         public boolean onItemLongClick(AdapterView<?> parent, View view,\r
163                                         int position, long id) {\r
164                                 final SimulationEditFragment f = SimulationEditFragment.newInstance(position);\r
165                                 FragmentTransaction ft = getActivity().getSupportFragmentManager().beginTransaction();\r
166                                 ft.add(f, wizardFrag);\r
167                                 ft.commit();\r
168 \r
169                                 return true;\r
170                         }\r
171                         \r
172                 });\r
173                 simulationList.setAdapter(sims);\r
174 \r
175         }\r
176 \r
177         private void addSimulation() {\r
178                 CurrentRocketHolder.getCurrentRocket().addNewSimulation();\r
179         }\r
180         \r
181 }\r