package com.clearlyspam23.GLE.GUI.level; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.Font; import java.awt.Frame; import java.awt.Image; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.File; import java.util.List; import javax.imageio.ImageIO; import javax.swing.Icon; import javax.swing.ImageIcon; import javax.swing.JDialog; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JToggleButton; import javax.swing.border.EmptyBorder; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; import org.piccolo2d.PNode; import com.clearlyspam23.GLE.GUI.util.ColorIcon; import com.clearlyspam23.GLE.GUI.util.EmptyIcon; import com.clearlyspam23.GLE.GUI.util.PanelList; import com.clearlyspam23.GLE.GUI.util.PushButton; import com.clearlyspam23.GLE.level.Layer; public class LayerSelectionDialog extends JDialog{ private PanelList list; private static final Font font = new Font("Tahoma", Font.PLAIN, 14); private Icon icon; private Icon colorIcon; public LayerSelectionDialog(Frame frame, @SuppressWarnings("rawtypes") List<Layer> layers, List<PNode> nodes, final LayerContainer container) { super(frame, "Layers"); try{ Image image = ImageIO.read(new File("images/VisibilityIcon.png")); icon = new ImageIcon(image); } catch(Exception e){ //do something better here icon = new EmptyIcon(); } JScrollPane scrollPane = new JScrollPane(); getContentPane().add(scrollPane, BorderLayout.CENTER); list = new PanelList(0, 0, 0, 0); colorIcon = new ColorIcon(list.getPanelColor(), icon.getIconWidth(), icon.getIconHeight()); // list.setFont(new Font("Tahoma", Font.PLAIN, 14)); for(int i = 0; i < layers.size(); i++){ list.addPanel(makePanel(layers.get(i), nodes.get(i))); } list.addListSelectionListener(new ListSelectionListener(){ @Override public void valueChanged(ListSelectionEvent arg0) { if(!arg0.getValueIsAdjusting()&&list.getSelectedIndex()>=0) container.changeLayer(list.getSelectedIndex()); } }); scrollPane.setViewportView(list); list.setSelection(layers.size()-1); add(list); } public void setToLevelPanel(LevelPanel panel){ list.removeAll(); // for(int i = 0; i < layers.size(); i++){ // list.addPanel(makePanel(layers.get(i), nodes.get(i))); // } } @SuppressWarnings("rawtypes") private JPanel makePanel(final Layer layer, final PNode node){ final JPanel panel = new JPanel(); panel.setBorder(new EmptyBorder(5, 5, 5, 5)); panel.setLayout(new BorderLayout(5, 0)); final JToggleButton button = new PushButton(colorIcon, icon); button.setPreferredSize(new Dimension(32, 32)); panel.add(button, BorderLayout.WEST); button.setSelected(node.getVisible()); button.addActionListener(new ActionListener(){ @Override public void actionPerformed(ActionEvent e) { node.setVisible(button.isSelected()); } }); JLabel label = new JLabel(layer.getName()); label.setFont(font); label.addMouseListener(list.getMouseListener(panel)); label.setBackground(new Color(0, 0, 0, 0)); panel.add(label, BorderLayout.CENTER); return panel; } /** * */ private static final long serialVersionUID = 1L; }