package com.quiltplayer.view.swing.views.impl;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.List;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import net.miginfocom.swing.MigLayout;
import org.jdesktop.jxlayer.JXLayer;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import com.quiltplayer.controller.ArtistController;
import com.quiltplayer.model.Album;
import com.quiltplayer.model.Artist;
import com.quiltplayer.properties.Configuration;
import com.quiltplayer.view.swing.FontFactory;
import com.quiltplayer.view.swing.buttons.ImageButton;
import com.quiltplayer.view.swing.buttons.QButton;
import com.quiltplayer.view.swing.buttons.SquaredAlbumButton;
import com.quiltplayer.view.swing.layers.JScrollPaneLayerUI;
import com.quiltplayer.view.swing.listeners.ArtistListener;
import com.quiltplayer.view.swing.listeners.ChangeAlbumListener;
import com.quiltplayer.view.swing.panels.QScrollPane;
import com.quiltplayer.view.swing.panels.QScrollPane.ScrollDirection;
import com.quiltplayer.view.swing.views.ListView;
/**
* My implementation of the album view.
*
* @author Vlado Palczynski
*/
@org.springframework.stereotype.Component
public class DefaultAlbumView implements ListView<Album> {
@Autowired
private ChangeAlbumListener changeAlbumListener;
@Autowired
private ArtistListener artistListener;
private List<Album> albums;
private Artist artist;
private JLabel artistnameLabel;
private boolean initialized = false;
private int width;
@Autowired
private ThreadPoolTaskExecutor imageTaskExecutor;
/*
* @see org.coverok.gui.components.AlbumView#getUI()
*/
@Override
public JComponent getUI() {
JPanel panel = new JPanel(new MigLayout("ins 1cm 2cm 0cm 2cm, fillx, align center, wrap "
+ Configuration.getInstance().getGridProperties().getAlbumsGrid())) {
/*
* (non-Javadoc)
*
* @see javax.swing.JComponent#paintComponent(java.awt.Graphics)
*/
@Override
protected void paintComponent(Graphics g) {
if (width != getWidth()) {
width = getWidth();
// createQuiltOfAlbums();
}
else if (!initialized && albums != null && albums.size() > 0) {
setup();
initialized = true;
}
super.paintComponent(g);
}
private void setup() {
if (albums != null && !albums.isEmpty()) {
if (artistnameLabel == null)
setupArtistnameLabel();
artistnameLabel.setText(albums.get(0).getArtist().getArtistName().getName());
add(artistnameLabel, "span " + Configuration.getInstance().getGridProperties().getAlbumsGrid());
int i = 1;
for (final Album album : albums) {
SquaredAlbumButton p = null;
p = new SquaredAlbumButton(album, changeAlbumListener, imageTaskExecutor);
add(p, "grow, shrink 0, gap 0.3cm 0.3cm 0.3cm 0.3cm");
if (i == Configuration.getInstance().getGridProperties().getAlbumsGrid())
i = 1;
else
i++;
}
/* Fill with empty squares to remain size */
while (i < Configuration.getInstance().getGridProperties().getAlbumsGrid()) {
ImageButton p = new ImageButton(null, null, imageTaskExecutor);
p.setVisible(true);
add(p, "grow, shrink 0, gap 0.3cm 0.3cm 0.3cm 0.3cm");
i++;
}
}
else {
final JButton deleteArtistButton = new QButton("Delete artist");
deleteArtistButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
artistListener.actionPerformed(new ActionEvent(artist, 0,
ArtistController.EVENT_DELETE_ARTIST));
}
});
add(deleteArtistButton);
}
}
};
/* Otherwise gray */
panel.setOpaque(true);
return new JXLayer<JScrollPane>(new QScrollPane(panel, ScrollDirection.VERTICAL), new JScrollPaneLayerUI());
}
private void setupArtistnameLabel() {
artistnameLabel = new JLabel();
artistnameLabel.setFont(FontFactory.getLargeTextFont(16f));
artistnameLabel.setForeground(new Color(180, 179, 178));
}
/*
* @see com.quiltplayer.view.swing.components.ListView#setCollection(java.util .Collection)
*/
@Override
public void setList(final List<Album> list) {
albums = list;
System.out.println(list);
initialized = false;
}
@Deprecated
public Album getSelectedAlbum() {
return null;
}
/**
* @param artist
* the artist to set
*/
public final void setArtist(Artist artist) {
this.artist = artist;
}
}