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/timeline/AxisRenderer.java | 154 ++++++++++++++++++++++++++------------------------
1 files changed, 80 insertions(+), 74 deletions(-)
diff --git a/timeflow/vis/timeline/AxisRenderer.java b/timeflow/vis/timeline/AxisRenderer.java
index 7d020cb..7c16246 100755
--- a/timeflow/vis/timeline/AxisRenderer.java
+++ b/timeflow/vis/timeline/AxisRenderer.java
@@ -9,80 +9,86 @@
import timeflow.vis.Mouseover;
import timeflow.vis.TimeScale;
-public class AxisRenderer {
-
- TimelineVisuals visuals;
-
- public AxisRenderer(TimelineVisuals visuals)
- {
- this.visuals=visuals;
- }
-
- public void render(Graphics2D g, Collection<Mouseover> objectLocations)
- {
- TFModel model=visuals.getModel();
- g.setColor(model.getDisplay().getColor("chart.background"));
- Rectangle bounds=visuals.getBounds();
-
- TimeScale scale=visuals.getTimeScale();
- java.util.List<AxisTicMarks> t=AxisTicMarks.allRelevant(scale.getInterval());
-
- int dateLabelH=model.getDisplay().getInt("timeline.datelabel.height");
- int y=bounds.y+bounds.height-dateLabelH;
-
- // draw in reverse order so bigger granularity at top.
- int n=t.size();
- for (int i=0; i<n; i++)
- {
- render(t.get(i), g, bounds.x, y, dateLabelH-1, bounds.y, i==0, objectLocations);
- y-=dateLabelH;
- }
- }
-
- void render(AxisTicMarks t, Graphics2D g, int x, int y, int h, int top, boolean full, Collection<Mouseover> objectLocations)
- {
- TFModel model=visuals.getModel();
+public class AxisRenderer
+{
+ TimelineVisuals visuals;
- int n=t.tics.size();
- for (int i=0; i<n-1; i++)
- {
-
- long start=t.tics.get(i);
- long end=t.tics.get(i+1);
-
- int x0=Math.max(x,visuals.getTimeScale().toInt(start));
- int x1=visuals.getTimeScale().toInt(end);
-
- int dayOfWeek=TimeUtils.cal(start).get(Calendar.DAY_OF_WEEK);
-
- g.setColor(t.unit.isDayOrLess() && (dayOfWeek==1 || dayOfWeek==7) ?
- new Color(245,245,245) : new Color(240,240,240));
+ public AxisRenderer(TimelineVisuals visuals)
+ {
+ this.visuals = visuals;
+ }
- g.fillRect(x0, y, x1-x0-1, h);
- g.setColor(Color.white);
- g.drawLine(x1-1, y, x1-1, y+h);
- g.drawLine(x0,y+h,x1,y+h);
- objectLocations.add(new Mouseover(new Interval(start,end), x0, y, x1-x0-1, h));
-
- g.setFont(model.getDisplay().timeLabel());
- String label=full? t.unit.formatFull(start) : t.unit.format(new Date(start));
- int tx=x0+3;
- int ty=y+h-5;
- g.setColor(full ? Color.darkGray : Color.gray);
- int sw=model.getDisplay().timeLabelFontMetrics().stringWidth(label);
- if (sw<x1-tx-3)
- g.drawString(label, tx,ty);
- else
- {
- int c=label.indexOf(':');
- if (c>0)
- {
- label=label.substring(0,c);
- sw=model.getDisplay().timeLabelFontMetrics().stringWidth(label);
- if (sw<x1-tx-3)
- g.drawString(label, tx,ty);
- }
- }
- }
- }
+ public void render(Graphics2D g, Collection<Mouseover> objectLocations)
+ {
+ TimeflowModel model = visuals.getModel();
+ g.setColor(model.getDisplay().getColor("chart.background"));
+ Rectangle bounds = visuals.getBounds();
+
+ TimeScale scale = visuals.getTimeScale();
+ java.util.List<AxisTicMarks> t = AxisTicMarks.allRelevant(scale.getInterval());
+
+ int dateLabelH = model.getDisplay().getInt("timeline.datelabel.height");
+ int y = bounds.y + bounds.height - dateLabelH;
+
+ // draw in reverse order so bigger granularity at top.
+ int n = t.size();
+ for (int i = 0; i < n; i++)
+ {
+ render(t.get(i), g, bounds.x, y, dateLabelH - 1, bounds.y, i == 0, objectLocations);
+ y -= dateLabelH;
+ }
+ }
+
+ void render(AxisTicMarks t, Graphics2D g, int x, int y, int h, int top, boolean full, Collection<Mouseover> objectLocations)
+ {
+ TimeflowModel model = visuals.getModel();
+
+ int n = t.tics.size();
+ for (int i = 0; i < n - 1; i++)
+ {
+ long start = t.tics.get(i);
+ long end = t.tics.get(i + 1);
+
+ int x0 = Math.max(x, visuals.getTimeScale().toInt(start));
+ int x1 = visuals.getTimeScale().toInt(end);
+
+ int dayOfWeek = TimeUtils.cal(start).get(Calendar.DAY_OF_WEEK);
+
+ g.setColor(t.unit.isDayOrLess() && (dayOfWeek == 1 || dayOfWeek == 7)
+ ? new Color(245, 245, 245) : new Color(240, 240, 240));
+
+ g.fillRect(x0, y, x1 - x0, h);
+ g.setColor(Color.white);
+ g.drawLine(x1, y, x1, y + h);
+ g.drawLine(x0, y + h, x1, y + h);
+ objectLocations.add(new Mouseover(new Interval(start, end), x0, y, x1 - x0, h));
+
+ g.setFont(model.getDisplay().timeLabel());
+ String label = full ? t.unit.formatFull(start) : t.unit.format(new Date(start));
+
+ if (!full)
+ full = false;
+
+ int tx = x0;
+ int ty = y + h;
+ g.setColor(full ? Color.darkGray : Color.gray);
+ int sw = model.getDisplay().timeLabelFontMetrics().stringWidth(label);
+ if (true) // sw < x1 - tx)
+ {
+ g.drawString(label, tx, ty);
+ } else
+ {
+ int c = label.indexOf(':');
+ if (c > 0)
+ {
+ label = label.substring(0, c);
+ sw = model.getDisplay().timeLabelFontMetrics().stringWidth(label);
+ //if (sw < x1 - tx)
+ {
+ g.drawString(label, tx, ty);
+ }
+ }
+ }
+ }
+ }
}
--
Gitblit v1.6.2