1 package net.sf.openrocket.android.rocket;
\r
3 import java.util.List;
\r
5 import net.sf.openrocket.R;
\r
6 import net.sf.openrocket.android.Application;
\r
7 import net.sf.openrocket.android.db.DbAdapter;
\r
8 import net.sf.openrocket.android.motor.ExtendedThrustCurveMotor;
\r
9 import net.sf.openrocket.android.motor.MotorDelayDialogFragment;
\r
10 import net.sf.openrocket.android.motor.MotorListDialogFragment;
\r
11 import net.sf.openrocket.android.util.AndroidLogWrapper;
\r
12 import net.sf.openrocket.android.util.ExpandableListFragment;
\r
13 import net.sf.openrocket.document.OpenRocketDocument;
\r
14 import net.sf.openrocket.motor.Motor;
\r
15 import net.sf.openrocket.rocketcomponent.MotorMount;
\r
16 import net.sf.openrocket.rocketcomponent.RocketComponent;
\r
17 import net.sf.openrocket.unit.UnitGroup;
\r
18 import android.os.Bundle;
\r
19 import android.support.v4.app.FragmentTransaction;
\r
20 import android.view.LayoutInflater;
\r
21 import android.view.View;
\r
22 import android.view.ViewGroup;
\r
23 import android.widget.BaseExpandableListAdapter;
\r
24 import android.widget.Button;
\r
25 import android.widget.ExpandableListAdapter;
\r
26 import android.widget.TextView;
\r
28 public class Configurations extends ExpandableListFragment {
\r
30 private final static String wizardFrag = "wizardFrag";
\r
33 public View onCreateView(LayoutInflater inflater, ViewGroup container,
\r
34 Bundle savedInstanceState) {
\r
35 View v = inflater.inflate(R.layout.rocket_configurations, container, false);
\r
37 Button b = (Button) v.findViewById(R.id.openrocketviewerAddConfiguration);
\r
39 b.setOnClickListener( new View.OnClickListener() {
\r
42 public void onClick(View v) {
\r
43 ((Application)getActivity().getApplication()).getRocketDocument().getRocket().newMotorConfigurationID();
\r
44 Configurations.this.setup();
\r
52 public void onActivityCreated(Bundle savedInstanceState) {
\r
53 super.onActivityCreated(savedInstanceState);
\r
59 private static class MotorMountInfo {
\r
61 private RocketComponent mmt;
\r
62 private String config;
\r
63 private ExtendedThrustCurveMotor motor;
\r
64 private double delay;
\r
66 String getMotorMountDescription() {
\r
67 String mmtDesc = mmt.getComponentName();
\r
68 mmtDesc += " (" + UnitGroup.UNITS_MOTOR_DIMENSIONS.toStringUnit( ((MotorMount)mmt).getMotorMountDiameter()) + ")";
\r
72 String getMotorDescription() {
\r
73 return motor.getManufacturer().getDisplayName() + " " + motor.getDesignation();
\r
78 class ChildViewHolder {
\r
79 MotorMountInfo info;
\r
80 TextView motorMountName;
\r
81 Button motorDescription;
\r
83 void setMotor( ExtendedThrustCurveMotor motor ) {
\r
84 this.info.motor = motor;
\r
85 ((MotorMount)info.mmt).setMotor(info.config, motor);
\r
87 void setDelay( double delay ) {
\r
88 this.info.delay = delay;
\r
89 ((MotorMount)info.mmt).setMotorDelay(info.config, delay);
\r
93 private void setup() {
\r
94 final OpenRocketDocument rocketDocument = ((Application)getActivity().getApplication()).getRocketDocument();
\r
96 ExpandableListAdapter configurationAdapter = new BaseExpandableListAdapter() {
\r
98 List<MotorMount> mmts = rocketDocument.getRocket().getMotorMounts();
\r
101 public int getGroupCount() {
\r
102 return rocketDocument.getRocket().getMotorConfigurationIDs().length;
\r
106 public int getChildrenCount(int groupPosition) {
\r
107 return mmts.size();
\r
111 public Object getGroup(int groupPosition) {
\r
112 String config = rocketDocument.getRocket().getMotorConfigurationIDs()[groupPosition];
\r
117 public Object getChild(int groupPosition, int childPosition) {
\r
118 MotorMountInfo info = new MotorMountInfo();
\r
119 info.mmt = (RocketComponent)(mmts.get(childPosition));
\r
121 String config = (String) getGroup(groupPosition);
\r
122 info.config = config;
\r
123 info.motor = (ExtendedThrustCurveMotor) ((MotorMount)info.mmt).getMotor(config);
\r
125 if ( info.motor != null ) {
\r
126 info.delay = ((MotorMount)info.mmt).getMotorDelay(config);
\r
135 public long getGroupId(int groupPosition) {
\r
136 // TODO Auto-generated method stub
\r
141 public long getChildId(int groupPosition, int childPosition) {
\r
142 // TODO Auto-generated method stub
\r
147 public boolean hasStableIds() {
\r
148 // TODO Auto-generated method stub
\r
153 public View getGroupView(int groupPosition, boolean isExpanded,
\r
154 View convertView, ViewGroup parent) {
\r
155 if ( convertView == null ) {
\r
156 convertView = getActivity().getLayoutInflater().inflate(android.R.layout.simple_expandable_list_item_1,null);
\r
158 String configDescription = rocketDocument.getRocket().getMotorConfigurationNameOrDescription((String) getGroup(groupPosition));
\r
159 ((TextView)convertView.findViewById(android.R.id.text1)).setText( configDescription );
\r
160 return convertView;
\r
164 public View getChildView(int groupPosition, int childPosition,
\r
165 boolean isLastChild, View convertView, ViewGroup parent) {
\r
166 if ( convertView == null ) {
\r
167 convertView = getActivity().getLayoutInflater().inflate(R.layout.motor_config_item,null);
\r
168 ChildViewHolder holder = new ChildViewHolder();
\r
169 holder.motorMountName = (TextView) convertView.findViewById(R.id.motor_config_motor_mount_name);
\r
170 holder.motorDescription = (Button) convertView.findViewById(R.id.motor_config_motor_desc);
\r
171 holder.motorDelay = (Button) convertView.findViewById(R.id.motor_config_motor_delay);
\r
172 holder.info = (MotorMountInfo) getChild(groupPosition,childPosition);
\r
173 convertView.setTag(holder);
\r
176 ChildViewHolder cvHolder = (ChildViewHolder) convertView.getTag();
\r
178 cvHolder.motorMountName.setText(cvHolder.info.getMotorMountDescription());
\r
179 cvHolder.motorDescription.setOnClickListener( new MotorWizardOnClickListener() );
\r
180 if ( cvHolder.info.motor == null ) {
\r
181 cvHolder.motorDelay.setClickable(false);
\r
182 cvHolder.motorDelay.setOnClickListener(null);
\r
183 cvHolder.motorDescription.setText(R.string.select_motor);
\r
185 cvHolder.motorDelay.setClickable(true);
\r
186 cvHolder.motorDelay.setOnClickListener( new MotorDelayOnClickListener(cvHolder.info.motor) );
\r
187 cvHolder.motorDescription.setText(cvHolder.info.getMotorDescription());
\r
189 if( cvHolder.info.delay >=0 ) {
\r
190 if( cvHolder.info.delay == Motor.PLUGGED ) {
\r
191 cvHolder.motorDelay.setText("P");
\r
193 cvHolder.motorDelay.setText( String.valueOf(Math.round(cvHolder.info.delay)));
\r
196 cvHolder.motorDelay.setText(R.string.select_delay);
\r
199 return convertView;
\r
203 public boolean isChildSelectable(int groupPosition,
\r
204 int childPosition) {
\r
205 // TODO Auto-generated method stub
\r
211 setListAdapter(configurationAdapter);
\r
214 private class MotorWizardOnClickListener implements View.OnClickListener {
\r
216 public void onClick(View v) {
\r
217 final ViewGroup parent = (ViewGroup) v.getParent();
\r
218 final ChildViewHolder cvHolder = (ChildViewHolder) parent.getTag();
\r
219 final MotorListDialogFragment f = new MotorListDialogFragment();
\r
220 f.setMotorSelectedListener( new MotorListDialogFragment.OnMotorSelectedListener() {
\r
223 public void onMotorSelected(long motorId) {
\r
224 DbAdapter mdbHelper = new DbAdapter(getActivity());
\r
227 ExtendedThrustCurveMotor motor = mdbHelper.getMotorDao().fetchMotor(motorId);
\r
228 cvHolder.setMotor( motor );
\r
229 ((BaseExpandableListAdapter)Configurations.this.getExpandableListAdapter()).notifyDataSetInvalidated();
\r
230 } catch (Exception ex) {
\r
231 AndroidLogWrapper.d(Configurations.class, "BlewUp looking for motor", ex);
\r
235 FragmentTransaction ft = getActivity().getSupportFragmentManager().beginTransaction();
\r
241 FragmentTransaction ft = getActivity().getSupportFragmentManager().beginTransaction();
\r
242 ft.add(f, wizardFrag);
\r
248 private class MotorDelayOnClickListener implements View.OnClickListener {
\r
250 double[] standardDelays;
\r
252 public MotorDelayOnClickListener(ExtendedThrustCurveMotor motor) {
\r
254 this.standardDelays = motor.getStandardDelays();
\r
258 public void onClick(View v) {
\r
259 final View parent = (View) v.getParent();
\r
260 final ChildViewHolder cvHolder = (ChildViewHolder) parent.getTag();
\r
261 final MotorDelayDialogFragment f = MotorDelayDialogFragment.newInstance(standardDelays);
\r
262 f.setDelaySelectedListener( new MotorDelayDialogFragment.OnDelaySelectedListener() {
\r
265 public void onDelaySelected(double delay) {
\r
266 cvHolder.setDelay( delay );
\r
267 ((BaseExpandableListAdapter)Configurations.this.getExpandableListAdapter()).notifyDataSetInvalidated();
\r
268 FragmentTransaction ft = getActivity().getSupportFragmentManager().beginTransaction();
\r
274 FragmentTransaction ft = getActivity().getSupportFragmentManager().beginTransaction();
\r
275 ft.add(f, wizardFrag);
\r