From 54adfcbf93eb477bedeec45409f36cf7e102b790 Mon Sep 17 00:00:00 2001
From: Normand Briere <nbriere@noware.ca>
Date: Mon, 16 Sep 2019 21:54:55 -0400
Subject: [PATCH] Navigation with intersection.
---
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