/* * @(#)DrawingToolTipState.java * * Copyright 2002 EGANTT LLP. All rights reserved. * PROPRIETARY/QPL. Use is subject to license terms. */ package com.egantt.swing.component.tooltip.state; import com.egantt.swing.cell.CellState; import com.egantt.swing.component.tooltip.ToolTipState; import com.egantt.model.drawing.DrawingPart; import com.egantt.model.drawing.DrawingState; import com.egantt.model.drawing.axis.AxisInterval; import java.awt.event.MouseEvent; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Iterator; import javax.swing.JToolTip; /** * A twist on tooltips, to use the DrawingState to get the values, as the * DrawingState has the ability to convert the location into a key */ public class DrawingToolTipState implements ToolTipState { /** * Strange things can happen in JDK 1.3.x if the ToolTipManager * RETURNS NULL on #getToolTipText */ private static final String EMPTY_STRING = ""; // __________________________________________________________________________ /** * Creates a new instance of JToolTip this needs to be checked at some point * wether creating or caching this tooltip instance is the correct way of * going about things. It is uncertain from looking at the ToolTipManager code * to do this we need to test on all JDK's */ public JToolTip createToolTip() { return new JToolTip(); } // __________________________________________________________________________ /** * The current implementation is less than desired basically we interrogate * the state to find out what the underlying key is and from there it is * possible to get the Interval from the appropriate part. */ public String getToolTipText(MouseEvent event, CellState cellState) { DrawingState drawing = cellState.getDrawing(); Object key = drawing != null ? drawing.getValueAt(event.getPoint()): null; if (key == null) return EMPTY_STRING; DateFormat format = SimpleDateFormat.getDateInstance(); // iterate throught the drawing parts looking for a part that contains our key for (Iterator iter = drawing.parts(); iter.hasNext();) { DrawingPart part = (DrawingPart) iter.next(); AxisInterval [] empty = new AxisInterval[0]; // display the xAxis on the screen AxisInterval [ ]intervals = part.getInterval(key, empty); if (intervals != null && intervals[0] != null) { Date d1 = new Date(((Long)intervals[0].getStart()).longValue()); Date d2 = new Date(((Long)intervals[0].getFinish()).longValue()); return format.format(d1) + " to " + format.format(d2); } } return EMPTY_STRING; } }