aboutsummaryrefslogtreecommitdiffstats
path: root/ddms
diff options
context:
space:
mode:
authorSiva Velusamy <vsiva@google.com>2012-05-04 11:16:21 -0700
committerSiva Velusamy <vsiva@google.com>2012-05-04 14:00:17 -0700
commit206b3513654dcc7765c5c7c6fe2ab2423cb76afe (patch)
tree31fa765e758366004aa75d527897cee17f6bb448 /ddms
parentba6bbd023bcb9e5c8fb3515a159aa8a374704ce2 (diff)
downloadsdk-206b3513654dcc7765c5c7c6fe2ab2423cb76afe.zip
sdk-206b3513654dcc7765c5c7c6fe2ab2423cb76afe.tar.gz
sdk-206b3513654dcc7765c5c7c6fe2ab2423cb76afe.tar.bz2
Add ability to right click on a message to create filter
This patch allows users to create logcat filters based on an existing message. When a message is right clicked, it brings up a menu with an entry that says "Filter similar messages..". Selecting that will bring up the "Add new filter" dialog with its input fields prefilled based on the message contents. This fixes: http://code.google.com/p/android/issues/detail?id=25835 Change-Id: If324330cbf78b503be61c31ebcff053d0f869c1e
Diffstat (limited to 'ddms')
-rw-r--r--ddms/libs/ddmuilib/src/com/android/ddmuilib/logcat/LogCatPanel.java53
1 files changed, 52 insertions, 1 deletions
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 45f0c69..53255cb 100644
--- a/ddms/libs/ddmuilib/src/com/android/ddmuilib/logcat/LogCatPanel.java
+++ b/ddms/libs/ddmuilib/src/com/android/ddmuilib/logcat/LogCatPanel.java
@@ -25,6 +25,8 @@ import com.android.ddmuilib.ImageLoader;
import com.android.ddmuilib.SelectionDependentPanel;
import com.android.ddmuilib.TableHelper;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.preference.PreferenceConverter;
@@ -49,6 +51,8 @@ import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.graphics.FontData;
import org.eclipse.swt.graphics.GC;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Combo;
@@ -59,6 +63,7 @@ import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.FileDialog;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.swt.widgets.TableItem;
@@ -369,9 +374,11 @@ public final class LogCatPanel extends SelectionDependentPanel
});
}
- private void addNewFilter() {
+ private void addNewFilter(String defaultTag, String defaultText, String defaultPid,
+ String defaultAppName, LogLevel defaultLevel) {
LogCatFilterSettingsDialog d = new LogCatFilterSettingsDialog(
Display.getCurrent().getActiveShell());
+ d.setDefaults("", defaultTag, defaultText, defaultPid, defaultAppName, defaultLevel);
if (d.open() != Window.OK) {
return;
}
@@ -394,6 +401,11 @@ public final class LogCatPanel extends SelectionDependentPanel
saveFilterPreferences();
}
+ private void addNewFilter() {
+ addNewFilter("", "", "",
+ "", LogLevel.VERBOSE);
+ }
+
private void deleteSelectedFilter() {
int selectedIndex = mFiltersTableViewer.getTable().getSelectionIndex();
if (selectedIndex <= 0) {
@@ -794,10 +806,49 @@ public final class LogCatPanel extends SelectionDependentPanel
}
});
+ addRightClickMenu(mTable);
initDoubleClickListener();
recomputeWrapWidth();
}
+ /** Setup menu to be displayed when right clicking a log message. */
+ private void addRightClickMenu(final Table table) {
+ // This action will pop up a create filter dialog pre-populated with current selection
+ final Action filterAction = new Action("Filter similar messages..") {
+ @Override
+ public void run() {
+ List<LogCatMessage> selectedMessages = getSelectedLogCatMessages();
+ if (selectedMessages.size() == 0) {
+ addNewFilter();
+ } else {
+ LogCatMessage m = selectedMessages.get(0);
+ addNewFilter(m.getTag(), m.getMessage(), m.getPid(), m.getAppName(),
+ m.getLogLevel());
+ }
+ }
+ };
+
+ final MenuManager mgr = new MenuManager();
+ mgr.add(filterAction);
+ final Menu menu = mgr.createContextMenu(table);
+
+ table.addListener(SWT.MenuDetect, new Listener() {
+ @Override
+ public void handleEvent(Event event) {
+ Point pt = table.getDisplay().map(null, table, new Point(event.x, event.y));
+ Rectangle clientArea = table.getClientArea();
+
+ // The click location is in the header if it is between
+ // clientArea.y and clientArea.y + header height
+ boolean header = pt.y > clientArea.y
+ && pt.y < (clientArea.y + table.getHeaderHeight());
+
+ // Show the menu only if it is not inside the header
+ table.setMenu(header ? null : menu);
+ }
+ });
+ }
+
public void recomputeWrapWidth() {
if (mTable == null || mTable.isDisposed()) {
return;