/*******************************************************************************
* 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.linuxtools.internal.systemtap.ui.ide.IDESessionSettings;
import org.eclipse.linuxtools.internal.systemtap.ui.ide.Localization;
import org.eclipse.linuxtools.internal.systemtap.ui.ide.editors.stp.STPEditor;
import org.eclipse.linuxtools.internal.systemtap.ui.ide.views.FunctionBrowserView;
import org.eclipse.linuxtools.systemtap.structures.TreeNode;
import org.eclipse.ui.IWorkbenchWindow;
/**
* This <code>Action</code> is fired when the user double clicks on an entry in the
* IDE's current <code>FunctionBrowserView</code>. The behavior of this <code>Action</code> is
* to expand or collapse the function tree if the user clicks on a non-function (say a file containing
* functions), or to insert a blank call to the function if the user double clicks on a function
* (defined by the clickable property in the <code>TreeNode</code> class, retrieved through
* <code>TreeNode.isClickable</code>.
* @author Henry Hughes
* @author Ryan Morse
* @see org.eclipse.linuxtools.systemtap.structures.TreeNode#isClickable()
* @see org.eclipse.linuxtools.systemtap.ui.editor.SimpleEditor#insertTextAtCurrent(String)
* @see org.eclipse.linuxtools.internal.systemtap.ui.ide.actions.TreeExpandCollapseAction
*/
public class FunctionBrowserAction extends BrowserViewAction {
private static final String ID = "org.eclipse.linuxtools.systemtap.ui.ide.FunctionAction"; //$NON-NLS-1$
public FunctionBrowserAction(IWorkbenchWindow window, FunctionBrowserView browser) {
super(window, browser);
setId(ID);
setActionDefinitionId(ID);
setText(Localization.getString("FunctionBrowserAction.Insert")); //$NON-NLS-1$
setToolTipText(Localization
.getString("FunctionBrowserAction.InsertFunction")); //$NON-NLS-1$
}
/**
* The main action code, invoked when this action is fired. This code checks the current
* selection's clickable property, and either invokes the <code>TreeExpandCollapseAction</code> if
* the selection is not clickable (i.e. the selection is not a function, but a category of functions),
* or it inserts text for a function call to the selected function in the active STPEditor
* (creating a new editor if there is not one currently open).
*/
@Override
public void run() {
Object o = getSelectedElement();
if (o instanceof TreeNode) {
TreeNode t = (TreeNode) o;
if (t.isClickable()) {
STPEditor stpeditor = IDESessionSettings.getOrAskForActiveSTPEditor(true);
if (stpeditor != null) {
stpeditor.insertTextAtCurrent(t.toString() + "\n"); //$NON-NLS-1$
}
} else {
runExpandAction();
}
}
}
}