summaryrefslogtreecommitdiff
path: root/propertysheet/src/org/eclipse/wb/internal/core/model/property/table/PropertyTooltipProvider.java
diff options
context:
space:
mode:
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.java117
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;
+ }
+ }
+ }
+}