1 package net.sf.openrocket.android.rocket;
\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
20 public class Component extends Fragment {
\r
22 private TreeViewList componentTree;
\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
34 public void onResume() {
\r
36 final OpenRocketDocument rocketDocument = CurrentRocketHolder.getCurrentRocket().getRocketDocument();
\r
37 componentTree.setAdapter( buildAdapter( rocketDocument.getRocket() ) );
\r
40 private ListAdapter buildAdapter( Rocket rocket ) {
\r
42 TreeStateManager<RocketComponentWithId> manager = new InMemoryTreeStateManager<RocketComponentWithId>();
\r
43 TreeBuilder<RocketComponentWithId> treeBuilder = new TreeBuilder<RocketComponentWithId>(manager);
\r
45 int depth = buildRecursive( rocket, treeBuilder, 0 );
\r
46 return new RocketComponentTreeAdapter(this.getActivity(), manager, depth+1);
\r
50 private int buildRecursive( RocketComponent comp, TreeBuilder<RocketComponentWithId> builder, int depth ) {
\r
53 int maxDepth = depth;
\r
55 RocketComponentWithId rcid = new RocketComponentWithId(comp, id++);
\r
57 // Add this component.
\r
58 builder.sequentiallyAddNextNode(rcid, depth);
\r
60 if ( comp.allowsChildren() ) {
\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