package timeflow.vis;
|
|
import timeflow.model.*;
|
|
import java.awt.*;
|
import java.util.ArrayList;
|
|
public class Mouseover extends Rectangle {
|
public Object thing;
|
public Mouseover(Object thing, int x, int y, int w, int h)
|
{
|
super(x,y,w,h);
|
this.thing=thing;
|
}
|
|
public void draw(Graphics2D g, int maxW, int maxH, Display display)
|
{
|
g.setColor(new Color(0,53,153));
|
g.setColor(new Color(255,255,0,100));
|
g.fill(this);
|
}
|
|
protected void draw(Graphics2D g, int maxW, int maxH, Display display, ArrayList labels, int numLines)
|
{
|
if (labels==null || labels.size()==0)
|
return;
|
|
// draw a background box.
|
|
// find max number of chars, very very roughly!
|
int boxW=50;
|
for (int i=0; i<labels.size(); i+=2)
|
{
|
if (labels.get(i) instanceof String[])
|
boxW=300;
|
else if (labels.get(i) instanceof String)
|
{
|
boxW=Math.max(boxW, 50+50*((String)labels.get(i)).length());
|
}
|
}
|
|
|
boxW=Math.min(350, boxW);
|
int boxH=18*numLines+10;
|
int mx=this.x+this.width+5;
|
int my=this.y+this.height+35;
|
|
// put box in a place where it does not obscure the data
|
// or go off screen.
|
if (my+boxH>maxH-10)
|
{
|
my=Math.max(10,this.y-boxH-5);
|
}
|
if (mx+boxW>maxW-10)
|
{
|
mx=Math.max(10,this.x-boxW-10);
|
}
|
int ty=my;
|
g.setColor(new Color(0,0,0,70));
|
g.fillRoundRect(mx-11, my-16, boxW, boxH,12,12);
|
g.setColor(Color.white);
|
g.fillRoundRect(mx-15, my-20, boxW, boxH,12,12);
|
g.setColor(Color.darkGray);
|
g.drawRoundRect(mx-15, my-20, boxW, boxH,12,12);
|
|
// finally, draw the darn labels.
|
for (int i=0; i<labels.size(); i+=2)
|
{
|
g.setFont(display.bold());
|
String field=(String)labels.get(i);
|
g.drawString(field,mx,ty);
|
int sw=display.boldFontMetrics().stringWidth(field);
|
g.setFont(display.plain());
|
Object o=labels.get(i+1);
|
if (o instanceof String)
|
{
|
g.drawString((String)o,mx+sw+9,ty);
|
ty+=18;
|
}
|
else
|
{
|
ArrayList<String> lines=(ArrayList<String>)o;
|
int dx=sw+9;
|
for (String line: lines)
|
{
|
g.drawString((String)line,mx+dx,ty);
|
ty+=18;
|
dx=0;
|
}
|
ty+=5;
|
}
|
}
|
}
|
}
|