
package net.filebot.ui.sfv;

import static java.awt.Cursor.*;
import static java.awt.Font.*;
import static java.awt.RenderingHints.*;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.Rectangle2D;

import javax.swing.Action;
import javax.swing.Icon;
import javax.swing.JToggleButton;

import net.filebot.ResourceManager;

public class ChecksumButton extends JToggleButton {

	private static final Icon contentArea = ResourceManager.getIcon("button.checksum");
	private static final Icon contentAreaSelected = ResourceManager.getIcon("button.checksum.selected");

	public ChecksumButton(Action action) {
		super(action);

		setPreferredSize(new Dimension(Math.max(contentAreaSelected.getIconWidth(), contentArea.getIconWidth()), Math.max(contentAreaSelected.getIconHeight(), contentArea.getIconHeight())));
		setMinimumSize(getPreferredSize());
		setMaximumSize(getPreferredSize());

		setForeground(Color.white);
		setFont(new Font(DIALOG, PLAIN, 11));

		// as image button
		setBorderPainted(false);
		setContentAreaFilled(false);
		setFocusPainted(false);

		setEnabled(true);
	}

	@Override
	public void setEnabled(boolean enabled) {
		super.setEnabled(enabled);

		// set appropriate cursor
		setCursor(getPredefinedCursor(enabled ? HAND_CURSOR : DEFAULT_CURSOR));
	}

	@Override
	protected void paintComponent(Graphics g) {
		Graphics2D g2d = (Graphics2D) g;

		g2d.setRenderingHint(KEY_TEXT_ANTIALIASING, VALUE_TEXT_ANTIALIAS_ON);
		g2d.setRenderingHint(KEY_RENDERING, VALUE_RENDER_QUALITY);

		// paint background image in the center
		if (isSelected()) {
			contentAreaSelected.paintIcon(this, g2d, (int) Math.round((getWidth() - contentAreaSelected.getIconWidth()) / (double) 2), (int) Math.round((getHeight() - contentAreaSelected.getIconHeight()) / (double) 2));
		} else {
			contentArea.paintIcon(this, g2d, (int) Math.round((getWidth() - contentArea.getIconWidth()) / (double) 2), (int) Math.round((getHeight() - contentArea.getIconHeight()) / (double) 2));
		}

		Rectangle2D textBounds = g2d.getFontMetrics().getStringBounds(getText(), g2d);

		// draw text in the center
		g2d.drawString(getText(), Math.round((getWidth() - textBounds.getWidth()) / 2) + 1, Math.round(getHeight() / 2 - textBounds.getY() - textBounds.getHeight() / 2));
	}
}
