1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-04-23 22:52:11 +02:00

Bug 487336 - Add copy text to clipboard action to "OS Resources" view

Change-Id: I3d109ad1194b09f83d3633491c1368255551fd9a
Signed-off-by: Teodor Madan <teodor.madan@nxp.com>
This commit is contained in:
Teodor Madan 2016-01-25 00:22:58 +02:00 committed by Gerrit Code Review @ Eclipse.org
parent 15436d74df
commit eb24d01ad9
4 changed files with 64 additions and 1 deletions

View file

@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2011, 2012 Mentor Graphics and others.
* Copyright (c) 2011, 2016 Mentor Graphics and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@ -44,6 +44,11 @@ implements ITableLabelProvider, IStructuredContentProvider
this.realProvider = realProvider;
}
public U getData()
{
return realProvider;
}
@Override
public Image getColumnImage(Object obj, int index) {
return realProvider.getColumnImage(obj, index);

View file

@ -32,6 +32,7 @@ public class Messages extends NLS {
public static String OSView_15;
public static String OSView_AttachJobName;
public static String OSView_AttachTask;
public static String OSView_CopyAction;
static {
// initialize resource bundle
NLS.initializeMessages(Messages.class.getName(), Messages.class);

View file

@ -23,3 +23,4 @@ OSView_14=Objects from different debug sessions are selected.
OSView_15=No debug session is selected.
OSView_AttachJobName=Connecting debug session to processes
OSView_AttachTask=Connecting to process {0}
OSView_CopyAction=Copy

View file

@ -26,6 +26,7 @@ import org.eclipse.cdt.dsf.debug.service.command.ICommandControlService;
import org.eclipse.cdt.dsf.debug.service.command.ICommandControlService.ICommandControlDMContext;
import org.eclipse.cdt.dsf.gdb.internal.GdbPlugin;
import org.eclipse.cdt.dsf.gdb.launching.GdbLaunch;
import org.eclipse.cdt.dsf.gdb.service.IGDBHardwareAndOS2.IResourcesInformation;
import org.eclipse.cdt.dsf.service.DsfServicesTracker;
import org.eclipse.cdt.dsf.service.DsfSession;
import org.eclipse.cdt.dsf.ui.viewmodel.datamodel.IDMVMContext;
@ -53,11 +54,15 @@ import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerComparator;
import org.eclipse.osgi.util.NLS;
import org.eclipse.swt.SWT;
import org.eclipse.swt.dnd.Clipboard;
import org.eclipse.swt.dnd.TextTransfer;
import org.eclipse.swt.dnd.Transfer;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Link;
import org.eclipse.swt.widgets.Listener;
@ -65,7 +70,10 @@ import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.ui.IActionBars;
import org.eclipse.ui.ISharedImages;
import org.eclipse.ui.IWorkbenchActionConstants;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.actions.ActionFactory;
import org.eclipse.ui.part.ViewPart;
import org.eclipse.ui.progress.UIJob;
import org.osgi.framework.Bundle;
@ -189,6 +197,7 @@ public class OSResourcesView extends ViewPart implements DsfSession.SessionEnded
} catch (Exception e) {
}
bars.getToolBarManager().add(fRefreshAction);
bars.setGlobalActionHandler(ActionFactory.COPY.getId(), new CopyAction());
bars.updateActionBars();
createContextMenu();
@ -209,6 +218,7 @@ public class OSResourcesView extends ViewPart implements DsfSession.SessionEnded
menuMgr.addMenuListener(new IMenuListener() {
@Override
public void menuAboutToShow(IMenuManager manager) {
manager.add(new CopyAction());
manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
}
});
@ -717,4 +727,50 @@ public class OSResourcesView extends ViewPart implements DsfSession.SessionEnded
public ICommandControlDMContext getSessionContext() {
return fSessionData != null ? fSessionData.getContext() : null;
}
/**
* Retargetted copy to clipboard action
*/
private final class CopyAction extends Action {
private static final char COLUMN_SEPARATOR = ',';
private final String EOL_CHAR = System.getProperty("line.separator"); //$NON-NLS-1$
private CopyAction() {
setText(Messages.OSView_CopyAction);
setImageDescriptor(
PlatformUI.getWorkbench().getSharedImages().getImageDescriptor(ISharedImages.IMG_TOOL_COPY));
}
@Override
public boolean isEnabled() {
return !fViewer.getSelection().isEmpty();
}
@Override
public void run() {
ISelection selection = fViewer.getSelection();
if (selection.isEmpty())
return;
if (selection instanceof IStructuredSelection) {
@SuppressWarnings("unchecked")
OSData data = ((ContentLabelProviderWrapper<OSData>) fViewer.getContentProvider()).getData();
StringBuilder exportStr = new StringBuilder();
for (Object elmnt : ((IStructuredSelection) selection).toList()) {
assert elmnt instanceof IResourcesInformation;
if (elmnt instanceof IResourcesInformation) {
IResourcesInformation ri = (IResourcesInformation) elmnt;
exportStr.append(data.getColumnText(ri, 0));
for (int i = 1; i < data.getColumnCount(); i++) {
exportStr.append(COLUMN_SEPARATOR).append(data.getColumnText(ri, i));
}
exportStr.append(EOL_CHAR);
}
}
Clipboard cb = new Clipboard(Display.getDefault());
TextTransfer textTransfer = TextTransfer.getInstance();
cb.setContents(new Object[] { exportStr.toString() }, new Transfer[] { textTransfer });
}
}
}
}