/******************************************************************************* * Copyright (c) 2006 IBM Corporation. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBM Corporation - Jeff Briggs, Henry Hughes, Ryan Morse *******************************************************************************/ package org.eclipse.linuxtools.internal.systemtap.ui.ide.actions; import org.eclipse.core.filesystem.IFileStore; import org.eclipse.linuxtools.internal.systemtap.ui.ide.Localization; import org.eclipse.linuxtools.internal.systemtap.ui.ide.views.KernelBrowserView; import org.eclipse.linuxtools.systemtap.graphing.ui.widgets.ExceptionErrorDialog; import org.eclipse.linuxtools.systemtap.structures.TreeNode; import org.eclipse.ui.IEditorInput; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.PartInitException; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.ide.FileStoreEditorInput; /** * This <code>Action</code> is raised by <code>KernelBrowserView</code> whenever the user selects * an item in the view (usually by double clicking). This <code>Action</code> either passes * the event on to <code>TreeExpandCollapseAction</code> if the selection is not clickable, or * it opens a new CEditor for the file selected if the selection is clickable. * @author Henry Hughes * @author Ryan Morse * @see org.eclipse.linuxtools.internal.systemtap.ui.ide.editors.c.CEditor * @see org.eclipse.linuxtools.internal.systemtap.ui.ide.actions.TreeExpandCollapseAction * @see org.eclipse.linuxtools.internal.systemtap.ui.ide.views.KernelBrowserView */ public class KernelSourceAction extends BrowserViewAction { public final static String ID = "org.eclipse.linuxtools.systemtap.ui.ide.KBAction"; //$NON-NLS-1$ private static final String CDT_EDITOR_ID = "org.eclipse.cdt.ui.editor.CEditor"; //$NON-NLS-1$ /** * The default constructor for the <code>KernelSourceAction</code>. Takes the window that it affects * and the <code>KernelBrowserView</code> that will fire the event as arguments. * @param window The <code>IWorkbenchWindow</code> that the action operates on. * @param browser The <code>KernelBrowserView</code> that fires this action. */ public KernelSourceAction(IWorkbenchWindow window, KernelBrowserView browser) { super(window, browser); setId(ID); setActionDefinitionId(ID); setText(Localization.getString("KernelSourceAction.Insert")); //$NON-NLS-1$ setToolTipText(Localization .getString("KernelSourceAction.InsertSelectedFunction")); //$NON-NLS-1$ } /** * The main code body for this action. Causes one of the following to occur: * <ul> * <li>If the selected node is clickable, as specified in <code>TreeNode.isClickable</code> * the browser creates an instance of <code>CEditor</code> on the file specified in the selection * (<code>KernelBrowserView</code>'s tree only marks clickable on files, not folders) and * opens it on the current window</li> * <li>If the selected node is not clickable, the code runs the action specified in * <code>TreeExpandCollapseAction</code></li> * @see org.eclipse.linuxtools.internal.systemtap.ui.ide.editors.c.CEditor * @see TreeNode#isClickable() * @see TreeExpandCollapseAction */ @Override public void run() { IWorkbench wb = PlatformUI.getWorkbench(); Object o = getSelectedElement(); if (o instanceof TreeNode) { TreeNode t = (TreeNode) o; if (t.isClickable()) { IFileStore fs = (IFileStore) t.getData(); if (fs != null) { IEditorInput input = new FileStoreEditorInput(fs); try { wb.getActiveWorkbenchWindow().getActivePage().openEditor(input, CDT_EDITOR_ID); } catch (PartInitException e) { ExceptionErrorDialog.openError(Localization.getString("KernelSourceAction.CantOpenEditor"), e); //$NON-NLS-1$ } } } else { runExpandAction(); } } } }