/*
* NewRecruitDialog.java
*
* Created on July 16, 2009, 5:30 PM
*/
package mekhq.gui.dialog;
import java.awt.BorderLayout;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.util.ResourceBundle;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.ScrollPaneConstants;
import megamek.common.util.EncodeControl;
import mekhq.campaign.personnel.Person;
import mekhq.campaign.personnel.Ranks;
import mekhq.gui.CampaignGUI;
import mekhq.gui.view.PersonViewPanel;
/**
*
* @author Jay Lawson <jaylawson39 at yahoo.com>
*/
public class NewRecruitDialog extends javax.swing.JDialog {
/**
* This dialog is used to both hire new pilots and to edit existing ones
*
*/
private static final long serialVersionUID = -6265589976779860566L;
private Person person;
private boolean newHire;
private CampaignGUI hqView;
private javax.swing.JComboBox<String> choiceRanks;
private JScrollPane scrollView;
/** Creates new form CustomizePilotDialog */
public NewRecruitDialog(CampaignGUI hqView, boolean modal, Person person) {
super(hqView.getFrame(), modal);
this.hqView = hqView;
this.person = person;
initComponents();
setLocationRelativeTo(hqView.getFrame());
}
private void refreshView() {
scrollView.setViewportView(new PersonViewPanel(person, hqView.getCampaign(), hqView.getIconPackage()));
// This odd code is to make sure that the scrollbar stays at the top
// I cant just call it here, because it ends up getting reset somewhere
// later
javax.swing.SwingUtilities.invokeLater(() -> scrollView.getVerticalScrollBar().setValue(0));
}
private void initComponents() {
scrollView = new JScrollPane();
choiceRanks = new javax.swing.JComboBox<String>();
ResourceBundle resourceMap = ResourceBundle.getBundle("mekhq.resources.NewRecruitDialog", new EncodeControl());
setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
setTitle(resourceMap.getString("Form.title")); // NOI18N
if (newHire) {
setTitle(resourceMap.getString("Form.title.new")); // NOI18N
}
setName("Form"); // NOI18N
getContentPane().setLayout(new java.awt.BorderLayout());
JPanel panSidebar = createSidebar(resourceMap);
JPanel panBottomButtons = createButtonPanel(resourceMap);
scrollView.setMinimumSize(new java.awt.Dimension(450, 180));
scrollView.setPreferredSize(new java.awt.Dimension(450, 180));
scrollView.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
scrollView.setViewportView(null);
refreshView();
getContentPane().add(panSidebar, BorderLayout.LINE_START);
getContentPane().add(scrollView, BorderLayout.CENTER);
getContentPane().add(panBottomButtons, BorderLayout.PAGE_END);
pack();
}
private JPanel createButtonPanel(ResourceBundle resourceMap) {
JPanel panButtons = new JPanel();
panButtons.setName("panButtons"); // NOI18N
panButtons.setLayout(new GridBagLayout());
JButton button = new JButton(resourceMap.getString("btnHire.text")); // NOI18N
button.setName("btnOk"); // NOI18N
button.addActionListener(e -> hire());
GridBagConstraints gridBagConstraints = new GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 0;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
panButtons.add(button, gridBagConstraints);
gridBagConstraints.gridx++;
button = new JButton(resourceMap.getString("btnClose.text")); // NOI18N
button.setName("btnClose"); // NOI18N
button.addActionListener(e -> setVisible(false));
panButtons.add(button, gridBagConstraints);
return panButtons;
}
private JPanel createSidebar(ResourceBundle resourceMap) {
JPanel panSidebar = new JPanel();
panSidebar.setName("panButtons"); // NOI18N
panSidebar.setLayout(new java.awt.GridLayout(6, 1));
choiceRanks.setName("choiceRanks"); // NOI18N
refreshRanksCombo();
choiceRanks.addActionListener(e -> changeRank());
panSidebar.add(choiceRanks);
JButton button = new JButton(resourceMap.getString("btnRandomName.text")); // NOI18N
button.setName("btnRandomName"); // NOI18N
button.addActionListener(e -> randomName());
panSidebar.add(button);
button = new JButton(resourceMap.getString("btnRandomPortrait.text")); // NOI18N
button.setName("btnRandomPortrait"); // NOI18N
button.addActionListener(e -> randomPortrait());
panSidebar.add(button);
button = new JButton(resourceMap.getString("btnChoosePortrait.text")); // NOI18N
button.setName("btnChoosePortrait"); // NOI18N
button.addActionListener(e -> choosePortrait());
panSidebar.add(button);
button = new JButton(resourceMap.getString("btnEditPerson.text")); // NOI18N
button.setName("btnEditPerson"); // NOI18N
button.addActionListener(e -> editPerson());
button.setEnabled(hqView.getCampaign().isGM());
panSidebar.add(button);
button = new JButton(resourceMap.getString("btnRegenerate.text")); // NOI18N
button.setName("btnRegenerate"); // NOI18N
button.addActionListener(e -> regenerate());
button.setEnabled(hqView.getCampaign().isGM());
panSidebar.add(button);
return panSidebar;
}
private void hire() {
if (hqView.getCampaign().recruitPerson(person)) {
person = hqView.getCampaign().newPerson(person.getPrimaryRole());
refreshRanksCombo();
hqView.getCampaign().changeRank(person, hqView.getCampaign().getRanks().getRankNumericFromNameAndProfession(
person.getProfession(), (String) choiceRanks.getSelectedItem()), false);
}
refreshView();
}
private void randomName() {
person.setName(hqView.getCampaign().getRNG().generate(person.getGender() == Person.G_FEMALE));
refreshView();
}
private void randomPortrait() {
hqView.getCampaign().assignRandomPortraitFor(person);
refreshView();
}
private void choosePortrait() {
ImageChoiceDialog pcd = new ImageChoiceDialog(hqView.getFrame(), true, person.getPortraitCategory(),
person.getPortraitFileName(), hqView.getIconPackage().getPortraits());
pcd.setVisible(true);
person.setPortraitCategory(pcd.getCategory());
person.setPortraitFileName(pcd.getFileName());
refreshView();
}
private void editPerson() {
int gender = person.getGender();
CustomizePersonDialog npd = new CustomizePersonDialog(hqView.getFrame(), true, person, hqView.getCampaign());
npd.setVisible(true);
if (gender != person.getGender()) {
randomPortrait();
}
refreshRanksCombo();
refreshView();
}
private void regenerate() {
person = hqView.getCampaign().newPerson(person.getPrimaryRole());
refreshRanksCombo();
refreshView();
}
private void changeRank() {
hqView.getCampaign().changeRank(person, hqView.getCampaign().getRanks().getRankNumericFromNameAndProfession(
person.getProfession(), (String) choiceRanks.getSelectedItem()), false);
refreshView();
}
private void refreshRanksCombo() {
DefaultComboBoxModel<String> ranksModel = new DefaultComboBoxModel<String>();
// Determine correct profession to pass into the loop
int profession = person.getProfession();
while (hqView.getCampaign().getRanks().isEmptyProfession(profession) && profession != Ranks.RPROF_MW) {
profession = hqView.getCampaign().getRanks().getAlternateProfession(profession);
}
for (String rankName : hqView.getCampaign().getAllRankNamesFor(profession)) {
ranksModel.addElement(rankName);
}
choiceRanks.setModel(ranksModel);
choiceRanks.setSelectedIndex(0);
}
}