package gui;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import utility.FileUtility;
import utility.GuiUtility;
public class PieceMenuPanel extends ChessPanel
{
public interface PieceMenuManager
{
public void onPieceMenuClosed();
public void openPieceMakerPanel(String pieceName, PieceMenuPanel panel);
public void openPieceMakerPanel(PieceMenuPanel panel);
public String getReturnButtonText();
public void onPieceListChanged();
}
public PieceMenuPanel(PieceMenuManager manager)
{
mEditDeletePanel = new JPanel();
mNoCustomPiecesLabel = GuiUtility.createJLabel(Messages.getString("PieceMenuPanel.noCustomPieces")); //$NON-NLS-1$
mNoCustomLabelConstraints = new GridBagConstraints(0, 1, 1, 1, 0.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.CENTER,
new Insets(50, 20, 50, 20), 5, 5);
mEditPanelConstraints = new GridBagConstraints();
mEditPanelConstraints.insets = new Insets(0, 0, 0, 0);
mEditPanelConstraints.gridheight = 3;
mEditPanelConstraints.ipadx = 7;
mEditPanelConstraints.gridy = 2;
mManager = manager;
mPieceListModel = new DefaultListModel();
initGuiComponents();
}
private void initGuiComponents()
{
setLayout(new GridBagLayout());
GridBagConstraints constraints = new GridBagConstraints();
JButton createNewPieceButton = new JButton(Messages.getString("PieceMenuPanel.createNew")); //$NON-NLS-1$
createNewPieceButton.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent event)
{
mManager.openPieceMakerPanel(PieceMenuPanel.this);
}
});
constraints.gridy = 0;
constraints.ipadx = 0;
constraints.gridheight = 1;
constraints.insets = new Insets(5, 10, 0, 10);
constraints.anchor = GridBagConstraints.CENTER;
add(createNewPieceButton, constraints);
mEditDeletePanel.setOpaque(false);
mEditDeletePanel.setLayout(new GridBagLayout());
JScrollPane scrollPane = new JScrollPane();
final JList pieceList = new JList();
scrollPane.setViewportView(pieceList);
refreshList();
pieceList.setModel(mPieceListModel);
pieceList.doLayout();
constraints.gridy = 1;
constraints.ipadx = 7;
constraints.insets = new Insets(5, 5, 0, 5);
constraints.fill = GridBagConstraints.HORIZONTAL;
mEditDeletePanel.add(scrollPane, constraints);
JPanel buttonPanel = new JPanel();
buttonPanel.setLayout(new GridBagLayout());
buttonPanel.setOpaque(false);
final JButton editButton = new JButton(Messages.getString("PieceMenuPanel.edit")); //$NON-NLS-1$
editButton.setEnabled(false);
editButton.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent event)
{
mManager.openPieceMakerPanel(mPieceListModel.get(pieceList.getSelectedIndex()).toString(), PieceMenuPanel.this);
}
});
constraints.gridy = 2;
constraints.ipadx = 7;
buttonPanel.add(editButton, constraints);
final JButton deleteButton = new JButton(Messages.getString("PieceMenuPanel.delete")); //$NON-NLS-1$
deleteButton.setEnabled(false);
deleteButton.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent event)
{
if (pieceList.getSelectedIndices().length > 0)
{
int[] selectedIndices = pieceList.getSelectedIndices();
for (int i = selectedIndices.length - 1; i >= 0; i--)
{
FileUtility.deletePiece(mPieceListModel.get(selectedIndices[i]).toString());
mPieceListModel.removeElementAt(selectedIndices[i]);
}
}
refreshList();
}
});
constraints.ipadx = 8;
buttonPanel.add(deleteButton, constraints);
constraints.gridy = 2;
mEditDeletePanel.add(buttonPanel, constraints);
if (mPieceListModel.size() == 0)
add(mNoCustomPiecesLabel, mNoCustomLabelConstraints);
else
add(mEditDeletePanel, mEditPanelConstraints);
pieceList.addListSelectionListener(new ListSelectionListener()
{
@Override
public void valueChanged(ListSelectionEvent arg0)
{
boolean isSelected = pieceList.getSelectedIndex() != -1;
deleteButton.setEnabled(isSelected);
editButton.setEnabled(isSelected);
}
});
JButton doneButton = new JButton(mManager.getReturnButtonText());
doneButton.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent arg0)
{
mManager.onPieceMenuClosed();
}
});
constraints.gridx = 0;
constraints.gridy = 5;
constraints.gridheight = 1;
constraints.gridwidth = 1;
constraints.insets = new Insets(15, 5, 10, 5);
add(doneButton, constraints);
}
public void refreshList()
{
mPieceListModel.clear();
String[] pieceArray = FileUtility.getCustomPieceArray();
for (int i = 0; i < pieceArray.length; i++)
{
mPieceListModel.addElement(pieceArray[i]);
}
if (mPieceListModel.size() == 0)
{
remove(mEditDeletePanel);
add(mNoCustomPiecesLabel, mNoCustomLabelConstraints);
}
else
{
remove(mNoCustomPiecesLabel);
add(mEditDeletePanel, mEditPanelConstraints);
}
mManager.onPieceListChanged();
}
private static final long serialVersionUID = -6371389704966320508L;
private DefaultListModel mPieceListModel;
private PieceMenuManager mManager;
private final JLabel mNoCustomPiecesLabel;
final JPanel mEditDeletePanel;
private final GridBagConstraints mNoCustomLabelConstraints;
private final GridBagConstraints mEditPanelConstraints;
}