/*
* NewSkillPrereqDialog.java
*
* Copyright (c) 2009 Jay Lawson <jaylawson39 at yahoo.com>. All rights reserved.
*
* This file is part of MekHQ.
*
* MekHQ is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* MekHQ 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with MekHQ. If not, see <http://www.gnu.org/licenses/>.
*/
package mekhq.gui.dialog;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.util.Hashtable;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JDialog;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import mekhq.campaign.personnel.SkillPrereq;
import mekhq.campaign.personnel.SkillType;
/**
*
* @author Taharqa
*/
public class EditSkillPrereqDialog extends JDialog {
private static final long serialVersionUID = -8038099101234445018L;
private SkillPrereq prereq;
private JButton btnClose;
private JButton btnOK;
private boolean cancelled;
private Hashtable<String, JComboBox<String>> skillLevels = new Hashtable<String, JComboBox<String>>();
private Hashtable<String, JCheckBox> skillChks = new Hashtable<String, JCheckBox>();
public EditSkillPrereqDialog(Frame parent, SkillPrereq pre) {
super(parent, true);
cancelled = false;
prereq = pre;
initComponents();
setLocationRelativeTo(parent);
}
private void initComponents() {
btnOK = new javax.swing.JButton();
btnClose = new javax.swing.JButton();
JPanel panMain = new JPanel(new GridLayout(SkillType.skillList.length,2));
JCheckBox chkSkill;
JComboBox<String> choiceLvl;
DefaultComboBoxModel<String> skillLvlModel;
for(int i = 0; i < SkillType.getSkillList().length; i++) {
final String type = SkillType.getSkillList()[i];
chkSkill = new JCheckBox(type);
chkSkill.setSelected(prereq.getSkillLevel(type) > -1);
skillChks.put(type, chkSkill);
chkSkill.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
changeLevelEnabled(type);
}
});
skillLvlModel = new DefaultComboBoxModel<String>();
skillLvlModel.addElement("None");
skillLvlModel.addElement(SkillType.getExperienceLevelName(SkillType.EXP_GREEN));
skillLvlModel.addElement(SkillType.getExperienceLevelName(SkillType.EXP_REGULAR));
skillLvlModel.addElement(SkillType.getExperienceLevelName(SkillType.EXP_VETERAN));
skillLvlModel.addElement(SkillType.getExperienceLevelName(SkillType.EXP_ELITE));
choiceLvl = new JComboBox<String>(skillLvlModel);
choiceLvl.setEnabled(chkSkill.isSelected());
int lvl = prereq.getSkillLevel(type);
if(lvl < 0) {
lvl = 0;
}
choiceLvl.setSelectedIndex(lvl);
skillLevels.put(type, choiceLvl);
panMain.add(chkSkill);
panMain.add(choiceLvl);
}
JPanel panButtons = new JPanel(new GridLayout(0,2));
btnOK.setText("Done"); // NOI18N
btnOK.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
done();
}
});
btnClose.setText("Cancel"); // NOI18N
btnClose.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
cancel();
}
});
panButtons.add(btnOK);
panButtons.add(btnClose);
setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
setTitle("Select Abilities");
getContentPane().setLayout(new BorderLayout());
getContentPane().add(new JScrollPane(panMain), BorderLayout.CENTER);
getContentPane().add(panButtons, BorderLayout.SOUTH);
this.setPreferredSize(new Dimension(400,700));
pack();
}
private void done() {
prereq = new SkillPrereq();
for(String type : SkillType.skillList) {
if(skillChks.get(type).isSelected()) {
prereq.addPrereq(type, skillLevels.get(type).getSelectedIndex());
}
}
this.setVisible(false);
}
public SkillPrereq getPrereq() {
return prereq;
}
private void cancel() {
this.setVisible(false);
cancelled = true;
}
public boolean wasCancelled() {
return cancelled;
}
private void changeLevelEnabled(String type) {
skillLevels.get(type).setEnabled(skillChks.get(type).isSelected());
}
}