package net.sf.openrocket.android.simulation;
import net.sf.openrocket.R;
import net.sf.openrocket.android.CurrentRocketHolder;
import net.sf.openrocket.android.rocket.MotorConfigSpinner;
import net.sf.openrocket.android.simservice.SimulationService;
import net.sf.openrocket.android.simservice.SimulationTask;
import net.sf.openrocket.document.OpenRocketDocument;
import net.sf.openrocket.document.Simulation;
import net.sf.openrocket.simulation.SimulationOptions;
import net.sf.openrocket.unit.UnitGroup;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import com.actionbarsherlock.app.SherlockDialogFragment;
/**
* An activity that encapsulates a graphical view of the chart.
*/
public class SimulationEditFragment extends SherlockDialogFragment {
private int simulationId;
private EditText windspeedField;
private EditText rodlengthField;
private EditText rodangleField;
private EditText roddirectionField;
private MotorConfigSpinner motorSpinner;
public static SimulationEditFragment newInstance( int simulationId ) {
SimulationEditFragment frag = new SimulationEditFragment();
Bundle b = new Bundle();
b.putInt("simulationId", simulationId);
frag.setArguments(b);
return frag;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setStyle(DialogFragment.STYLE_NO_TITLE,getTheme());
if ( savedInstanceState != null ) {
simulationId = savedInstanceState.getInt("simulationId");
} else {
Bundle b = getArguments();
simulationId = b.getInt("simulationId");
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.simulation_condition_dialog, container, false);
Button deleteButton = (Button) v.findViewById(R.id.simulationConditionDelete);
deleteButton.setOnClickListener( new OnClickListener() {
@Override
public void onClick(View v) {
onDelete();
}
});
Button runButton = (Button) v.findViewById(R.id.simulationConditionRun);
runButton.setOnClickListener( new OnClickListener() {
@Override
public void onClick(View v) {
onRun();
}
});
windspeedField = (EditText) v.findViewById(R.id.simulation_condition_windspeed);
rodlengthField = (EditText) v.findViewById(R.id.simulation_condition_rodlength);
rodangleField = (EditText) v.findViewById(R.id.simulation_condition_rodangle);
roddirectionField = (EditText) v.findViewById(R.id.simulation_condition_roddirection);
motorSpinner = (MotorConfigSpinner) v.findViewById(R.id.simulationConditionConfigurationSpinner);
OpenRocketDocument rocketDocument = CurrentRocketHolder.getCurrentRocket().getRocketDocument();
motorSpinner.createAdapter(rocketDocument.getRocket());
Simulation sim = rocketDocument.getSimulation(simulationId);
SimulationOptions options = sim.getOptions();
if ( options != null ) {
windspeedField.setText( UnitGroup.UNITS_VELOCITY.toString( options.getWindSpeedAverage() ));
rodlengthField.setText( UnitGroup.UNITS_LENGTH.toString( options.getLaunchRodLength() ));
rodangleField.setText( UnitGroup.UNITS_ANGLE.toString( options.getLaunchRodAngle() ));
roddirectionField.setText( UnitGroup.UNITS_ANGLE.toString( options.getLaunchRodDirection() ));
motorSpinner.setSelectedConfiguration(options.getMotorConfigurationID());
}
return v;
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putInt("simulationId", simulationId);
}
public void onDelete( ) {
CurrentRocketHolder.getCurrentRocket().deleteSimulation(getActivity(), simulationId);
getDialog().dismiss();
}
public void onRun() {
OpenRocketDocument rocketDocument = CurrentRocketHolder.getCurrentRocket().getRocketDocument();
Simulation sim = rocketDocument.getSimulation(simulationId);
SimulationOptions options = sim.getOptions();
options.setWindSpeedAverage( UnitGroup.UNITS_VELOCITY.fromUnit(Double.parseDouble( windspeedField.getText().toString() )));
options.setLaunchRodLength( UnitGroup.UNITS_LENGTH.fromUnit(Double.parseDouble( rodlengthField.getText().toString() )));
options.setLaunchRodAngle( UnitGroup.UNITS_ANGLE.fromUnit(Double.parseDouble( rodangleField.getText().toString() )));
options.setLaunchRodDirection( UnitGroup.UNITS_ANGLE.fromUnit(Double.parseDouble( roddirectionField.getText().toString() )));
options.setMotorConfigurationID( motorSpinner.getSelectedConfiguration() );
SimulationTask t = new SimulationTask(simulationId);
SimulationService.executeSimulationTask(getActivity(), t);
getDialog().dismiss();
}
}