package magic.ui.screen.duel.player.avatar;
import java.awt.Color;
import java.awt.Cursor;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Path;
import java.util.HashMap;
import java.util.Map;
import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.ScrollPaneConstants;
import javax.swing.border.Border;
import magic.ui.FontsAndBorders;
import magic.ui.ImageFileIO;
import magic.ui.MagicImages;
import magic.ui.ScreenController;
import magic.ui.helpers.ImageHelper;
import magic.ui.theme.PlayerAvatar;
import magic.ui.widget.TexturedPanel;
import magic.ui.widget.WrapLayout;
import net.miginfocom.swing.MigLayout;
@SuppressWarnings("serial")
class ContentPanel extends JPanel {
private final AvatarImagesScreen screen;
private JPanel viewer;
private final Map<JLabel, Path> imagePathMap = new HashMap<>();
private JLabel selectedImageLabel = null;
ContentPanel(final AvatarImagesScreen screen) {
super(new MigLayout("insets 0, gap 0"));
this.screen = screen;
setOpaque(false);
add(new ImageSetsPanel(screen), "w 240!, h 100%");
add(getAvatarImageSetViewer(screen), "w 100%, h 100%");
}
private JScrollPane getAvatarImageSetViewer(AvatarImagesScreen screen) {
viewer = new TexturedPanel();
viewer.setLayout(new WrapLayout());
viewer.setBorder(FontsAndBorders.BLACK_BORDER);
viewer.setBackground(FontsAndBorders.MAGSCREEN_FADE_COLOR);
final JScrollPane scroller = new JScrollPane(viewer);
scroller.getViewport().setOpaque(false);
scroller.setBorder(BorderFactory.createEmptyBorder());
scroller.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
scroller.getVerticalScrollBar().setUnitIncrement(20);
return scroller;
}
void displayImageSetIcons(final AvatarImageSet imageSet) {
viewer.removeAll();
imagePathMap.clear();
for (Path imagePath : imageSet.getImagePaths()) {
final String filePath = imagePath.toAbsolutePath().toString();
try (final InputStream ins = new FileInputStream(new File(filePath))) {
final BufferedImage image = ImageFileIO.toImg(ins, MagicImages.MISSING_BIG);
final ImageIcon icon = new ImageIcon(ImageHelper.scale(image, PlayerAvatar.LARGE_SIZE, PlayerAvatar.LARGE_SIZE));
final JLabel iconLabel = new JLabel(icon);
imagePathMap.put(iconLabel, imagePath);
iconLabel.setBorder(FontsAndBorders.EMPTY_BORDER);
viewer.add(iconLabel);
iconLabel.addMouseListener(new MouseAdapter() {
private final Border defaultBorder = iconLabel.getBorder();
@Override
public void mouseEntered(MouseEvent e) {
iconLabel.setBorder(BorderFactory.createLineBorder(Color.BLACK, 2));
iconLabel.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
}
@Override
public void mouseExited(MouseEvent e) {
iconLabel.setBorder(defaultBorder);
}
@Override
public void mouseReleased(MouseEvent e) {
if (e.getButton() == 1) {
final JLabel imageLabel = (JLabel)e.getSource();
if (imageLabel != selectedImageLabel) {
screen.setSelectedAvatar((JLabel)e.getSource());
selectedImageLabel = imageLabel;
} else {
screen.notifyConsumer();
ScreenController.closeActiveScreen(false);
}
}
}
});
} catch (IOException e) {
e.printStackTrace();
}
}
viewer.revalidate();
viewer.repaint();
}
Path getImagePath() {
return imagePathMap.get(selectedImageLabel);
}
}