Convert apogee and simulation plot values to configured units.
[debian/openrocket] / android / src / net / sf / openrocket / android / rocket / OpenRocketViewer.java
index ad2d3e057dd96578bd124d3d25c2f7465caf3cb3..6985c934874b4620c8687310b9deebc71df9696a 100644 (file)
@@ -4,6 +4,10 @@ package net.sf.openrocket.android.rocket;
 import java.io.File;\r
 \r
 import net.sf.openrocket.R;\r
+import net.sf.openrocket.aerodynamics.AerodynamicCalculator;\r
+import net.sf.openrocket.aerodynamics.BarrowmanCalculator;\r
+import net.sf.openrocket.aerodynamics.FlightConditions;\r
+import net.sf.openrocket.aerodynamics.WarningSet;\r
 import net.sf.openrocket.android.Application;\r
 import net.sf.openrocket.android.PreferencesActivity;\r
 import net.sf.openrocket.android.motor.MotorHierarchicalBrowser;\r
@@ -11,6 +15,10 @@ import net.sf.openrocket.android.rocket.RocketComponentTreeAdapter.RocketCompone
 import net.sf.openrocket.android.simulation.SimulationViewer;\r
 import net.sf.openrocket.document.OpenRocketDocument;\r
 import net.sf.openrocket.document.Simulation;\r
+import net.sf.openrocket.masscalc.BasicMassCalculator;\r
+import net.sf.openrocket.masscalc.MassCalculator;\r
+import net.sf.openrocket.masscalc.MassCalculator.MassCalcType;\r
+import net.sf.openrocket.rocketcomponent.Configuration;\r
 import net.sf.openrocket.rocketcomponent.Rocket;\r
 import net.sf.openrocket.rocketcomponent.RocketComponent;\r
 import net.sf.openrocket.rocketcomponent.RocketUtils;\r
@@ -40,6 +48,7 @@ import android.widget.AdapterView.OnItemClickListener;
 import android.widget.ArrayAdapter;\r
 import android.widget.ListAdapter;\r
 import android.widget.ListView;\r
+import android.widget.Spinner;\r
 import android.widget.TabHost;\r
 import android.widget.TextView;\r
 \r
@@ -51,8 +60,16 @@ implements SharedPreferences.OnSharedPreferenceChangeListener
 \r
        private ProgressDialog progress;\r
 \r
+       private Spinner configurationSpinner;\r
        private TreeViewList componentTree;\r
        private ListView simulationList;\r
+       \r
+       /* Calculation of CP and CG */\r
+       private AerodynamicCalculator aerodynamicCalculator = new BarrowmanCalculator();\r
+       private MassCalculator massCalculator  = new BasicMassCalculator();\r
+\r
+       OpenRocketDocument rocketDocument;\r
+       Configuration rocketConfiguration;\r
 \r
        private Application app;\r
 \r
@@ -94,7 +111,7 @@ implements SharedPreferences.OnSharedPreferenceChangeListener
                spec.setIndicator("Simulations");\r
                tabs.addTab(spec);      \r
 \r
-               \r
+               configurationSpinner = (Spinner) findViewById(R.id.openrocketviewerConfigurationSpinner);\r
                componentTree = (TreeViewList) findViewById(R.id.openrocketviewerComponentTree);\r
                simulationList = (ListView) findViewById(R.id.openrocketviewerSimulationList);\r
 \r
@@ -171,24 +188,71 @@ implements SharedPreferences.OnSharedPreferenceChangeListener
 \r
        private void updateContents() {\r
 \r
-               OpenRocketDocument rocketDocument = app.getRocketDocument();\r
+               rocketDocument = app.getRocketDocument();\r
+               rocketConfiguration = rocketDocument.getDefaultConfiguration();\r
                Rocket rocket = rocketDocument.getRocket();\r
 \r
                setTitle(rocket.getName());\r
 \r
-               Unit LengthUnit = UnitGroup.UNITS_LENGTH.getDefaultUnit();\r
-               Unit MassUnit = UnitGroup.UNITS_MASS.getDefaultUnit();\r
+               String[] motorConfigs = rocket.getMotorConfigurationIDs();\r
+               ArrayAdapter<String> spinnerAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item);\r
+               for( String config: motorConfigs ) {\r
+                       spinnerAdapter.add(rocket.getMotorConfigurationNameOrDescription(config));\r
+               }\r
+               \r
+               configurationSpinner.setAdapter(spinnerAdapter);\r
+               configurationSpinner.setOnItemSelectedListener( new AdapterView.OnItemSelectedListener() {\r
+\r
+                       /* (non-Javadoc)\r
+                        * @see android.widget.AdapterView.OnItemSelectedListener#onItemSelected(android.widget.AdapterView, android.view.View, int, long)\r
+                        */\r
+                       @Override\r
+                       public void onItemSelected(AdapterView<?> arg0, View arg1,\r
+                                       int arg2, long arg3) {\r
+\r
+                               String selectedConfigId = rocketDocument.getRocket().getMotorConfigurationIDs()[arg2];\r
+                               rocketConfiguration.setMotorConfigurationID(selectedConfigId);\r
+                               Coordinate cp = aerodynamicCalculator.getWorstCP(rocketConfiguration,\r
+                                               new FlightConditions(rocketConfiguration),\r
+                                               new WarningSet());\r
+                               \r
+                               Coordinate cg = massCalculator.getCG(rocketConfiguration, MassCalcType.LAUNCH_MASS);\r
+\r
+                               Unit lengthUnit = UnitGroup.UNITS_LENGTH.getDefaultUnit();\r
+                               Unit massUnit = UnitGroup.UNITS_MASS.getDefaultUnit();\r
+                               Unit stabilityUnit = UnitGroup.stabilityUnits(rocketConfiguration).getDefaultUnit();\r
+\r
+                               ((TextView)findViewById(R.id.openrocketviewerCP)).setText(lengthUnit.toStringUnit(cp.x));\r
+                               ((TextView)findViewById(R.id.openrocketviewerCG)).setText(lengthUnit.toStringUnit(cg.x));\r
+                               ((TextView)findViewById(R.id.openrocketviewerLiftOffWeight)).setText(massUnit.toStringUnit(cg.weight));\r
+                               ((TextView)findViewById(R.id.openrocketviewerStabilityMargin)).setText(stabilityUnit.toStringUnit(cp.x-cg.x));\r
+\r
+                       }\r
+\r
+                       /* (non-Javadoc)\r
+                        * @see android.widget.AdapterView.OnItemSelectedListener#onNothingSelected(android.widget.AdapterView)\r
+                        */\r
+                       @Override\r
+                       public void onNothingSelected(AdapterView<?> arg0) {\r
+                               ((TextView)findViewById(R.id.openrocketviewerCP)).setText("");\r
+                               ((TextView)findViewById(R.id.openrocketviewerCG)).setText("");\r
+                               ((TextView)findViewById(R.id.openrocketviewerLiftOffWeight)).setText("");\r
+                               ((TextView)findViewById(R.id.openrocketviewerStabilityMargin)).setText("");\r
+                       }\r
+                       \r
+               });\r
+               \r
+               Unit lengthUnit = UnitGroup.UNITS_LENGTH.getDefaultUnit();\r
+               Unit massUnit = UnitGroup.UNITS_MASS.getDefaultUnit();\r
 \r
-               Coordinate cg = RocketUtils.getCG(rocket);\r
+               Coordinate cg = RocketUtils.getCG(rocket, MassCalcType.NO_MOTORS);\r
                double length = RocketUtils.getLength(rocket);\r
-               ((TextView) findViewById(R.id.openrocketviewerRocketName)).setText( rocket.getName());\r
                ((TextView)findViewById(R.id.openrocketviewerDesigner)).setText(rocket.getDesigner());\r
-               ((TextView)findViewById(R.id.openrocketviewerCG)).setText(LengthUnit.toStringUnit(cg.x) );\r
-               ((TextView)findViewById(R.id.openrocketviewerLength)).setText(LengthUnit.toStringUnit(length));\r
-               ((TextView)findViewById(R.id.openrocketviewerMass)).setText(MassUnit.toStringUnit(cg.weight));\r
+               ((TextView)findViewById(R.id.openrocketviewerLength)).setText(lengthUnit.toStringUnit(length));\r
+               ((TextView)findViewById(R.id.openrocketviewerMass)).setText(massUnit.toStringUnit(cg.weight));\r
                ((TextView)findViewById(R.id.openrocketviewerStageCount)).setText(String.valueOf(rocket.getStageCount()));\r
-               ((TextView)findViewById(R.id.openrocketviewerComment)).setText(rocket.getComment());\r
 \r
+               \r
                ArrayAdapter<Simulation> sims = new ArrayAdapter<Simulation>(this,android.R.layout.simple_list_item_2,rocketDocument.getSimulations()) {\r
 \r
                        @Override\r
@@ -200,7 +264,12 @@ implements SharedPreferences.OnSharedPreferenceChangeListener
                                }\r
                                Simulation sim = this.getItem(position);\r
                                ((TextView)v.findViewById(android.R.id.text1)).setText( sim.getName() );\r
-                               ((TextView)v.findViewById(android.R.id.text2)).setText( "motors: " + sim.getConfiguration().getMotorConfigurationDescription() + " apogee: " + sim.getSimulatedData().getMaxAltitude() + "m  time: " + sim.getSimulatedData().getFlightTime() + "s");\r
+                               StringBuilder sb = new StringBuilder();\r
+                               sb.append("motors: ").append(sim.getConfiguration().getMotorConfigurationDescription());\r
+                               Unit distanceUnit = UnitGroup.UNITS_DISTANCE.getDefaultUnit();\r
+                               sb.append(" apogee: ").append( distanceUnit.toStringUnit(sim.getSimulatedData().getMaxAltitude()));\r
+                               sb.append(" time: ").append(sim.getSimulatedData().getFlightTime()).append("s");\r
+                               ((TextView)v.findViewById(android.R.id.text2)).setText( sb.toString() );\r
                                return v;\r
                        }\r
 \r
@@ -211,7 +280,7 @@ implements SharedPreferences.OnSharedPreferenceChangeListener
                                Intent i = new Intent(OpenRocketViewer.this, SimulationViewer.class);\r
                                Log.d(TAG,"onItemClick simulation number " + id );\r
                                i.putExtra("Simulation",(int)id);\r
-                               startActivityForResult(i, 1/*magic*/);\r
+                               startActivity(i);\r
                        }\r
 \r
                });\r