package com.netifera.platform.ui.tasks.list; import org.eclipse.jface.dialogs.PopupDialog; import org.eclipse.jface.resource.JFaceResources; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.forms.FormColors; import org.eclipse.ui.forms.HyperlinkSettings; import org.eclipse.ui.forms.widgets.Form; import org.eclipse.ui.forms.widgets.FormToolkit; import org.eclipse.ui.forms.widgets.TableWrapData; import org.eclipse.ui.forms.widgets.TableWrapLayout; import com.netifera.platform.api.tasks.ITaskRecord; import com.netifera.platform.ui.tasks.output.TaskOutputTableViewer; public class TaskHover extends PopupDialog { private FormToolkit toolkit; private Form form; private Composite body; private final ITaskRecord task; private TaskOutputTableViewer viewer; private TaskLabelProvider labelProvider = new TaskLabelProvider(); public TaskHover(Shell parent, Point location, ITaskRecord task) { super(parent, PopupDialog.INFOPOPUP_SHELLSTYLE | SWT.ON_TOP, true, false, false, false, false, null, "Press 'ESC' to exit"); this.task = task; create(); getShell().setLocation(location); setHeader(); addViewer(); } @Override protected Control createDialogArea(Composite parent) { Composite composite = (Composite) super.createDialogArea(parent); composite.setLayout(new FillLayout()); toolkit = new FormToolkit(composite.getDisplay()); form = toolkit.createForm(composite); FormColors colors = toolkit.getColors(); colors.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_INFO_BACKGROUND)); toolkit.getHyperlinkGroup().setHyperlinkUnderlineMode(HyperlinkSettings.UNDERLINE_HOVER); // toolkit.getHyperlinkGroup().setActiveForeground(Display.getCurrent().getSystemColor(SWT.COLOR_BLUE)); // toolkit.getHyperlinkGroup().setForeground(colors.getColor("Categorytitle")); toolkit.getHyperlinkGroup().setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_INFO_BACKGROUND)); body = form.getBody(); // body.setLayout(new GridLayout()); // body.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_INFO_BACKGROUND)); TableWrapData layoutData = new TableWrapData(TableWrapData.FILL_GRAB, TableWrapData.TOP); layoutData.maxHeight = 150; body.setLayoutData(layoutData); body.setLayout(new TableWrapLayout()); //XXX toolkit.paintBordersFor(body); return composite; } private void setHeader() { form.setFont(JFaceResources.getDialogFont()); form.setImage(labelProvider.getImage(task)); form.setText(task.getTitle()); form.setSeparatorVisible(true); toolkit.decorateFormHeading(form); } private void addViewer() { viewer = new TaskOutputTableViewer(body, body.getStyle(), true); viewer.setInput(task); Control viewerControl = viewer.getControl(); TableWrapData layoutData = new TableWrapData(TableWrapData.FILL_GRAB, TableWrapData.TOP); int h = viewerControl.computeSize(SWT.DEFAULT, SWT.DEFAULT).y; layoutData.maxHeight = h*8; viewerControl.setSize(SWT.DEFAULT, layoutData.maxHeight); layoutData.heightHint = layoutData.maxHeight; viewerControl.setLayoutData(layoutData); form.layout(true); } @Override protected void adjustBounds() { getShell().pack(); /* Point size = getShell().getSize(); size.x = 400; getShell().setSize(size); */ } @Override protected Control getFocusControl() { return viewer.getControl(); } protected void handleShellCloseEvent() { super.handleShellCloseEvent(); toolkit.dispose(); if (!viewer.getControl().isDisposed()) viewer.getControl().dispose(); } }