package net.sf.openrocket.android.simulation;
import java.util.ArrayList;
import java.util.List;
import net.sf.openrocket.R;
import net.sf.openrocket.android.CurrentRocketHolder;
import net.sf.openrocket.document.OpenRocketDocument;
import net.sf.openrocket.simulation.FlightDataBranch;
import net.sf.openrocket.simulation.FlightDataType;
import net.sf.openrocket.simulation.FlightEvent;
import android.app.AlertDialog;
import android.app.Dialog;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.util.SparseBooleanArray;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.Spinner;
import android.widget.TextView;
public class SimulationPlotConfigDialog extends DialogFragment {
public interface OnConfirmListener {
public void onConfirm();
}
private ListView eventList;
private Spinner series1Spinner;
private Spinner series2Spinner;
private SimulationChart chart;
private OnConfirmListener listener;
public static SimulationPlotConfigDialog newInstance( SimulationChart chart ) {
SimulationPlotConfigDialog d = new SimulationPlotConfigDialog();
d.chart = chart;
return d;
}
public void setOnConfirmListener(OnConfirmListener listener) {
this.listener = listener;
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
if (savedInstanceState != null ) {
chart = (SimulationChart) savedInstanceState.getSerializable("chart");
}
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle(R.string.simulationPlotDialogTitle);
final LayoutInflater inflater = getActivity().getLayoutInflater();
View v = inflater.inflate(R.layout.simulation_plot_config_dialog, null);
builder.setView(v);
OpenRocketDocument rocketDocument = CurrentRocketHolder.getCurrentRocket().getRocketDocument();
Button okButton = (Button) v.findViewById(R.id.simulationOkButton);
okButton.setOnClickListener( new View.OnClickListener() {
@Override
public void onClick(View v) {
List<FlightEvent> eventsToShow = new ArrayList<FlightEvent>();
{
SparseBooleanArray eventsSelected = eventList.getCheckedItemPositions();
List<FlightEvent> flightEvents = chart.getFlightDataBranch(CurrentRocketHolder.getCurrentRocket().getRocketDocument()).getEvents();
for( int i=0; i< flightEvents.size(); i++ ) {
if ( eventsSelected.get(i) ) {
FlightEvent event = flightEvents.get(i);
eventsToShow.add( event );
}
}
}
chart.setEvents(eventsToShow);
chart.setSeries1((FlightDataType)series1Spinner.getSelectedItem());
chart.setSeries2((FlightDataType)series2Spinner.getSelectedItem());
if ( listener != null ) {
listener.onConfirm();
}
SimulationPlotConfigDialog.this.dismiss();
}
});
series1Spinner = (Spinner) v.findViewById(R.id.simulationSeries1);
series2Spinner = (Spinner) v.findViewById(R.id.simulationSeries2);
List<FlightDataType> selectableSeries = new ArrayList<FlightDataType>();
int index = 0;
for( FlightDataType fdt : chart.getFlightDataBranch(rocketDocument).getTypes() ) {
if ( fdt == FlightDataType.TYPE_TIME ) {
} else {
selectableSeries.add(fdt);
}
index++;
}
ArrayAdapter<FlightDataType> serieses = new ArrayAdapter<FlightDataType>(getActivity(),android.R.layout.simple_spinner_item,selectableSeries) {
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
if ( v == null ) {
LayoutInflater li = inflater;
v = li.inflate(android.R.layout.simple_spinner_item,null);
}
FlightDataType fdt = this.getItem(position);
((TextView)v.findViewById(android.R.id.text1)).setText( fdt.toString() );
return v;
}
};
series1Spinner.setAdapter(serieses);
int selection1 = serieses.getPosition(chart.getSeries1());
series1Spinner.setSelection(selection1);
series2Spinner.setAdapter(serieses);
int selection2 = serieses.getPosition(chart.getSeries2());
series2Spinner.setSelection(selection2);
eventList = (ListView) v.findViewById(R.id.simulationEventsList);
FlightDataBranch data = chart.getFlightDataBranch(CurrentRocketHolder.getCurrentRocket().getRocketDocument());
// Initialize the eventList
ArrayAdapter<FlightEvent> events = new ArrayAdapter<FlightEvent>(getActivity(),android.R.layout.simple_list_item_1,data.getEvents()) {
@Override
public View getView(int position, View convertView,
ViewGroup parent) {
View v = convertView;
if ( v == null ) {
LayoutInflater li = inflater;
v = li.inflate(android.R.layout.simple_list_item_multiple_choice,null);
}
FlightEvent event = this.getItem(position);
((TextView)v.findViewById(android.R.id.text1)).setText( event.getType().toString() + " " + event.getTime() + " (s)" );
return v;
}
};
eventList.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
eventList.setAdapter(events);
for( FlightEvent evt : chart.getEvents() ) {
eventList.setItemChecked( events.getPosition(evt), true);
}
return builder.create();
}
@Override
public void onSaveInstanceState(Bundle arg0) {
super.onSaveInstanceState(arg0);
arg0.putSerializable("chart", chart);
}
}