diff options
Diffstat (limited to 'target_explorer/plugins/org.eclipse.tm.te.tcf.filesystem/src/org/eclipse/tm/te/tcf/filesystem/controls/FSTreeControl.java')
-rw-r--r-- | target_explorer/plugins/org.eclipse.tm.te.tcf.filesystem/src/org/eclipse/tm/te/tcf/filesystem/controls/FSTreeControl.java | 61 |
1 files changed, 57 insertions, 4 deletions
diff --git a/target_explorer/plugins/org.eclipse.tm.te.tcf.filesystem/src/org/eclipse/tm/te/tcf/filesystem/controls/FSTreeControl.java b/target_explorer/plugins/org.eclipse.tm.te.tcf.filesystem/src/org/eclipse/tm/te/tcf/filesystem/controls/FSTreeControl.java index 7385574da..3722356f9 100644 --- a/target_explorer/plugins/org.eclipse.tm.te.tcf.filesystem/src/org/eclipse/tm/te/tcf/filesystem/controls/FSTreeControl.java +++ b/target_explorer/plugins/org.eclipse.tm.te.tcf.filesystem/src/org/eclipse/tm/te/tcf/filesystem/controls/FSTreeControl.java @@ -10,7 +10,16 @@ *******************************************************************************/ package org.eclipse.tm.te.tcf.filesystem.controls; +import java.util.Collections; + +import org.eclipse.core.commands.Command; +import org.eclipse.core.commands.ExecutionEvent; +import org.eclipse.core.expressions.EvaluationContext; +import org.eclipse.jface.viewers.DoubleClickEvent; +import org.eclipse.jface.viewers.IDoubleClickListener; +import org.eclipse.jface.viewers.ILabelDecorator; import org.eclipse.jface.viewers.ILabelProvider; +import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.ISelectionProvider; import org.eclipse.jface.viewers.ITreeContentProvider; @@ -23,15 +32,21 @@ import org.eclipse.swt.widgets.TreeColumn; import org.eclipse.tm.te.tcf.filesystem.internal.nls.Messages; import org.eclipse.tm.te.ui.interfaces.IUIConstants; import org.eclipse.tm.te.ui.trees.AbstractTreeControl; +import org.eclipse.ui.IDecoratorManager; +import org.eclipse.ui.ISources; +import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchPart; import org.eclipse.ui.IWorkbenchPartSite; +import org.eclipse.ui.PlatformUI; +import org.eclipse.ui.commands.ICommandService; +import org.eclipse.ui.navigator.ICommonActionConstants; import org.eclipse.ui.part.MultiPageSelectionProvider; /** * Target Explorer: File system browser control. */ -public class FSTreeControl extends AbstractTreeControl implements ISelectionChangedListener{ +public class FSTreeControl extends AbstractTreeControl implements ISelectionChangedListener, IDoubleClickListener { /** * Constructor. @@ -71,6 +86,7 @@ public class FSTreeControl extends AbstractTreeControl implements ISelectionChan column.setWidth(200); } tree.setHeaderVisible(hasColumns()); + viewer.addDoubleClickListener(this); } /** @@ -95,7 +111,11 @@ public class FSTreeControl extends AbstractTreeControl implements ISelectionChan */ @Override protected ILabelProvider doCreateTreeViewerLabelProvider(TreeViewer viewer) { - return new FSTreeLabelProvider(viewer); + FSTreeLabelProvider labelProvider = new FSTreeLabelProvider(viewer); + IWorkbench workbench = PlatformUI.getWorkbench(); + IDecoratorManager manager = workbench.getDecoratorManager(); + ILabelDecorator decorator = manager.getLabelDecorator(); + return new FSTreeDecoratingLabelProvider(labelProvider,decorator); } /* (non-Javadoc) @@ -130,8 +150,7 @@ public class FSTreeControl extends AbstractTreeControl implements ISelectionChan return IUIConstants.ID_CONTROL_MENUS_BASE + ".menu.fs"; //$NON-NLS-1$; } - /* - * (non-Javadoc) + /* (non-Javadoc) * @see org.eclipse.jface.viewers.ISelectionChangedListener#selectionChanged(org.eclipse.jface.viewers.SelectionChangedEvent) */ @Override @@ -149,4 +168,38 @@ public class FSTreeControl extends AbstractTreeControl implements ISelectionChan } } + /* (non-Javadoc) + * @see org.eclipse.jface.viewers.IDoubleClickListener#doubleClick(org.eclipse.jface.viewers.DoubleClickEvent) + */ + @Override + public void doubleClick(DoubleClickEvent event) { + // If an handled and enabled command is registered for the ICommonActionConstants.OPEN + // retargetable action id, redirect the double click handling to the command handler. + // + // Note: The default tree node expansion must be re-implemented in the active handler! + ICommandService service = (ICommandService)PlatformUI.getWorkbench().getService(ICommandService.class); + Command command = service != null ? service.getCommand(ICommonActionConstants.OPEN) : null; + if (command != null && command.isDefined() && command.isEnabled()) { + try { + ISelection selection = event.getSelection(); + EvaluationContext ctx = new EvaluationContext(null, selection); + ctx.addVariable(ISources.ACTIVE_CURRENT_SELECTION_NAME, selection); + ctx.addVariable(ISources.ACTIVE_MENU_SELECTION_NAME, selection); + ctx.addVariable(ISources.ACTIVE_WORKBENCH_WINDOW_NAME, PlatformUI.getWorkbench().getActiveWorkbenchWindow()); + IWorkbenchPart part = getParentPart(); + if (part != null) { + IWorkbenchPartSite site = part.getSite(); + ctx.addVariable(ISources.ACTIVE_PART_ID_NAME, site.getId()); + ctx.addVariable(ISources.ACTIVE_PART_NAME, part); + ctx.addVariable(ISources.ACTIVE_SITE_NAME, site); + ctx.addVariable(ISources.ACTIVE_SHELL_NAME, site.getShell()); + } + ExecutionEvent executionEvent = new ExecutionEvent(command, Collections.EMPTY_MAP, part, ctx); + command.executeWithChecks(executionEvent); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + } |