Announcement

Collapse
No announcement yet.
X
  • Filter
  • Time
Clear All
new posts

    Tree with local data and filterEditor

    Hi
    I'm trying to get a tree with fixed data to allow filtering with a filter editor, keeping the parentnodes on filter. When I try to do this with just setting the data and applying a filter, a javascript error occurs saying getDataSource is not available. Therefore I tried using a dummy clientOnly testdatasource. This has unexpected effects:
    - the tree gets flattened, all leafs get the same level as the folder nodes;
    - the filter is not applied.

    I have adapted the example showcase to reflect what I want to do. I'm sure I'm not using the right combination of setters but am struggling for a while now. Any help would be appreciated.

    Thanks, ITB

    Code:
    public class Test implements EntryPoint {
        private class PartsDataSource extends DataSource {
            public PartsDataSource() {
                this.setClientOnly(Boolean.TRUE);
                Tree grid1Tree = new Tree();
                grid1Tree.setModelType(TreeModelType.CHILDREN);
                grid1Tree.setNameProperty("Name");
                grid1Tree.setRoot(new PartsTreeNode("Root",
                        new PartsTreeNode("Bin 1",
                                new PartsTreeNode("Blue Cube", "cube_blue.png"),
                                new PartsTreeNode("Yellow Cube", "cube_yellow.png"),
                                new PartsTreeNode("Green Cube", "cube_green.png")
                        ),
                        new PartsTreeNode("Bin 2",
                                new PartsTreeNode("Blue Piece", "pawn_blue.png"),
                                new PartsTreeNode("Green Piece", "pawn_green.png"),
                                new PartsTreeNode("Yellow Piece", "pawn_yellow.png")
                        )
                        ));
                this.setTestData(grid1Tree.getRoot().getAttributeAsRecordArray("children"));
            }
            
        }
        
        @Override
        public void onModuleLoad() {
            
            final PartsTreeGrid grid1 = new PartsTreeGrid();
            ListGridField name = new ListGridField("Name");
            name.setCanFilter(Boolean.TRUE);
            grid1.setFields(name);
            grid1.setShowFilterEditor(Boolean.TRUE);
            grid1.setFilterOnKeypress(Boolean.TRUE);
            grid1.setKeepParentsOnFilter(Boolean.TRUE);
            grid1.setLoadDataOnDemand(Boolean.FALSE);
            // grid1.setFilterLocalData(Boolean.TRUE);
            // grid1.setDataFetchMode(FetchMode.LOCAL);
            grid1.setDataSource(new PartsDataSource());
            grid1.draw();
            grid1.fetchData();
        }
        
        public static class PartsTreeGrid extends TreeGrid {
            public PartsTreeGrid() {
                this.setWidth(300);
                this.setHeight(300);
                this.setShowEdges(true);
                this.setBorder("0px");
                this.setBodyStyleName("normal");
                this.setShowHeader(false);
                this.setLeaveScrollbarGap(false);
                this.setAppImgDir("pieces/16/");
            }
        }
        
        public static class PartsTreeNode extends TreeNode {
            public PartsTreeNode(final String name, final String icon) {
                this(name, icon, new PartsTreeNode[] {});
            }
            
            public PartsTreeNode(final String name, final PartsTreeNode... children) {
                this(name, null, children);
            }
            
            public PartsTreeNode(final String name, final String icon, final PartsTreeNode... children) {
                this.setAttribute("Name", name);
                this.setAttribute("children", children);
                if (icon != null) {
                    this.setAttribute("icon", icon);
                }
            }
        }
    }
Working...
X