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