package net.sf.openrocket.android.simulation; import net.sf.openrocket.R; import net.sf.openrocket.android.CurrentRocketHolder; import net.sf.openrocket.android.util.AndroidLogWrapper; import net.sf.openrocket.document.OpenRocketDocument; import net.sf.openrocket.document.Simulation; import android.app.Activity; import android.content.SharedPreferences; import android.os.Bundle; import android.preference.PreferenceManager; import android.support.v4.app.FragmentTransaction; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.AdapterView.OnItemLongClickListener; import android.widget.ArrayAdapter; import android.widget.ListView; import com.actionbarsherlock.app.SherlockFragment; import com.actionbarsherlock.view.Menu; import com.actionbarsherlock.view.MenuInflater; import com.actionbarsherlock.view.MenuItem; public class Simulations extends SherlockFragment implements SharedPreferences.OnSharedPreferenceChangeListener { private final static String wizardFrag = "wizardFrag"; public interface OnSimulationSelectedListener { public void onSimulationSelected( int simulationId ); } private ListView simulationList; private OnSimulationSelectedListener listener; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { setHasOptionsMenu(true); View v = inflater.inflate(R.layout.rocket_simulations, container, false); simulationList = (ListView) v.findViewById(R.id.openrocketviewerSimulationList); return v; } @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { inflater.inflate(R.menu.rocket_viewer_simulation_option_menu, menu); } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.menu_add: addSimulation(); return true; default: return super.onOptionsItemSelected(item); } } @Override public void onAttach(Activity activity) { super.onAttach(activity); if ( activity instanceof OnSimulationSelectedListener ) { listener = (OnSimulationSelectedListener) activity; } } public void setListener(OnSimulationSelectedListener listener) { this.listener = listener; } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity()); prefs.registerOnSharedPreferenceChangeListener(this); } @Override public void onResume() { super.onResume(); setup(); } @Override public void onDestroy() { super.onDestroy(); SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity()); prefs.unregisterOnSharedPreferenceChangeListener(this); } @Override public void onSharedPreferenceChanged(SharedPreferences arg0, String arg1) { if ( this.isVisible() ) { setup(); } } public void refreshSimulationList() { setup(); } private void setup() { final OpenRocketDocument rocketDocument = CurrentRocketHolder.getCurrentRocket().getRocketDocument(); AndroidLogWrapper.d(Simulations.class,"activity = {0}", this.getActivity()); ArrayAdapter<Simulation> sims = new ArrayAdapter<Simulation>(this.getActivity(),android.R.layout.simple_list_item_2,rocketDocument.getSimulations()) { @Override public View getView(int position, View convertView, ViewGroup parent) { SimulationListItem listItemView = (SimulationListItem) convertView; if (listItemView == null) { listItemView = new SimulationListItem(parent.getContext()); } Simulation sim = this.getItem(position); listItemView.setSimulation(sim); return listItemView; } }; simulationList.setOnItemClickListener( new OnItemClickListener() { @Override public void onItemClick(AdapterView l, View v, int position, long id) { Simulation sim = CurrentRocketHolder.getCurrentRocket().getRocketDocument().getSimulation(position); // Check if there is data for this simulation. if ( sim.getSimulatedData() == null || sim.getSimulatedData().getBranchCount() == 0 ) { openEditor(position); } else if (listener != null ) { listener.onSimulationSelected(position); } } }); simulationList.setOnItemLongClickListener( new OnItemLongClickListener() { @Override public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) { openEditor(position); return true; } }); simulationList.setAdapter(sims); } private void openEditor( int position ) { final SimulationEditFragment f = SimulationEditFragment.newInstance(position); FragmentTransaction ft = getActivity().getSupportFragmentManager().beginTransaction(); ft.add(f, wizardFrag); ft.commit(); } private void addSimulation() { CurrentRocketHolder.getCurrentRocket().addNewSimulation(getActivity()); } }