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