package com.quiltplayer.view.swing.buttons;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.event.ActionEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JTextArea;
import javax.swing.Timer;
import net.miginfocom.swing.MigLayout;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import com.quiltplayer.controller.ChangeAlbumController;
import com.quiltplayer.model.Album;
import com.quiltplayer.properties.Configuration;
import com.quiltplayer.view.swing.FontFactory;
import com.quiltplayer.view.swing.listeners.ChangeAlbumListener;
import com.quiltplayer.view.swing.panels.AlbumView;
import com.quiltplayer.view.swing.textarea.ScrollableTextArea;
/**
* Implementation with squared albums.
*
* @author Vlado Palczynski
*/
public class SquaredAlbumButton extends ScrollableAndHighlightableButton implements AlbumView {
private static final long serialVersionUID = 1L;
public Timer currentTimer;
protected Album album;
protected ChangeAlbumListener changeAlbumListener;
protected ImageButton albumCoverButton;
public SquaredAlbumButton(final Album album, ChangeAlbumListener changeAlbumListener,
ThreadPoolTaskExecutor executor) {
super();
this.album = album;
this.changeAlbumListener = changeAlbumListener;
setLayout(new MigLayout("fill, wrap 1, center"));
setOpaque(false);
albumCoverButton = new ImageButton(album, changeAlbumListener, executor);
final JTextArea title = setupTitleLabelToPanel();
final JTextArea year = setupYearLabel();
add(albumCoverButton, "north");
add(title, "w 100%, north");
add(year, "w 100%, north");
// addMouseListener(new HighlightableMouseListener(background, this));
addMouseListener(new MouseAdapter() {
/*
* (non-Javadoc)
*
* @see java.awt.event.MouseAdapter#mouseEntered(java.awt.event.MouseEvent)
*/
@Override
public void mouseEntered(MouseEvent e) {
// trackLabel.setVisible(true);
}
/*
* (non-Javadoc)
*
* @see java.awt.event.MouseAdapter#mouseExited(java.awt.event.MouseEvent)
*/
@Override
public void mouseExited(MouseEvent e) {
// trackLabel.setVisible(false);
}
});
}
private JTextArea setupTitleLabelToPanel() {
JTextArea titleLabel = new ScrollableTextArea() {
/**
*
*/
private static final long serialVersionUID = 1L;
/*
* (non-Javadoc)
*
* @see com.quiltplayer.view.swing.textarea.ScrollableTextArea#triggerAction()
*/
@Override
protected void triggerAction() {
changeAlbumListener
.actionPerformed(new ActionEvent(album, 0, ChangeAlbumController.EVENT_CHANGE_ALBUM));
}
};
titleLabel.setOpaque(false);
titleLabel.setEditable(true);
titleLabel.setFocusable(false);
titleLabel.setLineWrap(true);
titleLabel.setWrapStyleWord(true);
titleLabel.setForeground(Configuration.getInstance().getColorConstants().getAlbumViewTitleColor());
titleLabel.setText(album.getTitle());
titleLabel.setFont(FontFactory.getFont(14f));
return titleLabel;
}
private JTextArea setupYearLabel() {
JTextArea yearLabel = new ScrollableTextArea() {
private static final long serialVersionUID = 1L;
@Override
protected void triggerAction() {
changeAlbumListener
.actionPerformed(new ActionEvent(album, 0, ChangeAlbumController.EVENT_CHANGE_ALBUM));
}
/*
* (non-Javadoc)
*
* @see javax.swing.JComponent#paintComponent(java.awt.Graphics)
*/
@Override
protected void paintComponent(Graphics g) {
Graphics2D g2d = (Graphics2D) g;
g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
super.paintComponent(g);
}
};
yearLabel.setOpaque(false);
yearLabel.setEditable(true);
yearLabel.setFocusable(false);
yearLabel.setWrapStyleWord(true);
yearLabel.setForeground(Configuration.getInstance().getColorConstants().getAlbumViewYearColor());
yearLabel.setText(album.getYear());
yearLabel.setFont(FontFactory.getFont(12f));
return yearLabel;
}
/**
* @return the album
*/
public Album getAlbum() {
return album;
}
/**
* @param album
* the album to set
*/
public void setAlbum(Album album) {
this.album = album;
}
/*
* (non-Javadoc)
*
* @see com.quiltplayer.view.swing.buttons.ScrollableButton#triggerAction()
*/
@Override
protected void triggerAction() {
changeAlbumListener.actionPerformed(new ActionEvent(album, 0, ChangeAlbumController.EVENT_CHANGE_ALBUM));
}
}