/* * $Id$ * * Copyright (c) 2000-2003 by Rodney Kinney * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License (LGPL) as published by the Free Software Foundation. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, copies are available * at http://www.opensource.org. */ package VASSAL.counters; import java.awt.CardLayout; import java.awt.Component; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.util.ArrayList; import java.util.Collections; import java.util.Enumeration; import java.util.List; import javax.swing.BoxLayout; import javax.swing.DefaultListModel; import javax.swing.JList; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.event.ListSelectionListener; import VASSAL.tools.ScrollPane; public class MultiImagePicker extends JPanel { private static final long serialVersionUID = 1L; protected JList imageList; protected DefaultListModel imageListElements = new DefaultListModel(); protected CardLayout cl = new CardLayout(); protected JPanel multiPanel = new JPanel(); public MultiImagePicker() { setLayout(new BoxLayout(this, BoxLayout.X_AXIS)); imageList = new JList(imageListElements); imageList.addListSelectionListener(new ListSelectionListener() { public void valueChanged(javax.swing.event.ListSelectionEvent e) { showSelected(); } }); imageList.addKeyListener(new KeyAdapter() { public void keyReleased(KeyEvent evt) { if (evt.getKeyCode() == KeyEvent.VK_ENTER) { showSelected(); } } }); imageList.setVisibleRowCount(4); imageList.setPrototypeCellValue("Image 999"); imageList.setMinimumSize(imageList.getPreferredSize()); multiPanel.setLayout(cl); add(multiPanel); JScrollPane scroll = new ScrollPane(imageList); scroll.getViewport().setMinimumSize(imageList.getPreferredSize()); add(scroll); addEntry(); } public void addListSelectionListener(ListSelectionListener l) { imageList.addListSelectionListener(l); } public void showSelected() { if (imageList.getSelectedValue() != null) { cl.show(multiPanel, (String) imageList.getSelectedValue()); } } public void addEntry() { String entry = "Image " + (imageListElements.size() + 1); imageListElements.addElement(entry); ImagePicker pick = new ImagePicker(); multiPanel.add(entry, pick); imageList.setSelectedIndex(imageListElements.size() - 1); cl.show(multiPanel, (String) imageList.getSelectedValue()); } public JList getList() { return imageList; } /** * Returns a list of image names in this picker. * * @return the list of image names */ public List<String> getImageNameList() { final int size = imageListElements.size(); final ArrayList<String> names = new ArrayList<String>(size); for (int i = 0; i < size; ++i) { names.add((((ImagePicker) multiPanel.getComponent(i)).getImageName())); } return names; } /** Use {@link #getImageNameList()} instead. */ @Deprecated public Enumeration<String> getImageNames() { return Collections.enumeration(getImageNameList()); } public void removeEntryAt(int index) { if (index < 0 || index >= imageListElements.size()) { return; } multiPanel.remove(index); imageListElements.removeElementAt(index); if (index < imageListElements.size()) { imageList.setSelectedIndex(index); } else if (index > 0) { imageList.setSelectedIndex(index - 1); } if (imageList.getSelectedValue() != null) { cl.show(multiPanel, (String) imageList.getSelectedValue()); } } public void clear() { for (int i = 0; i < imageListElements.size(); ++i) { ((ImagePicker) multiPanel.getComponent(i)).setImageName(null); } multiPanel.removeAll(); imageListElements.removeAllElements(); } public void swap(int index1, int index2) { Component[] components = new Component[imageListElements.size()]; for (int i = 0; i < imageListElements.size(); i++) { components[i] = multiPanel.getComponent(i); } multiPanel.removeAll(); cl = new CardLayout(); multiPanel.setLayout(cl); for (int i = 0; i < imageListElements.size(); i++) { Component c = null; if (i == index1) { c = components[index2]; } else if (i == index2) { c = components[index1]; } else { c = components[i]; } multiPanel.add(c, "Image " + (i+1)); } imageList.setSelectedIndex(index2); showSelected(); } public void setImageList(String names[]) { while (names.length > multiPanel.getComponentCount()) { addEntry(); } for (int i = 0; i < names.length; ++i) { ((ImagePicker) multiPanel.getComponent(i)). setImageName(names[i]); } } }