Various fixes which should probably be broken into multiple commits:)
[debian/openrocket] / android / src / net / sf / openrocket / android / rocket / OpenRocketViewer.java
1 package net.sf.openrocket.android.rocket;\r
2 \r
3 \r
4 import net.sf.openrocket.R;\r
5 import net.sf.openrocket.android.ActivityHelpers;\r
6 import net.sf.openrocket.android.CurrentRocketHolder;\r
7 import net.sf.openrocket.android.simulation.SimulationChart;\r
8 import net.sf.openrocket.android.simulation.SimulationViewActivity;\r
9 import net.sf.openrocket.android.simulation.SimulationViewFragment;\r
10 import net.sf.openrocket.android.util.AndroidLogWrapper;\r
11 import net.sf.openrocket.document.OpenRocketDocument;\r
12 import net.sf.openrocket.document.Simulation;\r
13 import android.app.AlertDialog;\r
14 import android.content.Intent;\r
15 import android.os.Bundle;\r
16 import android.support.v4.app.Fragment;\r
17 import android.support.v4.app.FragmentManager;\r
18 import android.support.v4.app.FragmentPagerAdapter;\r
19 import android.support.v4.app.FragmentTransaction;\r
20 import android.support.v4.view.ViewPager;\r
21 import android.view.View;\r
22 \r
23 import com.actionbarsherlock.view.Menu;\r
24 import com.actionbarsherlock.view.MenuInflater;\r
25 import com.actionbarsherlock.view.MenuItem;\r
26 \r
27 public class OpenRocketViewer extends OpenRocketLoaderActivity\r
28 implements Simulations.OnSimulationSelectedListener\r
29 {\r
30 \r
31         private final static int OVERVIEW_POS = 0;\r
32         private final static int COMPONENT_POS = 1;\r
33         private final static int SIMS_POS = 2;\r
34         private final static int CONFIGS_POS = 3;\r
35         private final static int TABSIZE = 4;\r
36 \r
37         private OpenRocketViewerPagerAdapter viewPagerAdapter;\r
38 \r
39         @Override\r
40         protected void onCreate(Bundle savedInstanceState) {\r
41                 super.onCreate(savedInstanceState);\r
42 \r
43                 // If the application sleeps for a long time, the CurrentRocketHolder might get cleaned\r
44                 // up.  When this happens, we cannot restore this state, so instead we just\r
45                 // go home.\r
46                 OpenRocketDocument rocDoc = CurrentRocketHolder.getCurrentRocket().getRocketDocument();\r
47                 if ( rocDoc == null ) {\r
48                         AndroidLogWrapper.d(OpenRocketViewer.class, "No document - go home");\r
49                         ActivityHelpers.goHome(this);\r
50                         finish();\r
51                         return;\r
52                 }\r
53                 setTitle(rocDoc.getRocket().getName());\r
54                 getSupportActionBar().setHomeButtonEnabled(true);\r
55 \r
56                 setContentView(R.layout.openrocketviewer);\r
57                 ViewPager viewPager = (ViewPager)findViewById(R.id.pager);\r
58                 viewPagerAdapter = new OpenRocketViewerPagerAdapter( this.getSupportFragmentManager() );\r
59                 viewPager.setAdapter( viewPagerAdapter );\r
60         }\r
61 \r
62         @Override\r
63         protected void onPause() {\r
64                 CurrentRocketHolder.getCurrentRocket().setHandler(null);\r
65                 super.onPause();\r
66         }\r
67 \r
68         @Override\r
69         protected void onResume() {\r
70                 RocketChangedEventHandler handler = new RocketChangedEventHandler();\r
71                 CurrentRocketHolder.getCurrentRocket().setHandler(handler);\r
72                 super.onResume();\r
73         }\r
74 \r
75         @Override\r
76         public boolean onCreateOptionsMenu(Menu menu) {\r
77                 MenuInflater inflater = getSupportMenuInflater();\r
78                 inflater.inflate(R.menu.rocket_viewer_option_menu, menu);\r
79                 MenuItem saveAction = menu.findItem(R.id.menu_save);\r
80                 if ( CurrentRocketHolder.getCurrentRocket().isModified() ) {\r
81                         saveAction.setVisible(true);\r
82                         saveAction.setShowAsAction( MenuItem.SHOW_AS_ACTION_ALWAYS );\r
83                 } else {\r
84                         saveAction.setVisible(false);\r
85                         saveAction.setShowAsAction( MenuItem.SHOW_AS_ACTION_NEVER );\r
86                 }\r
87                 return true;\r
88         }\r
89 \r
90         @Override\r
91         public boolean onMenuItemSelected(int featureId, MenuItem item) {\r
92                 AndroidLogWrapper.d(OpenRocketViewer.class,"onMenuItemSelected" + item.getItemId());\r
93                 switch(item.getItemId()) {\r
94                 case R.id.menu_load:\r
95                         // FIXME - Might want to prompt for save here.\r
96                         pickOrkFiles();\r
97                         return true;\r
98                 case R.id.menu_save:\r
99                         // FIXME - Probably want to open a dialog here.\r
100                         getSupportFragmentManager().beginTransaction()\r
101                         .add( OpenRocketSaverFragment.newInstance(), "saver")\r
102                         .commitAllowingStateLoss();\r
103                         return true;\r
104                 case android.R.id.home:\r
105                         ActivityHelpers.goHome(this);\r
106                         return true;\r
107                 case R.id.motor_list_menu_option:\r
108                         ActivityHelpers.browseMotors(this);\r
109                         return true;\r
110                 case R.id.preference_menu_option:\r
111                         ActivityHelpers.startPreferences(this);\r
112                         return true;\r
113                 case R.id.menu_about:\r
114                         ActivityHelpers.showAbout(this);\r
115                         return true;\r
116                 }\r
117                 return super.onMenuItemSelected(featureId, item);\r
118         }\r
119 \r
120         @Override\r
121         public void onSimulationSelected(int simulationId) {\r
122 \r
123                 Simulation sim = CurrentRocketHolder.getCurrentRocket().getRocketDocument().getSimulation(simulationId);\r
124                 // Check if there is data for this simulation.\r
125                 if ( sim.getSimulatedData() == null || sim.getSimulatedData().getBranchCount() == 0 ) {\r
126                         AlertDialog.Builder builder = new AlertDialog.Builder(this);\r
127                         builder.setMessage("The selected simulation does not have saved data.");\r
128                         builder.setCancelable(true);\r
129                         builder.show();\r
130                         return;\r
131                 }\r
132 \r
133                 View sidepane = findViewById(R.id.sidepane);\r
134                 if ( /* if multi pane */ sidepane != null ) {\r
135                         SimulationChart chart = new SimulationChart(simulationId);\r
136 \r
137                         Fragment graph = SimulationViewFragment.newInstance(chart);\r
138 \r
139                         FragmentTransaction ft = getSupportFragmentManager().beginTransaction();\r
140                         ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);\r
141                         // probably only want to update back stack for first time.\r
142                         ft.addToBackStack("simulationplot");\r
143                         ft.replace(R.id.sidepane, graph);\r
144                         ft.show(graph);\r
145                         ft.commit();\r
146 \r
147 \r
148                 } else {\r
149                         Intent i = new Intent(this, SimulationViewActivity.class);\r
150                         i.putExtra("Simulation",simulationId);\r
151                         startActivity(i);\r
152                 }\r
153         }\r
154 \r
155         private class RocketChangedEventHandler extends net.sf.openrocket.android.RocketChangedEventHandler {\r
156 \r
157                 @Override\r
158                 protected void doSimsChanged() {\r
159                         invalidateOptionsMenu();\r
160                         Simulations sims = (Simulations) viewPagerAdapter.getFragmentAtPos(SIMS_POS);\r
161                         if ( sims != null ) {\r
162                                 sims.refreshSimulationList();\r
163                         }\r
164                 }\r
165 \r
166                 @Override\r
167                 protected void doMotorConfigsChanged() {\r
168                         invalidateOptionsMenu();\r
169                         Configurations configs = (Configurations) viewPagerAdapter.getFragmentAtPos(CONFIGS_POS);\r
170                         if ( configs != null ) {\r
171                                 configs.refreshConfigsList();\r
172                         }\r
173                 }\r
174 \r
175         };\r
176 \r
177 \r
178         private class OpenRocketViewerPagerAdapter extends FragmentPagerAdapter {\r
179 \r
180                 public OpenRocketViewerPagerAdapter( FragmentManager fm ) {\r
181                         super(fm);\r
182                 }\r
183                 @Override\r
184                 public int getCount() {\r
185                         return TABSIZE;\r
186                 }\r
187                 @Override\r
188                 public Fragment getItem( int position ) {\r
189                         switch (position) {\r
190                         case OVERVIEW_POS:\r
191                                 return new Overview();\r
192                         case COMPONENT_POS:\r
193                                 return new Component();\r
194                         case SIMS_POS:\r
195                                 return new Simulations();\r
196                         case CONFIGS_POS:\r
197                                 return new Configurations();\r
198                         }\r
199                         return null;\r
200                 }\r
201                 @Override\r
202                 public CharSequence getPageTitle(int position) {\r
203                         switch (position) {\r
204                         case OVERVIEW_POS:\r
205                                 return "Overview";\r
206                         case COMPONENT_POS:\r
207                                 return "Components";\r
208                         case SIMS_POS:\r
209                                 return "Simulations";\r
210                         case CONFIGS_POS:\r
211                                 return "Configurations";\r
212                         }\r
213                         return null;\r
214                 }\r
215 \r
216                 public Fragment getFragmentAtPos( int pos ) {\r
217                         String tag = "android:switcher:"+R.id.pager+":"+pos;\r
218                         Fragment f = OpenRocketViewer.this.getSupportFragmentManager().findFragmentByTag(tag);\r
219                         return f;\r
220                 }\r
221         }\r
222 \r
223 }\r