14106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy/*
24106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy * Copyright (C) 2007 The Android Open Source Project
34106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy *
44106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy * Licensed under the Apache License, Version 2.0 (the "License");
54106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy * you may not use this file except in compliance with the License.
64106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy * You may obtain a copy of the License at
74106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy *
84106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy *      http://www.apache.org/licenses/LICENSE-2.0
94106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy *
104106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy * Unless required by applicable law or agreed to in writing, software
114106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy * distributed under the License is distributed on an "AS IS" BASIS,
124106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
134106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy * See the License for the specific language governing permissions and
144106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy * limitations under the License.
154106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy */
164106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy
174106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamypackage com.android.ide.eclipse.ddms.views;
184106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy
19e22acd391ef9c71c86a348e8491d8b1c9c1eac1dSiva Velusamyimport com.android.ddmlib.Log.LogLevel;
20e22acd391ef9c71c86a348e8491d8b1c9c1eac1dSiva Velusamyimport com.android.ddmuilib.ImageLoader;
21e22acd391ef9c71c86a348e8491d8b1c9c1eac1dSiva Velusamyimport com.android.ddmuilib.logcat.LogColors;
22e22acd391ef9c71c86a348e8491d8b1c9c1eac1dSiva Velusamyimport com.android.ddmuilib.logcat.LogFilter;
23e22acd391ef9c71c86a348e8491d8b1c9c1eac1dSiva Velusamyimport com.android.ddmuilib.logcat.LogPanel;
24e22acd391ef9c71c86a348e8491d8b1c9c1eac1dSiva Velusamyimport com.android.ddmuilib.logcat.LogPanel.ILogFilterStorageManager;
25e22acd391ef9c71c86a348e8491d8b1c9c1eac1dSiva Velusamyimport com.android.ddmuilib.logcat.LogPanel.LogCatViewInterface;
26e22acd391ef9c71c86a348e8491d8b1c9c1eac1dSiva Velusamyimport com.android.ide.eclipse.ddms.CommonAction;
27e22acd391ef9c71c86a348e8491d8b1c9c1eac1dSiva Velusamyimport com.android.ide.eclipse.ddms.DdmsPlugin;
28e22acd391ef9c71c86a348e8491d8b1c9c1eac1dSiva Velusamyimport com.android.ide.eclipse.ddms.i18n.Messages;
29e22acd391ef9c71c86a348e8491d8b1c9c1eac1dSiva Velusamyimport com.android.ide.eclipse.ddms.preferences.PreferenceInitializer;
304106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy
314106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamyimport org.eclipse.core.resources.IFile;
324106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamyimport org.eclipse.core.resources.IMarker;
334106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamyimport org.eclipse.core.runtime.CoreException;
344106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamyimport org.eclipse.core.runtime.Status;
354106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamyimport org.eclipse.jface.action.Action;
364106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamyimport org.eclipse.jface.action.IAction;
374106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamyimport org.eclipse.jface.action.IMenuManager;
384106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamyimport org.eclipse.jface.action.IToolBarManager;
394106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamyimport org.eclipse.jface.action.Separator;
404106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamyimport org.eclipse.jface.preference.IPreferenceStore;
414106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamyimport org.eclipse.swt.dnd.Clipboard;
424106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamyimport org.eclipse.swt.graphics.Color;
434106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamyimport org.eclipse.swt.graphics.Font;
444106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamyimport org.eclipse.swt.graphics.FontData;
454106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamyimport org.eclipse.swt.widgets.Composite;
464106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamyimport org.eclipse.swt.widgets.Display;
474106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamyimport org.eclipse.ui.IActionBars;
484106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamyimport org.eclipse.ui.IPerspectiveRegistry;
494106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamyimport org.eclipse.ui.IWorkbench;
504106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamyimport org.eclipse.ui.IWorkbenchPage;
514106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamyimport org.eclipse.ui.IWorkbenchWindow;
524106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamyimport org.eclipse.ui.PlatformUI;
534106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamyimport org.eclipse.ui.WorkbenchException;
544106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamyimport org.eclipse.ui.actions.ActionFactory;
554106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamyimport org.eclipse.ui.ide.IDE;
564106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy
57e22acd391ef9c71c86a348e8491d8b1c9c1eac1dSiva Velusamyimport java.util.ArrayList;
584106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy
594106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy/**
604106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy * The log cat view displays log output from the current device selection.
614106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy */
624106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamypublic final class OldLogCatView extends SelectionDependentViewPart implements LogCatViewInterface {
634106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy
644106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy    public static final String ID = "com.android.ide.eclipse.ddms.views.OldLogCatView"; //$NON-NLS-1$
654106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy
664106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy    private static final String PREFS_COL_TIME =
674106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy            DdmsPlugin.PLUGIN_ID + ".logcat.time"; //$NON-NLS-1$
684106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy    private static final String PREFS_COL_LEVEL =
694106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy            DdmsPlugin.PLUGIN_ID + ".logcat.level"; //$NON-NLS-1$
704106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy    private static final String PREFS_COL_PID =
714106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy            DdmsPlugin.PLUGIN_ID + ".logcat.pid"; //$NON-NLS-1$
724106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy    private static final String PREFS_COL_TAG =
734106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy            DdmsPlugin.PLUGIN_ID + ".logcat.tag"; //$NON-NLS-1$
744106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy    private static final String PREFS_COL_MESSAGE =
754106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy            DdmsPlugin.PLUGIN_ID + ".logcat.message"; //$NON-NLS-1$
764106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy
774106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy    private static final String PREFS_FILTERS =
784106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy            DdmsPlugin.PLUGIN_ID + ".logcat.filters"; //$NON-NLS-1$
794106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy
804106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy    public static final String CHOICE_METHOD_DECLARATION =
814106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy            DdmsPlugin.PLUGIN_ID + ".logcat.MethodDeclaration"; //$NON-NLS-1$
824106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy    public static final String CHOICE_ERROR_LINE =
834106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy            DdmsPlugin.PLUGIN_ID + ".logcat.ErrorLine"; //$NON-NLS-1$
844106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy
854106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy    /* Default values for the switch of perspective. */
864106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy    public static final boolean DEFAULT_SWITCH_PERSPECTIVE = true;
874106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy    public static final String DEFAULT_PERSPECTIVE_ID = "org.eclipse.jdt.ui.JavaPerspective"; //$NON-NLS-1$
884106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy    private static OldLogCatView sThis;
894106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy    private LogPanel mLogPanel;
904106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy
914106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy    private CommonAction mCreateFilterAction;
924106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy    private CommonAction mDeleteFilterAction;
934106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy    private CommonAction mEditFilterAction;
944106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy    private CommonAction mExportAction;
954106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy
964106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy    private CommonAction[] mLogLevelActions;
974106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy    private String[] mLogLevelIcons = {
984106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy            "v.png", //$NON-NLS-1S
994106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy            "d.png", //$NON-NLS-1S
1004106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy            "i.png", //$NON-NLS-1S
1014106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy            "w.png", //$NON-NLS-1S
1024106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy            "e.png", //$NON-NLS-1S
1034106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy    };
1044106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy
1054106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy    private Action mClearAction;
1064106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy
1074106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy    private Clipboard mClipboard;
1084106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy
1094106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy    /**
1104106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy     * An implementation of {@link ILogFilterStorageManager} to bridge to the
1114106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy     * eclipse preference store, and saves the log filters.
1124106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy     */
1134106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy    private final class FilterStorage implements ILogFilterStorageManager {
1144106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy
115ab36f4e7488358dea4ab6b54ee2b7bef3da0232bTor Norbye        @Override
1164106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy        public LogFilter[] getFilterFromStore() {
1174106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy            String filterPrefs = DdmsPlugin.getDefault().getPreferenceStore().getString(
1184106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy                    PREFS_FILTERS);
1194106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy
1204106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy            // split in a string per filter
1214106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy            String[] filters = filterPrefs.split("\\|"); //$NON-NLS-1$
1224106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy
1234106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy            ArrayList<LogFilter> list =
1244106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy                    new ArrayList<LogFilter>(filters.length);
1254106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy
1264106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy            for (String f : filters) {
1274106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy                if (f.length() > 0) {
1284106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy                    LogFilter logFilter = new LogFilter();
1294106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy                    if (logFilter.loadFromString(f)) {
1304106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy                        list.add(logFilter);
1314106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy                    }
1324106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy                }
1334106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy            }
1344106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy
1354106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy            return list.toArray(new LogFilter[list.size()]);
1364106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy        }
1374106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy
138ab36f4e7488358dea4ab6b54ee2b7bef3da0232bTor Norbye        @Override
1394106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy        public void saveFilters(LogFilter[] filters) {
1404106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy            StringBuilder sb = new StringBuilder();
1414106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy            for (LogFilter f : filters) {
1424106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy                String filterString = f.toString();
1434106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy                sb.append(filterString);
1444106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy                sb.append('|');
1454106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy            }
1464106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy
1474106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy            DdmsPlugin.getDefault().getPreferenceStore().setValue(PREFS_FILTERS, sb.toString());
1484106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy        }
1494106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy
150ab36f4e7488358dea4ab6b54ee2b7bef3da0232bTor Norbye        @Override
1514106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy        public boolean requiresDefaultFilter() {
1524106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy            return true;
1534106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy        }
1544106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy    }
1554106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy
1564106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy    public OldLogCatView() {
1574106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy        sThis = this;
1584106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy        LogPanel.PREFS_TIME = PREFS_COL_TIME;
1594106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy        LogPanel.PREFS_LEVEL = PREFS_COL_LEVEL;
1604106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy        LogPanel.PREFS_PID = PREFS_COL_PID;
1614106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy        LogPanel.PREFS_TAG = PREFS_COL_TAG;
1624106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy        LogPanel.PREFS_MESSAGE = PREFS_COL_MESSAGE;
1634106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy    }
1644106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy
1654106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy    /**
1664106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy     * Returns the singleton instance.
1674106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy     */
1684106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy    public static OldLogCatView getInstance() {
1694106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy        return sThis;
1704106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy    }
1714106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy
1724106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy    /**
1734106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy     * Sets the display font.
1744106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy     *
1754106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy     * @param font The font.
1764106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy     */
1774106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy    public static void setFont(Font font) {
1784106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy        if (sThis != null && sThis.mLogPanel != null) {
1794106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy            sThis.mLogPanel.setFont(font);
1804106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy        }
1814106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy    }
1824106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy
1834106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy    @Override
1844106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy    public void createPartControl(Composite parent) {
1854106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy        Display d = parent.getDisplay();
1864106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy        LogColors colors = new LogColors();
1874106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy
1884106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy        ImageLoader loader = ImageLoader.getDdmUiLibLoader();
1894106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy
1904106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy        colors.infoColor = new Color(d, 0, 127, 0);
1914106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy        colors.debugColor = new Color(d, 0, 0, 127);
1924106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy        colors.errorColor = new Color(d, 255, 0, 0);
1934106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy        colors.warningColor = new Color(d, 255, 127, 0);
1944106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy        colors.verboseColor = new Color(d, 0, 0, 0);
1954106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy
1964106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy        mCreateFilterAction = new CommonAction(Messages.LogCatView_Create_Filter) {
1974106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy            @Override
1984106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy            public void run() {
1994106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy                mLogPanel.addFilter();
2004106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy            }
2014106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy        };
2024106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy        mCreateFilterAction.setToolTipText(Messages.LogCatView_Create_Filter_Tooltip);
2034106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy        mCreateFilterAction.setImageDescriptor(loader.loadDescriptor("add.png")); //$NON-NLS-1$
2044106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy
2054106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy        mEditFilterAction = new CommonAction(Messages.LogCatView_Edit_Filter) {
2064106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy            @Override
2074106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy            public void run() {
2084106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy                mLogPanel.editFilter();
2094106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy            }
2104106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy        };
2114106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy        mEditFilterAction.setToolTipText(Messages.LogCatView_Edit_Filter_Tooltip);
2124106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy        mEditFilterAction.setImageDescriptor(loader.loadDescriptor("edit.png")); //$NON-NLS-1$
2134106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy
2144106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy        mDeleteFilterAction = new CommonAction(Messages.LogCatView_Delete_Filter) {
2154106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy            @Override
2164106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy            public void run() {
2174106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy                mLogPanel.deleteFilter();
2184106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy            }
2194106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy        };
2204106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy        mDeleteFilterAction.setToolTipText(Messages.LogCatView_Delete_Filter_Tooltip);
2214106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy        mDeleteFilterAction.setImageDescriptor(loader.loadDescriptor("delete.png")); //$NON-NLS-1$
2224106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy
2234106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy        mExportAction = new CommonAction(Messages.LogCatView_Export_Selection_As_Text) {
2244106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy            @Override
2254106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy            public void run() {
2264106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy                mLogPanel.save();
2274106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy            }
2284106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy        };
2294106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy        mExportAction.setToolTipText(Messages.LogCatView_Export_Selection_As_Text_Tooltip);
2304106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy        mExportAction.setImageDescriptor(loader.loadDescriptor("save.png")); //$NON-NLS-1$
2314106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy
2324106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy        LogLevel[] levels = LogLevel.values();
2334106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy        mLogLevelActions = new CommonAction[mLogLevelIcons.length];
2344106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy        for (int i = 0; i < mLogLevelActions.length; i++) {
2354106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy            String name = levels[i].getStringValue();
2364106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy            mLogLevelActions[i] = new CommonAction(name, IAction.AS_CHECK_BOX) {
2374106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy                @Override
2384106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy                public void run() {
2394106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy                    // disable the other actions and record current index
240e22acd391ef9c71c86a348e8491d8b1c9c1eac1dSiva Velusamy                    for (int j = 0; j < mLogLevelActions.length; j++) {
241e22acd391ef9c71c86a348e8491d8b1c9c1eac1dSiva Velusamy                        Action a = mLogLevelActions[j];
2424106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy                        if (a == this) {
2434106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy                            a.setChecked(true);
2444106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy
2454106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy                            // set the log level
246e22acd391ef9c71c86a348e8491d8b1c9c1eac1dSiva Velusamy                            mLogPanel.setCurrentFilterLogLevel(j + 2);
2474106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy                        } else {
2484106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy                            a.setChecked(false);
2494106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy                        }
2504106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy                    }
2514106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy                }
2524106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy            };
2534106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy
2544106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy            mLogLevelActions[i].setToolTipText(name);
2554106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy            mLogLevelActions[i].setImageDescriptor(loader.loadDescriptor(mLogLevelIcons[i]));
2564106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy        }
2574106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy
2584106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy        mClearAction = new Action(Messages.LogCatView_Clear_Log) {
2594106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy            @Override
2604106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy            public void run() {
2614106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy                mLogPanel.clear();
2624106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy            }
2634106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy        };
2644106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy        mClearAction.setImageDescriptor(loader.loadDescriptor("clear.png")); //$NON-NLS-1$
2654106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy
2664106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy        // now create the log view
2674106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy        mLogPanel = new LogPanel(colors, new FilterStorage(), LogPanel.FILTER_MANUAL);
2684106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy        mLogPanel.setLogCatViewInterface(this);
2694106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy        mLogPanel.setActions(mDeleteFilterAction, mEditFilterAction, mLogLevelActions);
2704106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy
2714106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy        // get the font
2724106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy        String fontStr = DdmsPlugin.getDefault().getPreferenceStore().getString(
2734106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy                PreferenceInitializer.ATTR_LOGCAT_FONT);
2744106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy        if (fontStr != null) {
2754106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy            FontData data = new FontData(fontStr);
2764106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy
2774106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy            if (fontStr != null) {
2784106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy                mLogPanel.setFont(new Font(parent.getDisplay(), data));
2794106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy            }
2804106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy        }
2814106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy
2824106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy        mLogPanel.createPanel(parent);
2834106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy        setSelectionDependentPanel(mLogPanel);
2844106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy
2854106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy        // place the actions.
2864106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy        placeActions();
2874106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy
2884106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy        // setup the copy action
2894106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy        mClipboard = new Clipboard(d);
2904106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy        IActionBars actionBars = getViewSite().getActionBars();
2914106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy        actionBars.setGlobalActionHandler(ActionFactory.COPY.getId(), new Action(
2924106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy                Messages.LogCatView_Copy) {
2934106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy            @Override
2944106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy            public void run() {
2954106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy                mLogPanel.copy(mClipboard);
2964106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy            }
2974106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy        });
2984106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy
2994106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy        // setup the select all action
3004106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy        actionBars.setGlobalActionHandler(ActionFactory.SELECT_ALL.getId(),
3014106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy                new Action(Messages.LogCatView_Select_All) {
3024106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy                    @Override
3034106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy                    public void run() {
3044106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy                        mLogPanel.selectAll();
3054106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy                    }
3064106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy                });
3074106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy    }
3084106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy
3094106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy    @Override
3104106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy    public void dispose() {
3114106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy        mLogPanel.stopLogCat(true);
3124106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy        mClipboard.dispose();
3134106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy    }
3144106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy
3154106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy    @Override
3164106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy    public void setFocus() {
3174106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy        mLogPanel.setFocus();
3184106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy    }
3194106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy
3204106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy    /**
3214106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy     * Place the actions in the ui.
3224106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy     */
3234106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy    private void placeActions() {
3244106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy        IActionBars actionBars = getViewSite().getActionBars();
3254106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy
3264106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy        // first in the menu
3274106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy        IMenuManager menuManager = actionBars.getMenuManager();
3284106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy        menuManager.add(mCreateFilterAction);
3294106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy        menuManager.add(mEditFilterAction);
3304106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy        menuManager.add(mDeleteFilterAction);
3314106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy        menuManager.add(new Separator());
3324106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy        menuManager.add(mClearAction);
3334106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy        menuManager.add(new Separator());
3344106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy        menuManager.add(mExportAction);
3354106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy
3364106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy        // and then in the toolbar
3374106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy        IToolBarManager toolBarManager = actionBars.getToolBarManager();
3384106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy        for (CommonAction a : mLogLevelActions) {
3394106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy            toolBarManager.add(a);
3404106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy        }
3414106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy        toolBarManager.add(new Separator());
3424106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy        toolBarManager.add(mCreateFilterAction);
3434106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy        toolBarManager.add(mEditFilterAction);
3444106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy        toolBarManager.add(mDeleteFilterAction);
3454106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy        toolBarManager.add(new Separator());
3464106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy        toolBarManager.add(mClearAction);
3474106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy    }
3484106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy
3494106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy    void openFile(IFile file, IMarker marker) {
3504106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy        try {
3514106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy            IWorkbenchPage page = getViewSite().getWorkbenchWindow()
3524106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy                    .getActivePage();
3534106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy            if (page != null) {
3544106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy                IDE.openEditor(page, marker);
3554106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy                marker.delete();
3564106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy            }
3574106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy        } catch (CoreException e) {
3584106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy            Status s = new Status(Status.ERROR, DdmsPlugin.PLUGIN_ID, e.getMessage(), e);
3594106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy            DdmsPlugin.getDefault().getLog().log(s);
3604106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy        }
3614106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy    }
3624106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy
3634106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy    void switchPerspective() {
3644106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy        IPreferenceStore store = DdmsPlugin.getDefault().getPreferenceStore();
3654106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy        if (store.getBoolean(PreferenceInitializer.ATTR_SWITCH_PERSPECTIVE)) {
3664106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy            IWorkbench workbench = PlatformUI.getWorkbench();
3674106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy            IWorkbenchWindow window = workbench.getActiveWorkbenchWindow();
3684106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy            IPerspectiveRegistry perspectiveRegistry = workbench.getPerspectiveRegistry();
3694106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy            String perspectiveId = store.getString(PreferenceInitializer.ATTR_PERSPECTIVE_ID);
3704106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy            if (perspectiveId != null
3714106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy                    && perspectiveId.length() > 0
3724106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy                    && perspectiveRegistry.findPerspectiveWithId(perspectiveId) != null) {
3734106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy                try {
3744106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy                    workbench.showPerspective(perspectiveId, window);
3754106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy                } catch (WorkbenchException e) {
3764106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy                    e.printStackTrace();
3774106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy                }
3784106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy            }
3794106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy        }
3804106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy    }
3814106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy
382ab36f4e7488358dea4ab6b54ee2b7bef3da0232bTor Norbye    @Override
3834106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy    public void onDoubleClick() {
3844106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy    }
3854106ac0477c4bfe2bed77e4709afe2f611bf1916Siva Velusamy}
386