summaryrefslogtreecommitdiff
path: root/java/src
diff options
context:
space:
mode:
authorBernard Normier <bernard@zeroc.com>2006-12-04 17:02:43 +0000
committerBernard Normier <bernard@zeroc.com>2006-12-04 17:02:43 +0000
commitb1863fa8330d6f06b9dbddbea0c11be53320e1a5 (patch)
tree38e118544bb38b0884e85c88384c6772033480f0 /java/src
parentAdded extra proxy properties (diff)
downloadice-b1863fa8330d6f06b9dbddbea0c11be53320e1a5.tar.bz2
ice-b1863fa8330d6f06b9dbddbea0c11be53320e1a5.tar.xz
ice-b1863fa8330d6f06b9dbddbea0c11be53320e1a5.zip
Numerous fixes: copy/paste etc, auto-apply by default and more
Diffstat (limited to 'java/src')
-rwxr-xr-xjava/src/IceGridGUI/Application/AbstractServerEditor.java20
-rwxr-xr-xjava/src/IceGridGUI/Application/ApplicationEditor.java2
-rwxr-xr-xjava/src/IceGridGUI/Application/Communicator.java5
-rwxr-xr-xjava/src/IceGridGUI/Application/CommunicatorChildEditor.java17
-rwxr-xr-xjava/src/IceGridGUI/Application/Editor.java14
-rwxr-xr-xjava/src/IceGridGUI/Application/Node.java13
-rwxr-xr-xjava/src/IceGridGUI/Application/NodeEditor.java14
-rwxr-xr-xjava/src/IceGridGUI/Application/PropertySetEditor.java14
-rwxr-xr-xjava/src/IceGridGUI/Application/ReplicaGroupEditor.java13
-rwxr-xr-xjava/src/IceGridGUI/Application/Root.java34
-rwxr-xr-xjava/src/IceGridGUI/Application/TemplateEditor.java19
-rwxr-xr-xjava/src/IceGridGUI/Application/TreeNode.java15
-rwxr-xr-xjava/src/IceGridGUI/ApplicationActions.java13
-rwxr-xr-xjava/src/IceGridGUI/ApplicationPane.java74
-rwxr-xr-xjava/src/IceGridGUI/Coordinator.java241
15 files changed, 419 insertions, 89 deletions
diff --git a/java/src/IceGridGUI/Application/AbstractServerEditor.java b/java/src/IceGridGUI/Application/AbstractServerEditor.java
index 19a9ee33aa7..b8d2d78fb16 100755
--- a/java/src/IceGridGUI/Application/AbstractServerEditor.java
+++ b/java/src/IceGridGUI/Application/AbstractServerEditor.java
@@ -37,7 +37,7 @@ abstract class AbstractServerEditor extends Editor
_propertiesPanel.setName("Server Properties");
}
- protected boolean applyUpdate()
+ protected boolean applyUpdate(boolean refresh)
{
Root root = _target.getRoot();
Server server = (Server)_target;
@@ -90,9 +90,13 @@ abstract class AbstractServerEditor extends Editor
// Success
//
_target = (TreeNode)node.findChildWithDescriptor(server.getDescriptor());
-
root.updated();
- root.setSelectedNode(_target);
+
+ if(refresh)
+ {
+ root.setSelectedNode(_target);
+ }
+
}
else if(isSimpleUpdate())
{
@@ -154,10 +158,16 @@ abstract class AbstractServerEditor extends Editor
_target = node.findChildWithDescriptor(server.getDescriptor());
root.updated();
- root.setSelectedNode(_target);
+ if(refresh)
+ {
+ root.setSelectedNode(_target);
+ }
}
- root.getCoordinator().getCurrentTab().showNode(_target);
+ if(refresh)
+ {
+ root.getCoordinator().getCurrentTab().showNode(_target);
+ }
_applyButton.setEnabled(false);
_discardButton.setEnabled(false);
return true;
diff --git a/java/src/IceGridGUI/Application/ApplicationEditor.java b/java/src/IceGridGUI/Application/ApplicationEditor.java
index 474d676ed7c..bb3b006f5a0 100755
--- a/java/src/IceGridGUI/Application/ApplicationEditor.java
+++ b/java/src/IceGridGUI/Application/ApplicationEditor.java
@@ -28,7 +28,7 @@ import IceGridGUI.*;
class ApplicationEditor extends Editor
{
- protected boolean applyUpdate()
+ protected boolean applyUpdate(boolean refresh)
{
Root root = (Root)_target;
MainPane mainPane = _target.getCoordinator().getMainPane();
diff --git a/java/src/IceGridGUI/Application/Communicator.java b/java/src/IceGridGUI/Application/Communicator.java
index 76ecd061c1e..85d3eb15c0c 100755
--- a/java/src/IceGridGUI/Application/Communicator.java
+++ b/java/src/IceGridGUI/Application/Communicator.java
@@ -737,9 +737,7 @@ abstract class Communicator extends TreeNode implements DescriptorHolder
if(t == null)
{
- t = (ServiceTemplate)getRoot().getServiceTemplates().getChildAt(0);
-
- if(t == null)
+ if(getRoot().getServiceTemplates().getChildCount() == 0)
{
JOptionPane.showMessageDialog(
getCoordinator().getMainFrame(),
@@ -750,6 +748,7 @@ abstract class Communicator extends TreeNode implements DescriptorHolder
}
else
{
+ t = (ServiceTemplate)getRoot().getServiceTemplates().getChildAt(0);
descriptor.template = t.getId();
descriptor.parameterValues = new java.util.HashMap();
}
diff --git a/java/src/IceGridGUI/Application/CommunicatorChildEditor.java b/java/src/IceGridGUI/Application/CommunicatorChildEditor.java
index d9ccbe65788..b54c97208fb 100755
--- a/java/src/IceGridGUI/Application/CommunicatorChildEditor.java
+++ b/java/src/IceGridGUI/Application/CommunicatorChildEditor.java
@@ -21,7 +21,7 @@ abstract class CommunicatorChildEditor extends Editor
void postUpdate() {}
- protected boolean applyUpdate()
+ protected boolean applyUpdate(boolean refresh)
{
Root root = _target.getRoot();
root.disableSelectionListener();
@@ -68,7 +68,10 @@ abstract class CommunicatorChildEditor extends Editor
//
_target = childList.findChildWithDescriptor(descriptor);
root.updated();
- root.setSelectedNode(_target);
+ if(refresh)
+ {
+ root.setSelectedNode(_target);
+ }
}
else if(isSimpleUpdate())
{
@@ -104,12 +107,18 @@ abstract class CommunicatorChildEditor extends Editor
//
_target = childList.findChildWithDescriptor(_target.getDescriptor());
root.updated();
- root.setSelectedNode(_target);
+ if(refresh)
+ {
+ root.setSelectedNode(_target);
+ }
}
postUpdate();
- root.getCoordinator().getCurrentTab().showNode(_target);
+ if(refresh)
+ {
+ root.getCoordinator().getCurrentTab().showNode(_target);
+ }
_applyButton.setEnabled(false);
_discardButton.setEnabled(false);
return true;
diff --git a/java/src/IceGridGUI/Application/Editor.java b/java/src/IceGridGUI/Application/Editor.java
index 62298aa0f04..7f3db446282 100755
--- a/java/src/IceGridGUI/Application/Editor.java
+++ b/java/src/IceGridGUI/Application/Editor.java
@@ -57,11 +57,11 @@ public class Editor extends EditorBase
return result;
}
- public boolean save()
+ public boolean save(boolean refresh)
{
if(_applyButton.isEnabled())
{
- return validate() && applyUpdate();
+ return validate() && applyUpdate(refresh);
}
else
{
@@ -74,7 +74,7 @@ public class Editor extends EditorBase
return true;
}
- protected boolean applyUpdate()
+ protected boolean applyUpdate(boolean refresh)
{
assert false;
return false;
@@ -122,7 +122,10 @@ public class Editor extends EditorBase
{
if(validate())
{
- applyUpdate();
+ if(applyUpdate(true))
+ {
+ _target.getRoot().getTree().grabFocus();
+ }
}
}
};
@@ -137,6 +140,7 @@ public class Editor extends EditorBase
public void actionPerformed(ActionEvent e)
{
discardUpdate();
+ _target.getRoot().getTree().grabFocus();
}
};
_discardButton = new JButton(discard);
@@ -174,7 +178,7 @@ public class Editor extends EditorBase
return null;
}
- TreeNode getTarget()
+ public TreeNode getTarget()
{
return _target;
}
diff --git a/java/src/IceGridGUI/Application/Node.java b/java/src/IceGridGUI/Application/Node.java
index b413385fd1d..f264ccc4b37 100755
--- a/java/src/IceGridGUI/Application/Node.java
+++ b/java/src/IceGridGUI/Application/Node.java
@@ -1261,9 +1261,7 @@ class Node extends TreeNode implements PropertySetParent
if(t == null)
{
- t = (ServerTemplate)root.getServerTemplates().getChildAt(0);
-
- if(t == null)
+ if(root.getServerTemplates().getChildCount() == 0)
{
JOptionPane.showMessageDialog(
getCoordinator().getMainFrame(),
@@ -1272,11 +1270,10 @@ class Node extends TreeNode implements PropertySetParent
JOptionPane.INFORMATION_MESSAGE);
return;
}
- else
- {
- descriptor.template = t.getId();
- descriptor.parameterValues = new java.util.HashMap();
- }
+
+ t = (ServerTemplate)root.getServerTemplates().getChildAt(0);
+ descriptor.template = t.getId();
+ descriptor.parameterValues = new java.util.HashMap();
}
ServerInstance server = new ServerInstance(this, id, descriptor);
diff --git a/java/src/IceGridGUI/Application/NodeEditor.java b/java/src/IceGridGUI/Application/NodeEditor.java
index 10cc65e1a9b..5a0aaffd7c8 100755
--- a/java/src/IceGridGUI/Application/NodeEditor.java
+++ b/java/src/IceGridGUI/Application/NodeEditor.java
@@ -36,7 +36,7 @@ class NodeEditor extends Editor
_propertiesPanel.setName("Node Properties");
}
- protected boolean applyUpdate()
+ protected boolean applyUpdate(boolean refresh)
{
Root root = _target.getRoot();
@@ -81,7 +81,10 @@ class NodeEditor extends Editor
//
_target = nodes.findChildWithDescriptor(descriptor);
root.updated();
- root.setSelectedNode(_target);
+ if(refresh)
+ {
+ root.setSelectedNode(_target);
+ }
}
else if(isSimpleUpdate())
{
@@ -109,7 +112,7 @@ class NodeEditor extends Editor
}
catch(UpdateFailedException e)
{
- ((Node)_target) .restoreDescriptor(savedDescriptor);
+ ((Node)_target).restoreDescriptor(savedDescriptor);
JOptionPane.showMessageDialog(
root.getCoordinator().getMainFrame(),
e.toString(),
@@ -129,7 +132,10 @@ class NodeEditor extends Editor
root.updated();
}
- root.getCoordinator().getCurrentTab().showNode(_target);
+ if(refresh)
+ {
+ root.getCoordinator().getCurrentTab().showNode(_target);
+ }
_applyButton.setEnabled(false);
_discardButton.setEnabled(false);
return true;
diff --git a/java/src/IceGridGUI/Application/PropertySetEditor.java b/java/src/IceGridGUI/Application/PropertySetEditor.java
index af61997df74..a287b1c2645 100755
--- a/java/src/IceGridGUI/Application/PropertySetEditor.java
+++ b/java/src/IceGridGUI/Application/PropertySetEditor.java
@@ -32,7 +32,7 @@ import IceGridGUI.*;
class PropertySetEditor extends Editor
{
- protected boolean applyUpdate()
+ protected boolean applyUpdate(boolean refresh)
{
PropertySet nps = (PropertySet)_target;
Root root = nps.getRoot();
@@ -79,9 +79,12 @@ class PropertySetEditor extends Editor
// Success
//
_target = ((TreeNode)parent).findChildWithDescriptor(descriptor);
- root.updated();
- root.setSelectedNode(_target);
_id.setEditable(false);
+ root.updated();
+ if(refresh)
+ {
+ root.setSelectedNode(_target);
+ }
}
else
{
@@ -90,7 +93,10 @@ class PropertySetEditor extends Editor
nps.getEditable().markModified();
}
- root.getCoordinator().getCurrentTab().showNode(_target);
+ if(refresh)
+ {
+ root.getCoordinator().getCurrentTab().showNode(_target);
+ }
_applyButton.setEnabled(false);
_discardButton.setEnabled(false);
return true;
diff --git a/java/src/IceGridGUI/Application/ReplicaGroupEditor.java b/java/src/IceGridGUI/Application/ReplicaGroupEditor.java
index e6a126dfea8..4cb075956c4 100755
--- a/java/src/IceGridGUI/Application/ReplicaGroupEditor.java
+++ b/java/src/IceGridGUI/Application/ReplicaGroupEditor.java
@@ -32,7 +32,7 @@ import IceGridGUI.*;
class ReplicaGroupEditor extends Editor
{
- protected boolean applyUpdate()
+ protected boolean applyUpdate(boolean refresh)
{
ReplicaGroup replicaGroup = (ReplicaGroup)_target;
Root root = replicaGroup.getRoot();
@@ -138,10 +138,17 @@ class ReplicaGroupEditor extends Editor
_target = replicaGroups.findChildWithDescriptor(descriptor);
root.updated();
- root.setSelectedNode(_target);
+
+ if(refresh)
+ {
+ root.setSelectedNode(_target);
+ }
}
- root.getCoordinator().getCurrentTab().showNode(_target);
+ if(refresh)
+ {
+ root.getCoordinator().getCurrentTab().showNode(_target);
+ }
_applyButton.setEnabled(false);
_discardButton.setEnabled(false);
return true;
diff --git a/java/src/IceGridGUI/Application/Root.java b/java/src/IceGridGUI/Application/Root.java
index a3d96bb71fc..7aec1d77fbc 100755
--- a/java/src/IceGridGUI/Application/Root.java
+++ b/java/src/IceGridGUI/Application/Root.java
@@ -103,6 +103,13 @@ public class Root extends ListTreeNode
_tree = new JTree(this, true);
_treeModel = (DefaultTreeModel)_tree.getModel();
+
+ //
+ // Rebind "copy" and "paste"
+ //
+ javax.swing.ActionMap am = _tree.getActionMap();
+ am.put("copy", _coordinator.getActionsForMenu().get(COPY));
+ am.put("paste", _coordinator.getActionsForMenu().get(PASTE));
}
@@ -927,6 +934,10 @@ public class Root extends ListTreeNode
assert ok;
}
_concurrentUpdates.clear();
+
+ _coordinator.getSaveAction().setEnabled(false);
+ _coordinator.getDiscardUpdatesAction().setEnabled(false);
+ _coordinator.getSaveToRegistryAction().setEnabled(false);
}
}
@@ -959,7 +970,7 @@ public class Root extends ListTreeNode
public boolean needsSaving()
{
- return _updated;
+ return _updated || !_registryUpdatesEnabled;
}
Editor getEditor(Class c, TreeNode node)
@@ -1025,23 +1036,22 @@ public class Root extends ListTreeNode
//
void disableRegistryUpdates()
{
- _registryUpdatesEnabled = false;
+ if(_registryUpdatesEnabled)
+ {
+ _registryUpdatesEnabled = false;
+ _coordinator.getSaveAction().setEnabled(_live && _coordinator.connectedToMaster() || _file != null);
+ _coordinator.getDiscardUpdatesAction().setEnabled(_live || _file != null);
+ _coordinator.getSaveToRegistryAction().setEnabled(_coordinator.connectedToMaster());
+ }
}
void updated()
{
_updated = true;
- _registryUpdatesEnabled = false; // can be true before that when updated() is called by destroy()
-
+ disableRegistryUpdates(); // can be still enabled when updated() is called by destroy()
+
_concurrentUpdates.clear();
-
- _coordinator.getSaveAction().setEnabled(_live && _coordinator.connectedToMaster() || _file != null);
- _coordinator.getDiscardUpdatesAction().setEnabled(_live || _file != null);
-
- _coordinator.getSaveToRegistryAction().setEnabled(_coordinator.connectedToMaster());
- _coordinator.getSaveToFileAction().setEnabled(true);
}
-
void rebuild() throws UpdateFailedException
{
@@ -1208,7 +1218,7 @@ public class Root extends ListTreeNode
private boolean _discardMe = false;
//
- // True when any update was applies to this application
+ // True when any update was applied to this application
// (including children)
//
private boolean _updated = false;
diff --git a/java/src/IceGridGUI/Application/TemplateEditor.java b/java/src/IceGridGUI/Application/TemplateEditor.java
index 7f40fe78b22..8adfb8d498b 100755
--- a/java/src/IceGridGUI/Application/TemplateEditor.java
+++ b/java/src/IceGridGUI/Application/TemplateEditor.java
@@ -98,7 +98,7 @@ class TemplateEditor extends Editor
_parameters.set(descriptor.parameters, descriptor.parameterDefaults);
}
- protected boolean applyUpdate()
+ protected boolean applyUpdate(boolean refresh)
{
Root root = _target.getRoot();
root.disableSelectionListener();
@@ -144,8 +144,11 @@ class TemplateEditor extends Editor
//
_target = parent.findChildWithDescriptor(descriptor);
root.updated();
- root.setSelectedNode(_target);
_template.setEditable(false);
+ if(refresh)
+ {
+ root.setSelectedNode(_target);
+ }
}
else if(isSimpleUpdate())
{
@@ -188,11 +191,17 @@ class TemplateEditor extends Editor
((Communicator)_target).getEnclosingEditable().markModified();
root.updated();
- _target = parent.findChildWithDescriptor(getDescriptor());
- root.setSelectedNode(_target);
+ _target = parent.findChildWithDescriptor(getDescriptor());
+ if(refresh)
+ {
+ root.setSelectedNode(_target);
+ }
}
- root.getCoordinator().getCurrentTab().showNode(_target);
+ if(refresh)
+ {
+ root.getCoordinator().getCurrentTab().showNode(_target);
+ }
_applyButton.setEnabled(false);
_discardButton.setEnabled(false);
return true;
diff --git a/java/src/IceGridGUI/Application/TreeNode.java b/java/src/IceGridGUI/Application/TreeNode.java
index 54e5d68ea44..ae738a718f1 100755
--- a/java/src/IceGridGUI/Application/TreeNode.java
+++ b/java/src/IceGridGUI/Application/TreeNode.java
@@ -26,8 +26,7 @@ public abstract class TreeNode extends TreeNodeBase
abstract void write(XMLWriter writer) throws java.io.IOException;
//
- // Ephemeral objects are destroyed when you switch selection
- // without "apply"ing the changes.
+ // Ephemeral objects are destroyed when discard their changes
//
public boolean isEphemeral()
{
@@ -362,7 +361,19 @@ public abstract class TreeNode extends TreeNodeBase
}
public void delete()
{
+ boolean enabled = getRoot().isSelectionListenerEnabled();
+
+ if(enabled)
+ {
+ getRoot().disableSelectionListener();
+ }
destroy();
+ getCoordinator().getCurrentTab().showNode(null);
+ if(enabled)
+ {
+ getRoot().enableSelectionListener();
+ }
+
if(_parent != null)
{
getRoot().setSelectedNode((TreeNode)_parent);
diff --git a/java/src/IceGridGUI/ApplicationActions.java b/java/src/IceGridGUI/ApplicationActions.java
index 4468b20dc80..f9051d2ada8 100755
--- a/java/src/IceGridGUI/ApplicationActions.java
+++ b/java/src/IceGridGUI/ApplicationActions.java
@@ -178,34 +178,29 @@ public class ApplicationActions
{
public void actionPerformed(ActionEvent e)
{
+ assert isEnabled();
_target.copy();
}
};
- _array[TreeNode.COPY].putValue(Action.ACCELERATOR_KEY,
- KeyStroke.getKeyStroke(KeyEvent.VK_C, MENU_MASK));
- _array[TreeNode.COPY].putValue(Action.SHORT_DESCRIPTION, "Copy");
_array[TreeNode.PASTE] = new AbstractAction("Paste")
{
public void actionPerformed(ActionEvent e)
{
+ assert isEnabled();
_target.paste();
}
};
- _array[TreeNode.PASTE].putValue(Action.ACCELERATOR_KEY,
- KeyStroke.getKeyStroke(KeyEvent.VK_V, MENU_MASK));
- _array[TreeNode.PASTE].putValue(Action.SHORT_DESCRIPTION, "Paste");
_array[TreeNode.DELETE] = new AbstractAction("Delete")
{
public void actionPerformed(ActionEvent e)
{
+ assert isEnabled();
_target.delete();
}
};
- _array[TreeNode.DELETE].putValue(Action.ACCELERATOR_KEY, KeyStroke.getKeyStroke("DELETE"));
- _array[TreeNode.DELETE].putValue(Action.SHORT_DESCRIPTION, "Delete");
-
+
_array[TreeNode.SHOW_VARS] = new
AbstractAction("Show variables")
{
diff --git a/java/src/IceGridGUI/ApplicationPane.java b/java/src/IceGridGUI/ApplicationPane.java
index 6525d59d6db..6827accb31e 100755
--- a/java/src/IceGridGUI/ApplicationPane.java
+++ b/java/src/IceGridGUI/ApplicationPane.java
@@ -129,6 +129,14 @@ public class ApplicationPane extends JSplitPane implements Tab
public void back()
{
+ //
+ // Auto-apply changes
+ //
+ if(_currentEditor != null && !_currentEditor.save(false))
+ {
+ return;
+ }
+
TreeNode previousNode = null;
do
{
@@ -159,6 +167,11 @@ public class ApplicationPane extends JSplitPane implements Tab
public void forward()
{
+ if(_currentEditor != null && !_currentEditor.save(false))
+ {
+ return;
+ }
+
TreeNode nextNode = null;
do
{
@@ -247,21 +260,21 @@ public class ApplicationPane extends JSplitPane implements Tab
public void save()
{
- if(_currentEditor == null || _currentEditor.save())
+ if(_currentEditor == null || _currentEditor.save(true))
{
_root.save();
}
}
public void saveToRegistry()
{
- if(_currentEditor == null || _currentEditor.save())
+ if(_currentEditor == null || _currentEditor.save(true))
{
_root.saveToRegistry();
}
}
public void saveToFile()
{
- if(_currentEditor == null || _currentEditor.save())
+ if(_currentEditor == null || _currentEditor.save(true))
{
_root.saveToFile();
}
@@ -276,6 +289,18 @@ public class ApplicationPane extends JSplitPane implements Tab
return true;
}
+ private void registerAction(Coordinator c, int index)
+ {
+ Action action = c.getActionsForMenu().get(index);
+
+ javax.swing.ActionMap am = _leftPane.getActionMap();
+ javax.swing.InputMap im = _leftPane.getInputMap();
+
+ im.put((KeyStroke)action.getValue(Action.ACCELERATOR_KEY), (String)action.getValue(Action.NAME));
+ am.put((String)action.getValue(Action.NAME), action);
+ }
+
+
ApplicationPane(Root root)
{
super(JSplitPane.HORIZONTAL_SPLIT, true);
@@ -283,7 +308,11 @@ public class ApplicationPane extends JSplitPane implements Tab
_leftPane = new SimpleInternalFrame("Descriptors");
_leftPane.setPreferredSize(new Dimension(280, 350));
-
+ Coordinator c = root.getCoordinator();
+ registerAction(c, TreeNode.COPY);
+ registerAction(c, TreeNode.PASTE);
+ registerAction(c, TreeNode.DELETE);
+
//
// Right pane
//
@@ -374,25 +403,42 @@ public class ApplicationPane extends JSplitPane implements Tab
{
if(_root.isSelectionListenerEnabled())
{
- TreePath path = null;
- if(e.isAddedPath())
- {
- path = e.getPath();
- }
-
- if(path == null)
+ //
+ // Auto-apply changes
+ //
+ if(_currentEditor != null && !_currentEditor.save(false))
{
- showNode(null);
+ //
+ // Go back to this path
+ //
+ _root.disableSelectionListener();
+ _root.setSelectedNode(_currentEditor.getTarget());
+ _root.enableSelectionListener();
}
else
{
- showNode((TreeNode)path.getLastPathComponent());
+ if(e.isAddedPath())
+ {
+ TreePath path = e.getPath();
+
+ if(path == null)
+ {
+ showNode(null);
+ }
+ else
+ {
+ showNode((TreeNode)path.getLastPathComponent());
+ }
+ }
+ else
+ {
+ showNode(null);
+ }
}
}
}
}
-
private Root _root;
private SimpleInternalFrame _leftPane;
private SimpleInternalFrame _propertiesFrame;
diff --git a/java/src/IceGridGUI/Coordinator.java b/java/src/IceGridGUI/Coordinator.java
index 7527703c030..1ea813f88b1 100755
--- a/java/src/IceGridGUI/Coordinator.java
+++ b/java/src/IceGridGUI/Coordinator.java
@@ -41,6 +41,7 @@ import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
+import javax.swing.JMenuItem;
import javax.swing.JMenuBar;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
@@ -51,9 +52,11 @@ import javax.swing.JTree;
import javax.swing.KeyStroke;
import javax.swing.SwingConstants;
import javax.swing.SwingUtilities;
+import javax.swing.TransferHandler;
import javax.swing.border.EmptyBorder;
import javax.swing.filechooser.FileFilter;
+import javax.swing.text.JTextComponent;
import com.jgoodies.looks.Options;
import com.jgoodies.looks.HeaderStyle;
@@ -106,6 +109,180 @@ public class Coordinator
JLabel _text;
}
+ private class ActionWrapper extends AbstractAction implements java.beans.PropertyChangeListener
+ {
+ public ActionWrapper(String name)
+ {
+ super(name);
+ setEnabled(false);
+ }
+
+ public void actionPerformed(ActionEvent e)
+ {
+ if(_target != null)
+ {
+ _target.actionPerformed(e);
+ }
+ }
+
+ public void propertyChange(java.beans.PropertyChangeEvent e)
+ {
+ //
+ // The only property we're interested in is isEnabled
+ //
+
+ java.beans.PropertyChangeListener[] l = getPropertyChangeListeners();
+ for(int i = 0; i < l.length; ++i)
+ {
+ l[i].propertyChange(e);
+ }
+ }
+
+ void setTarget(Action t)
+ {
+ if(_target != t)
+ {
+ if(_target != null)
+ {
+ _target.removePropertyChangeListener(this);
+ }
+ _target = t;
+ if(_target != null)
+ {
+ _target.addPropertyChangeListener(this);
+ setEnabled(_target.isEnabled());
+ }
+ else
+ {
+ setEnabled(false);
+ }
+ }
+ }
+
+ Action getTarget()
+ {
+ return _target;
+ }
+
+ private Action _target;
+ }
+
+ private class DeleteTextAction extends AbstractAction
+ {
+ public DeleteTextAction(String name)
+ {
+ super(name);
+ }
+
+ public void actionPerformed(ActionEvent e)
+ {
+ if(_target != null)
+ {
+ Action a = _target.getActionMap().get("delete-next");
+ if(a != null)
+ {
+ a.actionPerformed(new ActionEvent(_target, ActionEvent.ACTION_PERFORMED, null));
+ }
+ }
+ }
+
+ void setTarget(JTextComponent t)
+ {
+ _target = t;
+ }
+
+ private JTextComponent _target;
+
+ }
+
+ private class FocusListener implements java.beans.PropertyChangeListener
+ {
+ public void propertyChange(java.beans.PropertyChangeEvent e)
+ {
+ Object o = e.getNewValue();
+ if(o == null)
+ {
+ unknownTarget();
+ }
+ else if(o instanceof JTextComponent)
+ {
+ enableTextEditActions((JTextComponent)o);
+ }
+ else if(o instanceof JTree)
+ {
+ JTree tree = (JTree)o;
+ if(tree.getModel().getRoot() instanceof IceGridGUI.Application.Root)
+ {
+ enableTreetEditActions();
+ }
+ else
+ {
+ disableAllEditMenusAndButtons();
+ }
+ }
+ else
+ {
+ unknownTarget();
+ }
+ }
+
+ private void unknownTarget()
+ {
+ if(_copy.getTarget() == _copyText)
+ {
+ disableAllEditMenusAndButtons();
+ }
+ //
+ // Otherwise (for good tree), do nothing.
+ //
+ }
+
+ private void disableAllEditMenusAndButtons()
+ {
+ _cut.setTarget(null);
+ _copy.setTarget(null);
+ _paste.setTarget(null);
+ _delete.setTarget(null);
+ _moveUp.setTarget(null);
+ _moveDown.setTarget(null);
+ }
+
+ private void enableTextEditActions(JTextComponent target)
+ {
+ boolean editable = target.isEditable() && target.isEnabled();
+
+ _cutText.setEnabled(editable);
+ _copyText.setEnabled(true);
+ _pasteText.setEnabled(editable);
+ _deleteText.setEnabled(editable);
+ _deleteText.setTarget(target);
+
+ if(_copy.getTarget() != _copyText)
+ {
+ _cut.setTarget(_cutText);
+ _copy.setTarget(_copyText);
+ _paste.setTarget(_pasteText);
+ _delete.setTarget(_deleteText);
+ _moveUp.setTarget(null);
+ _moveDown.setTarget(null);
+ }
+ }
+
+ private void enableTreetEditActions()
+ {
+ if(_copy.getTarget() != _appActionsForMenu.get(IceGridGUI.Application.TreeNode.COPY))
+ {
+ _cut.setTarget(null);
+ _copy.setTarget(_appActionsForMenu.get(IceGridGUI.Application.TreeNode.COPY));
+ _paste.setTarget(_appActionsForMenu.get(IceGridGUI.Application.TreeNode.PASTE));
+ _delete.setTarget(_appActionsForMenu.get(IceGridGUI.Application.TreeNode.DELETE));
+ _moveUp.setTarget(_appActionsForMenu.get(IceGridGUI.Application.TreeNode.MOVE_UP));
+ _moveDown.setTarget(_appActionsForMenu.get(IceGridGUI.Application.TreeNode.MOVE_DOWN));
+ }
+ }
+ }
+
+
private class MenuBar extends JMenuBar
{
private MenuBar()
@@ -196,13 +373,14 @@ public class Coordinator
JMenu editMenu = new JMenu("Edit");
editMenu.setMnemonic(java.awt.event.KeyEvent.VK_E);
add(editMenu);
- editMenu.add(_appActionsForMenu.get(IceGridGUI.Application.TreeNode.COPY));
- editMenu.add(_appActionsForMenu.get(IceGridGUI.Application.TreeNode.PASTE));
- editMenu.addSeparator();
- editMenu.add(_appActionsForMenu.get(IceGridGUI.Application.TreeNode.DELETE));
+
+ editMenu.add(_cut);
+ editMenu.add(_copy);
+ editMenu.add(_paste);
+ editMenu.add(_delete);
editMenu.addSeparator();
- editMenu.add(_appActionsForMenu.get(IceGridGUI.Application.TreeNode.MOVE_UP));
- editMenu.add(_appActionsForMenu.get(IceGridGUI.Application.TreeNode.MOVE_DOWN));
+ editMenu.add(_moveUp);
+ editMenu.add(_moveDown);
//
// View menu
@@ -340,15 +518,15 @@ public class Coordinator
addSeparator();
- button = new JButton(_appActionsForMenu.get(IceGridGUI.Application.TreeNode.COPY));
+ button = new JButton(_copy);
button.setText(null);
button.setIcon(Utils.getIcon("/icons/24x24/copy.png"));
add(button);
- button = new JButton(_appActionsForMenu.get(IceGridGUI.Application.TreeNode.PASTE));
+ button = new JButton(_paste);
button.setText(null);
button.setIcon(Utils.getIcon("/icons/24x24/paste.png"));
add(button);
- button = new JButton(_appActionsForMenu.get(IceGridGUI.Application.TreeNode.DELETE));
+ button = new JButton(_delete);
button.setText(null);
button.setIcon(Utils.getIcon("/icons/24x24/delete.png"));
add(button);
@@ -1709,6 +1887,30 @@ public class Coordinator
};
_patchApplication.setEnabled(false);
+
+ _cut = new ActionWrapper("Cut");
+ _cut.putValue(Action.ACCELERATOR_KEY,
+ KeyStroke.getKeyStroke(KeyEvent.VK_X, MENU_MASK));
+ _cut.putValue(Action.SHORT_DESCRIPTION, "Cut");
+
+ _copy = new ActionWrapper("Copy");
+ _copy.putValue(Action.ACCELERATOR_KEY,
+ KeyStroke.getKeyStroke(KeyEvent.VK_C, MENU_MASK));
+ _copy.putValue(Action.SHORT_DESCRIPTION, "Copy");
+
+ _paste = new ActionWrapper("Paste");
+ _paste.putValue(Action.ACCELERATOR_KEY,
+ KeyStroke.getKeyStroke(KeyEvent.VK_V, MENU_MASK));
+ _paste.putValue(Action.SHORT_DESCRIPTION, "Paste");
+
+ _delete = new ActionWrapper("Delete");
+ _delete.putValue(Action.ACCELERATOR_KEY,
+ KeyStroke.getKeyStroke("DELETE"));
+ _delete.putValue(Action.SHORT_DESCRIPTION, "Delete");
+
+ _moveUp = new ActionWrapper("Move up");
+ _moveDown = new ActionWrapper("Move down");
+
_showVarsMenuItem = new
JCheckBoxMenuItem(_appActionsForMenu.get(IceGridGUI.Application.TreeNode.SHOW_VARS));
_showVarsTool = new
@@ -1742,6 +1944,11 @@ public class Coordinator
_mainFrame.getContentPane().add((StatusBarI)_statusBar,
BorderLayout.PAGE_END);
+
+ java.awt.KeyboardFocusManager kbm = java.awt.KeyboardFocusManager.
+ getCurrentKeyboardFocusManager();
+ kbm.addPropertyChangeListener("permanentFocusOwner", new FocusListener());
+
_liveDeploymentPane = new LiveDeploymentPane(_liveDeploymentRoot);
_mainPane = new MainPane(this);
_mainFrame.getContentPane().add(_mainPane, BorderLayout.CENTER);
@@ -2081,6 +2288,21 @@ public class Coordinator
private Action _about;
private Action _patchApplication;
+ private Action _cutText = new javax.swing.text.DefaultEditorKit.CutAction();
+ private Action _copyText = new javax.swing.text.DefaultEditorKit.CopyAction();
+ private Action _pasteText = new javax.swing.text.DefaultEditorKit.PasteAction();
+ private DeleteTextAction _deleteText = new DeleteTextAction("Delete");
+
+ //
+ // These actions delegate to the "active" action
+ //
+ private ActionWrapper _cut;
+ private ActionWrapper _copy;
+ private ActionWrapper _paste;
+ private ActionWrapper _delete;
+ private ActionWrapper _moveUp;
+ private ActionWrapper _moveDown;
+
//
// Two sets of actions because the popup's target and the menu/toolbar's target
// can be different.
@@ -2096,7 +2318,6 @@ public class Coordinator
private JCheckBoxMenuItem _substituteMenuItem;
private JCheckBoxMenuItem _showVarsMenuItem;
-
private JMenu _newMenu;
private JMenu _newServerMenu;
private JMenu _newServiceMenu;