package com.quiltplayer.view.swing.buttons; import java.awt.Dimension; import java.awt.Graphics; import java.awt.event.ActionEvent; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import javax.swing.ImageIcon; import javax.swing.JLabel; import net.miginfocom.swing.MigLayout; import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; import com.quiltplayer.controller.ChangeAlbumController; import com.quiltplayer.core.player.tasks.ImageLoaderTask; import com.quiltplayer.external.covers.util.ImageUtils; import com.quiltplayer.model.Album; import com.quiltplayer.view.swing.listeners.ChangeAlbumListener; public class ImageButton extends ScrollableButton { private static final long serialVersionUID = 1L; private Album album; private ChangeAlbumListener changeAlbumListener; private boolean started; private ThreadPoolTaskExecutor executor; private ImageIcon icon; private ImageIcon pressedIcon; public ImageButton(final Album album, final ChangeAlbumListener changeAlbumListener, ThreadPoolTaskExecutor executor) { this.executor = executor; setLayout(new MigLayout("insets 0, fill")); setOpaque(false); add(new JLabel(), ""); if (album != null) { this.album = album; this.changeAlbumListener = changeAlbumListener; setToolTipText(album.getArtist().getArtistName().getName() + " - " + album.getTitle()); } addMouseListener(new MouseAdapter() { /* * (non-Javadoc) * * @see java.awt.event.MouseAdapter#mousePressed(java.awt.event.MouseEvent) */ @Override public void mousePressed(MouseEvent e) { setIcon(pressedIcon); repaint(); } /* * (non-Javadoc) * * @see java.awt.event.MouseAdapter#mouseReleased(java.awt.event.MouseEvent) */ @Override public void mouseReleased(MouseEvent e) { setIcon(icon); repaint(); } }); } /* * (non-Javadoc) * * @see com.quiltplayer.view.swing.buttons.ScrollableButton#triggerAction() */ @Override public void triggerAction() { changeAlbumListener.actionPerformed(new ActionEvent(album, 0, ChangeAlbumController.EVENT_CHANGE_ALBUM)); } public void setImage(ImageIcon icon) { this.icon = icon; setIcon(icon); repaint(); pressedIcon = ImageUtils.scalePicture(icon, icon.getIconWidth() - 20); } /* * (non-Javadoc) * * @see javax.swing.JComponent#paintComponent(java.awt.Graphics) */ @Override protected void paintComponent(Graphics g) { setMinimumSize(new Dimension(getWidth(), getWidth())); setMaximumSize(new Dimension(getWidth(), getWidth())); if (!started) { if (album != null && album.getImages().size() > 0) executor.execute(new ImageLoaderTask(album, getWidth(), this)); started = true; } super.paintComponent(g); } /* * (non-Javadoc) * * @see javax.swing.AbstractButton#paintBorder(java.awt.Graphics) */ @Override protected void paintBorder(Graphics g) { /* None */ } }