home *** CD-ROM | disk | FTP | other *** search
- package com.sun.java.swing.plaf.basic;
-
- import com.sun.java.swing.tree.DefaultMutableTreeNode;
- import com.sun.java.swing.tree.MutableTreeNode;
- import com.sun.java.swing.tree.TreeModel;
- import com.sun.java.swing.tree.TreePath;
- import com.sun.java.swing.tree.TreeSelectionModel;
- import java.awt.Dimension;
- import java.awt.Rectangle;
- import java.util.Enumeration;
- import java.util.Vector;
-
- public class VisibleTreeNode extends DefaultMutableTreeNode {
- protected AbstractTreeUI treeUI;
- protected Dimension preferredSize;
- protected int yOrigin;
- protected boolean expanded;
- protected boolean hasBeenExpanded;
- protected boolean isValid;
- public static final Dimension EMPTY_SIZE = new Dimension(0, 0);
-
- public VisibleTreeNode(AbstractTreeUI var1, Object var2, int var3) {
- super(var2);
- this.treeUI = var1;
- this.isValid = true;
- this.updatePreferredSize(var3);
- }
-
- public void setParent(MutableTreeNode var1) {
- super.setParent(var1);
- if (var1 == null) {
- this.markInvalid();
- }
-
- }
-
- void markInvalid() {
- this.isValid = false;
- if (super.children != null) {
- for(int var1 = super.children.size() - 1; var1 >= 0; --var1) {
- ((VisibleTreeNode)super.children.elementAt(var1)).markInvalid();
- }
- }
-
- }
-
- protected void setYOrigin(int var1) {
- this.yOrigin = var1;
- }
-
- public int getYOrigin() {
- if (this.treeUI.isFixedRowHeight()) {
- int var1 = this.getRow();
- return var1 == -1 ? -1 : this.treeUI.getRowHeight() * var1;
- } else {
- return this.yOrigin;
- }
- }
-
- protected void shiftYOriginBy(int var1) {
- this.yOrigin += var1;
- }
-
- public void updatePreferredSize() {
- this.updatePreferredSize(-1);
- }
-
- protected void updatePreferredSize(int var1) {
- this.preferredSize = this.treeUI.getSizeOfNode(this, var1);
- if (this.preferredSize == null) {
- this.preferredSize = EMPTY_SIZE;
- this.treeUI.updateNodeSizes = true;
- } else if (this.preferredSize.height == 0) {
- this.treeUI.updateNodeSizes = true;
- }
-
- int var2 = this.treeUI.getRowHeight();
- if (var2 > 0) {
- this.preferredSize.height = var2;
- }
-
- }
-
- public boolean hasValidSize() {
- return this.preferredSize == null || this.preferredSize.height == 0;
- }
-
- public Dimension getPreferredSize() {
- return this.preferredSize;
- }
-
- public Rectangle getNodeBounds() {
- Dimension var1 = this.getPreferredSize();
- return new Rectangle(this.treeUI.getXOriginOfNode(this), this.getYOrigin(), var1.width, var1.height);
- }
-
- public int getVisibleLevel() {
- return this.treeUI.isRootVisible() ? ((DefaultMutableTreeNode)this).getLevel() : ((DefaultMutableTreeNode)this).getLevel() - 1;
- }
-
- public int getRow() {
- return this.treeUI.visibleNodes.indexOf(this);
- }
-
- public boolean hasBeenExpanded() {
- return this.hasBeenExpanded;
- }
-
- public boolean isExpanded() {
- return this.expanded;
- }
-
- public boolean isSelected() {
- return this.treeUI.isSelectedIndex(this.getRow());
- }
-
- public boolean isLeaf() {
- return this.treeUI.getModel().isLeaf(this.getValue());
- }
-
- public VisibleTreeNode getLastVisibleNode() {
- VisibleTreeNode var1;
- for(var1 = this; var1.isExpanded() && ((DefaultMutableTreeNode)var1).getChildCount() > 0; var1 = (VisibleTreeNode)((DefaultMutableTreeNode)var1).getLastChild()) {
- }
-
- return var1;
- }
-
- public Enumeration getLoadedChildren(boolean var1) {
- if (var1 && !this.hasBeenExpanded) {
- Object var3 = this.getValue();
- TreeModel var4 = this.treeUI.getModel();
- int var5 = var4.getChildCount(var3);
- this.hasBeenExpanded = true;
- int var6 = this.getRow();
- if (var6 == -1) {
- for(int var7 = 0; var7 < var5; ++var7) {
- VisibleTreeNode var2 = this.treeUI.createNodeForValue(var4.getChild(var3, var7), -1);
- ((DefaultMutableTreeNode)this).add(var2);
- }
- } else {
- ++var6;
-
- for(int var10 = 0; var10 < var5; ++var10) {
- VisibleTreeNode var8 = this.treeUI.createNodeForValue(var4.getChild(var3, var10), var6++);
- ((DefaultMutableTreeNode)this).add(var8);
- }
- }
-
- return super.children();
- } else {
- return super.children();
- }
- }
-
- public Enumeration children() {
- return !this.isExpanded() ? DefaultMutableTreeNode.EMPTY_ENUMERATION : super.children();
- }
-
- public boolean isVisible() {
- return this.treeUI.visibleNodes.contains(this);
- }
-
- public void modelChildCountChanged() {
- }
-
- public int getModelChildCount() {
- return this.hasBeenExpanded ? super.getChildCount() : this.treeUI.getModel().getChildCount(this.getValue());
- }
-
- public int visibleChildCount() {
- int var1 = -1;
- Enumeration var2 = ((DefaultMutableTreeNode)this).preorderEnumeration();
-
- while(var2.hasMoreElements()) {
- ++var1;
- var2.nextElement();
- }
-
- return var1;
- }
-
- public void toggleExpanded() {
- if (this.isExpanded()) {
- this.collapse();
- } else {
- this.expand();
- }
- }
-
- protected void didAdjustTree() {
- }
-
- public void expand() {
- this.expand(true);
- }
-
- protected void expand(boolean var1) {
- if (!this.isExpanded() && !this.isLeaf()) {
- Vector var2 = this.getVisibleNodes();
- boolean var3 = this.treeUI.isFixedRowHeight();
- this.expanded = true;
- int var4 = this.getRow();
- if (!this.hasBeenExpanded) {
- Object var6 = this.getValue();
- TreeModel var7 = this.treeUI.getModel();
- int var8 = var7.getChildCount(var6);
- this.hasBeenExpanded = true;
- if (var4 == -1) {
- for(int var20 = 0; var20 < var8; ++var20) {
- VisibleTreeNode var12 = this.treeUI.createNodeForValue(var7.getChild(var6, var20), -1);
- ((DefaultMutableTreeNode)this).add(var12);
- }
- } else {
- int var9 = var4 + 1;
-
- for(int var10 = 0; var10 < var8; ++var10) {
- VisibleTreeNode var5 = this.treeUI.createNodeForValue(var7.getChild(var6, var10), var9);
- ((DefaultMutableTreeNode)this).add(var5);
- }
- }
- }
-
- int var13 = var4;
- Enumeration var16 = ((DefaultMutableTreeNode)this).preorderEnumeration();
- var16.nextElement();
- int var17;
- if (var3) {
- var17 = 0;
- } else if (this == this.treeUI.treeCacheRoot && !this.treeUI.isRootVisible()) {
- var17 = 0;
- } else {
- var17 = this.getYOrigin() + this.getPreferredSize().height;
- }
-
- if (!var3) {
- boolean var21 = this.treeUI.updateNodeSizes;
-
- while(var16.hasMoreElements()) {
- VisibleTreeNode var19 = (VisibleTreeNode)var16.nextElement();
- if (!var21 && !var19.hasValidSize()) {
- var19.updatePreferredSize(var13 + 1);
- }
-
- var19.setYOrigin(var17);
- var17 += var19.getPreferredSize().height;
- ++var13;
- var2.insertElementAt(var19, var13);
- }
- } else {
- while(var16.hasMoreElements()) {
- VisibleTreeNode var18 = (VisibleTreeNode)var16.nextElement();
- ++var13;
- var2.insertElementAt(var18, var13);
- }
- }
-
- int var22 = var13;
- if (var4 != var13 && var1) {
- if (!var3 && ((DefaultMutableTreeNode)this).getChildCount() > 0) {
- ++var13;
- if (var13 < this.treeUI.getRowCount()) {
- int var11 = var17 - (this.getYOrigin() + this.getPreferredSize().height);
-
- for(int var23 = var2.size() - 1; var23 >= var13; --var23) {
- ((VisibleTreeNode)var2.elementAt(var23)).shiftYOriginBy(var11);
- }
- }
- }
-
- this.didAdjustTree();
- this.treeUI.visibleNodesChanged();
- }
-
- this.treeUI.pathWasExpanded(this.getTreePath());
- TreeSelectionModel var24 = this.treeUI.getSelectionModel();
- if (var24 != null) {
- if (var4 != -1 && var4 < var22 && var24.isRowSelected(var4) && var24.isRowSelected(var4 + 1)) {
- TreePath[] var25 = new TreePath[var22 - var4];
-
- for(int var15 = var22; var15 > var4; --var15) {
- var25[var22 - var15] = this.treeUI.getNode(var15).getTreePath();
- }
-
- var24.addSelectionPaths(var25);
- return;
- }
-
- var24.resetRowSelection();
- }
- }
-
- }
-
- public void collapse() {
- this.collapse(true);
- }
-
- protected void collapse(boolean var1) {
- if (this.isExpanded()) {
- Vector var2 = null;
- Enumeration var3 = ((DefaultMutableTreeNode)this).preorderEnumeration();
- var3.nextElement();
- int var4 = 0;
- boolean var5 = this.treeUI.isFixedRowHeight();
- int var6;
- if (var5) {
- var6 = 0;
- } else {
- var6 = this.getPreferredSize().height + this.getYOrigin();
- }
-
- int var7 = var6;
- int var8 = this.getRow();
- Vector var9 = this.getVisibleNodes();
- TreeSelectionModel var10 = this.treeUI.getSelectionModel();
- if (!var5) {
- while(var3.hasMoreElements()) {
- VisibleTreeNode var14 = (VisibleTreeNode)var3.nextElement();
- if (var9.contains(var14)) {
- ++var4;
- if (var10 != null && var10.isRowSelected(var4 + var8)) {
- if (var2 == null) {
- var2 = new Vector();
- }
-
- var2.addElement(var14.getTreePath());
- }
-
- var9.removeElement(var14);
- var6 = var14.getYOrigin() + var14.getPreferredSize().height;
- }
- }
- } else {
- while(var3.hasMoreElements()) {
- VisibleTreeNode var11 = (VisibleTreeNode)var3.nextElement();
- if (var9.contains(var11)) {
- ++var4;
- if (var10 != null && var10.isRowSelected(var4 + var8)) {
- if (var2 == null) {
- var2 = new Vector();
- }
-
- var2.addElement(var11.getTreePath());
- }
-
- var9.removeElement(var11);
- }
- }
- }
-
- if (var4 > 0 && var1 && var8 != -1) {
- if (!var5 && var8 + 1 < this.treeUI.getRowCount() && var7 != var6) {
- int var13 = var7 - var6;
- int var15 = var8 + 1;
-
- for(int var12 = var9.size(); var15 < var12; ++var15) {
- ((VisibleTreeNode)var9.elementAt(var15)).shiftYOriginBy(var13);
- }
- }
-
- this.expanded = false;
- this.didAdjustTree();
- this.treeUI.visibleNodesChanged();
- } else {
- this.expanded = false;
- }
-
- this.treeUI.pathWasCollapsed(this.getTreePath());
- if (var10 != null && var4 > 0 && var8 != -1) {
- if (var2 != null) {
- int var16 = var2.size();
- TreePath[] var17 = new TreePath[var16];
- var2.copyInto(var17);
- var10.removeSelectionPaths(var17);
- var10.addSelectionPath(this.getTreePath());
- return;
- }
-
- var10.resetRowSelection();
- }
- }
-
- }
-
- public Object getValue() {
- return ((DefaultMutableTreeNode)this).getUserObject();
- }
-
- protected TreePath getTreePath() {
- return this.treeUI.createTreePathFor(this);
- }
-
- protected Vector getVisibleNodes() {
- return this.treeUI.visibleNodes;
- }
-
- protected void updateTreeYLocationsFrom(int var1) {
- this.treeUI.updateYLocationsFrom(var1);
- }
- }
-