Package timeflow.vis.timeline

Source Code of timeflow.vis.timeline.AxisRenderer

package timeflow.vis.timeline;

import java.awt.*;
import java.util.*;

import timeflow.data.time.Interval;
import timeflow.data.time.TimeUtils;
import timeflow.model.*;
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();

    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-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);
        }
      }
    }
  }
}
TOP

Related Classes of timeflow.vis.timeline.AxisRenderer

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.