package com.github.pfichtner.jrunalyser.ui.map.wprenderer;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.font.FontRenderContext;
import java.awt.font.LineBreakMeasurer;
import java.awt.font.TextLayout;
import java.awt.geom.Ellipse2D;
import java.text.AttributedCharacterIterator;
import java.text.AttributedString;
import java.util.Date;
import java.util.concurrent.TimeUnit;
import com.github.pfichtner.jrunalyser.base.data.Distance;
import com.github.pfichtner.jrunalyser.base.data.DistanceUnit;
import com.github.pfichtner.jrunalyser.base.data.Duration;
import com.github.pfichtner.jrunalyser.base.data.Link;
import com.github.pfichtner.jrunalyser.base.data.LinkedTrackPoint;
import com.github.pfichtner.jrunalyser.base.data.Pace;
import com.github.pfichtner.jrunalyser.base.data.Speed;
import com.github.pfichtner.jrunalyser.base.data.WayPoint;
import com.github.pfichtner.jrunalyser.base.data.stat.StatCalculators;
import com.github.pfichtner.jrunalyser.base.data.track.Tracks;
import com.github.pfichtner.jrunalyser.ui.base.Settings;
import com.github.pfichtner.jrunalyser.ui.base.StaticSettings;
import com.github.pfichtner.jrunalyser.ui.format.DistanceFormatter;
import com.github.pfichtner.jrunalyser.ui.format.DistanceFormatter.Type;
import com.github.pfichtner.jrunalyser.ui.format.DurationFormatter;
import com.github.pfichtner.jrunalyser.ui.format.PaceFormatter;
import com.github.pfichtner.jrunalyser.ui.format.SpeedFormatter;
import com.github.pfichtner.jrunalyser.ui.map.theme.Theme;
import com.github.pfichtner.jrunalyser.ui.map.wp.SelectedWaypoint;
public class SelectedWaypointRenderer extends
AbstractSegmentBorderWaypointRenderer<SelectedWaypoint> {
private final DistanceFormatter dif = new DistanceFormatter(Type.SHORT);
private final DurationFormatter duf = new DurationFormatter(
com.github.pfichtner.jrunalyser.ui.format.DurationFormatter.Type.SHORT);
private final SpeedFormatter spf = new SpeedFormatter(
com.github.pfichtner.jrunalyser.ui.format.SpeedFormatter.Type.SHORT);
private final PaceFormatter paf = new PaceFormatter(
com.github.pfichtner.jrunalyser.ui.format.PaceFormatter.Type.SHORT);
public SelectedWaypointRenderer(Theme theme, Font font) {
super(theme, font);
}
@Override
protected void drawCircleBorder(Graphics2D g, SelectedWaypoint waypoint,
int r) {
g.setColor(Color.RED);
g.fill(new Ellipse2D.Double(-r, -r, 2 * r + 1, 2 * r + 1));
// WayPoint wp = waypoint.getSelectedWayPoint();
// Long time = wp.getTime();
// if (time != null) {
// if (wp instanceof LinkedTrackPoint) {
// LinkedTrackPoint ltp = (LinkedTrackPoint) wp;
// Link link = ltp.getLink();
//
// Iterable<? extends LinkedTrackPoint> linkedTps = Tracks.fromTo(
// Tracks.getStartPoint(waypoint.getTrack()),
// waypoint.getSelectedWayPoint());
// Distance distance = StatCalculators.distance(
// DistanceUnit.METERS).calculate(linkedTps);
// Duration duration = StatCalculators.duration(TimeUnit.SECONDS)
// .calculate(linkedTps);
//
// Speed speed = link.getSpeed();
// Pace pace = speed.toPace(TimeUnit.MINUTES,
// DistanceUnit.KILOMETERS);
// Integer elevation = wp.getElevation();
// Settings settings = StaticSettings.INSTANCE;
//
// String str = this.dif.format(distance) + "\n"
// + this.duf.format(duration) + "\n"
// + this.spf.format(settings, speed) + "\n"
// + this.paf.format(settings, pace) + "\n" + elevation;
// drawText(g, str, 100);
//
// } else
// g.drawString(new Date(time.longValue()).toString(), 20, -20);
// }
}
private void drawText(Graphics2D g2, String text, float width) {
FontRenderContext frc = g2.getFontRenderContext();
AttributedString styledText = new AttributedString(text);
AttributedCharacterIterator aci = styledText.getIterator();
int start = aci.getBeginIndex();
int end = aci.getEndIndex();
LineBreakMeasurer measurer = new LineBreakMeasurer(aci, frc);
measurer.setPosition(start);
float x = 0, y = 0;
while (measurer.getPosition() < end) {
TextLayout layout = measurer.nextLayout(width);
y += layout.getAscent();
float dx = layout.isLeftToRight() ? 0 : width - layout.getAdvance();
layout.draw(g2, x + dx, y);
y += layout.getDescent() + layout.getLeading();
}
}
}