create changelog entry
[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.CurrentRocketHolder;\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.TextView;\r
29 \r
30 public class Overview extends Fragment\r
31 implements SharedPreferences.OnSharedPreferenceChangeListener\r
32 {\r
33 \r
34         /* Calculation of CP and CG */\r
35         private AerodynamicCalculator aerodynamicCalculator = new BarrowmanCalculator();\r
36         private MassCalculator massCalculator  = new BasicMassCalculator();\r
37 \r
38         private MotorConfigSpinner configurationSpinner;\r
39 \r
40 \r
41         @Override\r
42         public View onCreateView(LayoutInflater inflater, ViewGroup container,\r
43                         Bundle savedInstanceState) {\r
44                 AndroidLogWrapper.d(Overview.class, "Created View");\r
45                 View v = inflater.inflate(R.layout.rocket_overview, container, false);\r
46                 configurationSpinner = (MotorConfigSpinner) v.findViewById(R.id.openrocketviewerConfigurationSpinner);\r
47 \r
48                 return v;\r
49         }\r
50 \r
51         @Override\r
52         public void onActivityCreated(Bundle savedInstanceState) {\r
53                 super.onActivityCreated(savedInstanceState);\r
54 \r
55                 SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity());\r
56                 prefs.registerOnSharedPreferenceChangeListener(this);\r
57 \r
58         }\r
59 \r
60         @Override\r
61         public void onResume() {\r
62                 super.onResume();\r
63                 setup();\r
64 \r
65         }\r
66 \r
67         @Override\r
68         public void onDestroy() {\r
69                 super.onDestroy();\r
70 \r
71                 SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity());\r
72                 prefs.unregisterOnSharedPreferenceChangeListener(this);\r
73         }\r
74 \r
75         @Override\r
76         public void onSharedPreferenceChanged(SharedPreferences arg0, String arg1) {\r
77                 if ( this.isVisible() ) {\r
78                         setup();\r
79                 }\r
80         }\r
81 \r
82         private void setup() {\r
83                 final OpenRocketDocument rocketDocument = CurrentRocketHolder.getCurrentRocket().getRocketDocument();\r
84                 Rocket rocket = rocketDocument.getRocket();\r
85 \r
86                 // Find the index of the default configuration so we can preselect it.\r
87                 Configuration defaultConfiguration = rocketDocument.getDefaultConfiguration();\r
88                 configurationSpinner.createAdapter(rocket);\r
89                 AndroidLogWrapper.d(Overview.class, "configurationSpinner = " + configurationSpinner);\r
90 \r
91                 if ( defaultConfiguration != null ) {\r
92                         configurationSpinner.setSelectedConfiguration(defaultConfiguration.getMotorConfigurationID());\r
93                 }\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                                 Configuration config = new Configuration(rocketDocument.getRocket());\r
105                                 config.setMotorConfigurationID(selectedConfigId);\r
106                                 Coordinate cp = aerodynamicCalculator.getWorstCP(config,\r
107                                                 new FlightConditions(config),\r
108                                                 new WarningSet());\r
109 \r
110                                 Coordinate cg = massCalculator.getCG(config, MassCalcType.LAUNCH_MASS);\r
111 \r
112                                 Unit lengthUnit = UnitGroup.UNITS_LENGTH.getDefaultUnit();\r
113                                 Unit massUnit = UnitGroup.UNITS_MASS.getDefaultUnit();\r
114                                 Unit stabilityUnit = UnitGroup.stabilityUnits(config).getDefaultUnit();\r
115 \r
116                                 ((TextView)getActivity().findViewById(R.id.openrocketviewerCP)).setText(lengthUnit.toStringUnit(cp.x));\r
117                                 ((TextView)getActivity().findViewById(R.id.openrocketviewerCG)).setText(lengthUnit.toStringUnit(cg.x));\r
118                                 ((TextView)getActivity().findViewById(R.id.openrocketviewerLiftOffWeight)).setText(massUnit.toStringUnit(cg.weight));\r
119                                 ((TextView)getActivity().findViewById(R.id.openrocketviewerStabilityMargin)).setText(stabilityUnit.toStringUnit(cp.x-cg.x));\r
120 \r
121                         }\r
122 \r
123                         /* (non-Javadoc)\r
124                          * @see android.widget.AdapterView.OnItemSelectedListener#onNothingSelected(android.widget.AdapterView)\r
125                          */\r
126                         @Override\r
127                         public void onNothingSelected(AdapterView<?> arg0) {\r
128                                 ((TextView)getActivity().findViewById(R.id.openrocketviewerCP)).setText("");\r
129                                 ((TextView)getActivity().findViewById(R.id.openrocketviewerCG)).setText("");\r
130                                 ((TextView)getActivity().findViewById(R.id.openrocketviewerLiftOffWeight)).setText("");\r
131                                 ((TextView)getActivity().findViewById(R.id.openrocketviewerStabilityMargin)).setText("");\r
132                         }\r
133 \r
134                 });\r
135 \r
136                 Unit lengthUnit = UnitGroup.UNITS_LENGTH.getDefaultUnit();\r
137                 Unit massUnit = UnitGroup.UNITS_MASS.getDefaultUnit();\r
138 \r
139                 Coordinate cg = RocketUtils.getCG(rocket, MassCalcType.NO_MOTORS);\r
140                 double length = RocketUtils.getLength(rocket);\r
141                 ((TextView)getActivity().findViewById(R.id.openrocketviewerDesigner)).setText(rocket.getDesigner());\r
142                 ((TextView)getActivity().findViewById(R.id.openrocketviewerLength)).setText(lengthUnit.toStringUnit(length));\r
143                 ((TextView)getActivity().findViewById(R.id.openrocketviewerMass)).setText(massUnit.toStringUnit(cg.weight));\r
144                 ((TextView)getActivity().findViewById(R.id.openrocketviewerStageCount)).setText(String.valueOf(rocket.getStageCount()));\r
145         }\r
146 \r
147 }\r