package com.quiltplayer.view.swing.views.impl; import java.awt.Graphics; import java.util.Collections; import java.util.List; import javax.swing.JComponent; 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.model.Album; import com.quiltplayer.properties.Configuration; import com.quiltplayer.view.swing.buttons.ImageButton; import com.quiltplayer.view.swing.interfaces.FrameResizeAwarable; import com.quiltplayer.view.swing.layers.JScrollPaneLayerUI; 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.util.MigProperties; import com.quiltplayer.view.swing.util.ScreenUtils; import com.quiltplayer.view.swing.views.ListView; /** * Implementation of the quilt album view. * * @author Vlado Palczynski */ @org.springframework.stereotype.Component public class QuiltView implements ListView<Album>, FrameResizeAwarable { private static final long serialVersionUID = 1L; @Autowired private ChangeAlbumListener changeAlbumListener; private JPanel panel; private List<Album> albums = Collections.emptyList(); private boolean initialized = false; private int width; @Autowired private ThreadPoolTaskExecutor imageTaskExecutor; @Autowired private ScreenUtils screenUtils; /* * @see com.quiltplayer.view.swing.components.ListView#setCollection(java.util .Collection) */ @Override public void setList(List<Album> list) { albums = list; initialized = false; } /* * @see org.coverok.gui.components.AlbumView#getUI() */ @Override public JComponent getUI() { panel = new JPanel(new MigLayout("ins 0 " + MigProperties.CONTROL_PANEL_WIDTH + "cm 0 " + MigProperties.CONTROL_PANEL_WIDTH + "cm , fillx, align center, wrap " + Configuration.getInstance().getGridProperties().getQuiltGrid())) { private static final long serialVersionUID = 1L; /* * (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) { createQuiltOfAlbums(); } super.paintComponent(g); } private void createQuiltOfAlbums() { removeAll(); int size = (getWidth() - 100) / Configuration.getInstance().getGridProperties().getQuiltGrid(); int i = 1; for (Album album : albums) { if (album.getFrontImage() != null) { ImageButton p = new ImageButton(album, changeAlbumListener, imageTaskExecutor); panel.add(p, "w " + size + "px, h " + size + "px"); /* Keep track where you are on a row for fill with empty albums below */ if (i == Configuration.getInstance().getGridProperties().getQuiltGrid()) i = 1; else i++; } } /* Fill with empty squares to remain size */ while (i < Configuration.getInstance().getGridProperties().getQuiltGrid()) { ImageButton p = new ImageButton(null, null, null); p.setVisible(true); panel.add(p, "grow, shrink 0"); i++; } initialized = true; } }; panel.setOpaque(true); final QScrollPane pane = new QScrollPane(panel, ScrollDirection.VERTICAL); return new JXLayer<JScrollPane>(pane, new JScrollPaneLayerUI()); } }