From 9c43310c9aa466175ed6071c924467630864317d Mon Sep 17 00:00:00 2001 From: Miklos Magyari Date: Wed, 1 Jun 2022 16:48:46 +0200 Subject: [PATCH] Initial implementation of outline hover (issue #488) Signed-off-by: Miklos Magyari --- .../editors/controls/OutlineHoverManager.java | 36 ++++++++++++++++++ .../controls/Ttcn3HoverInfoControl.java | 8 +++- .../editors/ttcn3editor/OutlinePage.java | 38 ++++++++++++++++++- 3 files changed, 80 insertions(+), 2 deletions(-) create mode 100755 org.eclipse.titan.designer/src/org/eclipse/titan/designer/editors/controls/OutlineHoverManager.java diff --git a/org.eclipse.titan.designer/src/org/eclipse/titan/designer/editors/controls/OutlineHoverManager.java b/org.eclipse.titan.designer/src/org/eclipse/titan/designer/editors/controls/OutlineHoverManager.java new file mode 100755 index 000000000..64d8239bf --- /dev/null +++ b/org.eclipse.titan.designer/src/org/eclipse/titan/designer/editors/controls/OutlineHoverManager.java @@ -0,0 +1,36 @@ +/****************************************************************************** + * Copyright (c) 2000-2022 Ericsson Telecom AB + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v2.0 + * which accompanies this distribution, and is available at + * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html + ******************************************************************************/ +package org.eclipse.titan.designer.editors.controls; + +import org.eclipse.jface.text.AbstractHoverInformationControlManager; +import org.eclipse.jface.text.IInformationControlCreator; +import org.eclipse.swt.graphics.Rectangle; +import org.eclipse.swt.widgets.Control; + +/** + * + * @author Miklos Magyari + * + */ +public class OutlineHoverManager extends AbstractHoverInformationControlManager { + public OutlineHoverManager(IInformationControlCreator creator, Control control) { + super(creator); + super.install(control); + super.getInformationControl(); + } + + @Override + protected void computeInformation() { + setInformation(null, null); + } + + @Override + public void presentInformation() { + super.showInformationControl(new Rectangle(850, 50, 300, 300)); + } +} diff --git a/org.eclipse.titan.designer/src/org/eclipse/titan/designer/editors/controls/Ttcn3HoverInfoControl.java b/org.eclipse.titan.designer/src/org/eclipse/titan/designer/editors/controls/Ttcn3HoverInfoControl.java index 077a08ca5..438b6192c 100755 --- a/org.eclipse.titan.designer/src/org/eclipse/titan/designer/editors/controls/Ttcn3HoverInfoControl.java +++ b/org.eclipse.titan.designer/src/org/eclipse/titan/designer/editors/controls/Ttcn3HoverInfoControl.java @@ -43,7 +43,7 @@ import org.eclipse.ui.editors.text.EditorsUI; * @author Adam Knapp * */ -public class Ttcn3HoverInfoControl extends AbstractInformationControl implements IInformationControlExtension2 { +public class Ttcn3HoverInfoControl extends AbstractInformationControl implements IInformationControlCreator, IInformationControlExtension2 { /** Default status text in the hover window */ private static final String STATUS_TEXT = "Hover or press 'F2' to focus"; /** Text of view switch button */ @@ -357,4 +357,10 @@ public class Ttcn3HoverInfoControl extends AbstractInformationControl implements return MessageFormat.format(SWITCHBUTTON_TEXT_PATTERN, actualType == HoverContentType.INFO ? HoverContentType.SOURCE : HoverContentType.INFO); } + + @Override + public IInformationControl createInformationControl(Shell parent) { + // TODO Auto-generated method stub + return this; + } } diff --git a/org.eclipse.titan.designer/src/org/eclipse/titan/designer/editors/ttcn3editor/OutlinePage.java b/org.eclipse.titan.designer/src/org/eclipse/titan/designer/editors/ttcn3editor/OutlinePage.java index a63aa3a2e..3ff9c8676 100644 --- a/org.eclipse.titan.designer/src/org/eclipse/titan/designer/editors/ttcn3editor/OutlinePage.java +++ b/org.eclipse.titan.designer/src/org/eclipse/titan/designer/editors/ttcn3editor/OutlinePage.java @@ -14,6 +14,7 @@ import org.eclipse.jface.action.Action; import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.jface.util.IPropertyChangeListener; import org.eclipse.jface.util.PropertyChangeEvent; +import org.eclipse.jface.text.IInformationControlCreator; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.SelectionChangedEvent; @@ -23,9 +24,14 @@ import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.viewers.ViewerComparator; import org.eclipse.jface.viewers.ViewerFilter; +import org.eclipse.swt.events.MouseEvent; +import org.eclipse.swt.events.MouseTrackListener; +import org.eclipse.swt.graphics.Point; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Display; +import org.eclipse.swt.widgets.Tree; +import org.eclipse.swt.widgets.TreeItem; import org.eclipse.titan.designer.Activator; import org.eclipse.titan.designer.AST.IOutlineElement; import org.eclipse.titan.designer.AST.Identifier; @@ -40,6 +46,8 @@ import org.eclipse.titan.designer.AST.TTCN3.definitions.Definition; import org.eclipse.titan.designer.AST.TTCN3.definitions.Group; import org.eclipse.titan.designer.AST.TTCN3.definitions.ImportModule; import org.eclipse.titan.designer.editors.OutlineViewSorter; +import org.eclipse.titan.designer.editors.controls.OutlineHoverManager; +import org.eclipse.titan.designer.editors.controls.Ttcn3HoverInfoControl; import org.eclipse.titan.designer.graphics.ImageCache; import org.eclipse.titan.designer.parsers.GlobalParser; import org.eclipse.titan.designer.parsers.ProjectSourceParser; @@ -87,6 +95,8 @@ public final class OutlinePage extends ContentOutlinePage { private static final String ACTION_HIDE_FUNCTIONS = "Hide Functions"; private static final String ACTION_HIDE_TEMPLATES = "Hide Templates"; private static final String ACTION_HIDE_TYPES = "Hide Types"; + + private OutlineHoverManager fTextHoverManager; public OutlinePage(final AbstractTextEditor editor) { this.editor = editor; @@ -259,8 +269,34 @@ public final class OutlinePage extends ContentOutlinePage { semanticHighlightingListener = new SemanticHighlightingListener(); Activator.getDefault().getPreferenceStore().addPropertyChangeListener(semanticHighlightingListener); + + viewer.getTree().addMouseTrackListener(new MouseTrackListener() { + @Override + public void mouseHover(MouseEvent event) { + final Tree tree = viewer.getTree(); + TreeItem item = tree.getItem(new Point(event.x, event.y)); + if (item != null && item.getData() instanceof Definition) { + Ttcn3HoverInfoControl control = new Ttcn3HoverInfoControl(getControl().getShell()); + final Definition definition = (Definition)item.getData(); + control.setInput(definition.getHoverContent(null)); + fTextHoverManager = new OutlineHoverManager((IInformationControlCreator) control, viewer.getControl()); + fTextHoverManager.setSizeConstraints(300, 200, true, false); + fTextHoverManager.presentInformation(); + } + } + + @Override + public void mouseExit(MouseEvent e) { + // TODO Auto-generated method stub + } + + @Override + public void mouseEnter(MouseEvent e) { + // TODO Auto-generated method stub + } + }); } - + private ViewerFilter getGroupFilter() { if (groupFilter == null) { groupFilter = new ViewerFilter() { -- GitLab