package com.quiltplayer.view.swing.panels.controlpanels;
import java.awt.AlphaComposite;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.LinearGradientPaint;
import java.awt.RenderingHints;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.geom.Point2D;
import javax.annotation.PostConstruct;
import javax.swing.JPanel;
import javax.swing.SwingConstants;
import net.miginfocom.swing.MigLayout;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.quiltplayer.controller.AddAlbumController;
import com.quiltplayer.controller.ArtistController;
import com.quiltplayer.controller.ControlPanelController;
import com.quiltplayer.core.storage.Storage;
import com.quiltplayer.model.Album;
import com.quiltplayer.model.jotify.JotifyAlbum;
import com.quiltplayer.utils.ClassPathUtils;
import com.quiltplayer.view.swing.ColorConstantsDark;
import com.quiltplayer.view.swing.buttons.QControlPanelButton;
import com.quiltplayer.view.swing.listeners.AddAlbumListener;
import com.quiltplayer.view.swing.listeners.ArtistListener;
import com.quiltplayer.view.swing.listeners.ControlPanelListener;
import com.quiltplayer.view.swing.listeners.EditAlbumListener;
import com.quiltplayer.view.swing.panels.MainTabs;
import com.quiltplayer.view.swing.panels.UtilityPanel;
/**
* Control panel for album.
*
* @author Vlado Palczynski
*/
/**
* @author Vlado Palczynski
*/
@Component
public class AlbumControlPanel extends JPanel implements ActionListener {
public enum Buttons {
LYRICS, EDIT, PLAYLIST, ADD
};
private static final long serialVersionUID = 1L;
private Color[] gradient = { new Color(0, 0, 0), new Color(30, 30, 30) };
private float[] dist = { 0.0f, 1.0f };
@Autowired
private EditAlbumListener editAlbumListener;
@Autowired
private ControlPanelListener controlPanelListener;
@Autowired
private ArtistListener artistListener;
@Autowired
private AddAlbumListener addAlbumListener;
private QControlPanelButton lyricsButton;
private QControlPanelButton editButton;
private QControlPanelButton addButton;
private QControlPanelButton albumButton;
private QControlPanelButton moreAlbumsButton;
private QControlPanelButton wikiButton;
private QControlPanelButton coversButton;
private static final String LAYOUT = "h 100%, w 100%, center";
@Autowired
private Storage storage;
@Autowired
private PlayerControlPanel playerControlPanel;
private JPanel applicationButtons;
@PostConstruct
public void init() {
setDefaults();
}
public void setDefaults() {
setLayout(new MigLayout("ins 0.5cm 0 0.5cm 0, flowy, fill"));
setOpaque(false);
setBackground(ColorConstantsDark.ALBUM_PANEL);
setupPlaylistButton();
setupLyricsButton();
setupEditButton();
setupAddButton();
setupMoreAlbumsButton();
setupWikiButton();
setupCoversButton();
applicationButtons = new JPanel(new MigLayout("insets 0.5cm 0 0.5cm 0, alignx center, flowy"));
applicationButtons.setOpaque(false);
applicationButtons.add(albumButton, LAYOUT + ", cell 0 0");
applicationButtons.add(lyricsButton, LAYOUT + ", cell 0 1");
applicationButtons.add(coversButton, LAYOUT + ", cell 0 3");
applicationButtons.add(moreAlbumsButton, LAYOUT + ", cell 0 4");
applicationButtons.add(wikiButton, LAYOUT + ", cell 0 5");
applicationButtons.add(editButton, LAYOUT + ", cell 0 6");
add(applicationButtons, "h 80% - 2cm, north");
add(playerControlPanel, "south");
updateUI();
}
public void update(final Album album) {
if (album instanceof JotifyAlbum && storage.getAlbum(album.getId()) == null) {
applicationButtons.remove(editButton);
applicationButtons.remove(addButton);
applicationButtons.add(addButton, LAYOUT + ", cell 0 6");
}
else {
applicationButtons.remove(editButton);
applicationButtons.remove(addButton);
applicationButtons.add(editButton, LAYOUT + ", cell 0 6");
}
repaint();
}
private void setupWikiButton() {
wikiButton = new QControlPanelButton("Wiki", ClassPathUtils.getIconFromClasspath("white/Wikipedia.png"),
SwingConstants.BOTTOM, SwingConstants.LEFT);
wikiButton.addActionListener(controlPanelListener);
wikiButton.setActionCommand(ControlPanelController.EVENT_VIEW_WIKI);
}
private void setupCoversButton() {
coversButton = new QControlPanelButton("Images", ClassPathUtils.getIconFromClasspath("white/Images.png"),
SwingConstants.BOTTOM, SwingConstants.LEFT);
coversButton.addActionListener(controlPanelListener);
coversButton.setActionCommand(ControlPanelController.EVENT_VIEW_COVERS);
}
private void setupMoreAlbumsButton() {
moreAlbumsButton = new QControlPanelButton("All albums", ClassPathUtils
.getIconFromClasspath("white/MoreAlbums.png"), SwingConstants.BOTTOM, SwingConstants.LEFT);
moreAlbumsButton.addActionListener(artistListener);
moreAlbumsButton.setActionCommand(ArtistController.ACTION_GET_ARTIST_ALBUMS);
}
private void setupLyricsButton() {
lyricsButton = new QControlPanelButton("Lyrics", ClassPathUtils.getIconFromClasspath("white/Lyrics.png"),
SwingConstants.BOTTOM, SwingConstants.LEFT);
lyricsButton.addActionListener(this);
lyricsButton.addActionListener(controlPanelListener);
lyricsButton.setActionCommand(ControlPanelController.EVENT_VIEW_LYRICS);
}
private void setupPlaylistButton() {
albumButton = new QControlPanelButton("Songs", ClassPathUtils.getIconFromClasspath("white/SongTiles.png"),
SwingConstants.BOTTOM, SwingConstants.LEFT);
albumButton.addActionListener(this);
albumButton.addActionListener(controlPanelListener);
albumButton.setActionCommand(ControlPanelController.EVENT_VIEW_SONGS);
}
private void setupEditButton() {
editButton = new QControlPanelButton("Edit album", ClassPathUtils.getIconFromClasspath("white/EditAlbum.png"),
SwingConstants.BOTTOM, SwingConstants.LEFT);
editButton.addActionListener(editAlbumListener);
editButton.setActionCommand(UtilityPanel.EVENT_UPDATE_ALBUM_ID3);
}
private void setupAddButton() {
addButton = new QControlPanelButton("Add album", ClassPathUtils.getIconFromClasspath("white/Add.png"),
SwingConstants.BOTTOM, SwingConstants.LEFT);
addButton.addActionListener(addAlbumListener);
addButton.setActionCommand(AddAlbumController.EVENT_ADD_ALBUM);
}
public void updateSingleTab(Buttons tab) {
lyricsButton.inactivate();
albumButton.inactivate();
editButton.inactivate();
if (tab == null) {
// Nada
}
else if (tab == Buttons.LYRICS) {
lyricsButton.activate();
}
else if (tab == Buttons.EDIT) {
editButton.activate();
}
else if (tab == Buttons.PLAYLIST) {
albumButton.activate();
}
repaint();
updateUI();
}
public void updateTab(MainTabs tab) {
coversButton.inactivate();
editButton.inactivate();
moreAlbumsButton.inactivate();
wikiButton.inactivate();
if (tab == null) {
// Nada
}
else if (tab == MainTabs.IMAGES) {
coversButton.activate();
}
else if (tab == MainTabs.ALL_ALBUMS) {
moreAlbumsButton.activate();
}
else if (tab == MainTabs.WIKI) {
wikiButton.activate();
}
repaint();
updateUI();
}
/*
* (non-Javadoc)
*
* @see javax.swing.JComponent#paintBorder(java.awt.Graphics)
*/
@Override
protected void paintBorder(Graphics g) {
}
@Override
protected void paintComponent(Graphics g) {
Graphics2D g2d = (Graphics2D) g;
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.85f));
Point2D start = new Point2D.Float(0, getHeight());
Point2D end = new Point2D.Float(getWidth(), getHeight());
LinearGradientPaint p = new LinearGradientPaint(start, end, dist, gradient);
g2d.setPaint(p);
g2d.fillRect(0, 0, getWidth(), getHeight());
}
/*
* (non-Javadoc)
*
* @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
*/
@Override
public void actionPerformed(ActionEvent e) {
}
}