Merge commit '42b2e5ca519766e37ce6941ba4faecc9691cc403' into upstream
[debian/openrocket] / android / src / net / sf / openrocket / android / motor / MotorListDialogFragment.java
diff --git a/android/src/net/sf/openrocket/android/motor/MotorListDialogFragment.java b/android/src/net/sf/openrocket/android/motor/MotorListDialogFragment.java
new file mode 100644 (file)
index 0000000..680e577
--- /dev/null
@@ -0,0 +1,157 @@
+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