package com.shaneisrael.st.ui;
import java.awt.Cursor;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import com.shaneisrael.st.Config;
import com.shaneisrael.st.utilities.Browser;
import com.shaneisrael.st.utilities.ImagePanel;
import com.shaneisrael.st.utilities.version.LatestVersionChecker;
import com.shaneisrael.st.utilities.version.Version;
import com.shaneisrael.st.utilities.version.VersionResponseListener;
public class AboutPanel extends ImagePanel implements MouseListener, VersionResponseListener
{
private static final long serialVersionUID = 5797146603275408767L;
private final Font aboutFont;
private LatestVersionChecker versionChecker;
private Graphics2D g2d;
private Version currentVersion;
private Version latestVersion;
private String message;
public AboutPanel()
{
super("/images/logo-background.png");
aboutFont = new Font("Segoe UI", Font.PLAIN, 16);
addMouseListener(this);
currentVersion = Version.getCurrentRunningVersion();
if (Version.isDebug())
{
message = "Snipping Tool++ development mode";
} else
{
versionChecker = new LatestVersionChecker();
versionChecker.fetchLatestVersion(this);
message = "...";
}
setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
}
@Override
protected void paintComponent(Graphics g)
{
super.paintComponent(g);
g2d = (Graphics2D) g;
g2d.setRenderingHint(
RenderingHints.KEY_TEXT_ANTIALIASING,
RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
g2d.setFont(aboutFont);
drawVersionInfo();
}
private void drawVersionInfo()
{
int bottomMargin = 5;
int leftMargin = 2;
g2d.drawString(message, 0 + leftMargin, getHeight() - bottomMargin);
}
@Override
public void mouseClicked(MouseEvent arg0)
{
repaint();
if (currentVersion.isUpToDate(latestVersion))
{
Browser.open(Config.WEBSITE_URL);
} else
{
System.out.println("Attempting to download from " + latestVersion.getDownloadLocation());
Browser.open(latestVersion.getDownloadLocation());
}
}
@Override
public void mouseEntered(MouseEvent arg0)
{
setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
repaint();
}
@Override
public void mouseExited(MouseEvent arg0)
{
repaint();
}
@Override
public void mousePressed(MouseEvent arg0)
{
}
@Override
public void mouseReleased(MouseEvent arg0)
{
}
@Override
public void onVersionResponseSuccess(Version latestVersion)
{
this.latestVersion = latestVersion;
if (currentVersion.isUpToDate(latestVersion))
{
setToolTipText("Click to go to the Snipping Tool++ website");
message = String.format("v%s %s", currentVersion.getVersionString(), "Snipping Tool++ is up to date");
} else
{
message = "Click to update to v" + latestVersion.getVersionStringWithName();
setToolTipText(message);
}
repaint();
}
@Override
public void onVersionResponseFailure(String reason)
{
message = "cannot reach server";
repaint();
}
}