Show events and times on the chart. The achartengine needs some work to get the...
authorkruland2607 <kruland2607@180e2498-e6e9-4542-8430-84ac67f01cd8>
Sat, 30 Jun 2012 19:08:13 +0000 (19:08 +0000)
committerkruland2607 <kruland2607@180e2498-e6e9-4542-8430-84ac67f01cd8>
Sat, 30 Jun 2012 19:08:13 +0000 (19:08 +0000)
git-svn-id: https://openrocket.svn.sourceforge.net/svnroot/openrocket/trunk@820 180e2498-e6e9-4542-8430-84ac67f01cd8

android/res/layout/simulation_series_dialog.xml
android/res/layout/simulation_series_event_list_item.xml [new file with mode: 0644]
android/res/values/strings.xml
android/src/net/sf/openrocket/android/simulation/SimulationChart.java
android/src/net/sf/openrocket/android/simulation/SimulationSeriesDialog.java

index 0b28cfd6e547a54956541dda29cbfc5fd7f98bbd..2f231db62f0dbee6e2f558d6aa64c234d951ea56 100644 (file)
@@ -4,12 +4,14 @@
     android:layout_height="match_parent"
     android:orientation="vertical" >
 
-    <!--  shim to get dialog correct size ?? -->
+    <!-- shim to get dialog correct size ?? -->
+    <!--
     <View
         android:layout_width="200dp"
         android:layout_height="0px"
         android:layout_margin="0px"
         android:orientation="horizontal" />
+    -->
 
     <TextView
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:drawSelectorOnTop="true" />
 
+    <ListView
+        android:id="@+id/simulationEventsList"
+        android:layout_width="fill_parent"
+        android:layout_height="0dp"
+        android:layout_weight="1" />
+
     <Button
         android:id="@+id/simulationOkButton"
         android:layout_width="70dp"
-        android:layout_height="70dp"
+        android:layout_height="45dp"
         android:layout_gravity="center_horizontal"
         android:text="ok" />
 
diff --git a/android/res/layout/simulation_series_event_list_item.xml b/android/res/layout/simulation_series_event_list_item.xml
new file mode 100644 (file)
index 0000000..19eb9f2
--- /dev/null
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@android:id/text1"
+    android:layout_width="match_parent"
+    android:layout_height="?android:attr/listPreferredItemHeight"
+    android:textAppearance="?android:attr/textAppearanceListItem"
+    android:gravity="center_vertical"
+    android:checkMark="?android:attr/listChoiceIndicatorMultiple"
+    android:paddingLeft="8dip"
+    android:paddingRight="8dip"
+/>
index 41ca19b9d57efc93a112d2b1812815bb3a0ecb1b..fae70a50ef75628daed5acc30fc83d5cdd27df7c 100644 (file)
@@ -10,8 +10,9 @@
     <string name="Download">Download</string>\r
     <string name="About">About</string>\r
     <string name="Preferences">Preferences</string>\r
-    <string name="select_series">Select Series</string>\r
+    <string name="select_series">Change Plot</string>\r
     <string name="view_events">View Events</string>\r
+    <string name="simulationPlotDialogTitle">Select Series And Events</string>\r
 \r
     <string-array name="PreferenceMotorBrowserGroupingEntries">\r
         <item>Case</item>\r
index 807c58a77a48c74007ca2f9d709e8e7ac1db27b5..afe1edb83cf0e7d88acfde8ba692b97649f45594 100644 (file)
@@ -17,13 +17,16 @@ package net.sf.openrocket.android.simulation;
 \r
 import java.io.Serializable;\r
 import java.util.ArrayList;\r
+import java.util.HashMap;\r
 import java.util.List;\r
+import java.util.Map;\r
 \r
 import net.sf.openrocket.android.util.AndroidLogWrapper;\r
 import net.sf.openrocket.document.OpenRocketDocument;\r
 import net.sf.openrocket.document.Simulation;\r
 import net.sf.openrocket.simulation.FlightDataBranch;\r
 import net.sf.openrocket.simulation.FlightDataType;\r
+import net.sf.openrocket.simulation.FlightEvent;\r
 import net.sf.openrocket.unit.Unit;\r
 \r
 import org.achartengine.chart.LineChart;\r
@@ -55,6 +58,7 @@ public class SimulationChart implements Serializable {
        private final int simulationIndex;\r
        private transient FlightDataType series1;\r
        private transient FlightDataType series2;\r
+       private transient Map<Double,String> events;\r
        \r
        // Define 4 different colors and point styles to use for the series.\r
        // For now only 2 series are supported though.\r
@@ -79,6 +83,10 @@ public class SimulationChart implements Serializable {
                this.series2 = series2;\r
        }\r
 \r
+       public void setEvents( Map<Double,String> events ) {\r
+               this.events = events;\r
+       }\r
+       \r
        public FlightDataBranch getFlightDataBranch( OpenRocketDocument rocketDocument ) {\r
                Simulation sim = rocketDocument.getSimulation(simulationIndex);\r
                FlightDataBranch flightDataBranch = sim.getSimulatedData().getBranch(0);\r
@@ -101,6 +109,13 @@ public class SimulationChart implements Serializable {
                if (series2== null) {\r
                        series2 = flightDataBranch.getTypes()[2];\r
                }\r
+               \r
+               if ( events == null ) {\r
+                       events = new HashMap<Double,String>();\r
+                       for ( FlightEvent event : flightDataBranch.getEvents() ) {\r
+                               events.put(event.getTime(), event.getType().toString() );\r
+                       }\r
+               }\r
 \r
                /*\r
                 * TODO -\r
@@ -124,6 +139,12 @@ public class SimulationChart implements Serializable {
                renderer.setShowGrid(true);\r
                renderer.setZoomButtonsVisible(true);\r
                renderer.setChartTitle(sim.getName());\r
+               renderer.setShowCustomTextGrid(true);\r
+               renderer.setXLabelsAlign(Align.RIGHT);\r
+               renderer.setXLabelsAngle(90);  // rotate right\r
+               for( Map.Entry<Double,String> event : events.entrySet() ) {\r
+                       renderer.addXTextLabel(event.getKey(), event.getValue());\r
+               }\r
 \r
                renderer.setMargins(new int[] { 50, 30, 0, 20 });\r
                {\r
index 8d2c3c2f0105e0437016eb70efdf4f781e8c011a..4ed66743022eae11e305c63fb5c226af301194ae 100644 (file)
@@ -1,19 +1,27 @@
 package net.sf.openrocket.android.simulation;\r
 \r
 import java.util.ArrayList;\r
+import java.util.HashMap;\r
 import java.util.List;\r
+import java.util.Map;\r
 \r
 import net.sf.openrocket.R;\r
 import net.sf.openrocket.android.CurrentRocketHolder;\r
 import net.sf.openrocket.document.OpenRocketDocument;\r
+import net.sf.openrocket.simulation.FlightDataBranch;\r
 import net.sf.openrocket.simulation.FlightDataType;\r
+import net.sf.openrocket.simulation.FlightEvent;\r
+import android.app.AlertDialog;\r
+import android.app.Dialog;\r
 import android.os.Bundle;\r
 import android.support.v4.app.DialogFragment;\r
+import android.util.SparseBooleanArray;\r
 import android.view.LayoutInflater;\r
 import android.view.View;\r
 import android.view.ViewGroup;\r
 import android.widget.ArrayAdapter;\r
 import android.widget.Button;\r
+import android.widget.ListView;\r
 import android.widget.Spinner;\r
 import android.widget.TextView;\r
 \r
@@ -23,6 +31,7 @@ public class SimulationSeriesDialog extends DialogFragment {
                public void onConfirm();\r
        }\r
 \r
+       private ListView eventList;\r
        private Spinner series1Spinner;\r
        private Spinner series2Spinner;\r
 \r
@@ -40,24 +49,18 @@ public class SimulationSeriesDialog extends DialogFragment {
        }\r
 \r
        @Override\r
-       public void onCreate(Bundle savedInstanceState) {\r
-               super.onCreate(savedInstanceState);\r
+       public Dialog onCreateDialog(Bundle savedInstanceState) {\r
                if (savedInstanceState != null ) {\r
                        chart = (SimulationChart) savedInstanceState.getSerializable("chart");\r
                }\r
-       }\r
-\r
-       @Override\r
-       public void onSaveInstanceState(Bundle arg0) {\r
-               super.onSaveInstanceState(arg0);\r
-               arg0.putSerializable("chart", chart);\r
-       }\r
-\r
-       @Override\r
-       public View onCreateView(final LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {\r
-\r
-               View v = inflater.inflate(R.layout.simulation_series_dialog, container, false);\r
                \r
+               AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());\r
+               builder.setTitle(R.string.simulationPlotDialogTitle);\r
+               \r
+               final LayoutInflater inflater = getActivity().getLayoutInflater();\r
+               View v = inflater.inflate(R.layout.simulation_series_dialog, null);\r
+               builder.setView(v);\r
+\r
                OpenRocketDocument rocketDocument = CurrentRocketHolder.getCurrentRocket().getRocketDocument();\r
 \r
                Button okButton = (Button) v.findViewById(R.id.simulationOkButton);\r
@@ -65,6 +68,19 @@ public class SimulationSeriesDialog extends DialogFragment {
 \r
                        @Override\r
                        public void onClick(View v) {\r
+                               Map<Double,String> eventsToShow = new HashMap<Double,String>();\r
+                               {\r
+                                       SparseBooleanArray eventsSelected = eventList.getCheckedItemPositions();\r
+                                       List<FlightEvent> flightEvents = chart.getFlightDataBranch(CurrentRocketHolder.getCurrentRocket().getRocketDocument()).getEvents();\r
+                                       for( int i=0; i< flightEvents.size(); i++ ) {\r
+                                               if ( eventsSelected.get(i) ) {\r
+                                                       FlightEvent event = flightEvents.get(i);\r
+                                                       eventsToShow.put( event.getTime(), event.getType().toString());\r
+                                               }\r
+                                       }\r
+                               }\r
+                               chart.setEvents(eventsToShow);\r
+\r
                                chart.setSeries1((FlightDataType)series1Spinner.getSelectedItem());\r
                                chart.setSeries2((FlightDataType)series2Spinner.getSelectedItem());\r
 \r
@@ -103,10 +119,42 @@ public class SimulationSeriesDialog extends DialogFragment {
 \r
                };\r
                series1Spinner.setAdapter(serieses);\r
+               series1Spinner.setSelection(0);\r
                series2Spinner.setAdapter(serieses);\r
+               series2Spinner.setSelection(1);\r
+\r
+               eventList = (ListView) v.findViewById(R.id.simulationEventsList);\r
 \r
+               FlightDataBranch data = chart.getFlightDataBranch(CurrentRocketHolder.getCurrentRocket().getRocketDocument());\r
+               // Initialize the eventList\r
+               \r
+               ArrayAdapter<FlightEvent> events = new ArrayAdapter<FlightEvent>(getActivity(),android.R.layout.simple_list_item_1,data.getEvents()) {\r
 \r
-               return v;\r
+                       @Override\r
+                       public View getView(int position, View convertView,\r
+                                       ViewGroup parent) {\r
+                               View v = convertView;\r
+                               if ( v == null ) {\r
+                                       LayoutInflater li = inflater;\r
+                                       v = li.inflate(android.R.layout.simple_list_item_multiple_choice,null);\r
+                               }\r
+                               FlightEvent event = this.getItem(position);\r
+                               ((TextView)v.findViewById(android.R.id.text1)).setText( event.getType().toString() + " " + event.getTime() + " (s)" );\r
+                               return v;\r
+                       }\r
+\r
+               };\r
+               eventList.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);\r
+               eventList.setAdapter(events);\r
+\r
+               return builder.create();\r
+\r
+       }\r
+\r
+       @Override\r
+       public void onSaveInstanceState(Bundle arg0) {\r
+               super.onSaveInstanceState(arg0);\r
+               arg0.putSerializable("chart", chart);\r
        }\r
 \r
 }\r