git-svn-id: https://openrocket.svn.sourceforge.net/svnroot/openrocket/trunk@807 180e2...
[debian/openrocket] / android / src / net / sf / openrocket / android / rocket / OpenRocketViewer.java
index a0de21bfbc0dfde30dd4d6c2564a069611d98f2b..58bb82759458577b5f3ea3069234c930d85358ba 100644 (file)
@@ -5,11 +5,12 @@ import java.io.IOException;
 \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.CurrentRocketHolder;\r
 import net.sf.openrocket.android.simulation.SimulationChart;\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
@@ -21,17 +22,14 @@ import android.support.v4.app.FragmentTransaction;
 import android.support.v4.view.ViewPager;\r
 import android.view.View;\r
 \r
-import com.actionbarsherlock.app.SherlockFragmentActivity;\r
 import com.actionbarsherlock.view.Menu;\r
 import com.actionbarsherlock.view.MenuInflater;\r
 import com.actionbarsherlock.view.MenuItem;\r
 \r
-public class OpenRocketViewer extends SherlockFragmentActivity\r
+public class OpenRocketViewer extends OpenRocketLoaderActivity\r
 implements Simulations.OnSimulationSelectedListener\r
 {\r
 \r
-       private Application app;\r
-\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
@@ -39,34 +37,50 @@ implements Simulations.OnSimulationSelectedListener
        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
-\r
-               setTitle(app.getRocketDocument().getRocket().getName());\r
-               getSupportActionBar().setDisplayHomeAsUpEnabled(true);\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
                viewPagerAdapter = new OpenRocketViewerPagerAdapter( this.getSupportFragmentManager() );\r
                viewPager.setAdapter( viewPagerAdapter );\r
-\r
-               app.setHandler( new RocketChangedEventHandler( ) );\r
        }\r
 \r
        @Override\r
        protected void onPause() {\r
-               app.setHandler(null);\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 = 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
@@ -74,10 +88,16 @@ implements Simulations.OnSimulationSelectedListener
        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
-                               ((Application)getApplication()).saveOpenRocketDocument();\r
+                               CurrentRocketHolder.getCurrentRocket().saveOpenRocketDocument();\r
+                               saveAction.setVisible(false);\r
+                               invalidateOptionsMenu();\r
                        } catch ( IOException iex ) {\r
                                AndroidLogWrapper.d(OpenRocketViewer.class, iex.getMessage());\r
                        }\r
@@ -101,7 +121,7 @@ implements Simulations.OnSimulationSelectedListener
        @Override\r
        public void onSimulationSelected(int simulationId) {\r
 \r
-               Simulation sim = app.getRocketDocument().getSimulation(simulationId);\r
+               Simulation sim = CurrentRocketHolder.getCurrentRocket().getRocketDocument().getSimulation(simulationId);\r
                // Check if there is data for this simulation.\r
                if ( sim.getSimulatedData() == null || sim.getSimulatedData().getBranchCount() == 0 ) {\r
                        AlertDialog.Builder builder = new AlertDialog.Builder(this);\r
@@ -134,10 +154,13 @@ implements Simulations.OnSimulationSelectedListener
        }\r
 \r
        private class RocketChangedEventHandler extends net.sf.openrocket.android.RocketChangedEventHandler {\r
-\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
@@ -146,6 +169,10 @@ implements Simulations.OnSimulationSelectedListener
 \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