diff options
author | Bernard Normier <bernard@zeroc.com> | 2006-03-29 21:21:02 +0000 |
---|---|---|
committer | Bernard Normier <bernard@zeroc.com> | 2006-03-29 21:21:02 +0000 |
commit | 20744ae1f1182d08e26b175f59d14041aabaf754 (patch) | |
tree | 937d125b80663966b3a61e13e744e28daf1f22da /java/src/IceGridGUI/Application/ListTreeNode.java | |
parent | Java metadata (diff) | |
download | ice-20744ae1f1182d08e26b175f59d14041aabaf754.tar.bz2 ice-20744ae1f1182d08e26b175f59d14041aabaf754.tar.xz ice-20744ae1f1182d08e26b175f59d14041aabaf754.zip |
IceGrid GUI refactoring
Diffstat (limited to 'java/src/IceGridGUI/Application/ListTreeNode.java')
-rwxr-xr-x | java/src/IceGridGUI/Application/ListTreeNode.java | 296 |
1 files changed, 296 insertions, 0 deletions
diff --git a/java/src/IceGridGUI/Application/ListTreeNode.java b/java/src/IceGridGUI/Application/ListTreeNode.java new file mode 100755 index 00000000000..7be67779ee1 --- /dev/null +++ b/java/src/IceGridGUI/Application/ListTreeNode.java @@ -0,0 +1,296 @@ +// **********************************************************************
+//
+// Copyright (c) 2003-2006 ZeroC, Inc. All rights reserved.
+//
+// This copy of Ice is licensed to you under the terms described in the
+// ICE_LICENSE file included in this distribution.
+//
+// **********************************************************************
+package IceGridGUI.Application;
+
+import javax.swing.tree.DefaultTreeModel;
+
+import java.util.Enumeration;
+
+import IceGrid.*;
+import IceGridGUI.*;
+
+//
+// An editable TreeNode that holds a list of children
+//
+abstract class ListTreeNode extends TreeNode
+{
+ public Enumeration children()
+ {
+ return new Enumeration()
+ {
+ public boolean hasMoreElements()
+ {
+ return _p.hasNext();
+ }
+
+ public Object nextElement()
+ {
+ return _p.next();
+ }
+
+ private java.util.Iterator _p = _children.iterator();
+ };
+ }
+
+ public boolean getAllowsChildren()
+ {
+ return true;
+ }
+
+ public javax.swing.tree.TreeNode getChildAt(int childIndex)
+ {
+ if(childIndex < 0)
+ {
+ throw new ArrayIndexOutOfBoundsException(childIndex);
+ }
+ else if(childIndex < _children.size())
+ {
+ return (javax.swing.tree.TreeNode)_children.get(childIndex);
+ }
+ else
+ {
+ throw new ArrayIndexOutOfBoundsException(childIndex);
+ }
+ }
+
+ public int getChildCount()
+ {
+ return _children.size();
+ }
+
+ public int getIndex(javax.swing.tree.TreeNode node)
+ {
+ return _children.indexOf(node);
+ }
+
+ public boolean isLeaf()
+ {
+ return _children.isEmpty();
+ }
+
+ public Editor getEditor()
+ {
+ if(_editor == null)
+ {
+ _editor = new Editor();
+ }
+ return _editor;
+ }
+
+ protected Editor createEditor()
+ {
+ assert false;
+ return null;
+ }
+
+ protected ListTreeNode(boolean brandNew, TreeNode parent, String id)
+ {
+ super(parent, id);
+ _editable = new Editable(brandNew);
+ }
+
+ void write(XMLWriter writer) throws java.io.IOException
+ {
+ java.util.Iterator p = _children.iterator();
+ while(p.hasNext())
+ {
+ TreeNode node = (TreeNode)p.next();
+ node.write(writer);
+ }
+ }
+
+ void insertChild(TreeNode child, boolean fireEvent)
+ throws UpdateFailedException
+ {
+ DefaultTreeModel treeModel = fireEvent ?
+ getRoot().getTreeModel() : null;
+
+ if(!insertSortedChild(child, _children, treeModel))
+ {
+ throw new UpdateFailedException(this, child.getId());
+ }
+ }
+
+ void insertChildren(java.util.List newChildren, boolean fireEvent)
+ throws UpdateFailedException
+ {
+ TreeNodeBase[] children = (TreeNodeBase[])newChildren.toArray(new TreeNodeBase[0]);
+ java.util.Arrays.sort(children, _childComparator);
+
+ int[] indices = new int[children.length];
+
+ int i = 0;
+ boolean checkInsert = true;
+ for(int j = 0; j < children.length; ++j)
+ {
+ String id = children[j].getId();
+
+ if(checkInsert)
+ {
+ while(i < _children.size())
+ {
+ TreeNodeBase existingChild = (TreeNodeBase)_children.get(i);
+ int cmp = id.compareTo(existingChild.getId());
+ if(cmp == 0)
+ {
+ throw new UpdateFailedException(this, id);
+ }
+ if(cmp < 0)
+ {
+ break; // while
+ }
+ i++;
+ }
+
+ if(i < _children.size())
+ {
+ // Insert here, and increment i (since children is sorted)
+ _children.add(i, children[j]);
+ indices[j] = i;
+ i++;
+ continue; // for
+ }
+ else
+ {
+ checkInsert = false;
+ }
+ }
+
+ //
+ // Append
+ //
+ _children.add(children[j]);
+ indices[j] = i;
+ i++;
+ }
+
+ if(fireEvent)
+ {
+ getRoot().getTreeModel().nodesWereInserted(this, indices);
+ }
+ }
+
+ int removeChild(TreeNode child)
+ {
+ int index = getIndex(child);
+ _children.remove(child);
+
+ getRoot().getTreeModel().nodesWereRemoved(this,
+ new int[]{index},
+ new Object[]{child});
+ return index;
+ }
+
+ void removeChildren(String[] childIds)
+ {
+ removeSortedChildren(childIds, _children, getRoot().getTreeModel());
+ }
+
+ void childrenChanged(java.util.List children)
+ {
+ childrenChanged(children, getRoot().getTreeModel());
+ }
+
+ Editable getEditable()
+ {
+ return _editable;
+ }
+
+ protected String makeNewChildId(String base)
+ {
+ String id = base;
+ int i = 0;
+ while(findChild(id) != null)
+ {
+ id = base + "-" + (++i);
+ }
+ return id;
+ }
+
+
+ javax.swing.ComboBoxModel createComboBoxModel()
+ {
+ return new ComboBoxModel();
+ }
+
+ javax.swing.ComboBoxModel createComboBoxModel(Object item)
+ {
+ return new ComboBoxModel(item);
+ }
+
+ //
+ // Adapts ListTreeNode to a ComboBoxModel
+ //
+ class ComboBoxModel extends javax.swing.AbstractListModel
+ implements javax.swing.ComboBoxModel
+ {
+ public Object getElementAt(int index)
+ {
+ if(_firstItem != null)
+ {
+ if(index == 0)
+ {
+ return _firstItem;
+ }
+ else
+ {
+ return getChildAt(index - 1);
+ }
+ }
+ else
+ {
+ return getChildAt(index);
+ }
+ }
+
+ public int getSize()
+ {
+ if(_firstItem != null)
+ {
+ return getChildCount() + 1;
+ }
+ else
+ {
+ return getChildCount();
+ }
+ }
+
+ public Object getSelectedItem()
+ {
+ return _selectedItem;
+ }
+
+ public void setSelectedItem(Object obj)
+ {
+ if(obj != _selectedItem)
+ {
+ _selectedItem = obj;
+ fireContentsChanged(this, -1, -1);
+ }
+ }
+
+ ComboBoxModel(Object firstItem)
+ {
+ _firstItem = firstItem;
+ }
+
+ ComboBoxModel()
+ {
+ _firstItem = null;
+ }
+
+ private final Object _firstItem;
+ private Object _selectedItem;
+ }
+
+ protected final java.util.LinkedList _children = new java.util.LinkedList();
+ protected Editable _editable;
+
+ static private Editor _editor;
+}
|