1 package net.sf.openrocket.android.motor;
\r
3 import net.sf.openrocket.R;
\r
4 import net.sf.openrocket.android.db.DbAdapter;
\r
5 import net.sf.openrocket.android.db.MotorDao;
\r
6 import net.sf.openrocket.android.util.AndroidLogWrapper;
\r
7 import net.sf.openrocket.android.util.PersistentExpandableListView;
\r
8 import android.app.AlertDialog;
\r
9 import android.app.Dialog;
\r
10 import android.content.Context;
\r
11 import android.database.Cursor;
\r
12 import android.os.Bundle;
\r
13 import android.view.View;
\r
14 import android.widget.ExpandableListView;
\r
15 import android.widget.ResourceCursorTreeAdapter;
\r
16 import android.widget.TextView;
\r
18 import com.actionbarsherlock.app.SherlockDialogFragment;
\r
20 public class MotorListDialogFragment extends SherlockDialogFragment
\r
21 implements ExpandableListView.OnChildClickListener
\r
24 public interface OnMotorSelectedListener {
\r
25 public void onMotorSelected( long motorId );
\r
28 private final static String groupColumn = MotorDao.DIAMETER;
\r
30 private DbAdapter mDbHelper;
\r
32 private ExpandableListView list;
\r
34 private OnMotorSelectedListener motorSelectedListener;
\r
36 public void setMotorSelectedListener(
\r
37 OnMotorSelectedListener motorSelectedListener) {
\r
38 this.motorSelectedListener = motorSelectedListener;
\r
42 public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) {
\r
43 if( motorSelectedListener != null ) {
\r
44 motorSelectedListener.onMotorSelected(id);
\r
50 public Dialog onCreateDialog(Bundle savedInstanceState) {
\r
51 AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
\r
52 builder.setTitle("Select Motor");
\r
53 list = new PersistentExpandableListView(getActivity());
\r
54 list.setOnChildClickListener( this );
\r
56 builder.setView( list );
\r
57 return builder.create();
\r
61 public void onPause() {
\r
66 public void refreshData() {
\r
67 if ( mDbHelper == null ) {
\r
68 mDbHelper = new DbAdapter(getActivity());
\r
72 Cursor motorCounter = mDbHelper.getMotorDao().fetchAllMotors();
\r
73 int motorCount = motorCounter.getCount();
\r
74 motorCounter.close();
\r
76 if ( motorCount == 0 ) {
\r
77 AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
\r
78 builder.setTitle("No Motors Found");
\r
79 builder.setMessage("Motors can be downloaded from thrustcurve");
\r
80 builder.setCancelable(true);
\r
81 AlertDialog dialog = builder.create();
\r
82 dialog.setCanceledOnTouchOutside(true);
\r
86 Cursor motorCursor = mDbHelper.getMotorDao().fetchGroups(groupColumn);
\r
87 MotorHierarchicalListAdapter mAdapter = new MotorHierarchicalListAdapter(
\r
90 R.layout.motor_list_group,
\r
91 R.layout.motor_list_child);
\r
92 list.setAdapter(mAdapter);
\r
95 public class MotorHierarchicalListAdapter extends ResourceCursorTreeAdapter
\r
98 // Note that the constructor does not take a Cursor. This is done to avoid querying the
\r
99 // database on the main thread.
\r
100 public MotorHierarchicalListAdapter(Context context, Cursor cursor, int groupLayout,
\r
101 int childLayout ) {
\r
103 super(context, cursor, groupLayout, childLayout);
\r
107 protected Cursor getChildrenCursor(Cursor arg0) {
\r
108 AndroidLogWrapper.d(MotorListFragment.class,"getChildrenCursor");
\r
109 String group = arg0.getString(arg0.getColumnIndex(groupColumn));
\r
110 Cursor c = mDbHelper.getMotorDao().fetchAllInGroups(groupColumn,group);
\r
115 public long getGroupId(int groupPosition) {
\r
116 return groupPosition;
\r
120 * @see android.widget.CursorTreeAdapter#bindChildView(android.view.View, android.content.Context, android.database.Cursor, boolean)
\r
123 protected void bindChildView(View arg0, Context arg1, Cursor arg2,
\r
126 TextView manu = (TextView) arg0.findViewById(R.id.motorChildManu);
\r
127 manu.setText( arg2.getString(arg2.getColumnIndex(MotorDao.MANUFACTURER)));
\r
129 TextView desig = (TextView) arg0.findViewById(R.id.motorChildName);
\r
130 desig.setText( arg2.getString(arg2.getColumnIndex(MotorDao.DESIGNATION)));
\r
132 TextView delays = (TextView) arg0.findViewById(R.id.motorChildDelays);
\r
133 delays.setText( arg2.getString(arg2.getColumnIndex(MotorDao.DELAYS)));
\r
135 TextView totImpulse = (TextView) arg0.findViewById(R.id.motorChildImpulse);
\r
136 totImpulse.setText( arg2.getString(arg2.getColumnIndex(MotorDao.TOTAL_IMPULSE)));
\r
140 * @see android.widget.CursorTreeAdapter#bindGroupView(android.view.View, android.content.Context, android.database.Cursor, boolean)
\r
143 protected void bindGroupView(View view, Context context, Cursor cursor,
\r
144 boolean isExpanded) {
\r
145 TextView v = (TextView) view.findViewById(R.id.motorGroup);
\r
146 if ( MotorDao.DIAMETER.equals(groupColumn)) {
\r
147 double d = cursor.getDouble( cursor.getColumnIndex(groupColumn));
\r
148 v.setText( String.valueOf(Math.round(d * 1000.0)) + " mm");
\r
150 v.setText( cursor.getString( cursor.getColumnIndex(groupColumn)));
\r