/**
* Updates the enabled state of the property browser's actions according to the current node.
*/
protected void updateActionState()
{
CollectionNode cdn = currentNode != null ? currentNode.getAssociatedCollectionNode() : null;
// Enable/disable actions
// Add enabled if the collection descriptor allows it
actions [ACTION_INDEX_ADD].setEnabled(cdn != null && cdn.allowsNodeAddition());
// Copy enabled if we have an object selected
actions [ACTION_INDEX_COPY].setEnabled(currentNode instanceof ObjectNode);
// Cut enabled if we have an object selected and we can remove elements
actions [ACTION_INDEX_CUT].setEnabled(cdn != null && cdn.allowsNodeRemoval() && cdn.getChildCount() > 0 && currentNode instanceof ObjectNode);
// Paste enabled if we have an object selected and the current clipboard content
// is compatible to the object class we manage in the currently selected collection.
boolean canPaste = false;
if (cdn != null && cdn.allowsNodeAddition())
{
Transferable transferable = ClipboardMgr.getInstance().getCurrentEntry();
if (transferable != null)
{
CollectionDescriptor cd = cdn.getCollectionDescriptor();
Class elementClass = cd.getSafeTypeClass();
DataFlavor elementFlavor = new DataFlavor(elementClass, elementClass.getName());
canPaste = transferable.isDataFlavorSupported(elementFlavor);
}
}
actions [ACTION_INDEX_PASTE].setEnabled(canPaste);
// Remove enabled if the collection descriptor allows it and the current node is either the collection
// descriptor node or one of its direct successors
actions [ACTION_INDEX_REMOVE].setEnabled(cdn != null && cdn.allowsNodeRemoval() && cdn.getChildCount() > 0 && (currentNode instanceof CollectionNode || currentNode instanceof ObjectNode));
boolean canMoveUp = false;
boolean canMoveDown = false;
if (cdn != null && cdn != currentNode && cdn.allowsNodeReordering())
{
AbstractNode objectNode = currentNode.getObjectNode();
int index = cdn.getChildIndex(objectNode);
int n = cdn.getChildCount();
canMoveUp = n > 1 && index > 0;
canMoveDown = n > 1 && index < n - 1;
}