package com.quiltplayer.view.swing.buttons; import java.awt.Color; import java.awt.Font; 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.BorderFactory; import javax.swing.JComponent; import javax.swing.JTextArea; import javax.swing.SwingConstants; import net.miginfocom.swing.MigLayout; import org.apache.log4j.Logger; import com.quiltplayer.controller.PlayerListener; import com.quiltplayer.controller.PlayerController.PlayEvents; import com.quiltplayer.model.Song; import com.quiltplayer.view.swing.FontFactory; import com.quiltplayer.view.swing.textarea.ScrollableTextArea; /** * Represents a song line in the playlist view. * * @author Vlado Palczynski */ public class QSongButton extends ScrollableButton { private static final long serialVersionUID = 1L; private Logger log = Logger.getLogger(QSongButton.class); private JTextArea titleLabel; private Song song; private PlayerListener playerListener; private QPlaylistButton numberButton; public QSongButton(final Song song, final PlayerListener playerListener, final int counter) { this.playerListener = playerListener; setLayout(new MigLayout("insets 0, left, fill, center")); setBorder(BorderFactory.createEmptyBorder()); this.song = song; setOpaque(false); titleLabel = new ScrollableTextArea() { private static final long serialVersionUID = 1L; /* * (non-Javadoc) * * @see com.quiltplayer.view.swing.textarea.ScrollableTextArea#triggerAction() */ @Override protected void triggerAction() { playerListener.actionPerformed(new ActionEvent(song, 0, PlayEvents.CHANGE.toString())); } }; addMouseListener(new MouseAdapter() { /* * (non-Javadoc) * * @see java.awt.event.MouseAdapter#mousePressed(java.awt.event.MouseEvent) */ @Override public void mousePressed(MouseEvent e) { // setOpaque(true); // setBackground(Color.GRAY); // // updateUI(); // // super.mousePressed(e); } }); titleLabel.setText(counter + ". " + song.getTitle()); titleLabel.setBorder(null); titleLabel.setOpaque(false); titleLabel.setForeground(Color.WHITE); titleLabel.setFont(FontFactory.getFont(12f).deriveFont(Font.PLAIN)); titleLabel.setWrapStyleWord(true); titleLabel.setLineWrap(true); titleLabel.setEditable(true); titleLabel.setFocusable(false); titleLabel.setAlignmentX(JComponent.LEFT_ALIGNMENT); titleLabel.setAlignmentY(SwingConstants.CENTER); add(titleLabel, "gapx 0.2cm, left, aligny center, push"); } public void setActive() { log.debug("Activating " + song.getTitle()); setOpaque(true); setBackground(Color.RED.darker().darker().darker()); } public void setInactive() { log.debug("Inactivating " + song.getTitle()); setOpaque(false); } /** * @return the song */ public Song getSong() { return song; } /* * (non-Javadoc) * * @see javax.swing.JComponent#paintComponent(java.awt.Graphics) */ @Override public void paintComponent(Graphics g) { Graphics2D g2d = (Graphics2D) g; g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON); g2d.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_SPEED); super.paintComponent(g2d); } /* * (non-Javadoc) * * @see com.quiltplayer.view.swing.buttons.ScrollableButton#triggerAction() */ @Override public void triggerAction() { playerListener.actionPerformed(new ActionEvent(song, 0, PlayEvents.CHANGE.toString())); } /* * (non-Javadoc) * * @see javax.swing.AbstractButton#paintBorder(java.awt.Graphics) */ @Override protected void paintBorder(Graphics g) { } }