--- /dev/null
+package net.sf.openrocket.android.simulation;\r
+\r
+\r
+import net.sf.openrocket.R;\r
+import net.sf.openrocket.document.Simulation;\r
+import net.sf.openrocket.document.Simulation.Status;\r
+import net.sf.openrocket.simulation.FlightData;\r
+import net.sf.openrocket.unit.Unit;\r
+import net.sf.openrocket.unit.UnitGroup;\r
+import android.content.Context;\r
+import android.util.AttributeSet;\r
+import android.view.LayoutInflater;\r
+import android.widget.LinearLayout;\r
+import android.widget.TextView;\r
+\r
+public class SimulationListItem extends LinearLayout {\r
+\r
+ private int[] SIMULATION_INVALID = { R.attr.simulation_invalid };\r
+ private int[] SIMULATION_STALE = { R.attr.simulation_stale };\r
+ \r
+ private TextView text1;\r
+ private TextView text2;\r
+ private Status simStatus;\r
+ \r
+ public SimulationListItem(Context context, AttributeSet attrs, int defStyle) {\r
+ super(context, attrs, defStyle);\r
+ loadViews();\r
+ }\r
+\r
+ public SimulationListItem(Context context, AttributeSet attrs) {\r
+ super(context, attrs);\r
+ loadViews();\r
+ }\r
+\r
+ public SimulationListItem(Context context) {\r
+ this(context, null);\r
+ }\r
+\r
+ public void setSimulation(Simulation sim) {\r
+\r
+ text1.setText( sim.getName() );\r
+\r
+ StringBuilder sb = new StringBuilder();\r
+ String motorConfig = sim.getOptions().getMotorConfigurationID();\r
+ sb.append("motors: ").append(sim.getRocket().getMotorConfigurationNameOrDescription(motorConfig));\r
+ Unit distanceUnit = UnitGroup.UNITS_DISTANCE.getDefaultUnit();\r
+ FlightData flightData = sim.getSimulatedData();\r
+ if ( flightData != null ) {\r
+ sb.append(" apogee: ").append( distanceUnit.toStringUnit(flightData.getMaxAltitude()));\r
+ sb.append(" time: ").append(flightData.getFlightTime()).append("s");\r
+ } else {\r
+ sb.append(" No simulation data");\r
+ }\r
+ text2.setText( sb.toString() );\r
+ \r
+ simStatus = sim.getStatus();\r
+\r
+ // Refresh the drawable state so that it includes the status if required.\r
+ refreshDrawableState();\r
+\r
+ }\r
+\r
+ private void loadViews() {\r
+ this.setOrientation(LinearLayout.HORIZONTAL);\r
+ \r
+ LayoutInflater layoutInflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);\r
+ layoutInflater.inflate(R.layout.simulation_list_item, this, true);\r
+\r
+ // setPadding(fiveDPInPixels, fiveDPInPixels, fiveDPInPixels, fiveDPInPixels);\r
+ // setLayoutParams(new AbsListView.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, fiftyDPInPixels));\r
+ // setBackgroundResource(R.drawable.message_list_item_background);\r
+\r
+ text1 = (TextView) findViewById(android.R.id.text1);\r
+ text2 = (TextView) findViewById(android.R.id.text2);\r
+ }\r
+\r
+ @Override\r
+ protected int[] onCreateDrawableState(int extraSpace) {\r
+ // We are going to add extra state.\r
+ final int[] drawableState = super.onCreateDrawableState(extraSpace + 1);\r
+ if ( simStatus == Status.OUTDATED || simStatus == Status.NOT_SIMULATED ) {\r
+ return mergeDrawableStates(drawableState, SIMULATION_INVALID );\r
+ \r
+ } else if ( simStatus == Status.LOADED || simStatus == Status.EXTERNAL ) {\r
+ return mergeDrawableStates(drawableState, SIMULATION_STALE);\r
+ } else {\r
+ return super.onCreateDrawableState(extraSpace);\r
+ }\r
+ }\r
+\r
+}\r