package io.andrewohara.tinkertime.views.modView; import java.awt.Cursor; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.io.IOException; import javax.swing.JLabel; import io.andrewohara.common.Util; import io.andrewohara.common.views.Dialogs; import io.andrewohara.common.views.selectorPanel.SelectorView; import io.andrewohara.tinkertime.models.mod.Mod; /** * Decorated JLabel which contains a clickable URL. * * If the URL is clicked, the page will be loaded using system's default browser. * * @author Andrew O'Hara */ public class ModUrlPanel extends SelectorView.AbstractSelectorView<Mod> { private static final String LABEL_TEMPLATE = "<html><a href='%s'>%s</a></html>"; private final JLabel label = new JLabel(); public ModUrlPanel(final Dialogs dialogs){ label.setCursor(new Cursor(Cursor.HAND_CURSOR)); label.addMouseListener(new MouseAdapter(){ @Override public void mouseClicked(MouseEvent e) { try { Util.goToHyperlink(getElement().getUrl()); } catch (IOException e1) { dialogs.errorDialog(label, e1); } } }); } @Override public JLabel getComponent() { return label; } @Override protected void onElementChanged(Mod mod) { if (mod.isUpdateable()){ String previewText = String.format( "Go to Mod Page (on %s)", mod.getUrl().getHost() ); label.setText(String.format( LABEL_TEMPLATE, mod.getUrl(), previewText )); } label.setVisible(mod.isUpdateable()); } }