package org.archstudio.bna.logics.information; import org.archstudio.bna.IBNAView; import org.archstudio.bna.IBNAWorld; import org.archstudio.bna.ICoordinate; import org.archstudio.bna.IThing; import org.archstudio.bna.constants.MouseType; import org.archstudio.bna.facets.IHasToolTip; import org.archstudio.bna.logics.AbstractThingLogic; import org.archstudio.bna.ui.IBNAAllEventsListener2; import org.archstudio.bna.ui.IBNAMouseMoveListener2; import org.archstudio.bna.utils.Assemblies; import org.archstudio.bna.utils.BNAUtils; import org.archstudio.bna.utils.BNAUtils2.ThingsAtLocation; import org.archstudio.sysutils.SystemUtils; import org.eclipse.swt.events.MouseEvent; import org.eclipse.swt.widgets.Control; public class ToolTipLogic extends AbstractThingLogic implements IBNAMouseMoveListener2, IBNAAllEventsListener2 { public static final void setToolTip(IThing thing, String toolTip) { thing.set(IHasToolTip.TOOL_TIP_KEY, toolTip); } public static final String getToolTip(IThing thing) { return thing == null ? null : thing.get(IHasToolTip.TOOL_TIP_KEY); } protected String lastToolTip = null; public ToolTipLogic(IBNAWorld world) { super(world); } @Override public void mouseMove(IBNAView view, MouseType type, MouseEvent evt, ICoordinate location, ThingsAtLocation thingsAtLocation) { BNAUtils.checkLock(); // only handle events for the top world if (view.getParentView() != null) { return; } String toolTip = null; if (thingsAtLocation.getBackgroundThingAtLocation() != null) { IThing tooltipThing = Assemblies.getThingWithProperty( thingsAtLocation.getBackgroundThingAtLocation().getView().getBNAWorld().getBNAModel(), thingsAtLocation.getBackgroundThingAtLocation().getThing(), IHasToolTip.TOOL_TIP_KEY); if (tooltipThing != null) { toolTip = tooltipThing.get(IHasToolTip.TOOL_TIP_KEY); } } if (!SystemUtils.nullEquals(toolTip, lastToolTip)) { lastToolTip = toolTip; Control c = view.getBNAUI().getComposite(); if (!SystemUtils.nullEquals(toolTip, c.getToolTipText())) { c.setToolTipText(toolTip); } } } }