summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xjava/src/IceGrid/TreeNode/Adapter.java15
-rwxr-xr-xjava/src/IceGrid/TreeNode/Adapters.java60
-rwxr-xr-xjava/src/IceGrid/TreeNode/Parent.java77
3 files changed, 90 insertions, 62 deletions
diff --git a/java/src/IceGrid/TreeNode/Adapter.java b/java/src/IceGrid/TreeNode/Adapter.java
index be910062b2e..bc4d02dc012 100755
--- a/java/src/IceGrid/TreeNode/Adapter.java
+++ b/java/src/IceGrid/TreeNode/Adapter.java
@@ -136,7 +136,7 @@ class Adapter extends Leaf
descriptor.name = newName;
writeDescriptor();
parent.addDescriptor(descriptor);
- parent.removeChild(_adapter.getId(), true);
+ _adapter.destroy();
if(!_adapter.getApplication().applyUpdate())
{
@@ -159,10 +159,6 @@ class Adapter extends Leaf
}
else
{
- //
- // No longer ephemeral
- //
- _adapter.setParent(null);
parent = (Adapters)_adapter.getModel().findNewNode(parent.getPath());
_adapter = (Adapter)parent.findChild(newResolvedName);
_adapter.getModel().setSelectionPath(_adapter.getPath());
@@ -600,15 +596,13 @@ class Adapter extends Leaf
public boolean destroy()
{
- System.err.println("Destroying " + _id);
-
- if(_parent != null && (isEphemeral() || isEditable() && _model.canUpdate()))
+ if(isEphemeral() || isEditable() && _model.canUpdate())
{
- Adapters adapters = (Adapters)getParent();
+ Adapters adapters = (Adapters)_parent;
if(isEphemeral())
{
- adapters.removeChild(_id, true);
+ adapters.removeChild(this, true);
}
else
{
@@ -616,7 +610,6 @@ class Adapter extends Leaf
getEditable().markModified();
getApplication().applySafeUpdate();
}
- setParent(null);
return true;
}
else
diff --git a/java/src/IceGrid/TreeNode/Adapters.java b/java/src/IceGrid/TreeNode/Adapters.java
index 32fced62561..25a15de2bd0 100755
--- a/java/src/IceGrid/TreeNode/Adapters.java
+++ b/java/src/IceGrid/TreeNode/Adapters.java
@@ -8,11 +8,6 @@
// **********************************************************************
package IceGrid.TreeNode;
-import java.awt.event.ActionEvent;
-import javax.swing.AbstractAction;
-import javax.swing.Action;
-import javax.swing.JPopupMenu;
-
import IceGrid.AdapterDescriptor;
import IceGrid.Model;
import IceGrid.Utils;
@@ -20,47 +15,6 @@ import IceGrid.Utils;
class Adapters extends Parent
{
- static class PopupMenu extends JPopupMenu
- {
- PopupMenu()
- {
- _new = new AbstractAction("New")
- {
- public void actionPerformed(ActionEvent e)
- {
- _adapters.newAdapter(null);
- }
- };
-
- add(_new);
- }
-
- void setAdapters(Adapters adapters)
- {
- _adapters = adapters;
- }
-
- private Adapters _adapters;
- private Action _new;
- }
-
- public JPopupMenu getPopupMenu()
- {
- if(_isEditable && !_inIceBox)
- {
- if(_popup == null)
- {
- _popup = new PopupMenu();
- }
- _popup.setAdapters(this);
- return _popup;
- }
- else
- {
- return null;
- }
- }
-
public void unregister()
{
java.util.Iterator p = _children.iterator();
@@ -82,7 +36,6 @@ class Adapters extends Parent
_isEditable = isEditable;
_inIceBox = inIceBox;
_resolver = resolver;
- _popup = new PopupMenu();
java.util.Iterator p = _descriptors.iterator();
while(p.hasNext())
@@ -97,6 +50,11 @@ class Adapters extends Parent
}
}
+ boolean canHaveNewChild()
+ {
+ return _isEditable && !_inIceBox;
+ }
+
boolean isEditable()
{
return _isEditable;
@@ -107,6 +65,11 @@ class Adapters extends Parent
return _inIceBox;
}
+ void newChild()
+ {
+ newAdapter(null);
+ }
+
void newAdapter(AdapterDescriptor descriptor)
{
//
@@ -154,7 +117,7 @@ class Adapters extends Parent
public void paste(Object descriptor)
{
- if(_isEditable && !_inIceBox && descriptor instanceof AdapterDescriptor)
+ if(canHaveNewChild() && descriptor instanceof AdapterDescriptor)
{
AdapterDescriptor d = (AdapterDescriptor)descriptor;
try
@@ -193,5 +156,4 @@ class Adapters extends Parent
private Utils.Resolver _resolver;
private boolean _isEditable;
private boolean _inIceBox;
- static private PopupMenu _popup;
}
diff --git a/java/src/IceGrid/TreeNode/Parent.java b/java/src/IceGrid/TreeNode/Parent.java
index 6eaf05d1b33..c799078747d 100755
--- a/java/src/IceGrid/TreeNode/Parent.java
+++ b/java/src/IceGrid/TreeNode/Parent.java
@@ -8,6 +8,10 @@
// **********************************************************************
package IceGrid.TreeNode;
+import java.awt.event.ActionEvent;
+import javax.swing.AbstractAction;
+import javax.swing.Action;
+import javax.swing.JPopupMenu;
import javax.swing.tree.TreePath;
import javax.swing.event.TreeModelEvent;
import IceGrid.Model;
@@ -19,6 +23,30 @@ import IceGrid.TreeModelI;
class Parent extends CommonBaseI
{
+ static class NewPopupMenu extends JPopupMenu
+ {
+ NewPopupMenu()
+ {
+ _new = new AbstractAction("New")
+ {
+ public void actionPerformed(ActionEvent e)
+ {
+ _parent.newChild();
+ }
+ };
+
+ add(_new);
+ }
+
+ void setParent(Parent parent)
+ {
+ _parent = parent;
+ }
+
+ protected Parent _parent;
+ private Action _new;
+ }
+
//
// Adapts parent to a ComboBoxModel
@@ -132,6 +160,24 @@ class Parent extends CommonBaseI
return null;
}
+ public JPopupMenu getPopupMenu()
+ {
+ if(canHaveNewChild())
+ {
+ if(_popup == null)
+ {
+ _popup = new NewPopupMenu();
+ }
+ _popup.setParent(this);
+ return _popup;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+
void addChild(CommonBase child) throws DuplicateIdException
{
addChild(child, false);
@@ -180,8 +226,24 @@ class Parent extends CommonBaseI
void removeChild(CommonBase child)
{
- child.unregister();
- _children.remove(child);
+ if(_children.remove(child))
+ {
+ child.unregister();
+ }
+ }
+
+ void removeChild(CommonBase child, boolean fireEvent)
+ {
+ int index = _children.indexOf(child);
+ if(index > -1)
+ {
+ child.unregister();
+ _children.remove(child);
+ if(fireEvent)
+ {
+ fireNodeRemovedEvent(this, child, index);
+ }
+ }
}
void removeChild(String id, boolean fireEvent)
@@ -460,6 +522,15 @@ class Parent extends CommonBaseI
return new ComboBoxModel();
}
+ boolean canHaveNewChild()
+ {
+ return false;
+ }
+
+ void newChild()
+ {
+ assert canHaveNewChild();
+ }
Parent(String id, Model model, boolean root)
{
@@ -488,4 +559,6 @@ class Parent extends CommonBaseI
protected java.util.LinkedList _children = new java.util.LinkedList();
private ChildComparator _childComparator = new ChildComparator();
+
+ static private NewPopupMenu _popup;
}