aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ddms/app/src/com/android/ddms/UIThread.java12
-rw-r--r--ddms/libs/ddmuilib/src/com/android/ddmuilib/logcat/LogCatPanel.java59
-rw-r--r--eclipse/plugins/com.android.ide.eclipse.ddms/src/com/android/ide/eclipse/ddms/views/LogCatView.java25
3 files changed, 91 insertions, 5 deletions
diff --git a/ddms/app/src/com/android/ddms/UIThread.java b/ddms/app/src/com/android/ddms/UIThread.java
index ecc3b3f..dfe1b9a 100644
--- a/ddms/app/src/com/android/ddms/UIThread.java
+++ b/ddms/app/src/com/android/ddms/UIThread.java
@@ -733,7 +733,7 @@ public class UIThread implements IUiSelectionListener, IClientChangeListener {
item = new MenuItem(fileMenu, SWT.NONE);
item.setText("E&xit\tCtrl-Q");
- item.setAccelerator('Q' | (Main.isMac() ? SWT.COMMAND : SWT.CONTROL));
+ item.setAccelerator('Q' | SWT.MOD1);
item.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
@@ -745,7 +745,7 @@ public class UIThread implements IUiSelectionListener, IClientChangeListener {
// create edit menu items
mCopyMenuItem = new MenuItem(editMenu, SWT.NONE);
mCopyMenuItem.setText("&Copy\tCtrl-C");
- mCopyMenuItem.setAccelerator('C' | SWT.COMMAND);
+ mCopyMenuItem.setAccelerator('C' | SWT.MOD1);
mCopyMenuItem.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
@@ -757,7 +757,7 @@ public class UIThread implements IUiSelectionListener, IClientChangeListener {
mSelectAllMenuItem = new MenuItem(editMenu, SWT.NONE);
mSelectAllMenuItem.setText("Select &All\tCtrl-A");
- mSelectAllMenuItem.setAccelerator('A' | SWT.COMMAND);
+ mSelectAllMenuItem.setAccelerator('A' | SWT.MOD1);
mSelectAllMenuItem.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
@@ -815,7 +815,7 @@ public class UIThread implements IUiSelectionListener, IClientChangeListener {
// text (e.g. the unicode symbol for the command key + S) anyway
// so it's fine to leave it there for the other platforms.
screenShotItem.setText("&Screen capture...\tCtrl-S");
- screenShotItem.setAccelerator('S' | (Main.isMac() ? SWT.COMMAND : SWT.CONTROL));
+ screenShotItem.setAccelerator('S' | SWT.MOD1);
screenShotItem.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
@@ -961,6 +961,7 @@ public class UIThread implements IUiSelectionListener, IClientChangeListener {
createTopPanel(topPanel, darkGray);
+ mClipboard = new Clipboard(panelArea.getDisplay());
if (useOldLogCatView()) {
createBottomPanel(bottomPanel);
} else {
@@ -1016,6 +1017,8 @@ public class UIThread implements IUiSelectionListener, IClientChangeListener {
// now set up the listener in the various panels
if (useOldLogCatView()) {
mLogPanel.setTableFocusListener(mTableListener);
+ } else {
+ mLogCatPanel.setTableFocusListener(mTableListener);
}
mEventLogPanel.setTableFocusListener(mTableListener);
for (TablePanel p : mPanels) {
@@ -1212,7 +1215,6 @@ public class UIThread implements IUiSelectionListener, IClientChangeListener {
// create clipboard
Display display = comp.getDisplay();
- mClipboard = new Clipboard(display);
LogColors colors = new LogColors();
diff --git a/ddms/libs/ddmuilib/src/com/android/ddmuilib/logcat/LogCatPanel.java b/ddms/libs/ddmuilib/src/com/android/ddmuilib/logcat/LogCatPanel.java
index 1915f7e..318240e 100644
--- a/ddms/libs/ddmuilib/src/com/android/ddmuilib/logcat/LogCatPanel.java
+++ b/ddms/libs/ddmuilib/src/com/android/ddmuilib/logcat/LogCatPanel.java
@@ -18,9 +18,11 @@ package com.android.ddmuilib.logcat;
import com.android.ddmlib.DdmConstants;
import com.android.ddmlib.Log.LogLevel;
+import com.android.ddmuilib.ITableFocusListener;
import com.android.ddmuilib.ImageLoader;
import com.android.ddmuilib.SelectionDependentPanel;
import com.android.ddmuilib.TableHelper;
+import com.android.ddmuilib.ITableFocusListener.IFocusedTableActivator;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.preference.IPreferenceStore;
@@ -31,6 +33,11 @@ import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.window.Window;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.SashForm;
+import org.eclipse.swt.dnd.Clipboard;
+import org.eclipse.swt.dnd.TextTransfer;
+import org.eclipse.swt.dnd.Transfer;
+import org.eclipse.swt.events.FocusEvent;
+import org.eclipse.swt.events.FocusListener;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.events.SelectionAdapter;
@@ -745,4 +752,56 @@ public final class LogCatPanel extends SelectionDependentPanel
public void addLogCatMessageSelectionListener(ILogCatMessageSelectionListener l) {
mMessageSelectionListeners.add(l);
}
+
+ private ITableFocusListener mTableFocusListener;
+
+ /**
+ * Specify the listener to be called when the logcat view gets focus. This interface is
+ * required by DDMS to hook up the menu items for Copy and Select All.
+ * @param listener listener to be notified when logcat view is in focus
+ */
+ public void setTableFocusListener(ITableFocusListener listener) {
+ mTableFocusListener = listener;
+
+ final Table table = mViewer.getTable();
+ final IFocusedTableActivator activator = new IFocusedTableActivator() {
+ public void copy(Clipboard clipboard) {
+ copySelectionToClipboard(clipboard);
+ }
+
+ public void selectAll() {
+ table.selectAll();
+ }
+ };
+
+ table.addFocusListener(new FocusListener() {
+ public void focusGained(FocusEvent e) {
+ mTableFocusListener.focusGained(activator);
+ }
+
+ public void focusLost(FocusEvent e) {
+ mTableFocusListener.focusLost(activator);
+ }
+ });
+ }
+
+ /** Copy all selected messages to clipboard. */
+ public void copySelectionToClipboard(Clipboard clipboard) {
+ StringBuilder sb = new StringBuilder();
+
+ for (LogCatMessage m : getSelectedLogCatMessages()) {
+ sb.append(m.toString());
+ sb.append('\n');
+ }
+
+ clipboard.setContents(
+ new Object[] {sb.toString()},
+ new Transfer[] {TextTransfer.getInstance()}
+ );
+ }
+
+ /** Select all items in the logcat table. */
+ public void selectAll() {
+ mViewer.getTable().selectAll();
+ }
}
diff --git a/eclipse/plugins/com.android.ide.eclipse.ddms/src/com/android/ide/eclipse/ddms/views/LogCatView.java b/eclipse/plugins/com.android.ide.eclipse.ddms/src/com/android/ide/eclipse/ddms/views/LogCatView.java
index 1f758bb..43f0ef4 100644
--- a/eclipse/plugins/com.android.ide.eclipse.ddms/src/com/android/ide/eclipse/ddms/views/LogCatView.java
+++ b/eclipse/plugins/com.android.ide.eclipse.ddms/src/com/android/ide/eclipse/ddms/views/LogCatView.java
@@ -21,6 +21,7 @@ import com.android.ddmuilib.logcat.LogCatPanel;
import com.android.ddmuilib.logcat.LogCatReceiver;
import com.android.ddmuilib.logcat.LogCatStackTraceParser;
import com.android.ide.eclipse.ddms.DdmsPlugin;
+import com.android.ide.eclipse.ddms.i18n.Messages;
import com.android.ide.eclipse.ddms.preferences.PreferenceInitializer;
import org.eclipse.core.resources.IFile;
@@ -34,15 +35,19 @@ import org.eclipse.jdt.core.search.SearchMatch;
import org.eclipse.jdt.core.search.SearchParticipant;
import org.eclipse.jdt.core.search.SearchPattern;
import org.eclipse.jdt.core.search.SearchRequestor;
+import org.eclipse.jface.action.Action;
import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.swt.dnd.Clipboard;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Composite;
+import org.eclipse.ui.IActionBars;
import org.eclipse.ui.IPerspectiveRegistry;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.WorkbenchException;
+import org.eclipse.ui.actions.ActionFactory;
import org.eclipse.ui.ide.IDE;
import java.util.HashMap;
@@ -72,6 +77,8 @@ public class LogCatView extends SelectionDependentViewPart {
private LogCatPanel mLogCatPanel;
private LogCatStackTraceParser mStackTraceParser = new LogCatStackTraceParser();
+ private Clipboard mClipboard;
+
@Override
public void createPartControl(Composite parent) {
parent.setLayout(new FillLayout());
@@ -86,6 +93,24 @@ public class LogCatView extends SelectionDependentViewPart {
onDoubleClick(m);
}
});
+
+ mClipboard = new Clipboard(parent.getDisplay());
+ IActionBars actionBars = getViewSite().getActionBars();
+ actionBars.setGlobalActionHandler(ActionFactory.COPY.getId(),
+ new Action(Messages.LogCatView_Copy) {
+ @Override
+ public void run() {
+ mLogCatPanel.copySelectionToClipboard(mClipboard);
+ }
+ });
+
+ actionBars.setGlobalActionHandler(ActionFactory.SELECT_ALL.getId(),
+ new Action(Messages.LogCatView_Select_All) {
+ @Override
+ public void run() {
+ mLogCatPanel.selectAll();
+ }
+ });
}
@Override