1 /*******************************************************************************
2 * Copyright (c) 2006, 2011 IBM Corporation and others.
3 * All rights reserved. This program and the accompanying materials
4 * are made available under the terms of the Eclipse Public License v1.0
5 * which accompanies this distribution, and is available at
6 * http://www.eclipse.org/legal/epl-v10.html
9 * IBM Corporation - initial API and implementation
10 *******************************************************************************/
11 package org.eclipse.jdt.internal.ui.callhierarchy;
13 import java.util.Iterator;
15 import org.eclipse.swt.SWTError;
16 import org.eclipse.swt.dnd.Clipboard;
17 import org.eclipse.swt.dnd.DND;
18 import org.eclipse.swt.dnd.TextTransfer;
19 import org.eclipse.swt.dnd.Transfer;
20 import org.eclipse.swt.events.FocusEvent;
21 import org.eclipse.swt.events.FocusListener;
23 import org.eclipse.jface.action.Action;
24 import org.eclipse.jface.action.IAction;
25 import org.eclipse.jface.dialogs.MessageDialog;
26 import org.eclipse.jface.viewers.ISelectionChangedListener;
27 import org.eclipse.jface.viewers.IStructuredSelection;
28 import org.eclipse.jface.viewers.SelectionChangedEvent;
30 import org.eclipse.ui.IActionBars;
31 import org.eclipse.ui.IViewSite;
32 import org.eclipse.ui.IWorkbenchCommandConstants;
33 import org.eclipse.ui.actions.ActionFactory;
35 import org.eclipse.jdt.internal.corext.callhierarchy.CallLocation;
38 * Copies the selection from the location viewer.
40 class LocationCopyAction extends Action {
41 private final Clipboard fClipboard;
42 private final IViewSite fViewSite;
43 private final LocationViewer fLocationViewer;
45 LocationCopyAction(IViewSite viewSite, Clipboard clipboard, LocationViewer locationViewer) {
46 fClipboard= clipboard;
48 fLocationViewer= locationViewer;
50 setText(CallHierarchyMessages.LocationCopyAction_copy);
51 setActionDefinitionId(IWorkbenchCommandConstants.EDIT_COPY);
52 setEnabled(!fLocationViewer.getSelection().isEmpty());
54 locationViewer.addSelectionChangedListener(new ISelectionChangedListener() {
55 public void selectionChanged(SelectionChangedEvent event) {
56 setEnabled(! event.getSelection().isEmpty());
63 IStructuredSelection selection= (IStructuredSelection) fLocationViewer.getSelection();
64 StringBuffer buf= new StringBuffer();
65 for (Iterator<?> iterator= selection.iterator(); iterator.hasNext();) {
66 CallLocation location= (CallLocation) iterator.next();
67 location.generated_8112817452066259871(buf);
69 TextTransfer plainTextTransfer = TextTransfer.getInstance();
71 fClipboard.setContents(
72 new String[]{ CopyCallHierarchyAction.convertLineTerminators(buf.toString()) },
73 new Transfer[]{ plainTextTransfer });
75 if (e.code != DND.ERROR_CANNOT_SET_CLIPBOARD)
77 if (MessageDialog.openQuestion(fViewSite.getShell(), CallHierarchyMessages.CopyCallHierarchyAction_problem, CallHierarchyMessages.CopyCallHierarchyAction_clipboard_busy))
82 public LocationCopyAction generated_4757668500795591348(final IViewSite viewSite, LocationViewer locationviewer) {
83 locationviewer.getTable().addFocusListener(new FocusListener() {
84 IAction fViewCopyHandler;
85 public void focusLost(FocusEvent e) {
86 if (fViewCopyHandler != null) {
87 IActionBars actionBars= viewSite.getActionBars();
88 actionBars.setGlobalActionHandler(ActionFactory.COPY.getId(), fViewCopyHandler);
89 actionBars.updateActionBars();
90 fViewCopyHandler= null;
94 public void focusGained(FocusEvent e) {
95 IActionBars actionBars= viewSite.getActionBars();
96 fViewCopyHandler= actionBars.getGlobalActionHandler(ActionFactory.COPY.getId());
97 actionBars.setGlobalActionHandler(ActionFactory.COPY.getId(), LocationCopyAction.this);
98 actionBars.updateActionBars();