Checkpoint commit with many different changes. Made the Configuration and Simulation...
[debian/openrocket] / android / src / net / sf / openrocket / android / rocket / OpenRocketViewer.java
index 7a99eb1dee69abb2afa0e670411289d7106fce7c..a0de21bfbc0dfde30dd4d6c2564a069611d98f2b 100644 (file)
@@ -1,46 +1,44 @@
 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.simulation.SimulationChart;\r
-import net.sf.openrocket.android.simulation.SimulationFragment;\r
 import net.sf.openrocket.android.simulation.SimulationViewActivity;\r
-import net.sf.openrocket.android.util.TabsAdapter;\r
-import net.sf.openrocket.document.OpenRocketDocument;\r
+import net.sf.openrocket.android.simulation.SimulationViewFragment;\r
+import net.sf.openrocket.android.util.AndroidLogWrapper;\r
 import net.sf.openrocket.document.Simulation;\r
-import net.sf.openrocket.rocketcomponent.Configuration;\r
+import android.app.AlertDialog;\r
 import android.content.Intent;\r
-import android.content.SharedPreferences;\r
 import android.os.Bundle;\r
-import android.preference.PreferenceManager;\r
 import android.support.v4.app.Fragment;\r
-import android.support.v4.app.FragmentActivity;\r
+import android.support.v4.app.FragmentManager;\r
+import android.support.v4.app.FragmentPagerAdapter;\r
 import android.support.v4.app.FragmentTransaction;\r
 import android.support.v4.view.ViewPager;\r
-import android.util.Log;\r
-import android.view.Menu;\r
-import android.view.MenuInflater;\r
-import android.view.MenuItem;\r
 import android.view.View;\r
-import android.widget.TabHost;\r
-\r
-public class OpenRocketViewer extends FragmentActivity\r
-implements SharedPreferences.OnSharedPreferenceChangeListener,\r
-Simulations.OnSimulationSelectedListener\r
-{\r
 \r
-       private static final String TAG = "OpenRocketViewer";\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
-       OpenRocketDocument rocketDocument;\r
-       Configuration rocketConfiguration;\r
+public class OpenRocketViewer extends SherlockFragmentActivity\r
+implements Simulations.OnSimulationSelectedListener\r
+{\r
 \r
        private Application app;\r
 \r
-       TabHost mTabHost;\r
-       ViewPager  mViewPager;\r
-       TabsAdapter mTabsAdapter;\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
        @Override\r
        protected void onCreate(Bundle savedInstanceState) {\r
@@ -48,74 +46,76 @@ Simulations.OnSimulationSelectedListener
 \r
                app = (Application) this.getApplication();\r
 \r
-               setContentView(R.layout.openrocketviewer);\r
-\r
-               SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);\r
-               prefs.registerOnSharedPreferenceChangeListener(this);\r
-\r
-               mTabHost = (TabHost)findViewById(android.R.id.tabhost);\r
-               mTabHost.setup();\r
-\r
-               mViewPager = (ViewPager)findViewById(R.id.pager);\r
-\r
-               mTabsAdapter = new TabsAdapter(this, mTabHost, mViewPager);\r
+               setTitle(app.getRocketDocument().getRocket().getName());\r
+               getSupportActionBar().setDisplayHomeAsUpEnabled(true);\r
 \r
-               mTabsAdapter.addTab(mTabHost.newTabSpec("overview").setIndicator("Overview"),\r
-                               Overview.class, null);\r
-               mTabsAdapter.addTab(mTabHost.newTabSpec("components").setIndicator("Components"),\r
-                               Component.class, null);\r
-               mTabsAdapter.addTab(mTabHost.newTabSpec("simulations").setIndicator("Simulations"),\r
-                               Simulations.class, null);\r
-\r
-               if (savedInstanceState != null) {\r
-                       mTabHost.setCurrentTabByTag(savedInstanceState.getString("tab"));\r
-               }\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
-       @Override\r
-       protected void onSaveInstanceState(Bundle outState) {\r
-               super.onSaveInstanceState(outState);\r
-               outState.putString("tab", mTabHost.getCurrentTabTag());\r
+               app.setHandler( new RocketChangedEventHandler( ) );\r
        }\r
 \r
-       /* (non-Javadoc)\r
-        * @see android.content.SharedPreferences.OnSharedPreferenceChangeListener#onSharedPreferenceChanged(android.content.SharedPreferences, java.lang.String)\r
-        */\r
        @Override\r
-       public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {\r
-               // just in case the user changed the units, we redraw.\r
-               //      TODO =  updateContents();  redraw all children..\r
+       protected void onPause() {\r
+               app.setHandler(null);\r
+               super.onPause();\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
                return true;\r
        }\r
 \r
        @Override\r
        public boolean onMenuItemSelected(int featureId, MenuItem item) {\r
-               Log.d(TAG,"onMenuItemSelected" + item.getItemId());\r
+               AndroidLogWrapper.d(OpenRocketViewer.class,"onMenuItemSelected" + item.getItemId());\r
                switch(item.getItemId()) {\r
+               case R.id.menu_save:\r
+                       // FIXME - Probably want to open a dialog here.\r
+                       try {\r
+                               ((Application)getApplication()).saveOpenRocketDocument();\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
                case R.id.motor_list_menu_option:\r
                        ActivityHelpers.browseMotors(this);\r
                        return true;\r
                case R.id.preference_menu_option:\r
                        ActivityHelpers.startPreferences(this);\r
                        return true;\r
+               case R.id.menu_about:\r
+                       ActivityHelpers.showAbout(this);\r
+                       return true;\r
                }\r
                return super.onMenuItemSelected(featureId, item);\r
        }\r
 \r
        @Override\r
        public void onSimulationSelected(int simulationId) {\r
+\r
+               Simulation sim = app.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
+                       builder.setMessage("The selected simulation does not have saved data.");\r
+                       builder.setCancelable(true);\r
+                       builder.show();\r
+                       return;\r
+               }\r
+\r
                View sidepane = findViewById(R.id.sidepane);\r
                if ( /* if multi pane */ sidepane != null ) {\r
-                       Simulation sim = app.getRocketDocument().getSimulation(simulationId);\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
@@ -133,4 +133,71 @@ Simulations.OnSimulationSelectedListener
                }\r
        }\r
 \r
+       private class RocketChangedEventHandler extends net.sf.openrocket.android.RocketChangedEventHandler {\r
+\r
+               \r
+               @Override\r
+               protected void doSimsChanged() {\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
+                       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 OpenRocketViewerPagerAdapter( FragmentManager fm ) {\r
+                       super(fm);\r
+               }\r
+               @Override\r
+               public int getCount() {\r
+                       return TABSIZE;\r
+               }\r
+               @Override\r
+               public Fragment getItem( int position ) {\r
+                       switch (position) {\r
+                       case OVERVIEW_POS:\r
+                               return new Overview();\r
+                       case COMPONENT_POS:\r
+                               return new Component();\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 OVERVIEW_POS:\r
+                               return "Overview";\r
+                       case COMPONENT_POS:\r
+                               return "Components";\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