diff options
5 files changed, 32 insertions, 17 deletions
diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2/ClipboardSupport.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2/ClipboardSupport.java index d431653..f138d45 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2/ClipboardSupport.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2/ClipboardSupport.java @@ -256,7 +256,7 @@ public class ClipboardSupport { public void pasteSelection(List<SelectionItem> selection) { SimpleXmlTransfer sxt = SimpleXmlTransfer.getInstance(); - SimpleElement[] pasted = (SimpleElement[]) mClipboard.getContents(sxt); + final SimpleElement[] pasted = (SimpleElement[]) mClipboard.getContents(sxt); if (pasted == null || pasted.length == 0) { return; @@ -273,15 +273,21 @@ public class ClipboardSupport { // using the first selected element only. If there's no selection use // the root as the insertion point. SelectionManager.sanitize(selection); - CanvasViewInfo target = lastRoot; + final CanvasViewInfo target; if (selection.size() > 0) { SelectionItem cs = selection.get(0); target = cs.getViewInfo(); + } else { + target = lastRoot; } - NodeProxy targetNode = mCanvas.getNodeFactory().create(target); - - mCanvas.getRulesEngine().callOnPaste(targetNode, target.getViewObject(), pasted); + final NodeProxy targetNode = mCanvas.getNodeFactory().create(target); + mCanvas.getLayoutEditor().wrapUndoEditXmlModel("Paste", new Runnable() { + public void run() { + mCanvas.getRulesEngine().callOnPaste(targetNode, target.getViewObject(), pasted); + targetNode.applyPendingChanges(); + } + }); } /** diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2/GraphicalEditorPart.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2/GraphicalEditorPart.java index 393af70..f3e625e 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2/GraphicalEditorPart.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2/GraphicalEditorPart.java @@ -2118,7 +2118,7 @@ public class GraphicalEditorPart extends EditorPart } LayoutCanvas canvas = getCanvasControl(); - canvas.updateMenuActionState(canvas.getSelectionManager().getSelections().isEmpty()); + canvas.updateMenuActionState(); } } diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2/LayoutCanvas.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2/LayoutCanvas.java index 1e6d958..e20f61e 100755 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2/LayoutCanvas.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2/LayoutCanvas.java @@ -1072,6 +1072,7 @@ public class LayoutCanvas extends Canvas { @Override public void run() { mClipboardSupport.cutSelectionToClipboard(mSelectionManager.getSnapshot()); + updateMenuActionState(); } }; @@ -1081,6 +1082,7 @@ public class LayoutCanvas extends Canvas { @Override public void run() { mClipboardSupport.copySelectionToClipboard(mSelectionManager.getSnapshot()); + updateMenuActionState(); } }; @@ -1090,6 +1092,7 @@ public class LayoutCanvas extends Canvas { @Override public void run() { mClipboardSupport.pasteSelection(mSelectionManager.getSnapshot()); + updateMenuActionState(); } }; @@ -1134,15 +1137,20 @@ public class LayoutCanvas extends Canvas { /** * Updates menu actions that depends on the selection. - * - * @param hasSelection True iff we have a non-empty selection */ - /* package */ void updateMenuActionState(boolean hasSelection) { + void updateMenuActionState() { + List<SelectionItem> selections = getSelectionManager().getSelections(); + boolean hasSelection = !selections.isEmpty(); + if (hasSelection && selections.size() == 1 && selections.get(0).isRoot()) { + hasSelection = false; + } + StyledText errorLabel = mLayoutEditor.getGraphicalEditor().getErrorLabel(); mCutAction.setEnabled(hasSelection); mCopyAction.setEnabled(hasSelection || errorLabel.getSelectionCount() > 0); mDeleteAction.setEnabled(hasSelection); - mSelectAllAction.setEnabled(hasSelection || errorLabel.isFocusControl()); + // Select All should *always* be selectable, regardless of whether anything + // is currently selected. // The paste operation is only available if we can paste our custom type. // We do not currently support pasting random text (e.g. XML). Maybe later. @@ -1156,6 +1164,8 @@ public class LayoutCanvas extends Canvas { * @param bars the action bar for this canvas */ public void updateGlobalActions(IActionBars bars) { + updateMenuActionState(); + bars.setGlobalActionHandler(ActionFactory.CUT.getId(), mCutAction); bars.setGlobalActionHandler(ActionFactory.COPY.getId(), mCopyAction); bars.setGlobalActionHandler(ActionFactory.PASTE.getId(), mPasteAction); diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2/SelectionManager.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2/SelectionManager.java index 1bef3b4..e045f49 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2/SelectionManager.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2/SelectionManager.java @@ -750,7 +750,7 @@ public class SelectionManager implements ISelectionProvider { LayoutEditor editor = mCanvas.getLayoutEditor(); if (editor != null) { // Update menu actions that depend on the selection - updateMenuActions(); + mCanvas.updateMenuActionState(); // Update the layout actions bar LayoutActionBar layoutActionBar = editor.getGraphicalEditor().getLayoutActionBar(); @@ -863,11 +863,6 @@ public class SelectionManager implements ISelectionProvider { } } - private void updateMenuActions() { - boolean hasSelection = !mSelections.isEmpty(); - mCanvas.updateMenuActionState(hasSelection); - } - private void redraw() { mCanvas.redraw(); } diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/ui/ResourceChooser.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/ui/ResourceChooser.java index 75b78f5..d28c79e 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/ui/ResourceChooser.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/ui/ResourceChooser.java @@ -82,7 +82,6 @@ public class ResourceChooser extends AbstractElementListSelectionDialog { private Button mProjectButton; private Button mSystemButton; private Button mNewButton; - private Button mNewIconButton; private String mCurrentResource; private final IProject mProject; private IInputValidator mInputValidator; @@ -153,6 +152,11 @@ public class ResourceChooser extends AbstractElementListSelectionDialog { @Override protected void computeResult() { + if (getSelectionIndex() == -1) { + mCurrentResource = null; + return; + } + Object[] elements = getSelectedElements(); if (elements.length == 1 && elements[0] instanceof ResourceItem) { ResourceItem item = (ResourceItem)elements[0]; |