package com.dedupeer.gui.component; import java.awt.Color; import java.awt.Dimension; import java.awt.GradientPaint; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.event.ComponentAdapter; import java.awt.event.ComponentEvent; import java.awt.geom.Rectangle2D; import java.util.ArrayList; import javax.swing.JComponent; import com.dedupeer.utils.Range; /** * @author Paulo Fernando (pf@paulofernando.net.br) */ public class ModificationBar extends JComponent { private static final long serialVersionUID = 3032628316015934754L; private Color[] colorNormalArea = new Color[]{new Color(0xf1f0f0), new Color(0xd8d8d8)}; private Color[] colorsModifiedArea = new Color[]{ new Color(0x4ea5d2), new Color(0x078ace) }; private ArrayList<Range> ranges; private long fileLength; private int componenteHeight = 40; public ModificationBar(ArrayList<Range> ranges, long fileLength) { super(); this.setPreferredSize(new Dimension(this.getWidth(), componenteHeight)); this.ranges = ranges; this.fileLength = fileLength; addComponentListener(new ComponentAdapter() { @Override public void componentResized(ComponentEvent e) { setSize(new Dimension(ModificationBar.this.getWidth(), componenteHeight)); super.componentResized(e); } }); } @Override public void paintComponent(Graphics g) { Graphics2D g2 = (Graphics2D) g; g2.fillRect(0, 0, this.getWidth(), componenteHeight); Rectangle2D r = new Rectangle2D.Double(0, 0, this.getWidth(), componenteHeight); GradientPaint gp = new GradientPaint(0, 0, colorNormalArea[0], 0, this.getHeight(), colorNormalArea[1], true); g2.setPaint(gp); g2.fill(r); for(Range range: ranges) { int intialPosition = (int) ((((range.getInitialValue()*100)/fileLength)/100f) * this.getWidth()); int finalPosition = (int) ((((range.getFinalValue()*100)/fileLength)/100f) * this.getWidth()); if(finalPosition - intialPosition > 0) { r = new Rectangle2D.Double(intialPosition, 0, finalPosition - intialPosition, componenteHeight); gp = new GradientPaint(0, 0, colorsModifiedArea[0], 0, this.getHeight(), colorsModifiedArea[1], true); g2.setPaint(gp); g2.fill(r); } } g2.setColor(new Color(0x626262)); g2.drawLine(0, this.getHeight() - 1, this.getWidth(), this.getHeight() - 1); } }