Revision: aea67095a3f2 Branch: default Author: Brandon Roller <brandon.r.roller@xxxxxxxxx> Date: Fri May 24 10:15:03 2013 Log: Attempting to optimize tree view http://code.google.com/p/brailleblaster/source/detail?r=aea67095a3f2&repo=newdesign Modified: /src/main/org/brailleblaster/views/TreeView.java =======================================--- /src/main/org/brailleblaster/views/TreeView.java Thu May 23 07:34:42 2013 +++ /src/main/org/brailleblaster/views/TreeView.java Fri May 24 10:15:03 2013
@@ -101,8 +101,28 @@ TreeItem [] items = t.getSelection(); if(!items[0].equals(root)){+ if(!previousItem.isDisposed() && !previousItem.equals(root) && !isParent(previousItem, items[0]) && previousItem.getItemCount() > 0){
+ depopulateItemChildren(previousItem); + previousItem.setExpanded(false); + } + + if(items[0].getItemCount() == 0){+ populateItemChildren(items[0], ((TreeItemData)items[0].getData()).element, dm);
+ items[0].setExpanded(false); + } + + resetTree(items[0]); previousItem = items[0]; - } + } + else { + if(!previousItem.equals(root)){ + if(!previousItem.equals(root) && previousItem.getItemCount() > 0){ + depopulateItemChildren(previousItem); + previousItem.setExpanded(false); + } + } + items[0].setExpanded(false); + } if(((TreeItemData)items[0].getData()).textMapList.size() > 0){ ArrayList<TextMapElement>list = getList(items[0]); @@ -137,27 +157,7 @@ } } }); - - this.tree.addTreeListener(new TreeListener(){ - @Override - public void treeCollapsed(TreeEvent e) { - TreeItem [] items = ((TreeItem)e.item).getItems(); - for(int i = 0; i < items.length; i++){ - depopulateItemChildren(items[i]); - } - } - - @Override - public void treeExpanded(TreeEvent e) { - TreeItem [] items = ((TreeItem)e.item).getItems(); - for(int i = 0; i < items.length; i++){ - if(items[i].getItemCount() == 0)- populateItemChildren(items[i], ((TreeItemData)items[i].getData()).element, dm);
- } - - } - }); - + this.tree.addTraverseListener(new TraverseListener(){ @Override public void keyTraversed(TraverseEvent e) { @@ -211,13 +211,11 @@ } private void depopulateItemChildren(TreeItem item){ - if(!item.getExpanded()){ TreeItem [] items = item.getItems(); for(int i = 0; i < items.length; i++){ items[i].dispose(); } - } } public void setRoot(Element e, DocumentManager dm){ @@ -253,10 +251,13 @@ searchTree(this.getRoot(), t, m); if(m.getValue("item") != null){ if(m.contains("item")){ - previousItem = this.tree.getSelection()[0]; this.tree.setSelection(((TreeItem)m.getValue("item"))); if(((TreeItem)m.getValue("item")).getItemCount() == 0)populateItemChildren(((TreeItem)m.getValue("item")), (Element)t.n.getParent(), dm);
+ + resetTree(((TreeItem)m.getValue("item"))); + previousItem = this.tree.getSelection()[0]; + previousItem.setExpanded(false); } } else { @@ -264,8 +265,11 @@ buildTreeFromElement(parent, dm); searchTree(this.getRoot(), t, m); this.tree.setSelection(((TreeItem)m.getValue("item"))); + resetTree(((TreeItem)m.getValue("item"))); + previousItem = this.tree.getSelection()[0]; + previousItem.setExpanded(false); } - resetTree(((TreeItem)m.getValue("item"))); + setListenerLock(false); } @@ -278,6 +282,7 @@ ArrayList<TextMapElement> list = getList(item); list.remove(index); if(list.size() == 0){ + previousItem = item.getParentItem(); item.dispose(); } } @@ -339,8 +344,9 @@ item = findElementInTree(this.root, e); } - if(item.getItemCount() == 0) + if(item.getItemCount() == 0){ populateItemChildren(item, e, dm); + } } public TextMapElement getSelection(TextMapElement t){ @@ -365,8 +371,8 @@ private void resetTree(TreeItem currentItem){ ArrayList<TreeItem>previousParents = new ArrayList<TreeItem>(); - - if(!previousItem.isDisposed()){ + boolean match = false; + if(!previousItem.isDisposed() && !previousItem.equals(currentItem)){ previousParents.add(previousItem); TreeItem parent = previousItem.getParentItem(); @@ -375,8 +381,7 @@ parent = parent.getParentItem(); } - parent = currentItem.getParentItem(); - boolean match = false; + parent = currentItem; int location = -1; while(parent != null && !match){ @@ -390,11 +395,27 @@ } if(match){ - for(int i = location; i >= 0; i--){ - previousParents.get(i).setExpanded(false); + if(location >= 0){ + depopulateItemChildren(previousParents.get(location)); + previousParents.get(location).setExpanded(false); } } } + } + + private boolean isParent(TreeItem parent, TreeItem child){ + if(parent.equals(root)) + return true; + + TreeItem nextElement = child.getParentItem(); + while(nextElement != null){ + if(nextElement.equals(parent)) + return true; + + nextElement = nextElement.getParentItem(); + } + + return false; } public void clearTree(){