create changelog entry
[debian/openrocket] / android / src / net / sf / openrocket / android / rocket / Component.java
1 package net.sf.openrocket.android.rocket;\r
2 \r
3 import net.sf.openrocket.R;\r
4 import net.sf.openrocket.android.CurrentRocketHolder;\r
5 import net.sf.openrocket.android.rocket.RocketComponentTreeAdapter.RocketComponentWithId;\r
6 import net.sf.openrocket.document.OpenRocketDocument;\r
7 import net.sf.openrocket.rocketcomponent.Rocket;\r
8 import net.sf.openrocket.rocketcomponent.RocketComponent;\r
9 import pl.polidea.treeview.InMemoryTreeStateManager;\r
10 import pl.polidea.treeview.TreeBuilder;\r
11 import pl.polidea.treeview.TreeStateManager;\r
12 import pl.polidea.treeview.TreeViewList;\r
13 import android.os.Bundle;\r
14 import android.support.v4.app.Fragment;\r
15 import android.view.LayoutInflater;\r
16 import android.view.View;\r
17 import android.view.ViewGroup;\r
18 import android.widget.ListAdapter;\r
19 \r
20 public class Component extends Fragment {\r
21 \r
22         private TreeViewList componentTree;\r
23 \r
24         @Override\r
25         public View onCreateView(LayoutInflater inflater, ViewGroup container,\r
26                         Bundle savedInstanceState) {\r
27                 View v = inflater.inflate(R.layout.rocket_component, container, false);\r
28                 componentTree = (TreeViewList) v.findViewById(R.id.openrocketviewerComponentTree);\r
29 \r
30                 return v;\r
31         }\r
32 \r
33         @Override\r
34         public void onResume() {\r
35                 super.onResume();\r
36                 final OpenRocketDocument rocketDocument = CurrentRocketHolder.getCurrentRocket().getRocketDocument();\r
37                 componentTree.setAdapter( buildAdapter( rocketDocument.getRocket() ) );\r
38         }\r
39 \r
40         private ListAdapter buildAdapter( Rocket rocket ) {\r
41 \r
42                 TreeStateManager<RocketComponentWithId> manager = new InMemoryTreeStateManager<RocketComponentWithId>();\r
43                 TreeBuilder<RocketComponentWithId> treeBuilder = new TreeBuilder<RocketComponentWithId>(manager);\r
44 \r
45                 int depth = buildRecursive( rocket, treeBuilder, 0 );\r
46                 return new RocketComponentTreeAdapter(this.getActivity(), manager, depth+1);\r
47         }\r
48 \r
49         long id = 0;\r
50         private int buildRecursive( RocketComponent comp, TreeBuilder<RocketComponentWithId> builder, int depth ) {\r
51 \r
52 \r
53                 int maxDepth = depth;\r
54 \r
55                 RocketComponentWithId rcid = new RocketComponentWithId(comp, id++);\r
56 \r
57                 // Add this component.\r
58                 builder.sequentiallyAddNextNode(rcid, depth);\r
59 \r
60                 if ( comp.allowsChildren() ) {\r
61 \r
62                         for( RocketComponent child : comp.getChildren() ) {\r
63                                 int childDepth = buildRecursive( child, builder, depth+1);\r
64                                 if ( childDepth > maxDepth) {\r
65                                         maxDepth = childDepth;\r
66                                 }\r
67                         }\r
68 \r
69                 }\r
70 \r
71                 return maxDepth;\r
72         }\r
73 \r
74 \r
75 }\r