From c1af17fab4c8cd519f54f572851fc93e7ee8f84a Mon Sep 17 00:00:00 2001 From: Normand Briere <nbriere@noware.ca> Date: Sat, 21 Jul 2018 13:13:35 -0400 Subject: [PATCH] timeline mouse over --- timeflow/vis/Mouseover.java | 177 ++++++++++++++++++++++++++++++---------------------------- 1 files changed, 91 insertions(+), 86 deletions(-) diff --git a/timeflow/vis/Mouseover.java b/timeflow/vis/Mouseover.java index adf3009..7f58071 100755 --- a/timeflow/vis/Mouseover.java +++ b/timeflow/vis/Mouseover.java @@ -5,90 +5,95 @@ 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; - } - } - } +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; + } + } + } } -- Gitblit v1.6.2