create changelog entry
[debian/openrocket] / android / src / net / sf / openrocket / android / motor / MotorListDialogFragment.java
1 package net.sf.openrocket.android.motor;\r
2 \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
17 \r
18 import com.actionbarsherlock.app.SherlockDialogFragment;\r
19 \r
20 public class MotorListDialogFragment extends SherlockDialogFragment \r
21 implements ExpandableListView.OnChildClickListener\r
22 {\r
23 \r
24         public interface OnMotorSelectedListener {\r
25                 public void onMotorSelected( long motorId );\r
26         }\r
27 \r
28         private final static String groupColumn = MotorDao.DIAMETER;\r
29 \r
30         private DbAdapter mDbHelper;\r
31 \r
32         private ExpandableListView list;\r
33 \r
34         private OnMotorSelectedListener motorSelectedListener;\r
35 \r
36         public void setMotorSelectedListener(\r
37                         OnMotorSelectedListener motorSelectedListener) {\r
38                 this.motorSelectedListener = motorSelectedListener;\r
39         }\r
40 \r
41         @Override\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
45                 }\r
46                 return true;\r
47         }\r
48 \r
49         @Override\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
55                 refreshData();\r
56                 builder.setView( list );\r
57                 return builder.create();\r
58         }\r
59 \r
60         @Override\r
61         public void onPause() {\r
62                 super.onPause();\r
63                 mDbHelper.close();\r
64         }\r
65 \r
66         public void refreshData() {\r
67                 if ( mDbHelper == null ) {\r
68                         mDbHelper = new DbAdapter(getActivity());\r
69                 }\r
70                 mDbHelper.open();\r
71 \r
72                 Cursor motorCounter = mDbHelper.getMotorDao().fetchAllMotors();\r
73                 int motorCount = motorCounter.getCount();\r
74                 motorCounter.close();\r
75                 \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
83                         dialog.show();\r
84                 }\r
85 \r
86                 Cursor motorCursor = mDbHelper.getMotorDao().fetchGroups(groupColumn);\r
87                 MotorHierarchicalListAdapter mAdapter = new MotorHierarchicalListAdapter( \r
88                                 getActivity(),\r
89                                 motorCursor,\r
90                                 R.layout.motor_list_group,\r
91                                 R.layout.motor_list_child);\r
92                 list.setAdapter(mAdapter);\r
93         }\r
94 \r
95         public class MotorHierarchicalListAdapter extends ResourceCursorTreeAdapter\r
96         {\r
97 \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
102 \r
103                         super(context, cursor, groupLayout, childLayout);\r
104                 }\r
105 \r
106                 @Override\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
111                         return c;\r
112                 }\r
113 \r
114                 @Override\r
115                 public long getGroupId(int groupPosition) {\r
116                         return groupPosition;\r
117                 }\r
118 \r
119                 /* (non-Javadoc)\r
120                  * @see android.widget.CursorTreeAdapter#bindChildView(android.view.View, android.content.Context, android.database.Cursor, boolean)\r
121                  */\r
122                 @Override\r
123                 protected void bindChildView(View arg0, Context arg1, Cursor arg2,\r
124                                 boolean arg3) {\r
125 \r
126                         TextView manu = (TextView) arg0.findViewById(R.id.motorChildManu);\r
127                         manu.setText( arg2.getString(arg2.getColumnIndex(MotorDao.MANUFACTURER)));\r
128 \r
129                         TextView desig = (TextView) arg0.findViewById(R.id.motorChildName);\r
130                         desig.setText( arg2.getString(arg2.getColumnIndex(MotorDao.DESIGNATION)));\r
131 \r
132                         TextView delays = (TextView) arg0.findViewById(R.id.motorChildDelays);\r
133                         delays.setText( arg2.getString(arg2.getColumnIndex(MotorDao.DELAYS)));\r
134 \r
135                         TextView totImpulse = (TextView) arg0.findViewById(R.id.motorChildImpulse);\r
136                         totImpulse.setText( arg2.getString(arg2.getColumnIndex(MotorDao.TOTAL_IMPULSE)));\r
137                 }\r
138 \r
139                 /* (non-Javadoc)\r
140                  * @see android.widget.CursorTreeAdapter#bindGroupView(android.view.View, android.content.Context, android.database.Cursor, boolean)\r
141                  */\r
142                 @Override\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
149                         } else {\r
150                                 v.setText( cursor.getString( cursor.getColumnIndex(groupColumn)));\r
151                         }\r
152                 }\r
153 \r
154         }\r
155 \r
156 \r
157 }\r