diff options
Diffstat (limited to 'propertysheet/src/org/eclipse/wb/internal/core/model/property/table/PropertyTooltipProvider.java')
-rw-r--r-- | propertysheet/src/org/eclipse/wb/internal/core/model/property/table/PropertyTooltipProvider.java | 117 |
1 files changed, 117 insertions, 0 deletions
diff --git a/propertysheet/src/org/eclipse/wb/internal/core/model/property/table/PropertyTooltipProvider.java b/propertysheet/src/org/eclipse/wb/internal/core/model/property/table/PropertyTooltipProvider.java new file mode 100644 index 0000000..1c3d4fe --- /dev/null +++ b/propertysheet/src/org/eclipse/wb/internal/core/model/property/table/PropertyTooltipProvider.java @@ -0,0 +1,117 @@ +/******************************************************************************* + * Copyright (c) 2011 Google, Inc. + * 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: + * Google, Inc. - initial API and implementation + *******************************************************************************/ +package org.eclipse.wb.internal.core.model.property.table; + +import org.eclipse.wb.internal.core.model.property.Property; + +import org.eclipse.swt.SWT; +import org.eclipse.swt.graphics.Point; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Control; +import org.eclipse.swt.widgets.Event; +import org.eclipse.swt.widgets.Listener; +import org.eclipse.swt.widgets.Shell; + +/** + * Provider for tooltip controls. + * + * @author scheglov_ke + * @coverage core.model.property.table + */ +public abstract class PropertyTooltipProvider { + /** + * Show tooltip directly on property row. + */ + public static final int ON = 0; + /** + * Show tooltip below property row. + */ + public static final int BELOW = 1; + + //////////////////////////////////////////////////////////////////////////// + // + // PropertyTooltipProvider + // + //////////////////////////////////////////////////////////////////////////// + /** + * Create tooltip control. + */ + public abstract Control createTooltipControl(Property property, + Composite parent, + int availableWidth, + IPropertyTooltipSite site); + + /** + * Shows tooltip {@link Shell}. + */ + public void show(Shell shell) { + shell.setVisible(true); + } + + /** + * Returns position for tooltip control. Usually we should show directly on same row, because we + * use tooltip to show just longer (full) text of property. But for "class" property we show + * hierarchy, so it is better show it below and allow user see also property row. + */ + public int getTooltipPosition() { + return ON; + } + + //////////////////////////////////////////////////////////////////////////// + // + // Tooltip listener + // + //////////////////////////////////////////////////////////////////////////// + /** + * {@link Listener} that hides tooltip on mouse exit or click. + */ + protected static final class HideListener implements Listener { + private final IPropertyTooltipSite m_site; + + //////////////////////////////////////////////////////////////////////////// + // + // Constructor + // + //////////////////////////////////////////////////////////////////////////// + public HideListener(IPropertyTooltipSite site) { + m_site = site; + } + + //////////////////////////////////////////////////////////////////////////// + // + // Listener + // + //////////////////////////////////////////////////////////////////////////// + public void handleEvent(Event event) { + Control tooltipControl = (Control) event.widget; + switch (event.type) { + case SWT.MouseDown : { + PropertyTable table = m_site.getTable(); + // convert location from tooltip to table + Point p = new Point(event.x, event.y); + p = tooltipControl.toDisplay(p); + p = table.toControl(p); + // send MouseDown to table + Event newEvent = new Event(); + newEvent.x = p.x; + newEvent.y = p.y; + table.notifyListeners(SWT.MouseDown, newEvent); + // hide tooltip + m_site.hideTooltip(); + break; + } + case SWT.MouseExit : + m_site.hideTooltip(); + break; + } + } + } +} |