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