aboutsummaryrefslogtreecommitdiff
path: root/eclipse/plugins/com.android.ide.eclipse.ddms/src/com/android/ide/eclipse/ddms/views/LogCatView.java
diff options
context:
space:
mode:
Diffstat (limited to 'eclipse/plugins/com.android.ide.eclipse.ddms/src/com/android/ide/eclipse/ddms/views/LogCatView.java')
-rw-r--r--eclipse/plugins/com.android.ide.eclipse.ddms/src/com/android/ide/eclipse/ddms/views/LogCatView.java120
1 files changed, 120 insertions, 0 deletions
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
new file mode 100644
index 000000000..9f78c4aa1
--- /dev/null
+++ b/eclipse/plugins/com.android.ide.eclipse.ddms/src/com/android/ide/eclipse/ddms/views/LogCatView.java
@@ -0,0 +1,120 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.ide.eclipse.ddms.views;
+
+import com.android.ddmlib.logcat.LogCatMessage;
+import com.android.ddmuilib.logcat.ILogCatMessageSelectionListener;
+import com.android.ddmuilib.logcat.LogCatPanel;
+import com.android.ddmuilib.logcat.LogCatStackTraceParser;
+import com.android.ide.eclipse.ddms.DdmsPlugin;
+import com.android.ide.eclipse.ddms.JavaSourceRevealer;
+import com.android.ide.eclipse.ddms.i18n.Messages;
+import com.android.ide.eclipse.ddms.preferences.PreferenceInitializer;
+
+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.actions.ActionFactory;
+
+public class LogCatView extends SelectionDependentViewPart {
+ /** LogCatView ID as defined in plugin.xml. */
+ public static final String ID = "com.android.ide.eclipse.ddms.views.LogCatView"; //$NON-NLS-1$
+
+ /** Switch perspective when a Java file is opened from logcat view. */
+ public static final boolean DEFAULT_SWITCH_PERSPECTIVE = true;
+
+ /** Target perspective to open when a Java file is opened from logcat view. */
+ public static final String DEFAULT_PERSPECTIVE_ID =
+ "org.eclipse.jdt.ui.JavaPerspective"; //$NON-NLS-1$
+
+ private LogCatPanel mLogCatPanel;
+ private LogCatStackTraceParser mStackTraceParser = new LogCatStackTraceParser();
+
+ private Clipboard mClipboard;
+
+ @Override
+ public void createPartControl(Composite parent) {
+ parent.setLayout(new FillLayout());
+
+ IPreferenceStore prefStore = DdmsPlugin.getDefault().getPreferenceStore();
+ mLogCatPanel = new LogCatPanel(prefStore);
+ mLogCatPanel.createPanel(parent);
+ setSelectionDependentPanel(mLogCatPanel);
+
+ mLogCatPanel.addLogCatMessageSelectionListener(new ILogCatMessageSelectionListener() {
+ @Override
+ public void messageDoubleClicked(LogCatMessage m) {
+ 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();
+ }
+ });
+
+ actionBars.setGlobalActionHandler(ActionFactory.FIND.getId(),
+ new Action("Find") {
+ @Override
+ public void run() {
+ mLogCatPanel.showFindDialog();
+ }
+ });
+ }
+
+ @Override
+ public void setFocus() {
+ }
+
+ private void onDoubleClick(LogCatMessage m) {
+ String msg = m.getMessage();
+ if (!mStackTraceParser.isValidExceptionTrace(msg)) {
+ return;
+ }
+
+ IPreferenceStore store = DdmsPlugin.getDefault().getPreferenceStore();
+ String perspectiveId = null;
+ if (store.getBoolean(PreferenceInitializer.ATTR_SWITCH_PERSPECTIVE)) {
+ perspectiveId = store.getString(PreferenceInitializer.ATTR_PERSPECTIVE_ID);
+ }
+
+
+ String fileName = mStackTraceParser.getFileName(msg);
+ int lineNumber = mStackTraceParser.getLineNumber(msg);
+ String methodName = mStackTraceParser.getMethodName(msg);
+ JavaSourceRevealer.revealMethod(methodName, fileName, lineNumber, perspectiveId);
+ }
+
+ public void selectTransientAppFilter(String appName) {
+ mLogCatPanel.selectTransientAppFilter(appName);
+ }
+}