package net.sf.openrocket.android.rocket;\r
\r
\r
+import java.io.IOException;\r
+\r
import net.sf.openrocket.R;\r
import net.sf.openrocket.android.ActivityHelpers;\r
-import net.sf.openrocket.android.Application;\r
-import net.sf.openrocket.android.actionbarcompat.ActionBarFragmentActivity;\r
+import net.sf.openrocket.android.CurrentRocketHolder;\r
import net.sf.openrocket.android.simulation.SimulationChart;\r
-import net.sf.openrocket.android.simulation.SimulationFragment;\r
import net.sf.openrocket.android.simulation.SimulationViewActivity;\r
+import net.sf.openrocket.android.simulation.SimulationViewFragment;\r
import net.sf.openrocket.android.util.AndroidLogWrapper;\r
+import net.sf.openrocket.document.OpenRocketDocument;\r
import net.sf.openrocket.document.Simulation;\r
import android.app.AlertDialog;\r
import android.content.Intent;\r
import android.support.v4.app.FragmentPagerAdapter;\r
import android.support.v4.app.FragmentTransaction;\r
import android.support.v4.view.ViewPager;\r
-import android.view.Menu;\r
-import android.view.MenuInflater;\r
-import android.view.MenuItem;\r
import android.view.View;\r
\r
-public class OpenRocketViewer extends ActionBarFragmentActivity\r
+import com.actionbarsherlock.view.Menu;\r
+import com.actionbarsherlock.view.MenuInflater;\r
+import com.actionbarsherlock.view.MenuItem;\r
+\r
+public class OpenRocketViewer extends OpenRocketLoaderActivity\r
implements Simulations.OnSimulationSelectedListener\r
{\r
\r
- private Application app;\r
+ private final static int OVERVIEW_POS = 0;\r
+ private final static int COMPONENT_POS = 1;\r
+ private final static int SIMS_POS = 2;\r
+ private final static int CONFIGS_POS = 3;\r
+ private final static int TABSIZE = 4;\r
+\r
+ private OpenRocketViewerPagerAdapter viewPagerAdapter;\r
+ \r
+ private MenuItem saveAction;\r
\r
@Override\r
protected void onCreate(Bundle savedInstanceState) {\r
super.onCreate(savedInstanceState);\r
\r
- app = (Application) this.getApplication();\r
+ // If the application sleeps for a long time, the CurrentRocketHolder might get cleaned\r
+ // up. When this happens, we cannot restore this state, so instead we just\r
+ // go home.\r
+ OpenRocketDocument rocDoc = CurrentRocketHolder.getCurrentRocket().getRocketDocument();\r
+ if ( rocDoc == null ) {\r
+ AndroidLogWrapper.d(OpenRocketViewer.class, "No document - go home");\r
+ ActivityHelpers.goHome(this);\r
+ finish();\r
+ return;\r
+ }\r
+ setTitle(rocDoc.getRocket().getName());\r
+ getSupportActionBar().setHomeButtonEnabled(true);\r
+\r
setContentView(R.layout.openrocketviewer);\r
ViewPager viewPager = (ViewPager)findViewById(R.id.pager);\r
- viewPager.setAdapter( new OpenRocketViewerPager( this.getSupportFragmentManager()));\r
- \r
- setTitle(app.getRocketDocument().getRocket().getName());\r
- \r
- getActionBarHelper().setDisplayHomeAsUpEnabled(true);\r
- \r
+ viewPagerAdapter = new OpenRocketViewerPagerAdapter( this.getSupportFragmentManager() );\r
+ viewPager.setAdapter( viewPagerAdapter );\r
}\r
- \r
+\r
+ @Override\r
+ protected void onPause() {\r
+ CurrentRocketHolder.getCurrentRocket().setHandler(null);\r
+ super.onPause();\r
+ }\r
+\r
+ @Override\r
+ protected void onResume() {\r
+ RocketChangedEventHandler handler = new RocketChangedEventHandler();\r
+ CurrentRocketHolder.getCurrentRocket().setHandler(handler);\r
+ super.onResume();\r
+ }\r
+\r
@Override\r
public boolean onCreateOptionsMenu(Menu menu) {\r
- MenuInflater inflater = getMenuInflater();\r
+ MenuInflater inflater = getSupportMenuInflater();\r
inflater.inflate(R.menu.rocket_viewer_option_menu, menu);\r
+ saveAction = menu.findItem(R.id.menu_save);\r
return true;\r
}\r
\r
public boolean onMenuItemSelected(int featureId, MenuItem item) {\r
AndroidLogWrapper.d(OpenRocketViewer.class,"onMenuItemSelected" + item.getItemId());\r
switch(item.getItemId()) {\r
+ case R.id.menu_load:\r
+ // FIXME - Might want to prompt for save here.\r
+ pickOrkFiles();\r
+ return true;\r
+ case R.id.menu_save:\r
+ // FIXME - Probably want to open a dialog here.\r
+ try {\r
+ CurrentRocketHolder.getCurrentRocket().saveOpenRocketDocument();\r
+ saveAction.setVisible(false);\r
+ invalidateOptionsMenu();\r
+ } catch ( IOException iex ) {\r
+ AndroidLogWrapper.d(OpenRocketViewer.class, iex.getMessage());\r
+ }\r
+ return true;\r
case android.R.id.home:\r
ActivityHelpers.goHome(this);\r
return true;\r
\r
@Override\r
public void onSimulationSelected(int simulationId) {\r
- \r
- Simulation sim = app.getRocketDocument().getSimulation(simulationId);\r
+\r
+ Simulation sim = CurrentRocketHolder.getCurrentRocket().getRocketDocument().getSimulation(simulationId);\r
// Check if there is data for this simulation.\r
- if ( sim.getSimulatedData().getBranchCount() == 0 ) {\r
+ if ( sim.getSimulatedData() == null || sim.getSimulatedData().getBranchCount() == 0 ) {\r
AlertDialog.Builder builder = new AlertDialog.Builder(this);\r
builder.setMessage("The selected simulation does not have saved data.");\r
builder.setCancelable(true);\r
builder.show();\r
return;\r
}\r
- \r
+\r
View sidepane = findViewById(R.id.sidepane);\r
if ( /* if multi pane */ sidepane != null ) {\r
SimulationChart chart = new SimulationChart(simulationId);\r
\r
- Fragment graph = SimulationFragment.newInstance(chart);\r
+ Fragment graph = SimulationViewFragment.newInstance(chart);\r
\r
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();\r
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);\r
}\r
}\r
\r
- private class OpenRocketViewerPager extends FragmentPagerAdapter {\r
+ private class RocketChangedEventHandler extends net.sf.openrocket.android.RocketChangedEventHandler {\r
+ \r
+ @Override\r
+ protected void doSimsChanged() {\r
+ if (saveAction != null ) {\r
+ saveAction.setVisible(true);\r
+ invalidateOptionsMenu();\r
+ }\r
+ Simulations sims = (Simulations) viewPagerAdapter.getFragmentAtPos(SIMS_POS);\r
+ if ( sims != null ) {\r
+ sims.refreshSimulationList();\r
+ }\r
+ }\r
+\r
+ @Override\r
+ protected void doMotorConfigsChanged() {\r
+ if (saveAction != null ) {\r
+ saveAction.setVisible(true);\r
+ invalidateOptionsMenu();\r
+ }\r
+ Configurations configs = (Configurations) viewPagerAdapter.getFragmentAtPos(CONFIGS_POS);\r
+ if ( configs != null ) {\r
+ configs.refreshConfigsList();\r
+ }\r
+ }\r
+\r
+ };\r
+\r
+\r
+ private class OpenRocketViewerPagerAdapter extends FragmentPagerAdapter {\r
\r
- public OpenRocketViewerPager( FragmentManager fm ) {\r
+ public OpenRocketViewerPagerAdapter( FragmentManager fm ) {\r
super(fm);\r
}\r
@Override\r
public int getCount() {\r
- return 3;\r
+ return TABSIZE;\r
}\r
@Override\r
public Fragment getItem( int position ) {\r
switch (position) {\r
- case 0:\r
+ case OVERVIEW_POS:\r
return new Overview();\r
- case 1:\r
+ case COMPONENT_POS:\r
return new Component();\r
- case 2:\r
+ case SIMS_POS:\r
return new Simulations();\r
+ case CONFIGS_POS:\r
+ return new Configurations();\r
}\r
return null;\r
}\r
@Override\r
public CharSequence getPageTitle(int position) {\r
switch (position) {\r
- case 0:\r
+ case OVERVIEW_POS:\r
return "Overview";\r
- case 1:\r
+ case COMPONENT_POS:\r
return "Components";\r
- case 2:\r
+ case SIMS_POS:\r
return "Simulations";\r
+ case CONFIGS_POS:\r
+ return "Configurations";\r
}\r
return null;\r
}\r
+\r
+ public Fragment getFragmentAtPos( int pos ) {\r
+ String tag = "android:switcher:"+R.id.pager+":"+pos;\r
+ Fragment f = OpenRocketViewer.this.getSupportFragmentManager().findFragmentByTag(tag);\r
+ return f;\r
+ }\r
}\r
\r
}\r