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