package org.esa.snap.productlibrary.rcp.toolviews.timeline; import org.esa.snap.productlibrary.rcp.toolviews.model.DatabaseStatistics; import java.awt.Graphics2D; import java.awt.event.MouseEvent; import java.util.Map; import java.util.SortedSet; import java.util.TreeSet; /** * Show product counts by years */ class YearsPlot extends TimelinePlot { YearsPlot(final DatabaseStatistics stats) { super(stats); } /** * Paints the panel component * * @param g2d The Graphics */ @Override protected void paintPlot(final Graphics2D g2d) { final Map<Integer, DatabaseStatistics.YearData> yearDataMap = stats.getYearDataMap(); final SortedSet<Integer> years = new TreeSet<>(yearDataMap.keySet()); final int numYears = years.size(); final int maxYearCnt = stats.getOverallMaxYearCnt(); final int w = getWidth(); final int h = getHeight()-15; interval = w / (float)numYears; final float halfInterval = interval/2f; final float barWidth = halfInterval/2f; final int y = getHeight() - 2; float x = halfInterval; for (Integer year : years) { drawButton(g2d, String.valueOf(year), (int)x-20, y, yearDataMap.get(year).isSelected()); final float newH = (yearDataMap.get(year).yearCnt/(float)maxYearCnt) * h; drawBar(g2d, (int)(x-barWidth), h-(int)newH, (int)halfInterval, Math.max(1, (int)newH), h); x += interval; } } @Override public void mouseClicked(MouseEvent e) { int x = (int)(e.getX() / interval); final Map<Integer, DatabaseStatistics.YearData> yearDataMap = stats.getYearDataMap(); final SortedSet<Integer> sortedYears = new TreeSet<>(yearDataMap.keySet()); final Integer[] years = sortedYears.toArray(new Integer[sortedYears.size()]); final DatabaseStatistics.YearData yearData = yearDataMap.get(years[x]); yearData.setSelected(!yearData.isSelected()); repaint(); } @Override public String getToolTipText(MouseEvent event) { int x = (int)(event.getX() / interval); final Map<Integer, DatabaseStatistics.YearData> yearDataMap = stats.getYearDataMap(); final SortedSet<Integer> sortedYears = new TreeSet<>(yearDataMap.keySet()); final Integer[] years = sortedYears.toArray(new Integer[sortedYears.size()]); Integer value = yearDataMap.get(years[x]).yearCnt; if(value == 0) return ""; return String.valueOf(years[x])+": "+value; } }