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