aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2/ClipboardSupport.java16
-rw-r--r--eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2/GraphicalEditorPart.java2
-rwxr-xr-xeclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2/LayoutCanvas.java18
-rw-r--r--eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2/SelectionManager.java7
-rw-r--r--eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/ui/ResourceChooser.java6
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];