Change OpenRocketViewer to tab layout with three tabs: overview, components, and...
[debian/openrocket] / src / net / sf / openrocket / android / rocket / OpenRocketViewer.java
1 package net.sf.openrocket.android.rocket;\r
2 \r
3 \r
4 import java.io.File;\r
5 \r
6 import net.sf.openrocket.R;\r
7 import net.sf.openrocket.android.Application;\r
8 import net.sf.openrocket.android.PreferencesActivity;\r
9 import net.sf.openrocket.android.motor.MotorHierarchicalBrowser;\r
10 import net.sf.openrocket.android.simulation.SimulationViewer;\r
11 import net.sf.openrocket.document.OpenRocketDocument;\r
12 import net.sf.openrocket.document.Simulation;\r
13 import net.sf.openrocket.rocketcomponent.Rocket;\r
14 import net.sf.openrocket.rocketcomponent.RocketComponent;\r
15 import net.sf.openrocket.rocketcomponent.RocketUtils;\r
16 import net.sf.openrocket.unit.Unit;\r
17 import net.sf.openrocket.unit.UnitGroup;\r
18 import net.sf.openrocket.util.Coordinate;\r
19 import android.app.Activity;\r
20 import android.app.ProgressDialog;\r
21 import android.content.Intent;\r
22 import android.content.SharedPreferences;\r
23 import android.net.Uri;\r
24 import android.os.Bundle;\r
25 import android.preference.PreferenceManager;\r
26 import android.util.Log;\r
27 import android.view.LayoutInflater;\r
28 import android.view.Menu;\r
29 import android.view.MenuInflater;\r
30 import android.view.MenuItem;\r
31 import android.view.View;\r
32 import android.view.ViewGroup;\r
33 import android.widget.AdapterView;\r
34 import android.widget.AdapterView.OnItemClickListener;\r
35 import android.widget.ArrayAdapter;\r
36 import android.widget.ListView;\r
37 import android.widget.TabHost;\r
38 import android.widget.TextView;\r
39 \r
40 public class OpenRocketViewer extends Activity\r
41 implements SharedPreferences.OnSharedPreferenceChangeListener\r
42 {\r
43 \r
44         private static final String TAG = "OpenRocketViewer";\r
45 \r
46         private ProgressDialog progress;\r
47 \r
48         private ListView componentList;\r
49         private ListView simulationList;\r
50 \r
51         private Application app;\r
52 \r
53         private final static int PICK_ORK_FILE_RESULT = 1;\r
54 \r
55         /* (non-Javadoc)\r
56          * @see android.app.Activity#onCreate(android.os.Bundle)\r
57          */\r
58         @Override\r
59         protected void onCreate(Bundle savedInstanceState) {\r
60                 super.onCreate(savedInstanceState);\r
61 \r
62                 Log.d(TAG,"In onCreate");\r
63 \r
64                 app = (Application) this.getApplication();\r
65 \r
66                 setContentView(R.layout.openrocketviewer);\r
67 \r
68                 SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);\r
69                 prefs.registerOnSharedPreferenceChangeListener(this);\r
70 \r
71                 TabHost tabs=(TabHost)findViewById(R.id.openrocketviewerTabHost);\r
72 \r
73                 tabs.setup();\r
74 \r
75                 TabHost.TabSpec spec=tabs.newTabSpec("tag1");\r
76 \r
77                 spec.setContent(R.id.openrocketviewerOverview);\r
78                 spec.setIndicator("Overview");\r
79                 tabs.addTab(spec);\r
80 \r
81                 spec=tabs.newTabSpec("tag2");\r
82                 spec.setContent(R.id.openrocketviewerComponentList);\r
83                 spec.setIndicator("Components");\r
84                 tabs.addTab(spec);      \r
85 \r
86                 spec=tabs.newTabSpec("tag3");\r
87                 spec.setContent(R.id.openrocketviewerSimulationList);\r
88                 spec.setIndicator("Simulations");\r
89                 tabs.addTab(spec);      \r
90 \r
91                 componentList = (ListView) findViewById(R.id.openrocketviewerComponentList);\r
92                 simulationList = (ListView) findViewById(R.id.openrocketviewerSimulationList);\r
93 \r
94                 Intent i = getIntent();\r
95                 Uri file = i.getData();\r
96 \r
97                 if ( file == null ) {\r
98                         Intent intent = new Intent(Intent.ACTION_GET_CONTENT);\r
99                         intent.setType("file/*");\r
100                         startActivityForResult(intent,PICK_ORK_FILE_RESULT);\r
101 \r
102                 } else {\r
103                         loadOrkFile(file);\r
104                 }\r
105         }\r
106 \r
107         @Override\r
108         protected void onDestroy() {\r
109                 if ( progress != null ) {\r
110                         if ( progress.isShowing() ) {\r
111                                 progress.dismiss();\r
112                         }\r
113                         progress = null;\r
114                 }\r
115                 super.onDestroy();\r
116         }\r
117 \r
118         @Override\r
119         protected void onActivityResult(int requestCode, int resultCode, Intent data) {\r
120                 // TODO Auto-generated method stub\r
121                 switch(requestCode){\r
122                 case PICK_ORK_FILE_RESULT:\r
123                         if(resultCode==RESULT_OK){\r
124                                 Uri file = data.getData();\r
125                                 loadOrkFile(file);\r
126                         }\r
127                         break;\r
128                 }\r
129         }\r
130         \r
131         private void loadOrkFile( Uri file ) {\r
132                 Log.d(TAG,"Use ork file: " + file);\r
133                 String path = file.getPath();\r
134                 File orkFile = new File(path);\r
135                 progress = ProgressDialog.show(this, "Loading file", "");\r
136 \r
137                 final OpenRocketLoaderTask task = new OpenRocketLoaderTask() {\r
138 \r
139                         /* (non-Javadoc)\r
140                          * @see android.os.AsyncTask#onPostExecute(java.lang.Object)\r
141                          */\r
142                         @Override\r
143                         protected void onPostExecute(OpenRocketDocument result) {\r
144                                 super.onPostExecute(result);\r
145                                 app.setRocketDocument( result );\r
146                                 updateContents();\r
147                         }\r
148 \r
149                 };\r
150 \r
151                 task.execute(orkFile);\r
152 \r
153         }\r
154 \r
155         /* (non-Javadoc)\r
156          * @see android.content.SharedPreferences.OnSharedPreferenceChangeListener#onSharedPreferenceChanged(android.content.SharedPreferences, java.lang.String)\r
157          */\r
158         @Override\r
159         public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {\r
160                 // just in case the user changed the units, we redraw.\r
161                 PreferencesActivity.initializePreferences(getApplication(), PreferenceManager.getDefaultSharedPreferences(this));\r
162                 updateContents();\r
163         }\r
164 \r
165         private void updateContents() {\r
166 \r
167                 OpenRocketDocument rocketDocument = app.getRocketDocument();\r
168                 Rocket rocket = rocketDocument.getRocket();\r
169                 \r
170                 setTitle(rocket.getName());\r
171                 \r
172                 Unit LengthUnit = UnitGroup.UNITS_LENGTH.getDefaultUnit();\r
173                 Unit MassUnit = UnitGroup.UNITS_MASS.getDefaultUnit();\r
174                 \r
175                 Coordinate cg = RocketUtils.getCG(rocket);\r
176                 double length = RocketUtils.getLength(rocket);\r
177                 ((TextView) findViewById(R.id.openrocketviewerRocketName)).setText( rocket.getName());\r
178                 ((TextView)findViewById(R.id.openrocketviewerDesigner)).setText(rocket.getDesigner());\r
179                 ((TextView)findViewById(R.id.openrocketviewerCG)).setText(LengthUnit.toStringUnit(cg.x) );\r
180                 ((TextView)findViewById(R.id.openrocketviewerLength)).setText(LengthUnit.toStringUnit(length));\r
181                 ((TextView)findViewById(R.id.openrocketviewerMass)).setText(MassUnit.toStringUnit(cg.weight));\r
182                 ((TextView)findViewById(R.id.openrocketviewerStageCount)).setText(String.valueOf(rocket.getStageCount()));\r
183                 ((TextView)findViewById(R.id.openrocketviewerComment)).setText(rocket.getComment());\r
184 \r
185                 ArrayAdapter<Simulation> sims = new ArrayAdapter<Simulation>(this,android.R.layout.simple_list_item_2,rocketDocument.getSimulations()) {\r
186 \r
187                         @Override\r
188                         public View getView(int position, View convertView,     ViewGroup parent) {\r
189                                 View v = convertView;\r
190                                 if ( v == null ) {\r
191                                         LayoutInflater li = getLayoutInflater();\r
192                                         v = li.inflate(android.R.layout.simple_list_item_2,null);\r
193                                 }\r
194                                 Simulation sim = this.getItem(position);\r
195                                 ((TextView)v.findViewById(android.R.id.text1)).setText( sim.getName() );\r
196                                 ((TextView)v.findViewById(android.R.id.text2)).setText( "motors: " + sim.getConfiguration().getMotorConfigurationDescription() + " apogee: " + sim.getSimulatedData().getMaxAltitude() + "m  time: " + sim.getSimulatedData().getFlightTime() + "s");\r
197                                 return v;\r
198                         }\r
199 \r
200                 };\r
201                 simulationList.setOnItemClickListener( new OnItemClickListener() {\r
202                         @Override\r
203                         public void onItemClick(AdapterView l, View v, int position, long id) {\r
204                                 Intent i = new Intent(OpenRocketViewer.this, SimulationViewer.class);\r
205                                 Log.d(TAG,"onItemClick simulation number " + id );\r
206                                 i.putExtra("Simulation",(int)id);\r
207                                 startActivityForResult(i, 1/*magic*/);\r
208                         }\r
209 \r
210                 });\r
211                 simulationList.setAdapter(sims);\r
212 \r
213                 ArrayAdapter<RocketComponent> comps = new ArrayAdapter<RocketComponent>(this, android.R.layout.simple_list_item_1,rocket.getChildren()) {\r
214 \r
215                         /* (non-Javadoc)\r
216                          * @see android.widget.ArrayAdapter#getView(int, android.view.View, android.view.ViewGroup)\r
217                          */\r
218                         @Override\r
219                         public View getView(int position, View convertView, ViewGroup parent) {\r
220                                 View v = convertView;\r
221                                 if ( v == null ) {\r
222                                         LayoutInflater li = getLayoutInflater();\r
223                                         v = li.inflate(android.R.layout.simple_list_item_1,null);\r
224                                 }\r
225                                 RocketComponent comp = this.getItem(position);\r
226                                 ((TextView)v.findViewById(android.R.id.text1)).setText( comp.getName() );\r
227                                 return v;\r
228                         }\r
229                         \r
230                         \r
231                 };\r
232                 componentList.setAdapter(comps);\r
233                 \r
234                 if ( progress.isShowing() ) {\r
235                         progress.dismiss();\r
236                 }\r
237 \r
238         }\r
239 \r
240         @Override\r
241         public boolean onCreateOptionsMenu(Menu menu) {\r
242                 MenuInflater inflater = getMenuInflater();\r
243                 inflater.inflate(R.menu.rocket_viewer_option_menu, menu);\r
244                 return true;\r
245         }\r
246 \r
247         @Override\r
248         public boolean onMenuItemSelected(int featureId, MenuItem item) {\r
249                 Log.d(TAG,"onMenuItemSelected" + item.getItemId());\r
250                 switch(item.getItemId()) {\r
251                 case R.id.motor_list_menu_option:\r
252                         startMotorBrowser();\r
253                         return true;\r
254                 case R.id.preference_menu_option:\r
255                         Intent intent = new Intent().setClass(this, PreferencesActivity.class);\r
256                         this.startActivity(intent);\r
257                         return true;\r
258                 }\r
259                 return super.onMenuItemSelected(featureId, item);\r
260         }\r
261 \r
262         public void startMotorBrowser() {\r
263                 Log.d(TAG,"motorBrowserButton clicked");\r
264                 Intent i = new Intent(OpenRocketViewer.this, MotorHierarchicalBrowser.class);\r
265                 startActivity(i);\r
266         }\r
267 \r
268 \r
269 \r
270 }\r