Basic implementation of album art grid view.
This commit is contained in:
parent
2a2bb28a26
commit
9666bf5a0a
@ -1,12 +1,15 @@
|
|||||||
package musicplayer.swingui;
|
package musicplayer.swingui;
|
||||||
|
|
||||||
import com.google.inject.Inject;
|
import com.google.inject.Inject;
|
||||||
|
import com.google.inject.Provider;
|
||||||
import musicplayer.StartPlayingException;
|
import musicplayer.StartPlayingException;
|
||||||
import musicplayer.callbacks.PlayerCallbackInterface;
|
import musicplayer.callbacks.PlayerCallbackInterface;
|
||||||
|
import musicplayer.db.IDatabase;
|
||||||
import musicplayer.library.ILibrary;
|
import musicplayer.library.ILibrary;
|
||||||
import musicplayer.library.JTreeLibrary;
|
import musicplayer.library.JTreeLibrary;
|
||||||
import musicplayer.player.IPlayer;
|
import musicplayer.player.IPlayer;
|
||||||
import musicplayer.playlist.IPlaylist;
|
import musicplayer.playlist.IPlaylist;
|
||||||
|
import musicplayer.swingui.albumview.AlbumViewer;
|
||||||
import musicplayer.util.ConfigManager;
|
import musicplayer.util.ConfigManager;
|
||||||
import org.jnativehook.GlobalScreen;
|
import org.jnativehook.GlobalScreen;
|
||||||
import org.jnativehook.NativeHookException;
|
import org.jnativehook.NativeHookException;
|
||||||
@ -34,6 +37,8 @@ import java.util.stream.Collectors;
|
|||||||
* Swing based music player UI.
|
* Swing based music player UI.
|
||||||
*/
|
*/
|
||||||
public class PlayerGUI extends JPanel implements PlayerCallbackInterface {
|
public class PlayerGUI extends JPanel implements PlayerCallbackInterface {
|
||||||
|
@Inject
|
||||||
|
private Provider<IDatabase> databaseProvider;
|
||||||
private final IPlaylist playlist;
|
private final IPlaylist playlist;
|
||||||
private JSlider seekBar;
|
private JSlider seekBar;
|
||||||
private final IPlayer player;
|
private final IPlayer player;
|
||||||
@ -269,6 +274,12 @@ public class PlayerGUI extends JPanel implements PlayerCallbackInterface {
|
|||||||
helpMenu.add(menuItem);
|
helpMenu.add(menuItem);
|
||||||
|
|
||||||
menuBar.add(helpMenu);
|
menuBar.add(helpMenu);
|
||||||
|
|
||||||
|
menuItem = new JMenuItem("Album Tiles");
|
||||||
|
menuItem.addActionListener(e ->
|
||||||
|
new AlbumViewer(databaseProvider.get())
|
||||||
|
);
|
||||||
|
menuBar.add(menuItem);
|
||||||
return menuBar;
|
return menuBar;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
70
src/main/java/musicplayer/swingui/albumview/AlbumViewer.java
Normal file
70
src/main/java/musicplayer/swingui/albumview/AlbumViewer.java
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
package musicplayer.swingui.albumview;
|
||||||
|
|
||||||
|
import musicplayer.db.IDatabase;
|
||||||
|
import musicplayer.model.Album;
|
||||||
|
|
||||||
|
import javax.swing.*;
|
||||||
|
import java.awt.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Window that shows a tiled view of all albums in the users' library.
|
||||||
|
*/
|
||||||
|
public class AlbumViewer {
|
||||||
|
|
||||||
|
private static final Dimension maxTileSize = new Dimension(80, 80);
|
||||||
|
private final IDatabase database;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Window that shows a tiled view of all albums in the users' library.
|
||||||
|
* @param database User song database
|
||||||
|
*/
|
||||||
|
public AlbumViewer(IDatabase database){
|
||||||
|
this.database = database;
|
||||||
|
JFrame frame = new JFrame("Album View");
|
||||||
|
frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
|
||||||
|
frame.getContentPane().setLayout(new GridLayout());
|
||||||
|
JList<Album> albumJList = createListArea();
|
||||||
|
frame.getContentPane().add(new JScrollPane(albumJList));
|
||||||
|
frame.setSize(800, 600);
|
||||||
|
frame.setVisible(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return A JList containing all albums in the user database with art and name.
|
||||||
|
*/
|
||||||
|
private JList<Album> createListArea(){
|
||||||
|
DefaultListModel<Album> listModel = new DefaultListModel<>();
|
||||||
|
database.listAllT(Album.class).ifPresent(data -> data.forEach(listModel::addElement));
|
||||||
|
JList<Album> list = new JList<>(listModel);
|
||||||
|
list.setCellRenderer(new AlbumViewRenderer());
|
||||||
|
list.setLayoutOrientation(JList.HORIZONTAL_WRAP);
|
||||||
|
list.setVisibleRowCount(-1);
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
|
||||||
|
private class AlbumViewRenderer extends JPanel implements ListCellRenderer<Album>{
|
||||||
|
|
||||||
|
private final JLabel textLabel = new JLabel();
|
||||||
|
private final JLabel iconLabel = new JLabel();
|
||||||
|
|
||||||
|
public AlbumViewRenderer(){
|
||||||
|
setOpaque(true);
|
||||||
|
setMinimumSize(maxTileSize);
|
||||||
|
setPreferredSize(maxTileSize);
|
||||||
|
setMaximumSize(maxTileSize);
|
||||||
|
setLayout(new BoxLayout(this, BoxLayout.PAGE_AXIS));
|
||||||
|
setBorder(BorderFactory.createLineBorder(Color.black));
|
||||||
|
add(Box.createVerticalGlue()); // Vertical alignment
|
||||||
|
add(iconLabel); // Album art
|
||||||
|
add(textLabel); // Album name
|
||||||
|
add(Box.createVerticalGlue()); // Vertical alignment
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Component getListCellRendererComponent(JList<? extends Album> list, Album value, int index, boolean isSelected, boolean cellHasFocus) {
|
||||||
|
iconLabel.setIcon(value.getAlbumArt());
|
||||||
|
textLabel.setText(value.getName());
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user