aboutsummaryrefslogtreecommitdiffstats
path: root/ddms/libs/ddmuilib/src
diff options
context:
space:
mode:
Diffstat (limited to 'ddms/libs/ddmuilib/src')
-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;