This is an automated email from the git hooks/post-receive script. ebourg-guest pushed a commit to branch master in repository rhino.
commit 776f97e943f6ab1400ff9afc107c8c869cc987e1 Author: Emmanuel Bourg <[email protected]> Date: Thu Jan 19 16:58:43 2017 +0100 Removed the out of tree debugger classes (merged upstream) --- debian/changelog | 1 + debian/clean | 1 - debian/rules | 12 - .../AbstractCellEditor.java | 63 -- .../AbstractTreeTableModel.java | 195 ------ .../FileSystemModel2.java | 774 --------------------- .../JTreeTable.java | 356 ---------- .../MergeSort.java | 84 --- .../TreeTableExample2.java | 480 ------------- .../TreeTableModel.java | 71 -- .../TreeTableModelAdapter.java | 128 ---- 11 files changed, 1 insertion(+), 2164 deletions(-) diff --git a/debian/changelog b/debian/changelog index ef68801..9d3f0e2 100644 --- a/debian/changelog +++ b/debian/changelog @@ -10,6 +10,7 @@ rhino (1.7.7-1) UNRELEASED; urgency=medium and relocate the old coordinates rhino:js to org.mozilla:rhino * Removed the transitional package rhino-doc * Build with the DH sequencer instead of CDBS + * Removed the out of tree debugger classes (merged upstream) * Standards-Version updated to 3.9.8 * Switch to debhelper level 10 * Use secure Vcs-* URLs diff --git a/debian/clean b/debian/clean index c570052..567609b 100644 --- a/debian/clean +++ b/debian/clean @@ -1,2 +1 @@ -toolsrc/org/mozilla/javascript/tools/debugger/downloaded/* build/ diff --git a/debian/rules b/debian/rules index fb00be3..191770d 100755 --- a/debian/rules +++ b/debian/rules @@ -7,18 +7,6 @@ BUILDDIR = build/rhino$(VERSION) dh $@ --with javahelper --with maven-repo-helper override_dh_auto_build: - # The upstream build file (toolsrc/org/mozilla/javascript/tools/debugger/build.xml) - # downloads a ZIP file containing some sample swing code, which is then modified - # and used as part of the debugger. This is obviously not permitted during a Debian build. - # Fortunately the sample code is DFSG-free, so it has been included in the debian - # directory (in its modified format). Copying it to the "downloaded" directory - # prevents the upstream build.xml from attempting to download it. - mkdir -p toolsrc/org/mozilla/javascript/tools/debugger/downloaded - cp debian/src_from_treetable_article_see_bug409629/AbstractCellEditor.java toolsrc/org/mozilla/javascript/tools/debugger/downloaded/ - cp debian/src_from_treetable_article_see_bug409629/JTreeTable.java toolsrc/org/mozilla/javascript/tools/debugger/downloaded/ - cp debian/src_from_treetable_article_see_bug409629/TreeTableModel.java toolsrc/org/mozilla/javascript/tools/debugger/downloaded/ - cp debian/src_from_treetable_article_see_bug409629/TreeTableModelAdapter.java toolsrc/org/mozilla/javascript/tools/debugger/downloaded/ - dh_auto_build -- jar javadoc override_mh_install: diff --git a/debian/src_from_treetable_article_see_bug409629/AbstractCellEditor.java b/debian/src_from_treetable_article_see_bug409629/AbstractCellEditor.java deleted file mode 100644 index 7acce07..0000000 --- a/debian/src_from_treetable_article_see_bug409629/AbstractCellEditor.java +++ /dev/null @@ -1,63 +0,0 @@ - - package org.mozilla.javascript.tools.debugger.downloaded; - import java.awt.Component; - -import java.awt.event.*; -import java.awt.AWTEvent; -import javax.swing.*; -import javax.swing.event.*; -import java.util.EventObject; -import java.io.Serializable; - -public class AbstractCellEditor implements CellEditor { - - protected EventListenerList listenerList = new EventListenerList(); - - public Object getCellEditorValue() { return null; } - public boolean isCellEditable(EventObject e) { return true; } - public boolean shouldSelectCell(EventObject anEvent) { return false; } - public boolean stopCellEditing() { return true; } - public void cancelCellEditing() {} - - public void addCellEditorListener(CellEditorListener l) { - listenerList.add(CellEditorListener.class, l); - } - - public void removeCellEditorListener(CellEditorListener l) { - listenerList.remove(CellEditorListener.class, l); - } - - /* - * Notify all listeners that have registered interest for - * notification on this event type. - * @see EventListenerList - */ - protected void fireEditingStopped() { - // Guaranteed to return a non-null array - Object[] listeners = listenerList.getListenerList(); - // Process the listeners last to first, notifying - // those that are interested in this event - for (int i = listeners.length-2; i>=0; i-=2) { - if (listeners[i]==CellEditorListener.class) { - ((CellEditorListener)listeners[i+1]).editingStopped(new ChangeEvent(this)); - } - } - } - - /* - * Notify all listeners that have registered interest for - * notification on this event type. - * @see EventListenerList - */ - protected void fireEditingCanceled() { - // Guaranteed to return a non-null array - Object[] listeners = listenerList.getListenerList(); - // Process the listeners last to first, notifying - // those that are interested in this event - for (int i = listeners.length-2; i>=0; i-=2) { - if (listeners[i]==CellEditorListener.class) { - ((CellEditorListener)listeners[i+1]).editingCanceled(new ChangeEvent(this)); - } - } - } -} diff --git a/debian/src_from_treetable_article_see_bug409629/AbstractTreeTableModel.java b/debian/src_from_treetable_article_see_bug409629/AbstractTreeTableModel.java deleted file mode 100644 index d120672..0000000 --- a/debian/src_from_treetable_article_see_bug409629/AbstractTreeTableModel.java +++ /dev/null @@ -1,195 +0,0 @@ -/* - * @(#)AbstractTreeTableModel.java 1.2 98/10/27 - * - * Copyright 1997, 1998 by Sun Microsystems, Inc., - * 901 San Antonio Road, Palo Alto, California, 94303, U.S.A. - * All rights reserved. - * - * This software is the confidential and proprietary information - * of Sun Microsystems, Inc. ("Confidential Information"). You - * shall not disclose such Confidential Information and shall use - * it only in accordance with the terms of the license agreement - * you entered into with Sun. - */ - -import javax.swing.tree.*; -import javax.swing.event.*; - -/** - * @version 1.2 10/27/98 - * An abstract implementation of the TreeTableModel interface, handling the list - * of listeners. - * @author Philip Milne - */ - -public abstract class AbstractTreeTableModel implements TreeTableModel { - protected Object root; - protected EventListenerList listenerList = new EventListenerList(); - - public AbstractTreeTableModel(Object root) { - this.root = root; - } - - // - // Default implmentations for methods in the TreeModel interface. - // - - public Object getRoot() { - return root; - } - - public boolean isLeaf(Object node) { - return getChildCount(node) == 0; - } - - public void valueForPathChanged(TreePath path, Object newValue) {} - - // This is not called in the JTree's default mode: use a naive implementation. - public int getIndexOfChild(Object parent, Object child) { - for (int i = 0; i < getChildCount(parent); i++) { - if (getChild(parent, i).equals(child)) { - return i; - } - } - return -1; - } - - public void addTreeModelListener(TreeModelListener l) { - listenerList.add(TreeModelListener.class, l); - } - - public void removeTreeModelListener(TreeModelListener l) { - listenerList.remove(TreeModelListener.class, l); - } - - /* - * Notify all listeners that have registered interest for - * notification on this event type. The event instance - * is lazily created using the parameters passed into - * the fire method. - * @see EventListenerList - */ - protected void fireTreeNodesChanged(Object source, Object[] path, - int[] childIndices, - Object[] children) { - // Guaranteed to return a non-null array - Object[] listeners = listenerList.getListenerList(); - TreeModelEvent e = null; - // Process the listeners last to first, notifying - // those that are interested in this event - for (int i = listeners.length-2; i>=0; i-=2) { - if (listeners[i]==TreeModelListener.class) { - // Lazily create the event: - if (e == null) - e = new TreeModelEvent(source, path, - childIndices, children); - ((TreeModelListener)listeners[i+1]).treeNodesChanged(e); - } - } - } - - /* - * Notify all listeners that have registered interest for - * notification on this event type. The event instance - * is lazily created using the parameters passed into - * the fire method. - * @see EventListenerList - */ - protected void fireTreeNodesInserted(Object source, Object[] path, - int[] childIndices, - Object[] children) { - // Guaranteed to return a non-null array - Object[] listeners = listenerList.getListenerList(); - TreeModelEvent e = null; - // Process the listeners last to first, notifying - // those that are interested in this event - for (int i = listeners.length-2; i>=0; i-=2) { - if (listeners[i]==TreeModelListener.class) { - // Lazily create the event: - if (e == null) - e = new TreeModelEvent(source, path, - childIndices, children); - ((TreeModelListener)listeners[i+1]).treeNodesInserted(e); - } - } - } - - /* - * Notify all listeners that have registered interest for - * notification on this event type. The event instance - * is lazily created using the parameters passed into - * the fire method. - * @see EventListenerList - */ - protected void fireTreeNodesRemoved(Object source, Object[] path, - int[] childIndices, - Object[] children) { - // Guaranteed to return a non-null array - Object[] listeners = listenerList.getListenerList(); - TreeModelEvent e = null; - // Process the listeners last to first, notifying - // those that are interested in this event - for (int i = listeners.length-2; i>=0; i-=2) { - if (listeners[i]==TreeModelListener.class) { - // Lazily create the event: - if (e == null) - e = new TreeModelEvent(source, path, - childIndices, children); - ((TreeModelListener)listeners[i+1]).treeNodesRemoved(e); - } - } - } - - /* - * Notify all listeners that have registered interest for - * notification on this event type. The event instance - * is lazily created using the parameters passed into - * the fire method. - * @see EventListenerList - */ - protected void fireTreeStructureChanged(Object source, Object[] path, - int[] childIndices, - Object[] children) { - // Guaranteed to return a non-null array - Object[] listeners = listenerList.getListenerList(); - TreeModelEvent e = null; - // Process the listeners last to first, notifying - // those that are interested in this event - for (int i = listeners.length-2; i>=0; i-=2) { - if (listeners[i]==TreeModelListener.class) { - // Lazily create the event: - if (e == null) - e = new TreeModelEvent(source, path, - childIndices, children); - ((TreeModelListener)listeners[i+1]).treeStructureChanged(e); - } - } - } - - // - // Default impelmentations for methods in the TreeTableModel interface. - // - - public Class getColumnClass(int column) { return Object.class; } - - /** By default, make the column with the Tree in it the only editable one. - * Making this column editable causes the JTable to forward mouse - * and keyboard events in the Tree column to the underlying JTree. - */ - public boolean isCellEditable(Object node, int column) { - return getColumnClass(column) == TreeTableModel.class; - } - - public void setValueAt(Object aValue, Object node, int column) {} - - - // Left to be implemented in the subclass: - - /* - * public Object getChild(Object parent, int index) - * public int getChildCount(Object parent) - * public int getColumnCount() - * public String getColumnName(Object node, int column) - * public Object getValueAt(Object node, int column) - */ -} diff --git a/debian/src_from_treetable_article_see_bug409629/FileSystemModel2.java b/debian/src_from_treetable_article_see_bug409629/FileSystemModel2.java deleted file mode 100644 index 5962f7a..0000000 --- a/debian/src_from_treetable_article_see_bug409629/FileSystemModel2.java +++ /dev/null @@ -1,774 +0,0 @@ -/* - * FileSystemModel2.java - * - * Copyright (c) 1998 Sun Microsystems, Inc. All Rights Reserved. - * - * This software is the confidential and proprietary information of Sun - * Microsystems, Inc. ("Confidential Information"). You shall not - * disclose such Confidential Information and shall use it only in - * accordance with the terms of the license agreement you entered into - * with Sun. - * - * SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE - * SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE - * IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR - * PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR ANY DAMAGES - * SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR DISTRIBUTING - * THIS SOFTWARE OR ITS DERIVATIVES. - * - */ - -import java.io.IOException; -import java.io.File; -import java.util.Date; -import java.util.Stack; -import javax.swing.SwingUtilities; -import javax.swing.tree.TreePath; - -/** - * FileSystemModel2 is a TreeTableModel representing a hierarchical file - * system.<p> - * This will recursively load all the children from the path it is - * created with. The loading is done with the method reloadChildren, and - * happens in another thread. The method isReloading can be invoked to check - * if there are active threads. The total size of all the files are also - * accumulated. - * <p> - * By default links are not descended. java.io.File does not have a way - * to distinguish links, so a file is assumed to be a link if its canonical - * path does not start with its parent path. This may not cover all cases, - * but works for the time being. - * <p>Reloading happens such that all the files of the directory are - * loaded and immediately available. The background thread then recursively - * loads all the files of each of those directories. When each directory has - * finished loading all its sub files they are attached and an event is - * generated in the event dispatching thread. A more ambitious approach - * would be to attach each set of directories as they are loaded and generate - * an event. Then, once all the direct descendants of the directory being - * reloaded have finished loading, it is resorted based on total size. - * <p> - * While you can invoke reloadChildren as many times as you want, care - * should be taken in doing this. You should not invoke reloadChildren - * on a node that is already being reloaded, or going to be reloaded - * (meaning its parent is reloading but it hasn't started reloading - * that directory yet). If this is done odd results may - * happen. FileSystemModel2 does not enforce any policy in this manner, - * and it is up to the user of FileSystemModel2 to ensure it doesn't - * happen. - * - * @version 1.12 05/12/98 - * @author Philip Milne - * @author Scott Violet - */ - -public class FileSystemModel2 extends AbstractTreeTableModel { - - // Names of the columns. - static protected String[] cNames = {"Name", "Size", "Type", "Modified"}; - - // Types of the columns. - static protected Class[] cTypes = { TreeTableModel.class, - Integer.class, String.class, - Date.class}; - - // The the returned file length for directories. - public static final Integer ZERO = new Integer(0); - - /** An array of MergeSorter sorters, that will sort based on size. */ - static Stack sorters = new Stack(); - - - /** True if the receiver is valid, once set to false all Threads - * loading files will stop. */ - protected boolean isValid; - - /** Node currently being reloaded, this becomes somewhat muddy if - * reloading is happening in multiple threads. */ - protected FileNode reloadNode; - - /** > 0 indicates reloading some nodes. */ - int reloadCount; - - /** Returns true if links are to be descended. */ - protected boolean descendLinks; - - - /** - * Returns a MergeSort that can sort on the totalSize of a FileNode. - */ - protected static MergeSort getSizeSorter() { - synchronized(sorters) { - if (sorters.size() == 0) { - return new SizeSorter(); - } - return (MergeSort)sorters.pop(); - } - } - - /** - * Should be invoked when a MergeSort is no longer needed. - */ - protected static void recycleSorter(MergeSort sorter) { - synchronized(sorters) { - sorters.push(sorter); - } - } - - - /** - * Creates a FileSystemModel2 rooted at File.separator, which is usually - * the root of the file system. This does not load it, you should invoke - * <code>reloadChildren</code> with the root to start loading. - */ - public FileSystemModel2() { - this(File.separator); - } - - /** - * Creates a FileSystemModel2 with the root being <code>rootPath</code>. - * This does not load it, you should invoke - * <code>reloadChildren</code> with the root to start loading. - */ - public FileSystemModel2(String rootPath) { - super(null); - isValid = true; - root = new FileNode(new File(rootPath)); - } - - // - // The TreeModel interface - // - - /** - * Returns the number of children of <code>node</code>. - */ - public int getChildCount(Object node) { - Object[] children = getChildren(node); - return (children == null) ? 0 : children.length; - } - - /** - * Returns the child of <code>node</code> at index <code>i</code>. - */ - public Object getChild(Object node, int i) { - return getChildren(node)[i]; - } - - /** - * Returns true if the passed in object represents a leaf, false - * otherwise. - */ - public boolean isLeaf(Object node) { - return ((FileNode)node).isLeaf(); - } - - // - // The TreeTableNode interface. - // - - /** - * Returns the number of columns. - */ - public int getColumnCount() { - return cNames.length; - } - - /** - * Returns the name for a particular column. - */ - public String getColumnName(int column) { - return cNames[column]; - } - - /** - * Returns the class for the particular column. - */ - public Class getColumnClass(int column) { - return cTypes[column]; - } - - /** - * Returns the value of the particular column. - */ - public Object getValueAt(Object node, int column) { - FileNode fn = (FileNode)node; - - try { - switch(column) { - case 0: - return fn.getFile().getName(); - case 1: - if (fn.isTotalSizeValid()) { - return new Integer((int)((FileNode)node).totalSize()); - } - return null; - case 2: - return fn.isLeaf() ? "File" : "Directory"; - case 3: - return fn.lastModified(); - } - } - catch (SecurityException se) { } - - return null; - } - - // - // Some convenience methods. - // - - /** - * Reloads the children of the specified node. - */ - public void reloadChildren(Object node) { - FileNode fn = (FileNode)node; - - synchronized(this) { - reloadCount++; - } - fn.resetSize(); - new Thread(new FileNodeLoader((FileNode)node)).start(); - } - - /** - * Stops and waits for all threads to finish loading. - */ - public void stopLoading() { - isValid = false; - synchronized(this) { - while (reloadCount > 0) { - try { - wait(); - } catch (InterruptedException ie) {} - } - } - isValid = true; - } - - /** - * If <code>newValue</code> is true, links are descended. Odd results - * may happen if you set this while other threads are loading. - */ - public void setDescendsLinks(boolean newValue) { - descendLinks = newValue; - } - - /** - * Returns true if links are to be automatically descended. - */ - public boolean getDescendsLinks() { - return descendLinks; - } - - /** - * Returns the path <code>node</code> represents. - */ - public String getPath(Object node) { - return ((FileNode)node).getFile().getPath(); - } - - /** - * Returns the total size of the receiver. - */ - public long getTotalSize(Object node) { - return ((FileNode)node).totalSize(); - } - - /** - * Returns true if the receiver is loading any children. - */ - public boolean isReloading() { - return (reloadCount > 0); - } - - /** - * Returns the path to the node that is being loaded. - */ - public TreePath getPathLoading() { - FileNode rn = reloadNode; - - if (rn != null) { - return new TreePath(rn.getPath()); - } - return null; - } - - /** - * Returns the node being loaded. - */ - public Object getNodeLoading() { - return reloadNode; - } - - protected File getFile(Object node) { - FileNode fileNode = ((FileNode)node); - return fileNode.getFile(); - } - - protected Object[] getChildren(Object node) { - FileNode fileNode = ((FileNode)node); - return fileNode.getChildren(); - } - - - protected static FileNode[] EMPTY_CHILDREN = new FileNode[0]; - - // Used to sort the file names. - static private MergeSort fileMS = new MergeSort() { - public int compareElementsAt(int beginLoc, int endLoc) { - return ((String)toSort[beginLoc]).compareTo - ((String)toSort[endLoc]); - } - }; - - - /** - * A FileNode is a derivative of the File class - though we delegate to - * the File object rather than subclassing it. It is used to maintain a - * cache of a directory's children and therefore avoid repeated access - * to the underlying file system during rendering. - */ - class FileNode { - /** java.io.File the receiver represents. */ - protected File file; - /** Parent FileNode of the receiver. */ - private FileNode parent; - /** Children of the receiver. */ - protected FileNode[] children; - /** Size of the receiver and all its children. */ - protected long totalSize; - /** Valid if the totalSize has finished being calced. */ - protected boolean totalSizeValid; - /** Path of the receiver. */ - protected String canonicalPath; - /** True if the canonicalPath of this instance does not start with - * the canonical path of the parent. */ - protected boolean isLink; - /** Date last modified. */ - protected Date lastModified; - - - protected FileNode(File file) { - this(null, file); - } - - protected FileNode(FileNode parent, File file) { - this.parent = parent; - this.file = file; - try { - canonicalPath = file.getCanonicalPath(); - } - catch (IOException ioe) { - canonicalPath = ""; - } - if (parent != null) { - isLink = !canonicalPath.startsWith(parent.getCanonicalPath()); - } - else { - isLink = false; - } - if (isLeaf()) { - totalSize = file.length(); - totalSizeValid = true; - } - } - - /** - * Returns the date the receiver was last modified. - */ - public Date lastModified() { - if (lastModified == null && file != null) { - lastModified = new Date(file.lastModified()); - } - return lastModified; - } - - /** - * Returns the the string to be used to display this leaf in the JTree. - */ - public String toString() { - return file.getName(); - } - - /** - * Returns the java.io.File the receiver represents. - */ - public File getFile() { - return file; - } - - /** - * Returns size of the receiver and all its children. - */ - public long totalSize() { - return totalSize; - } - - /** - * Returns the parent of the receiver. - */ - public FileNode getParent() { - return parent; - } - - /** - * Returns true if the receiver represents a leaf, that is it is - * isn't a directory. - */ - public boolean isLeaf() { - return file.isFile(); - } - - /** - * Returns true if the total size is valid. - */ - public boolean isTotalSizeValid() { - return totalSizeValid; - } - - /** - * Clears the date. - */ - protected void resetLastModified() { - lastModified = null; - } - - /** - * Sets the size of the receiver to be 0. - */ - protected void resetSize() { - alterTotalSize(-totalSize); - } - - /** - * Loads the children, caching the results in the children - * instance variable. - */ - protected FileNode[] getChildren() { - return children; - } - - /** - * Recursively loads all the children of the receiver. - */ - protected void loadChildren(MergeSort sorter) { - totalSize = file.length(); - children = createChildren(null); - for (int counter = children.length - 1; counter >= 0; counter--) { - Thread.yield(); // Give the GUI CPU time to draw itself. - if (!children[counter].isLeaf() && - (descendLinks || !children[counter].isLink())) { - children[counter].loadChildren(sorter); - } - totalSize += children[counter].totalSize(); - if (!isValid) { - counter = 0; - } - } - if (isValid) { - if (sorter != null) { - sorter.sort(children); - } - totalSizeValid = true; - } - } - - /** - * Loads the children of of the receiver. - */ - protected FileNode[] createChildren(MergeSort sorter) { - FileNode[] retArray = null; - - try { - String[] files = file.list(); - if(files != null) { - if (sorter != null) { - sorter.sort(files); - } - retArray = new FileNode[files.length]; - String path = file.getPath(); - for(int i = 0; i < files.length; i++) { - File childFile = new File(path, files[i]); - retArray[i] = new FileNode(this, childFile); - } - } - } catch (SecurityException se) {} - if (retArray == null) { - retArray = EMPTY_CHILDREN; - } - return retArray; - } - - /** - * Returns true if the children have been loaded. - */ - protected boolean loadedChildren() { - return (file.isFile() || (children != null)); - } - - /** - * Gets the path from the root to the receiver. - */ - public FileNode[] getPath() { - return getPathToRoot(this, 0); - } - - /** - * Returns the canonical path for the receiver. - */ - public String getCanonicalPath() { - return canonicalPath; - } - - /** - * Returns true if the receiver's path does not begin with the - * parent's canonical path. - */ - public boolean isLink() { - return isLink; - } - - protected FileNode[] getPathToRoot(FileNode aNode, int depth) { - FileNode[] retNodes; - - if(aNode == null) { - if(depth == 0) - return null; - else - retNodes = new FileNode[depth]; - } - else { - depth++; - retNodes = getPathToRoot(aNode.getParent(), depth); - retNodes[retNodes.length - depth] = aNode; - } - return retNodes; - } - - /** - * Sets the children of the receiver, updates the total size, - * and if generateEvent is true a tree structure changed event - * is created. - */ - protected void setChildren(FileNode[] newChildren, - boolean generateEvent) { - long oldSize = totalSize; - - totalSize = file.length(); - children = newChildren; - for (int counter = children.length - 1; counter >= 0; - counter--) { - totalSize += children[counter].totalSize(); - } - - if (generateEvent) { - FileNode[] path = getPath(); - - fireTreeStructureChanged(FileSystemModel2.this, path, null, - null); - - FileNode parent = getParent(); - - if (parent != null) { - parent.alterTotalSize(totalSize - oldSize); - } - } - } - - protected synchronized void alterTotalSize(long sizeDelta) { - if (sizeDelta != 0 && (parent = getParent()) != null) { - totalSize += sizeDelta; - nodeChanged(); - parent.alterTotalSize(sizeDelta); - } - else { - // Need a way to specify the root. - totalSize += sizeDelta; - } - } - - /** - * This should only be invoked on the event dispatching thread. - */ - protected synchronized void setTotalSizeValid(boolean newValue) { - if (totalSizeValid != newValue) { - nodeChanged(); - totalSizeValid = newValue; - - FileNode parent = getParent(); - - if (parent != null) { - parent.childTotalSizeChanged(this); - } - } - } - - /** - * Marks the receivers total size as valid, but does not invoke - * node changed, nor message the parent. - */ - protected synchronized void forceTotalSizeValid() { - totalSizeValid = true; - } - - /** - * Invoked when a childs total size has changed. - */ - protected synchronized void childTotalSizeChanged(FileNode child) { - if (totalSizeValid != child.isTotalSizeValid()) { - if (totalSizeValid) { - setTotalSizeValid(false); - } - else { - FileNode[] children = getChildren(); - - for (int counter = children.length - 1; counter >= 0; - counter--) { - if (!children[counter].isTotalSizeValid()) { - return; - } - } - setTotalSizeValid(true); - } - } - - } - - /** - * Can be invoked when a node has changed, will create the - * appropriate event. - */ - protected void nodeChanged() { - FileNode parent = getParent(); - - if (parent != null) { - FileNode[] path = parent.getPath(); - int[] index = { getIndexOfChild(parent, this) }; - Object[] children = { this }; - - fireTreeNodesChanged(FileSystemModel2.this, path, index, - children); - } - } - } - - - /** - * FileNodeLoader can be used to reload all the children of a - * particular node. It first resets the children of the FileNode - * it is created with, and in its run method will reload all of - * that nodes children. FileNodeLoader may not be running in the event - * dispatching thread. As swing is not thread safe it is important - * that we don't generate events in this thread. SwingUtilities.invokeLater - * is used so that events are generated in the event dispatching thread. - */ - class FileNodeLoader implements Runnable { - /** Node creating children for. */ - FileNode node; - /** Sorter. */ - MergeSort sizeMS; - - FileNodeLoader(FileNode node) { - this.node = node; - node.resetLastModified(); - node.setChildren(node.createChildren(fileMS), true); - node.setTotalSizeValid(false); - } - - public void run() { - FileNode[] children = node.getChildren(); - - sizeMS = getSizeSorter(); - for (int counter = children.length - 1; counter >= 0; counter--) { - if (!children[counter].isLeaf()) { - reloadNode = children[counter]; - loadChildren(children[counter]); - reloadNode = null; - } - if (!isValid) { - counter = 0; - } - } - recycleSorter(sizeMS); - if (isValid) { - SwingUtilities.invokeLater(new Runnable() { - public void run() { - MergeSort sorter = getSizeSorter(); - - sorter.sort(node.getChildren()); - recycleSorter(sorter); - node.setChildren(node.getChildren(), true); - synchronized(FileSystemModel2.this) { - reloadCount--; - FileSystemModel2.this.notifyAll(); - } - } - }); - } - else { - synchronized(FileSystemModel2.this) { - reloadCount--; - FileSystemModel2.this.notifyAll(); - } - } - } - - protected void loadChildren(FileNode node) { - if (!node.isLeaf() && (descendLinks || !node.isLink())) { - final FileNode[] children = node.createChildren(null); - - for (int counter = children.length - 1; counter >= 0; - counter--) { - if (!children[counter].isLeaf()) { - if (descendLinks || !children[counter].isLink()) { - children[counter].loadChildren(sizeMS); - } - else { - children[counter].forceTotalSizeValid(); - } - } - if (!isValid) { - counter = 0; - } - } - if (isValid) { - final FileNode fn = node; - - // Reset the children - SwingUtilities.invokeLater(new Runnable() { - public void run() { - MergeSort sorter = getSizeSorter(); - - sorter.sort(children); - recycleSorter(sorter); - fn.setChildren(children, true); - fn.setTotalSizeValid(true); - fn.nodeChanged(); - } - }); - } - } - else { - node.forceTotalSizeValid(); - } - } - } - - - /** - * Sorts the contents, which must be instances of FileNode based on - * totalSize. - */ - static class SizeSorter extends MergeSort { - public int compareElementsAt(int beginLoc, int endLoc) { - long firstSize = ((FileNode)toSort[beginLoc]).totalSize(); - long secondSize = ((FileNode)toSort[endLoc]).totalSize(); - - if (firstSize != secondSize) { - return (int)(secondSize - firstSize); - } - return ((FileNode)toSort[beginLoc]).toString().compareTo - (((FileNode)toSort[endLoc]).toString()); - } - } -} diff --git a/debian/src_from_treetable_article_see_bug409629/JTreeTable.java b/debian/src_from_treetable_article_see_bug409629/JTreeTable.java deleted file mode 100644 index a74b873..0000000 --- a/debian/src_from_treetable_article_see_bug409629/JTreeTable.java +++ /dev/null @@ -1,356 +0,0 @@ -/* - * @(#)JTreeTable.java 1.2 98/10/27 - * - * Copyright 1997, 1998 by Sun Microsystems, Inc., - * 901 San Antonio Road, Palo Alto, California, 94303, U.S.A. - * All rights reserved. - * - * This software is the confidential and proprietary information - * of Sun Microsystems, Inc. ("Confidential Information"). You - * shall not disclose such Confidential Information and shall use - * it only in accordance with the terms of the license agreement - * you entered into with Sun. - */ - - - package org.mozilla.javascript.tools.debugger.downloaded; - import javax.swing.*; - -import javax.swing.event.*; -import javax.swing.tree.*; -import javax.swing.table.*; - -import java.awt.Dimension; -import java.awt.Component; -import java.awt.Graphics; -import java.awt.Rectangle; - -import java.awt.event.MouseEvent; - -import java.util.EventObject; - -/** - * This example shows how to create a simple JTreeTable component, - * by using a JTree as a renderer (and editor) for the cells in a - * particular column in the JTable. - * - * @version 1.2 10/27/98 - * - * @author Philip Milne - * @author Scott Violet - */ -public class JTreeTable extends JTable { - /** A subclass of JTree. */ - protected TreeTableCellRenderer tree; - - public JTreeTable(TreeTableModel treeTableModel) { - super(); - - // Create the tree. It will be used as a renderer and editor. - tree = new TreeTableCellRenderer(treeTableModel); - - // Install a tableModel representing the visible rows in the tree. - super.setModel(new TreeTableModelAdapter(treeTableModel, tree)); - - // Force the JTable and JTree to share their row selection models. - ListToTreeSelectionModelWrapper selectionWrapper = new - ListToTreeSelectionModelWrapper(); - tree.setSelectionModel(selectionWrapper); - setSelectionModel(selectionWrapper.getListSelectionModel()); - - // Install the tree editor renderer and editor. - setDefaultRenderer(TreeTableModel.class, tree); - setDefaultEditor(TreeTableModel.class, new TreeTableCellEditor()); - - // No grid. - setShowGrid(false); - - // No intercell spacing - setIntercellSpacing(new Dimension(0, 0)); - - // And update the height of the trees row to match that of - // the table. - if (tree.getRowHeight() < 1) { - // Metal looks better like this. - setRowHeight(18); - } - } - - /** - * Overridden to message super and forward the method to the tree. - * Since the tree is not actually in the component hieachy it will - * never receive this unless we forward it in this manner. - */ - public void updateUI() { - super.updateUI(); - if(tree != null) { - tree.updateUI(); - } - // Use the tree's default foreground and background colors in the - // table. - LookAndFeel.installColorsAndFont(this, "Tree.background", - "Tree.foreground", "Tree.font"); - } - - /* Workaround for BasicTableUI anomaly. Make sure the UI never tries to - * paint the editor. The UI currently uses different techniques to - * paint the renderers and editors and overriding setBounds() below - * is not the right thing to do for an editor. Returning -1 for the - * editing row in this case, ensures the editor is never painted. - */ - public int getEditingRow() { - return (getColumnClass(editingColumn) == TreeTableModel.class) ? -1 : - editingRow; - } - - /** - * Overridden to pass the new rowHeight to the tree. - */ - public void setRowHeight(int rowHeight) { - super.setRowHeight(rowHeight); - if (tree != null && tree.getRowHeight() != rowHeight) { - tree.setRowHeight(getRowHeight()); - } - } - - /** - * Returns the tree that is being shared between the model. - */ - public JTree getTree() { - return tree; - } - - /** - * A TreeCellRenderer that displays a JTree. - */ - public class TreeTableCellRenderer extends JTree implements - TableCellRenderer { - /** Last table/tree row asked to renderer. */ - protected int visibleRow; - - public TreeTableCellRenderer(TreeModel model) { - super(model); - } - - /** - * updateUI is overridden to set the colors of the Tree's renderer - * to match that of the table. - */ - public void updateUI() { - super.updateUI(); - // Make the tree's cell renderer use the table's cell selection - // colors. - TreeCellRenderer tcr = getCellRenderer(); - if (tcr instanceof DefaultTreeCellRenderer) { - DefaultTreeCellRenderer dtcr = ((DefaultTreeCellRenderer)tcr); - // For 1.1 uncomment this, 1.2 has a bug that will cause an - // exception to be thrown if the border selection color is - // null. - // dtcr.setBorderSelectionColor(null); - dtcr.setTextSelectionColor(UIManager.getColor - ("Table.selectionForeground")); - dtcr.setBackgroundSelectionColor(UIManager.getColor - ("Table.selectionBackground")); - } - } - - /** - * Sets the row height of the tree, and forwards the row height to - * the table. - */ - public void setRowHeight(int rowHeight) { - if (rowHeight > 0) { - super.setRowHeight(rowHeight); - if (JTreeTable.this != null && - JTreeTable.this.getRowHeight() != rowHeight) { - JTreeTable.this.setRowHeight(getRowHeight()); - } - } - } - - /** - * This is overridden to set the height to match that of the JTable. - */ - public void setBounds(int x, int y, int w, int h) { - super.setBounds(x, 0, w, JTreeTable.this.getHeight()); - } - - /** - * Sublcassed to translate the graphics such that the last visible - * row will be drawn at 0,0. - */ - public void paint(Graphics g) { - g.translate(0, -visibleRow * getRowHeight()); - super.paint(g); - } - - /** - * TreeCellRenderer method. Overridden to update the visible row. - */ - public Component getTableCellRendererComponent(JTable table, - Object value, - boolean isSelected, - boolean hasFocus, - int row, int column) { - if(isSelected) - setBackground(table.getSelectionBackground()); - else - setBackground(table.getBackground()); - - visibleRow = row; - return this; - } - } - - - /** - * TreeTableCellEditor implementation. Component returned is the - * JTree. - */ - public class TreeTableCellEditor extends AbstractCellEditor implements - TableCellEditor { - public Component getTableCellEditorComponent(JTable table, - Object value, - boolean isSelected, - int r, int c) { - return tree; - } - - /** - * Overridden to return false, and if the event is a mouse event - * it is forwarded to the tree.<p> - * The behavior for this is debatable, and should really be offered - * as a property. By returning false, all keyboard actions are - * implemented in terms of the table. By returning true, the - * tree would get a chance to do something with the keyboard - * events. For the most part this is ok. But for certain keys, - * such as left/right, the tree will expand/collapse where as - * the table focus should really move to a different column. Page - * up/down should also be implemented in terms of the table. - * By returning false this also has the added benefit that clicking - * outside of the bounds of the tree node, but still in the tree - * column will select the row, whereas if this returned true - * that wouldn't be the case. - * <p>By returning false we are also enforcing the policy that - * the tree will never be editable (at least by a key sequence). - */ - public boolean isCellEditable(EventObject e) { - if (e instanceof MouseEvent) { - for (int counter = getColumnCount() - 1; counter >= 0; - counter--) { - if (getColumnClass(counter) == TreeTableModel.class) { - MouseEvent me = (MouseEvent)e; - MouseEvent newME = new MouseEvent(tree, me.getID(), - me.getWhen(), me.getModifiers(), - me.getX() - getCellRect(0, counter, true).x, - me.getY(), me.getClickCount(), - me.isPopupTrigger()); - tree.dispatchEvent(newME); - break; - } - } - } - return false; - } - } - - - /** - * ListToTreeSelectionModelWrapper extends DefaultTreeSelectionModel - * to listen for changes in the ListSelectionModel it maintains. Once - * a change in the ListSelectionModel happens, the paths are updated - * in the DefaultTreeSelectionModel. - */ - public class ListToTreeSelectionModelWrapper extends DefaultTreeSelectionModel { - /** Set to true when we are updating the ListSelectionModel. */ - protected boolean updatingListSelectionModel; - - public ListToTreeSelectionModelWrapper() { - super(); - getListSelectionModel().addListSelectionListener - (createListSelectionListener()); - } - - /** - * Returns the list selection model. ListToTreeSelectionModelWrapper - * listens for changes to this model and updates the selected paths - * accordingly. - */ - public ListSelectionModel getListSelectionModel() { - return listSelectionModel; - } - - /** - * This is overridden to set <code>updatingListSelectionModel</code> - * and message super. This is the only place DefaultTreeSelectionModel - * alters the ListSelectionModel. - */ - public void resetRowSelection() { - if(!updatingListSelectionModel) { - updatingListSelectionModel = true; - try { - super.resetRowSelection(); - } - finally { - updatingListSelectionModel = false; - } - } - // Notice how we don't message super if - // updatingListSelectionModel is true. If - // updatingListSelectionModel is true, it implies the - // ListSelectionModel has already been updated and the - // paths are the only thing that needs to be updated. - } - - /** - * Creates and returns an instance of ListSelectionHandler. - */ - protected ListSelectionListener createListSelectionListener() { - return new ListSelectionHandler(); - } - - /** - * If <code>updatingListSelectionModel</code> is false, this will - * reset the selected paths from the selected rows in the list - * selection model. - */ - protected void updateSelectedPathsFromSelectedRows() { - if(!updatingListSelectionModel) { - updatingListSelectionModel = true; - try { - // This is way expensive, ListSelectionModel needs an - // enumerator for iterating. - int min = listSelectionModel.getMinSelectionIndex(); - int max = listSelectionModel.getMaxSelectionIndex(); - - clearSelection(); - if(min != -1 && max != -1) { - for(int counter = min; counter <= max; counter++) { - if(listSelectionModel.isSelectedIndex(counter)) { - TreePath selPath = tree.getPathForRow - (counter); - - if(selPath != null) { - addSelectionPath(selPath); - } - } - } - } - } - finally { - updatingListSelectionModel = false; - } - } - } - - /** - * Class responsible for calling updateSelectedPathsFromSelectedRows - * when the selection of the list changse. - */ - class ListSelectionHandler implements ListSelectionListener { - public void valueChanged(ListSelectionEvent e) { - updateSelectedPathsFromSelectedRows(); - } - } - } -} diff --git a/debian/src_from_treetable_article_see_bug409629/MergeSort.java b/debian/src_from_treetable_article_see_bug409629/MergeSort.java deleted file mode 100644 index 4a83bc8..0000000 --- a/debian/src_from_treetable_article_see_bug409629/MergeSort.java +++ /dev/null @@ -1,84 +0,0 @@ -/* - * MergeSort.java - * - * Copyright (c) 1998 Sun Microsystems, Inc. All Rights Reserved. - * - * This software is the confidential and proprietary information of Sun - * Microsystems, Inc. ("Confidential Information"). You shall not - * disclose such Confidential Information and shall use it only in - * accordance with the terms of the license agreement you entered into - * with Sun. - * - * SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE - * SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE - * IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR - * PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR ANY DAMAGES - * SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR DISTRIBUTING - * THIS SOFTWARE OR ITS DERIVATIVES. - * - */ - -/** - * An implementation of MergeSort, needs to be subclassed to - * compare the terms. - * - * @author Scott Violet - */ -public abstract class MergeSort extends Object { - protected Object toSort[]; - protected Object swapSpace[]; - - public void sort(Object array[]) { - if(array != null && array.length > 1) - { - int maxLength; - - maxLength = array.length; - swapSpace = new Object[maxLength]; - toSort = array; - this.mergeSort(0, maxLength - 1); - swapSpace = null; - toSort = null; - } - } - - public abstract int compareElementsAt(int beginLoc, int endLoc); - - protected void mergeSort(int begin, int end) { - if(begin != end) - { - int mid; - - mid = (begin + end) / 2; - this.mergeSort(begin, mid); - this.mergeSort(mid + 1, end); - this.merge(begin, mid, end); - } - } - - protected void merge(int begin, int middle, int end) { - int firstHalf, secondHalf, count; - - firstHalf = count = begin; - secondHalf = middle + 1; - while((firstHalf <= middle) && (secondHalf <= end)) - { - if(this.compareElementsAt(secondHalf, firstHalf) < 0) - swapSpace[count++] = toSort[secondHalf++]; - else - swapSpace[count++] = toSort[firstHalf++]; - } - if(firstHalf <= middle) - { - while(firstHalf <= middle) - swapSpace[count++] = toSort[firstHalf++]; - } - else - { - while(secondHalf <= end) - swapSpace[count++] = toSort[secondHalf++]; - } - for(count = begin;count <= end;count++) - toSort[count] = swapSpace[count]; - } -} diff --git a/debian/src_from_treetable_article_see_bug409629/TreeTableExample2.java b/debian/src_from_treetable_article_see_bug409629/TreeTableExample2.java deleted file mode 100644 index a9e0c7a..0000000 --- a/debian/src_from_treetable_article_see_bug409629/TreeTableExample2.java +++ /dev/null @@ -1,480 +0,0 @@ -/* - * TreeTableExample2.java - * - * Copyright (c) 1998 Sun Microsystems, Inc. All Rights Reserved. - * - * This software is the confidential and proprietary information of Sun - * Microsystems, Inc. ("Confidential Information"). You shall not - * disclose such Confidential Information and shall use it only in - * accordance with the terms of the license agreement you entered into - * with Sun. - * - * SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE - * SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE - * IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR - * PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR ANY DAMAGES - * SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR DISTRIBUTING - * THIS SOFTWARE OR ITS DERIVATIVES. - * - */ - -import javax.swing.*; -import javax.swing.border.*; -import javax.swing.event.*; -import javax.swing.table.*; -import javax.swing.tree.*; -import java.awt.*; -import java.awt.event.*; -import java.text.NumberFormat; - -/** - * Assembles the UI. The UI consists of a JTreeTable and a status label. - * As nodes are loaded by the FileSystemModel2, in a background thread, - * the status label updates as well as the renderer to draw the node that - * is being loaded differently. - * - * @author Scott Violet - * @author Philip Milne - */ -public class TreeTableExample2 { - /** Number of instances of TreeTableExample2. */ - protected static int ttCount; - - /** Model for the JTreeTable. */ - protected FileSystemModel2 model; - /** Used to represent the model. */ - protected JTreeTable treeTable; - /** Row the is being reloaded. */ - protected int reloadRow; - /** TreePath being reloaded. */ - protected TreePath reloadPath; - /** A counter increment as the Timer fies and the same path is - * being reloaded. */ - protected int reloadCounter; - /** Timer used to update reload state. */ - protected Timer timer; - /** Used to indicate status. */ - protected JLabel statusLabel; - /** Frame containing everything. */ - protected JFrame frame; - /** Path created with. */ - protected String path; - - - public TreeTableExample2(String path) { - this.path = path; - ttCount++; - - frame = createFrame(); - - Container cPane = frame.getContentPane(); - JMenuBar mb = createMenuBar(); - - model = createModel(path); - treeTable = createTreeTable(); - statusLabel = createStatusLabel(); - cPane.add(new JScrollPane(treeTable)); - cPane.add(statusLabel, BorderLayout.SOUTH); - - reloadRow = -1; - frame.setJMenuBar(mb); - frame.pack(); - frame.show(); - SwingUtilities.invokeLater(new Runnable() { - public void run() { - reload(model.getRoot()); - } - }); - } - - /** - * Creates and return a JLabel that is used to indicate the status - * of loading. - */ - protected JLabel createStatusLabel() { - JLabel retLabel = new JLabel(" "); - - retLabel.setHorizontalAlignment(JLabel.RIGHT); - retLabel.setBorder(new BevelBorder(BevelBorder.LOWERED)); - return retLabel; - } - - /** - * Creates and returns the instanceof JTreeTable that will be used. - * This also creates, but does not start, the Timer that is used to - * update the display as files are loaded. - */ - protected JTreeTable createTreeTable() { - JTreeTable treeTable = new JTreeTable(model); - - treeTable.getColumnModel().getColumn(1).setCellRenderer - (new IndicatorRenderer()); - - Reloader rl = new Reloader(); - - timer = new Timer(700, rl); - timer.setRepeats(true); - treeTable.getTree().addTreeExpansionListener(rl); - return treeTable; - } - - /** - * Creates the FileSystemModel2 that will be used. - */ - protected FileSystemModel2 createModel(String path) { - return new FileSystemModel2(path); - } - - /** - * Creates the JFrame that will contain everything. - */ - protected JFrame createFrame() { - JFrame retFrame = new JFrame("TreeTable II"); - - retFrame.addWindowListener(new WindowAdapter() { - public void windowClosing(WindowEvent we) { - if (--ttCount == 0) { - System.exit(0); - } - } - }); - return retFrame; - } - - /** - * Creates a menu bar. - */ - protected JMenuBar createMenuBar() { - JMenu fileMenu = new JMenu("File"); - JMenuItem menuItem; - - menuItem = new JMenuItem("Open"); - menuItem.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent ae) { - JFileChooser fc = new JFileChooser(path); - - fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); - - int result = fc.showOpenDialog(frame); - - if (result == JFileChooser.APPROVE_OPTION) { - String newPath = fc.getSelectedFile().getPath(); - - new TreeTableExample2(newPath); - } - } - }); - fileMenu.add(menuItem); - fileMenu.addSeparator(); - - menuItem = new JMenuItem("Reload"); - menuItem.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent ae) { - TreePath path = treeTable.getTree().getSelectionPath(); - - if (path != null) { - model.stopLoading(); - reload(path.getLastPathComponent()); - } - } - }); - fileMenu.add(menuItem); - - menuItem = new JMenuItem("Stop"); - menuItem.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent ae) { - model.stopLoading(); - } - }); - fileMenu.add(menuItem); - - fileMenu.addSeparator(); - - menuItem = new JMenuItem("Exit"); - menuItem.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent ae) { - System.exit(0); - } - }); - fileMenu.add(menuItem); - - - // Create a menu bar - JMenuBar menuBar = new JMenuBar(); - - menuBar.add(fileMenu); - - // Menu for the look and feels (lafs). - UIManager.LookAndFeelInfo[] lafs = UIManager. - getInstalledLookAndFeels(); - ButtonGroup lafGroup = new ButtonGroup(); - - JMenu optionsMenu = new JMenu("Options"); - - menuBar.add(optionsMenu); - - for(int i = 0; i < lafs.length; i++) { - JRadioButtonMenuItem rb = new JRadioButtonMenuItem(lafs[i]. - getName()); - optionsMenu.add(rb); - rb.setSelected(UIManager.getLookAndFeel().getName().equals - (lafs[i].getName())); - rb.putClientProperty("UIKey", lafs[i]); - rb.addItemListener(new ItemListener() { - public void itemStateChanged(ItemEvent ae) { - JRadioButtonMenuItem rb2 = (JRadioButtonMenuItem)ae. - getSource(); - if(rb2.isSelected()) { - UIManager.LookAndFeelInfo info = - (UIManager.LookAndFeelInfo) - rb2.getClientProperty("UIKey"); - try { - UIManager.setLookAndFeel(info.getClassName()); - SwingUtilities.updateComponentTreeUI(frame); - } - catch (Exception e) { - System.err.println("unable to set UI " + - e.getMessage()); - } - } - } - }); - lafGroup.add(rb); - } - return menuBar; - } - - /** - * Invoked to reload the children of a particular node. This will - * also restart the timer. - */ - protected void reload(Object node) { - model.reloadChildren(node); - if (!timer.isRunning()) { - timer.start(); - } - } - - /** - * Updates the status label based on reloadRow. - */ - protected void updateStatusLabel() { - if (reloadPath != null) { - statusLabel.setText("Reloading: " + model.getPath - (reloadPath.getLastPathComponent())); - if ((reloadCounter % 4) < 2) { - statusLabel.setForeground(Color.red); - } - else { - statusLabel.setForeground(Color.blue); - } - } - else if (!model.isReloading()) { - statusLabel.setText("Total Size: " + NumberFormat.getInstance(). - format(model.getTotalSize(model.getRoot()))); - statusLabel.setForeground(Color.black); - } - } - - - /** - * Reloader is the ActionListener used in the Timer. In response to - * the timer updating it will reset the reloadRow/reloadPath and - * generate the necessary event so that the display will update. It - * also implements the TreeExpansionListener so that if the tree is - * altered while loading the reloadRow is updated accordingly. - */ - class Reloader implements ActionListener, TreeExpansionListener { - public void actionPerformed(ActionEvent ae) { - if (!model.isReloading()) { - // No longer loading. - timer.stop(); - if (reloadRow != -1) { - generateChangeEvent(reloadRow); - } - reloadRow = -1; - reloadPath = null; - } - else { - // Still loading, see if paths changed. - TreePath newPath = model.getPathLoading(); - - if (newPath == null) { - // Hmm... Will usually indicate the reload thread - // completed between time we asked if reloading. - if (reloadRow != -1) { - generateChangeEvent(reloadRow); - } - reloadRow = -1; - reloadPath = null; - } - else { - // Ok, valid path, see if matches last path. - int newRow = treeTable.getTree().getRowForPath - (newPath); - - if (newPath.equals(reloadPath)) { - reloadCounter = (reloadCounter + 1) % 8; - if (newRow != reloadRow) { - int lastRow = reloadRow; - - reloadRow = newRow; - generateChangeEvent(lastRow); - } - generateChangeEvent(reloadRow); - } - else { - int lastRow = reloadRow; - - reloadCounter = 0; - reloadRow = newRow; - reloadPath = newPath; - if (lastRow != reloadRow) { - generateChangeEvent(lastRow); - } - generateChangeEvent(reloadRow); - } - } - } - updateStatusLabel(); - } - - /** - * Generates and update event for the specified row. FileSystemModel2 - * could do this, but it would not know when the row has changed - * as a result of expanding/collapsing nodes in the tree. - */ - protected void generateChangeEvent(int row) { - if (row != -1) { - AbstractTableModel tModel = (AbstractTableModel)treeTable. - getModel(); - - tModel.fireTableChanged(new TableModelEvent - (tModel, row, row, 1)); - } - } - - // - // TreeExpansionListener - // - - /** - * Invoked when the tree has expanded. - */ - public void treeExpanded(TreeExpansionEvent te) { - updateRow(); - } - - /** - * Invoked when the tree has collapsed. - */ - public void treeCollapsed(TreeExpansionEvent te) { - updateRow(); - } - - /** - * Updates the reloadRow and path, this does not genernate a - * change event. - */ - protected void updateRow() { - reloadPath = model.getPathLoading(); - - if (reloadPath != null) { - reloadRow = treeTable.getTree().getRowForPath(reloadPath); - } - } - } - - - /** - * A renderer that will give an indicator when a cell is being reloaded. - */ - class IndicatorRenderer extends DefaultTableCellRenderer { - /** Makes sure the number of displayed in an internationalized - * manner. */ - protected NumberFormat formatter; - /** Row that is currently being painted. */ - protected int lastRow; - - - IndicatorRenderer() { - setHorizontalAlignment(JLabel.RIGHT); - formatter = NumberFormat.getInstance(); - } - - /** - * Invoked as part of DefaultTableCellRenderers implemention. Sets - * the text of the label. - */ - public void setValue(Object value) { - setText((value == null) ? "---" : formatter.format(value)); - } - - /** - * Returns this. - */ - public Component getTableCellRendererComponent(JTable table, - Object value, boolean isSelected, boolean hasFocus, - int row, int column) { - super.getTableCellRendererComponent(table, value, isSelected, - hasFocus, row, column); - lastRow = row; - return this; - } - - /** - * If the row being painted is also being reloaded this will draw - * a little indicator. - */ - public void paint(Graphics g) { - if (lastRow == reloadRow) { - int width = getWidth(); - int height = getHeight(); - - g.setColor(getBackground()); - g.fillRect(0, 0, width, height); - g.setColor(getForeground()); - - int diameter = Math.min(width, height); - - if (reloadCounter < 5) { - g.fillArc((width - diameter) / 2, (height - diameter) / 2, - diameter, diameter, 90, -(reloadCounter * 90)); - } - else { - g.fillArc((width - diameter) / 2, (height - diameter) / 2, - diameter, diameter, 90, - (4 - reloadCounter % 4) * 90); - } - } - else { - super.paint(g); - } - } - } - - - public static void main(String[] args) { - if (args.length > 0) { - for (int counter = args.length - 1; counter >= 0; counter--) { - new TreeTableExample2(args[counter]); - } - } - else { - String path; - - try { - path = System.getProperty("user.home"); - if (path != null) { - new TreeTableExample2(path); - } - } - catch (SecurityException se) { - path = null; - } - if (path == null) { - System.out.println("Could not determine home directory"); - } - } - } -} diff --git a/debian/src_from_treetable_article_see_bug409629/TreeTableModel.java b/debian/src_from_treetable_article_see_bug409629/TreeTableModel.java deleted file mode 100644 index 31e33a1..0000000 --- a/debian/src_from_treetable_article_see_bug409629/TreeTableModel.java +++ /dev/null @@ -1,71 +0,0 @@ -/* - * TreeTableModel.java - * - * Copyright (c) 1998 Sun Microsystems, Inc. All Rights Reserved. - * - * This software is the confidential and proprietary information of Sun - * Microsystems, Inc. ("Confidential Information"). You shall not - * disclose such Confidential Information and shall use it only in - * accordance with the terms of the license agreement you entered into - * with Sun. - * - * SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE - * SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE - * IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR - * PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR ANY DAMAGES - * SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR DISTRIBUTING - * THIS SOFTWARE OR ITS DERIVATIVES. - * - */ - - - package org.mozilla.javascript.tools.debugger.downloaded; - import javax.swing.tree.TreeModel; - - -/** - * TreeTableModel is the model used by a JTreeTable. It extends TreeModel - * to add methods for getting inforamtion about the set of columns each - * node in the TreeTableModel may have. Each column, like a column in - * a TableModel, has a name and a type associated with it. Each node in - * the TreeTableModel can return a value for each of the columns and - * set that value if isCellEditable() returns true. - * - * @author Philip Milne - * @author Scott Violet - */ -public interface TreeTableModel extends TreeModel -{ - /** - * Returns the number ofs availible column. - */ - public int getColumnCount(); - - /** - * Returns the name for column number <code>column</code>. - */ - public String getColumnName(int column); - - /** - * Returns the type for column number <code>column</code>. - */ - public Class getColumnClass(int column); - - /** - * Returns the value to be displayed for node <code>node</code>, - * at column number <code>column</code>. - */ - public Object getValueAt(Object node, int column); - - /** - * Indicates whether the the value for node <code>node</code>, - * at column number <code>column</code> is editable. - */ - public boolean isCellEditable(Object node, int column); - - /** - * Sets the value for node <code>node</code>, - * at column number <code>column</code>. - */ - public void setValueAt(Object aValue, Object node, int column); -} diff --git a/debian/src_from_treetable_article_see_bug409629/TreeTableModelAdapter.java b/debian/src_from_treetable_article_see_bug409629/TreeTableModelAdapter.java deleted file mode 100644 index 6a2e496..0000000 --- a/debian/src_from_treetable_article_see_bug409629/TreeTableModelAdapter.java +++ /dev/null @@ -1,128 +0,0 @@ -/* - * @(#)TreeTableModelAdapter.java 1.2 98/10/27 - * - * Copyright 1997, 1998 by Sun Microsystems, Inc., - * 901 San Antonio Road, Palo Alto, California, 94303, U.S.A. - * All rights reserved. - * - * This software is the confidential and proprietary information - * of Sun Microsystems, Inc. ("Confidential Information"). You - * shall not disclose such Confidential Information and shall use - * it only in accordance with the terms of the license agreement - * you entered into with Sun. - */ - - - package org.mozilla.javascript.tools.debugger.downloaded; - import javax.swing.JTree; - -import javax.swing.SwingUtilities; -import javax.swing.table.AbstractTableModel; -import javax.swing.tree.TreePath; -import javax.swing.event.TreeExpansionEvent; -import javax.swing.event.TreeExpansionListener; -import javax.swing.event.TreeModelEvent; -import javax.swing.event.TreeModelListener; - -/** - * This is a wrapper class takes a TreeTableModel and implements - * the table model interface. The implementation is trivial, with - * all of the event dispatching support provided by the superclass: - * the AbstractTableModel. - * - * @version 1.2 10/27/98 - * - * @author Philip Milne - * @author Scott Violet - */ -public class TreeTableModelAdapter extends AbstractTableModel -{ - JTree tree; - TreeTableModel treeTableModel; - - public TreeTableModelAdapter(TreeTableModel treeTableModel, JTree tree) { - this.tree = tree; - this.treeTableModel = treeTableModel; - - tree.addTreeExpansionListener(new TreeExpansionListener() { - // Don't use fireTableRowsInserted() here; the selection model - // would get updated twice. - public void treeExpanded(TreeExpansionEvent event) { - fireTableDataChanged(); - } - public void treeCollapsed(TreeExpansionEvent event) { - fireTableDataChanged(); - } - }); - - // Install a TreeModelListener that can update the table when - // tree changes. We use delayedFireTableDataChanged as we can - // not be guaranteed the tree will have finished processing - // the event before us. - treeTableModel.addTreeModelListener(new TreeModelListener() { - public void treeNodesChanged(TreeModelEvent e) { - delayedFireTableDataChanged(); - } - - public void treeNodesInserted(TreeModelEvent e) { - delayedFireTableDataChanged(); - } - - public void treeNodesRemoved(TreeModelEvent e) { - delayedFireTableDataChanged(); - } - - public void treeStructureChanged(TreeModelEvent e) { - delayedFireTableDataChanged(); - } - }); - } - - // Wrappers, implementing TableModel interface. - - public int getColumnCount() { - return treeTableModel.getColumnCount(); - } - - public String getColumnName(int column) { - return treeTableModel.getColumnName(column); - } - - public Class getColumnClass(int column) { - return treeTableModel.getColumnClass(column); - } - - public int getRowCount() { - return tree.getRowCount(); - } - - protected Object nodeForRow(int row) { - TreePath treePath = tree.getPathForRow(row); - return treePath.getLastPathComponent(); - } - - public Object getValueAt(int row, int column) { - return treeTableModel.getValueAt(nodeForRow(row), column); - } - - public boolean isCellEditable(int row, int column) { - return treeTableModel.isCellEditable(nodeForRow(row), column); - } - - public void setValueAt(Object value, int row, int column) { - treeTableModel.setValueAt(value, nodeForRow(row), column); - } - - /** - * Invokes fireTableDataChanged after all the pending events have been - * processed. SwingUtilities.invokeLater is used to handle this. - */ - protected void delayedFireTableDataChanged() { - SwingUtilities.invokeLater(new Runnable() { - public void run() { - fireTableDataChanged(); - } - }); - } -} - -- Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-java/rhino.git _______________________________________________ pkg-java-commits mailing list [email protected] http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-java-commits

