package com.atlauncher.ui.panel;
import com.atlauncher.Resources;
import com.atlauncher.ui.comp.Card;
import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.LinkedList;
import java.util.List;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JPanel;
public class CardDisplayPanel
extends JPanel{
protected final List<Card> cards = new LinkedList<>();
protected int ptr = 0;
private final JButton nextButton = new JButton(new ImageIcon(Resources.makeImage("icons/arrow_right")));
{
this.nextButton.setContentAreaFilled(false);
this.nextButton.setOpaque(false);
}
private final JButton backButton = new JButton(new ImageIcon(Resources.makeImage("icons/arrow_left")));
{
this.backButton.setContentAreaFilled(false);
this.backButton.setOpaque(false);
}
private final JPanel displayPanel = new JPanel(new CardLayout());
{
this.displayPanel.setOpaque(false);
}
public CardDisplayPanel(){
this(true);
}
public CardDisplayPanel(boolean buttons){
super(new BorderLayout());
this.setOpaque(false);
if(buttons){
this.nextButton.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e){
next();
}
});
this.backButton.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e){
back();
}
});
this.add(this.backButton, BorderLayout.WEST);
this.add(this.nextButton, BorderLayout.EAST);
}
this.add(this.displayPanel, BorderLayout.CENTER);
}
public int max(){
return this.cards.size();
}
public int curr(){
return this.ptr;
}
public void unregisterAll(){
this.displayPanel.removeAll();
this.displayPanel.revalidate();
this.cards.clear();
}
protected void next(){
if(this.ptr++ >= this.cards.size() - 1){
this.ptr = this.cards.size() - 1;
}
CardLayout layout = (CardLayout) this.displayPanel.getLayout();
layout.show(this.displayPanel, this.cards.get(this.ptr).id());
}
protected void back(){
if(this.ptr-- <= 0){
this.ptr = 0;
}
CardLayout layout = (CardLayout) this.displayPanel.getLayout();
layout.show(this.displayPanel, this.cards.get(this.ptr).id());
}
public <T extends JPanel & Card> void register(T card){
this.cards.add(card);
this.displayPanel.add(card, card.id());
}
}