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