8692abf5a84746802ab2c237deee372d4920d88d
[debian/openrocket] / android / src / net / sf / openrocket / android / rocket / Overview.java
1 package net.sf.openrocket.android.rocket;\r
2 \r
3 import net.sf.openrocket.R;\r
4 import net.sf.openrocket.aerodynamics.AerodynamicCalculator;\r
5 import net.sf.openrocket.aerodynamics.BarrowmanCalculator;\r
6 import net.sf.openrocket.aerodynamics.FlightConditions;\r
7 import net.sf.openrocket.aerodynamics.WarningSet;\r
8 import net.sf.openrocket.android.Application;\r
9 import net.sf.openrocket.android.util.AndroidLogWrapper;\r
10 import net.sf.openrocket.document.OpenRocketDocument;\r
11 import net.sf.openrocket.masscalc.BasicMassCalculator;\r
12 import net.sf.openrocket.masscalc.MassCalculator;\r
13 import net.sf.openrocket.masscalc.MassCalculator.MassCalcType;\r
14 import net.sf.openrocket.rocketcomponent.Configuration;\r
15 import net.sf.openrocket.rocketcomponent.Rocket;\r
16 import net.sf.openrocket.rocketcomponent.RocketUtils;\r
17 import net.sf.openrocket.unit.Unit;\r
18 import net.sf.openrocket.unit.UnitGroup;\r
19 import net.sf.openrocket.util.Coordinate;\r
20 import android.content.SharedPreferences;\r
21 import android.os.Bundle;\r
22 import android.preference.PreferenceManager;\r
23 import android.support.v4.app.Fragment;\r
24 import android.view.LayoutInflater;\r
25 import android.view.View;\r
26 import android.view.ViewGroup;\r
27 import android.widget.AdapterView;\r
28 import android.widget.ArrayAdapter;\r
29 import android.widget.Spinner;\r
30 import android.widget.TextView;\r
31 \r
32 public class Overview extends Fragment\r
33 implements SharedPreferences.OnSharedPreferenceChangeListener\r
34 {\r
35 \r
36         /* Calculation of CP and CG */\r
37         private AerodynamicCalculator aerodynamicCalculator = new BarrowmanCalculator();\r
38         private MassCalculator massCalculator  = new BasicMassCalculator();\r
39 \r
40         private Spinner configurationSpinner;\r
41 \r
42 \r
43         @Override\r
44         public View onCreateView(LayoutInflater inflater, ViewGroup container,\r
45                         Bundle savedInstanceState) {\r
46                 AndroidLogWrapper.d(Overview.class, "Created View");\r
47                 View v = inflater.inflate(R.layout.rocket_overview, container, false);\r
48                 configurationSpinner = (Spinner) v.findViewById(R.id.openrocketviewerConfigurationSpinner);\r
49 \r
50                 return v;\r
51         }\r
52 \r
53         @Override\r
54         public void onActivityCreated(Bundle savedInstanceState) {\r
55                 super.onActivityCreated(savedInstanceState);\r
56                 \r
57                 SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity());\r
58                 prefs.registerOnSharedPreferenceChangeListener(this);\r
59 \r
60                 setup();\r
61 \r
62         }\r
63 \r
64         @Override\r
65         public void onDestroy() {\r
66                 super.onDestroy();\r
67 \r
68                 SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity());\r
69                 prefs.unregisterOnSharedPreferenceChangeListener(this);\r
70 }\r
71 \r
72         @Override\r
73         public void onSharedPreferenceChanged(SharedPreferences arg0, String arg1) {\r
74                 if ( this.isVisible() ) {\r
75                         setup();\r
76                 }\r
77         }\r
78         \r
79         private void setup() {\r
80                 final OpenRocketDocument rocketDocument = ((Application)getActivity().getApplication()).getRocketDocument();\r
81                 final Configuration rocketConfiguration = rocketDocument.getDefaultConfiguration();\r
82                 Rocket rocket = rocketDocument.getRocket();\r
83 \r
84                 String[] motorConfigs = rocket.getMotorConfigurationIDs();\r
85                 ArrayAdapter<String> spinnerAdapter = new ArrayAdapter<String>(getActivity(),R.layout.simple_spinner_item);\r
86                 for( String config: motorConfigs ) {\r
87                         spinnerAdapter.add(rocket.getMotorConfigurationNameOrDescription(config));\r
88                 }\r
89 \r
90                 AndroidLogWrapper.d(Overview.class, "spinnerAdapter = " + spinnerAdapter);\r
91                 AndroidLogWrapper.d(Overview.class, "configurationSpinner = " + configurationSpinner);\r
92 \r
93                 configurationSpinner.setAdapter(spinnerAdapter);\r
94                 configurationSpinner.setOnItemSelectedListener( new AdapterView.OnItemSelectedListener() {\r
95 \r
96                         /* (non-Javadoc)\r
97                          * @see android.widget.AdapterView.OnItemSelectedListener#onItemSelected(android.widget.AdapterView, android.view.View, int, long)\r
98                          */\r
99                         @Override\r
100                         public void onItemSelected(AdapterView<?> arg0, View arg1,\r
101                                         int arg2, long arg3) {\r
102 \r
103                                 String selectedConfigId = rocketDocument.getRocket().getMotorConfigurationIDs()[arg2];\r
104                                 rocketConfiguration.setMotorConfigurationID(selectedConfigId);\r
105                                 Coordinate cp = aerodynamicCalculator.getWorstCP(rocketConfiguration,\r
106                                                 new FlightConditions(rocketConfiguration),\r
107                                                 new WarningSet());\r
108 \r
109                                 Coordinate cg = massCalculator.getCG(rocketConfiguration, MassCalcType.LAUNCH_MASS);\r
110 \r
111                                 Unit lengthUnit = UnitGroup.UNITS_LENGTH.getDefaultUnit();\r
112                                 Unit massUnit = UnitGroup.UNITS_MASS.getDefaultUnit();\r
113                                 Unit stabilityUnit = UnitGroup.stabilityUnits(rocketConfiguration).getDefaultUnit();\r
114 \r
115                                 ((TextView)getActivity().findViewById(R.id.openrocketviewerCP)).setText(lengthUnit.toStringUnit(cp.x));\r
116                                 ((TextView)getActivity().findViewById(R.id.openrocketviewerCG)).setText(lengthUnit.toStringUnit(cg.x));\r
117                                 ((TextView)getActivity().findViewById(R.id.openrocketviewerLiftOffWeight)).setText(massUnit.toStringUnit(cg.weight));\r
118                                 ((TextView)getActivity().findViewById(R.id.openrocketviewerStabilityMargin)).setText(stabilityUnit.toStringUnit(cp.x-cg.x));\r
119 \r
120                         }\r
121 \r
122                         /* (non-Javadoc)\r
123                          * @see android.widget.AdapterView.OnItemSelectedListener#onNothingSelected(android.widget.AdapterView)\r
124                          */\r
125                         @Override\r
126                         public void onNothingSelected(AdapterView<?> arg0) {\r
127                                 ((TextView)getActivity().findViewById(R.id.openrocketviewerCP)).setText("");\r
128                                 ((TextView)getActivity().findViewById(R.id.openrocketviewerCG)).setText("");\r
129                                 ((TextView)getActivity().findViewById(R.id.openrocketviewerLiftOffWeight)).setText("");\r
130                                 ((TextView)getActivity().findViewById(R.id.openrocketviewerStabilityMargin)).setText("");\r
131                         }\r
132 \r
133                 });\r
134 \r
135                 Unit lengthUnit = UnitGroup.UNITS_LENGTH.getDefaultUnit();\r
136                 Unit massUnit = UnitGroup.UNITS_MASS.getDefaultUnit();\r
137                 \r
138                 Coordinate cg = RocketUtils.getCG(rocket, MassCalcType.NO_MOTORS);\r
139                 double length = RocketUtils.getLength(rocket);\r
140                 ((TextView)getActivity().findViewById(R.id.openrocketviewerDesigner)).setText(rocket.getDesigner());\r
141                 ((TextView)getActivity().findViewById(R.id.openrocketviewerLength)).setText(lengthUnit.toStringUnit(length));\r
142                 ((TextView)getActivity().findViewById(R.id.openrocketviewerMass)).setText(massUnit.toStringUnit(cg.weight));\r
143                 ((TextView)getActivity().findViewById(R.id.openrocketviewerStageCount)).setText(String.valueOf(rocket.getStageCount()));\r
144         }\r
145 \r
146 }\r