2 package jalview.appletgui;
\r
5 import java.applet.*;
\r
6 import java.awt.event.*;
\r
9 public class Tooltip extends Canvas implements MouseListener,
\r
13 private String [] tip;
\r
14 protected Component owner;
\r
16 private Container mainContainer;
\r
17 private LayoutManager mainLayout;
\r
19 private boolean shown;
\r
21 private final int VERTICAL_OFFSET = 20;
\r
22 private final int HORIZONTAL_ENLARGE = 10;
\r
32 public Tooltip(String tip, Component owner)
\r
35 owner.addMouseListener(this);
\r
36 owner.addMouseMotionListener(this);
\r
37 setBackground(new Color(255, 255, 220));
\r
39 java.net.URL url = getClass().getResource("/images/link.gif");
\r
42 linkImage = java.awt.Toolkit.getDefaultToolkit().getImage(url);
\r
47 public void paint(Graphics g)
\r
49 g.drawRect(0,0,getSize().width -1, getSize().height -1);
\r
51 for(int i=0; i<tip.length; i++)
\r
54 lindex = tip[i].indexOf("%LINK%");
\r
59 g.drawString(tip[i].substring(0, lindex), 3, (i+1)*fontHeight-3);
\r
60 x+=fm.stringWidth(tip[i].substring(0, lindex)+3);
\r
62 // g.drawString("(right click)", linkImage.getWidth(this)+6, (i+1)*fontHeight-3);
\r
63 g.drawImage(linkImage, x, i * fontHeight, this);
\r
66 g.drawString(tip[i], 3, (i+1)*fontHeight - 3);
\r
70 private void addToolTip()
\r
72 mainContainer.setLayout(null);
\r
73 mainContainer.add(this, 0);
\r
74 mainContainer.validate();
\r
79 void setTip(String tip)
\r
81 fm = getFontMetrics(owner.getFont());
\r
82 fontHeight = fm.getHeight();
\r
84 int longestLine = 0;
\r
85 StringTokenizer st = new StringTokenizer(tip, "\n");
\r
86 this.tip = new String[st.countTokens()];
\r
88 while(st.hasMoreElements())
\r
90 this.tip[index] = st.nextToken();
\r
91 if(fm.stringWidth(this.tip[index])>longestLine)
\r
92 longestLine = fm.stringWidth(this.tip[index]);
\r
96 setSize(longestLine + HORIZONTAL_ENLARGE,
\r
97 fontHeight*this.tip.length);
\r
100 void setTipLocation(int x, int y)
\r
103 setLocation((owner.getLocationOnScreen().x - mainContainer.getLocationOnScreen().x) +x,
\r
104 (owner.getLocationOnScreen().y - mainContainer.getLocationOnScreen().y + VERTICAL_OFFSET)+y);
\r
108 // correction, whole tool tip must be visible
\r
109 if (mainContainer.getSize().width < (getLocation().x + getSize().width))
\r
111 setLocation(mainContainer.getSize().width - getSize().width,
\r
118 private void removeToolTip() {
\r
120 mainContainer.remove(0);
\r
121 mainContainer.setLayout(mainLayout);
\r
122 mainContainer.validate();
\r
127 private void findMainContainer() {
\r
128 Container parent = owner.getParent();
\r
130 if ((parent instanceof Applet) || (parent instanceof Frame)) {
\r
131 mainContainer = parent;
\r
134 parent = parent.getParent();
\r
137 mainLayout = mainContainer.getLayout();
\r
140 public void mouseEntered(MouseEvent me)
\r
143 public void mouseExited(MouseEvent me)
\r
148 public void mousePressed(MouseEvent me)
\r
153 public void mouseReleased(MouseEvent me)
\r
156 public void mouseClicked(MouseEvent me)
\r
159 public void mouseMoved(MouseEvent me)
\r
162 setTipLocation(me.getX(), me.getY());
\r
165 findMainContainer();
\r
167 setTipLocation(me.getX(), me.getY());
\r
171 public void mouseDragged(MouseEvent me)
\r