--- /dev/null
+package net.sf.openrocket.android.motor;\r
+\r
+import net.sf.openrocket.R;\r
+import net.sf.openrocket.android.db.DbAdapter;\r
+import net.sf.openrocket.android.db.MotorDao;\r
+import net.sf.openrocket.android.util.AndroidLogWrapper;\r
+import net.sf.openrocket.android.util.PersistentExpandableListView;\r
+import android.app.AlertDialog;\r
+import android.app.Dialog;\r
+import android.content.Context;\r
+import android.database.Cursor;\r
+import android.os.Bundle;\r
+import android.view.View;\r
+import android.widget.ExpandableListView;\r
+import android.widget.ResourceCursorTreeAdapter;\r
+import android.widget.TextView;\r
+\r
+import com.actionbarsherlock.app.SherlockDialogFragment;\r
+\r
+public class MotorListDialogFragment extends SherlockDialogFragment \r
+implements ExpandableListView.OnChildClickListener\r
+{\r
+\r
+ public interface OnMotorSelectedListener {\r
+ public void onMotorSelected( long motorId );\r
+ }\r
+\r
+ private final static String groupColumn = MotorDao.DIAMETER;\r
+\r
+ private DbAdapter mDbHelper;\r
+\r
+ private ExpandableListView list;\r
+\r
+ private OnMotorSelectedListener motorSelectedListener;\r
+\r
+ public void setMotorSelectedListener(\r
+ OnMotorSelectedListener motorSelectedListener) {\r
+ this.motorSelectedListener = motorSelectedListener;\r
+ }\r
+\r
+ @Override\r
+ public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) {\r
+ if( motorSelectedListener != null ) {\r
+ motorSelectedListener.onMotorSelected(id);\r
+ }\r
+ return true;\r
+ }\r
+\r
+ @Override\r
+ public Dialog onCreateDialog(Bundle savedInstanceState) {\r
+ AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());\r
+ builder.setTitle("Select Motor");\r
+ list = new PersistentExpandableListView(getActivity());\r
+ list.setOnChildClickListener( this );\r
+ refreshData();\r
+ builder.setView( list );\r
+ return builder.create();\r
+ }\r
+\r
+ @Override\r
+ public void onPause() {\r
+ super.onPause();\r
+ mDbHelper.close();\r
+ }\r
+\r
+ public void refreshData() {\r
+ if ( mDbHelper == null ) {\r
+ mDbHelper = new DbAdapter(getActivity());\r
+ }\r
+ mDbHelper.open();\r
+\r
+ Cursor motorCounter = mDbHelper.getMotorDao().fetchAllMotors();\r
+ int motorCount = motorCounter.getCount();\r
+ motorCounter.close();\r
+ \r
+ if ( motorCount == 0 ) {\r
+ AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());\r
+ builder.setTitle("No Motors Found");\r
+ builder.setMessage("Motors can be downloaded from thrustcurve");\r
+ builder.setCancelable(true);\r
+ AlertDialog dialog = builder.create();\r
+ dialog.setCanceledOnTouchOutside(true);\r
+ dialog.show();\r
+ }\r
+\r
+ Cursor motorCursor = mDbHelper.getMotorDao().fetchGroups(groupColumn);\r
+ MotorHierarchicalListAdapter mAdapter = new MotorHierarchicalListAdapter( \r
+ getActivity(),\r
+ motorCursor,\r
+ R.layout.motor_list_group,\r
+ R.layout.motor_list_child);\r
+ list.setAdapter(mAdapter);\r
+ }\r
+\r
+ public class MotorHierarchicalListAdapter extends ResourceCursorTreeAdapter\r
+ {\r
+\r
+ // Note that the constructor does not take a Cursor. This is done to avoid querying the \r
+ // database on the main thread.\r
+ public MotorHierarchicalListAdapter(Context context, Cursor cursor, int groupLayout,\r
+ int childLayout ) {\r
+\r
+ super(context, cursor, groupLayout, childLayout);\r
+ }\r
+\r
+ @Override\r
+ protected Cursor getChildrenCursor(Cursor arg0) {\r
+ AndroidLogWrapper.d(MotorListFragment.class,"getChildrenCursor");\r
+ String group = arg0.getString(arg0.getColumnIndex(groupColumn));\r
+ Cursor c = mDbHelper.getMotorDao().fetchAllInGroups(groupColumn,group);\r
+ return c;\r
+ }\r
+\r
+ @Override\r
+ public long getGroupId(int groupPosition) {\r
+ return groupPosition;\r
+ }\r
+\r
+ /* (non-Javadoc)\r
+ * @see android.widget.CursorTreeAdapter#bindChildView(android.view.View, android.content.Context, android.database.Cursor, boolean)\r
+ */\r
+ @Override\r
+ protected void bindChildView(View arg0, Context arg1, Cursor arg2,\r
+ boolean arg3) {\r
+\r
+ TextView manu = (TextView) arg0.findViewById(R.id.motorChildManu);\r
+ manu.setText( arg2.getString(arg2.getColumnIndex(MotorDao.MANUFACTURER)));\r
+\r
+ TextView desig = (TextView) arg0.findViewById(R.id.motorChildName);\r
+ desig.setText( arg2.getString(arg2.getColumnIndex(MotorDao.DESIGNATION)));\r
+\r
+ TextView delays = (TextView) arg0.findViewById(R.id.motorChildDelays);\r
+ delays.setText( arg2.getString(arg2.getColumnIndex(MotorDao.DELAYS)));\r
+\r
+ TextView totImpulse = (TextView) arg0.findViewById(R.id.motorChildImpulse);\r
+ totImpulse.setText( arg2.getString(arg2.getColumnIndex(MotorDao.TOTAL_IMPULSE)));\r
+ }\r
+\r
+ /* (non-Javadoc)\r
+ * @see android.widget.CursorTreeAdapter#bindGroupView(android.view.View, android.content.Context, android.database.Cursor, boolean)\r
+ */\r
+ @Override\r
+ protected void bindGroupView(View view, Context context, Cursor cursor,\r
+ boolean isExpanded) {\r
+ TextView v = (TextView) view.findViewById(R.id.motorGroup);\r
+ if ( MotorDao.DIAMETER.equals(groupColumn)) {\r
+ double d = cursor.getDouble( cursor.getColumnIndex(groupColumn));\r
+ v.setText( String.valueOf(Math.round(d * 1000.0)) + " mm");\r
+ } else {\r
+ v.setText( cursor.getString( cursor.getColumnIndex(groupColumn)));\r
+ }\r
+ }\r
+\r
+ }\r
+\r
+\r
+}\r