/* * CampaignOptionsDialog.java * * Created on August 19, 2009, 11:22 AM */ package mekhq.gui.dialog; import java.awt.BorderLayout; import java.awt.Component; import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.Font; import java.awt.Frame; import java.awt.Graphics2D; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.GridLayout; import java.awt.Image; import java.awt.Insets; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.FocusEvent; import java.awt.event.FocusListener; import java.awt.event.KeyEvent; import java.awt.image.BufferedImage; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.io.File; import java.io.FileOutputStream; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.text.DecimalFormat; import java.text.DecimalFormatSymbols; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.Enumeration; import java.util.EventObject; import java.util.GregorianCalendar; import java.util.Hashtable; import java.util.Iterator; import java.util.List; import java.util.ResourceBundle; import java.util.Set; import java.util.Vector; import javax.swing.AbstractAction; import javax.swing.BorderFactory; import javax.swing.Box; import javax.swing.ButtonGroup; import javax.swing.DefaultCellEditor; import javax.swing.DefaultComboBoxModel; import javax.swing.DefaultListModel; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JComboBox; import javax.swing.JFileChooser; import javax.swing.JLabel; import javax.swing.JList; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JRadioButton; import javax.swing.JScrollPane; import javax.swing.JSlider; import javax.swing.JSpinner; import javax.swing.JTabbedPane; import javax.swing.JTable; import javax.swing.JTextArea; import javax.swing.JTextField; import javax.swing.JViewport; import javax.swing.ListSelectionModel; import javax.swing.SpinnerNumberModel; import javax.swing.SwingConstants; import javax.swing.SwingUtilities; import javax.swing.UIManager; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; import javax.swing.table.DefaultTableCellRenderer; import javax.swing.table.JTableHeader; import javax.swing.table.TableColumn; import megamek.client.ui.swing.util.PlayerColors; import megamek.common.Player; import megamek.common.options.GameOptions; import megamek.common.options.IOption; import megamek.common.options.IOptionGroup; import megamek.common.options.PilotOptions; import megamek.common.util.DirectoryItems; import megamek.common.util.EncodeControl; import mekhq.MekHQ; import mekhq.Utilities; import mekhq.campaign.Campaign; import mekhq.campaign.CampaignOptions; import mekhq.campaign.GamePreset; import mekhq.campaign.RandomSkillPreferences; import mekhq.campaign.event.OptionsChangedEvent; import mekhq.campaign.market.PersonnelMarket; import mekhq.campaign.parts.Part; import mekhq.campaign.personnel.Person; import mekhq.campaign.personnel.Ranks; import mekhq.campaign.personnel.SkillType; import mekhq.campaign.personnel.SpecialAbility; import mekhq.campaign.rating.UnitRatingMethod; import mekhq.campaign.universe.Era; import mekhq.campaign.universe.Faction; import mekhq.campaign.universe.RATManager; import mekhq.gui.SpecialAbilityPanel; import mekhq.gui.model.RankTableModel; import mekhq.gui.model.SortedComboBoxModel; import mekhq.gui.utilities.TableCellListener; /** * @author Jay Lawson <jaylawson39 at yahoo.com> */ public class CampaignOptionsDialog extends javax.swing.JDialog { private static final long serialVersionUID = 1935043247792962964L; private Campaign campaign; private CampaignOptions options; private RandomSkillPreferences rskillPrefs; private GregorianCalendar date; private SimpleDateFormat dateFormat; private Frame frame; private String camoCategory; private String camoFileName; private int colorIndex; private DirectoryItems camos; private Hashtable<String, JSpinner> hashSkillTargets; private Hashtable<String, JSpinner> hashGreenSkill; private Hashtable<String, JSpinner> hashRegSkill; private Hashtable<String, JSpinner> hashVetSkill; private Hashtable<String, JSpinner> hashEliteSkill; private boolean cancelled; private JButton btnCamo; private JButton btnCancel; private JButton btnDate; private JButton btnOkay; private JButton btnSave; private JButton btnLoad; private JSpinner spnClanPriceModifier; private JSpinner spnUsedPartsValue[]; private JSpinner spnDamagedPartsValue; private JComboBox<String> comboFaction; SortedComboBoxModel<String> factionModel; private JComboBox<String> comboFactionNames; private JComboBox<String> comboRanks; private JSlider sldGender; private JLabel lblCamo; private JLabel lblDate; private JLabel lblFaction; private JLabel lblFactionNames; private JLabel lblRank; private JLabel lblGender; private JLabel lblName; private JPanel panGeneral; private JPanel panRepair; private JPanel panTech; private JPanel panPersonnel; private JPanel panFinances; private JPanel panMercenary; private JPanel panNameGen; private JPanel panXP; private JPanel panRank; private JPanel panSkill; private JPanel panRandomSkill; private JTabbedPane tabOptions; private JTextField txtName; private JCheckBox useEraModsCheckBox; private JCheckBox assignedTechFirstCheckBox; private JCheckBox resetToFirstTechCheckBox; private JCheckBox useUnitRatingCheckBox; private JComboBox<String> unitRatingMethodCombo; private JCheckBox useFactionForNamesBox; private JCheckBox useTacticsBox; private JCheckBox useInitBonusBox; private JCheckBox useToughnessBox; private JCheckBox useArtilleryBox; private JCheckBox useAbilitiesBox; private JCheckBox useQuirksBox; private JCheckBox useEdgeBox; private JCheckBox useImplantsBox; private JCheckBox altQualityAveragingCheckBox; private JCheckBox useAdvancedMedicalBox; private JCheckBox useDylansRandomXpBox; private JCheckBox payForPartsBox; private JCheckBox payForUnitsBox; private JCheckBox payForSalariesBox; private JCheckBox payForOverheadBox; private JCheckBox payForMaintainBox; private JCheckBox payForTransportBox; private JCheckBox payForRecruitmentBox; private JCheckBox useLoanLimitsBox; private JCheckBox sellUnitsBox; private JCheckBox sellPartsBox; private JTextField[] txtSalaryBase; private JSpinner[] spnSalaryXp; private JSpinner spnSalaryCommision; private JSpinner spnSalaryEnlisted; private JSpinner spnSalaryAntiMek; private JSpinner spnHealWaitingPeriod; private JSpinner spnNaturalHealWaitingPeriod; private JCheckBox useRandomHitsForVees; private JSpinner spnMinimumHitsForVees; private JCheckBox useTougherHealing; private JComboBox<String> comboPrisonerStatus; // Start Personnel Market private JPanel panPersonnelMarket; private JComboBox<String> personnelMarketType; private JTextField personnelMarketRandomEliteRemoval; private JTextField personnelMarketRandomVeteranRemoval; private JTextField personnelMarketRandomRegularRemoval; private JTextField personnelMarketRandomGreenRemoval; private JTextField personnelMarketRandomUltraGreenRemoval; private JCheckBox personnelMarketReportRefresh; private JSpinner personnelMarketDylansWeight; private JLabel personnelMarketTypeLabel; private JLabel personnelMarketRandomEliteRemovalLabel; private JLabel personnelMarketRandomVeteranRemovalLabel; private JLabel personnelMarketRandomRegularRemovalLabel; private JLabel personnelMarketRandomGreenRemovalLabel; private JLabel personnelMarketRandomUltraGreenRemovalLabel; private JLabel personnelMarketDylansWeightLabel; // End Personnel Market private JCheckBox useDamageMargin; private JSpinner spnDamageMargin; private JSpinner spnDestroyPartTarget; private JCheckBox checkMaintenance; private JCheckBox logMaintenance; private JSpinner spnMaintenanceDays; private JSpinner spnMaintenanceBonus; private JCheckBox useQualityMaintenance; private JCheckBox useUnofficalMaintenance; private JCheckBox reverseQualityNames; private JRadioButton btnContractEquipment; private JRadioButton btnContractPersonnel; private JSpinner spnEquipPercent; private JCheckBox chkEquipContractSaleValue; private JCheckBox chkBLCSaleValue; private JSpinner spnOrderRefund; private JCheckBox usePercentageMaintBox; private JCheckBox useInfantryDontCountBox; private JTable tableRanks; private RankTableModel ranksModel; private JScrollPane scrRanks; @SuppressWarnings("unused") private JButton btnAddRank; // FIXME: Unused? @SuppressWarnings("unused") private JButton btnDeleteRank; // FIXME: Unused? String[] rankColNames = { "Rate", "MW Rank", "ASF Rank", "Vee Crew Rank", "Naval Rank", "Infantry Rank", "Tech Rank", "Officer", "Pay Multiplier"}; private JTextArea txtInstructionsXP; private JScrollPane scrXP; private JTable tableXP; private JLabel lblScenarioXP; private JSpinner spnScenarioXP; private JLabel lblKillXP; private JSpinner spnKillXP; private JLabel lblKills; private JSpinner spnKills; private JLabel lblTaskXP; private JLabel lblTasks; private JSpinner spnNTasksXP; private JSpinner spnTaskXP; private JSpinner spnSuccessXP; private JLabel lblSuccessXp; private JSpinner spnMistakeXP; private JLabel lblMistakeXP; private JSpinner spnIdleXP; private JSpinner spnTargetIdleXP; private JSpinner spnMonthsIdleXP; private JSpinner spnContractNegotiationXP; private JSpinner spnAdminWeeklyXP; private JSpinner spnAdminWeeklyXPPeriod; private JCheckBox chkSupportStaffOnly; private JSpinner spnAcquireWaitingPeriod; private JComboBox<String> choiceAcquireSkill; private JSpinner spnAcquireClanPenalty; private JSpinner spnAcquireIsPenalty; private JCheckBox chkCapturePrisoners; private JTextField txtMaxAcquisitions; private JCheckBox chkUseUnofficialProcreation; private JCheckBox chkUseUnofficialProcreationNoRelationship; private JCheckBox chkUseParentage; private JCheckBox chkLogConception; private JCheckBox chkUseTransfers; private JSpinner spnNDiceTransitTime; private JSpinner spnConstantTransitTime; private JComboBox<String> choiceTransitTimeUnits; private JSpinner spnAcquireMosBonus; private JComboBox<String> choiceAcquireMosUnits; private JSpinner spnAcquireMinimum; private JComboBox<String> choiceAcquireMinimumUnit; private JCheckBox limitByYearBox; private JCheckBox disallowExtinctStuffBox; private JCheckBox allowClanPurchasesBox; private JCheckBox allowISPurchasesBox; private JCheckBox allowCanonOnlyBox; private JCheckBox allowCanonRefitOnlyBox; private JCheckBox useAmmoByTypeBox; //private JCheckBox disallowSLUnitsBox; private JLabel lblTechLevel; private JComboBox<String> choiceTechLevel; private JLabel lblOverallRecruitBonus; private JSpinner spnOverallRecruitBonus; private JSpinner[] spnTypeRecruitBonus; private JCheckBox chkExtraRandom; private JCheckBox chkClanBonus; private JLabel lblProbAntiMek; private JSpinner spnProbAntiMek; private JSpinner spnArtyProb; private JSpinner spnArtyBonus; private JSpinner spnSecondProb; private JSpinner spnSecondBonus; private JSpinner spnTacticsGreen; private JSpinner spnTacticsReg; private JSpinner spnTacticsVet; private JSpinner spnTacticsElite; private JSpinner spnCombatSA; private JSpinner spnSupportSA; private JSpinner spnAbilGreen; private JSpinner spnAbilReg; private JSpinner spnAbilVet; private JSpinner spnAbilElite; private JSpinner spnProbPhenoMW; private JSpinner spnProbPhenoAero; private JSpinner spnProbPhenoBA; private JSpinner spnProbPhenoVee; private JPanel panRandomPortrait; private JCheckBox[] chkUsePortrait; private JPanel panSpecialAbilities; Hashtable<String, SpecialAbility> tempSPA; private JButton btnAddSPA; /* Against the Bot */ private JPanel panAtB; private JCheckBox chkUseAtB; private JComboBox<String> cbSkillLevel; private JCheckBox chkUseShareSystem; private JCheckBox chkSharesExcludeLargeCraft; private JCheckBox chkSharesForAll; private JCheckBox chkTrackOriginalUnit; private JCheckBox chkRetirementRolls; private JCheckBox chkTrackUnitFatigue; private JCheckBox chkCustomRetirementMods; private JCheckBox chkLimitLanceWeight; private JCheckBox chkLimitLanceNumUnits; private JCheckBox chkUseLeadership; private JCheckBox chkUseStrategy; private JSpinner spnBaseStrategyDeployment; private JSpinner spnAdditionalStrategyDeployment; private JCheckBox chkAdjustPaymentForStrategy; private JCheckBox chkUseAero; private JCheckBox chkUseVehicles; private JCheckBox chkClanVehicles; private JCheckBox chkDoubleVehicles; private JCheckBox chkAdjustPlayerVehicles; private JSpinner spnOpforLanceTypeMechs; private JSpinner spnOpforLanceTypeMixed; private JSpinner spnOpforLanceTypeVehicles; private JCheckBox chkOpforUsesVTOLs; private JCheckBox chkUseDropShips; private JRadioButton btnDynamicRATs; private JRadioButton btnStaticRATs; private JCheckBox chkIgnoreRatEra; private DefaultListModel<String> chosenRatModel; private DefaultListModel<String> availableRatModel; private JList<String> availableRats; private JList<String> chosenRats; private JButton btnAddRat; private JButton btnRemoveRat; private JButton btnMoveRatUp; private JButton btnMoveRatDown; private JSpinner spnSearchRadius; private JSpinner spnIntensity; private JLabel lblFightPct; private JLabel lblDefendPct; private JLabel lblScoutPct; private JLabel lblTrainingPct; private JCheckBox chkVariableContractLength; private JCheckBox chkMercSizeLimited; private JCheckBox chkRestrictPartsByMission; private JCheckBox chkRegionalMechVariations; private JCheckBox chkUseWeatherConditions; private JCheckBox chkUseLightConditions; private JCheckBox chkUsePlanetaryConditions; private JCheckBox chkUseAtBCapture; private JCheckBox chkAeroRecruitsHaveUnits; private JCheckBox chkInstantUnitMarketDelivery; private JCheckBox chkContractMarketReportRefresh; private JCheckBox chkUnitMarketReportRefresh; private JSpinner spnStartGameDelay; /** * Creates new form CampaignOptionsDialog */ public CampaignOptionsDialog(java.awt.Frame parent, boolean modal, Campaign c, DirectoryItems camos) { super(parent, modal); this.campaign = c; this.options = c.getCampaignOptions(); this.rskillPrefs = c.getRandomSkillPreferences(); //this is a hack but I have no idea what is going on here this.frame = parent; this.date = campaign.calendar; dateFormat = new SimpleDateFormat("EEEE, MMMM d yyyy"); this.camoCategory = campaign.getCamoCategory(); this.camoFileName = campaign.getCamoFileName(); this.colorIndex = campaign.getColorIndex(); this.camos = camos; hashSkillTargets = new Hashtable<String, JSpinner>(); hashGreenSkill = new Hashtable<String, JSpinner>(); hashRegSkill = new Hashtable<String, JSpinner>(); hashVetSkill = new Hashtable<String, JSpinner>(); hashEliteSkill = new Hashtable<String, JSpinner>(); cancelled = false; initComponents(); setCamoIcon(); setLocationRelativeTo(parent); // Rules panel useEraModsCheckBox.setSelected(options.useEraMods()); assignedTechFirstCheckBox.setSelected(options.useAssignedTechFirst()); resetToFirstTechCheckBox.setSelected(options.useResetToFirstTech()); useUnitRatingCheckBox.setSelected(options.useDragoonRating()); unitRatingMethodCombo.setSelectedItem(options.getUnitRatingMethod().getDescription()); useFactionForNamesBox.setSelected(options.useFactionForNames()); useTacticsBox.setSelected(options.useTactics()); useInitBonusBox.setSelected(options.useInitBonus()); useToughnessBox.setSelected(options.useToughness()); useArtilleryBox.setSelected(options.useArtillery()); useAbilitiesBox.setSelected(options.useAbilities()); useEdgeBox.setSelected(options.useEdge()); useImplantsBox.setSelected(options.useImplants()); chkCapturePrisoners.setSelected(options.capturePrisoners()); altQualityAveragingCheckBox.setSelected(options.useAltQualityAveraging()); useAdvancedMedicalBox.setSelected(options.useAdvancedMedical()); useDylansRandomXpBox.setSelected(options.useDylansRandomXp()); payForPartsBox.setSelected(options.payForParts()); payForUnitsBox.setSelected(options.payForUnits()); payForSalariesBox.setSelected(options.payForSalaries()); payForOverheadBox.setSelected(options.payForOverhead()); payForMaintainBox.setSelected(options.payForMaintain()); payForTransportBox.setSelected(options.payForTransport()); payForRecruitmentBox.setSelected(options.payForRecruitment()); useLoanLimitsBox.setSelected(options.useLoanLimits()); usePercentageMaintBox.setSelected(options.usePercentageMaint()); useInfantryDontCountBox.setSelected(options.useInfantryDontCount()); useDamageMargin.setSelected(options.isDestroyByMargin()); useQualityMaintenance.setSelected(options.useQualityMaintenance()); useUnofficalMaintenance.setSelected(options.useUnofficalMaintenance()); checkMaintenance.setSelected(options.checkMaintenance()); reverseQualityNames.setSelected(options.reverseQualityNames()); sellUnitsBox.setSelected(options.canSellUnits()); sellPartsBox.setSelected(options.canSellParts()); limitByYearBox.setSelected(options.limitByYear()); disallowExtinctStuffBox.setSelected(options.disallowExtinctStuff()); allowClanPurchasesBox.setSelected(options.allowClanPurchases()); allowISPurchasesBox.setSelected(options.allowISPurchases()); allowCanonOnlyBox.setSelected(options.allowCanonOnly()); allowCanonRefitOnlyBox.setSelected(options.allowCanonRefitOnly()); useAmmoByTypeBox.setSelected(options.useAmmoByType()); useQuirksBox.setSelected(options.useQuirks()); chkSupportStaffOnly.setSelected(options.isAcquisitionSupportStaffOnly()); } /** * This method is called from within the constructor to initialize the form. WARNING: Do NOT modify this code. The * content of this method is always regenerated by the Form Editor. */ private void initComponents() { java.awt.GridBagConstraints gridBagConstraints; tabOptions = new JTabbedPane(); panGeneral = new JPanel(); txtName = new JTextField(); lblName = new JLabel(); lblFaction = new JLabel(); lblFactionNames = new JLabel(); lblRank = new JLabel(); lblGender = new JLabel(); lblDate = new JLabel(); btnDate = new JButton(); comboFaction = new JComboBox<String>(); comboFactionNames = new JComboBox<String>(); comboRanks = new JComboBox<String>(); sldGender = new JSlider(SwingConstants.HORIZONTAL); btnCamo = new JButton(); lblCamo = new JLabel(); panRepair = new JPanel(); panPersonnel = new JPanel(); panFinances = new JPanel(); panMercenary = new JPanel(); panNameGen = new JPanel(); panRank = new JPanel(); panXP = new JPanel(); panSkill = new JPanel(); panTech = new JPanel(); panRandomSkill = new JPanel(); panRandomPortrait = new JPanel(); useEraModsCheckBox = new JCheckBox(); assignedTechFirstCheckBox = new JCheckBox(); resetToFirstTechCheckBox = new JCheckBox(); useUnitRatingCheckBox = new JCheckBox(); unitRatingMethodCombo = new JComboBox<String>(UnitRatingMethod.getUnitRatingMethodNames()); javax.swing.JLabel clanPriceModifierLabel = new JLabel(); javax.swing.JLabel usedPartsValueLabel = new JLabel(); javax.swing.JLabel damagedPartsValueLabel = new JLabel(); DecimalFormat numberFormat = (DecimalFormat) DecimalFormat.getInstance(); numberFormat.setMaximumFractionDigits(2); DecimalFormatSymbols decimalFormatSymbols = new DecimalFormatSymbols(); decimalFormatSymbols.setGroupingSeparator(' '); decimalFormatSymbols.setDecimalSeparator('.'); numberFormat.setDecimalFormatSymbols(decimalFormatSymbols); useFactionForNamesBox = new JCheckBox(); useTacticsBox = new JCheckBox(); useInitBonusBox = new JCheckBox(); useToughnessBox = new JCheckBox(); useArtilleryBox = new JCheckBox(); useAbilitiesBox = new JCheckBox(); useEdgeBox = new JCheckBox(); useImplantsBox = new JCheckBox(); chkCapturePrisoners = new JCheckBox(); altQualityAveragingCheckBox = new JCheckBox(); useAdvancedMedicalBox = new JCheckBox(); useDylansRandomXpBox = new JCheckBox(); payForPartsBox = new JCheckBox(); payForUnitsBox = new JCheckBox(); payForSalariesBox = new JCheckBox(); payForRecruitmentBox = new JCheckBox(); useLoanLimitsBox = new JCheckBox(); payForOverheadBox = new JCheckBox(); payForMaintainBox = new JCheckBox(); payForTransportBox = new JCheckBox(); sellUnitsBox = new JCheckBox(); sellPartsBox = new JCheckBox(); useQuirksBox = new JCheckBox(); limitByYearBox = new JCheckBox(); disallowExtinctStuffBox = new JCheckBox(); allowClanPurchasesBox = new JCheckBox(); allowISPurchasesBox = new JCheckBox(); allowCanonOnlyBox = new JCheckBox(); allowCanonRefitOnlyBox = new JCheckBox(); useAmmoByTypeBox = new JCheckBox(); choiceTechLevel = new JComboBox<String>(); btnOkay = new JButton(); btnSave = new JButton(); btnLoad = new JButton(); btnCancel = new JButton(); scrRanks = new JScrollPane(); useDamageMargin = new JCheckBox(); useQualityMaintenance = new JCheckBox(); useUnofficalMaintenance = new JCheckBox(); checkMaintenance = new JCheckBox(); logMaintenance = new JCheckBox(); reverseQualityNames = new JCheckBox(); chkSupportStaffOnly = new JCheckBox(); ResourceBundle resourceMap = ResourceBundle.getBundle("mekhq.resources.CampaignOptionsDialog", new EncodeControl()); //$NON-NLS-1$ setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE); setName("Form"); // NOI18N setTitle(resourceMap.getString("title.text")); getContentPane().setLayout(new java.awt.GridBagLayout()); tabOptions.setName("tabOptions"); // NOI18N panGeneral.setName("panGeneral"); // NOI18N panGeneral.setLayout(new java.awt.GridBagLayout()); txtName.setText(campaign.getName()); txtName.setMinimumSize(new java.awt.Dimension(500, 30)); txtName.setName("txtName"); // NOI18N txtName.setPreferredSize(new java.awt.Dimension(500, 30)); txtName.addActionListener(new java.awt.event.ActionListener() { @Override public void actionPerformed(java.awt.event.ActionEvent evt) { txtNameActionPerformed(evt); } }); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 0; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; panGeneral.add(txtName, gridBagConstraints); lblName.setText(resourceMap.getString("lblName.text")); // NOI18N lblName.setName("lblName"); // NOI18N gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 0; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; panGeneral.add(lblName, gridBagConstraints); lblFaction.setText(resourceMap.getString("lblFaction.text")); // NOI18N lblFaction.setName("lblFaction"); // NOI18N gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 1; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; panGeneral.add(lblFaction, gridBagConstraints); lblDate.setText(resourceMap.getString("lblDate.text")); // NOI18N lblDate.setName("lblDate"); // NOI18N gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 3; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; panGeneral.add(lblDate, gridBagConstraints); btnDate.setText(getDateAsString()); btnDate.setMinimumSize(new java.awt.Dimension(400, 30)); btnDate.setName("btnDate"); // NOI18N btnDate.setPreferredSize(new java.awt.Dimension(400, 30)); btnDate.addActionListener(new java.awt.event.ActionListener() { @Override public void actionPerformed(java.awt.event.ActionEvent evt) { btnDateActionPerformed(evt); } }); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 3; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; panGeneral.add(btnDate, gridBagConstraints); factionModel = new SortedComboBoxModel<String>(); for (String sname : Faction.choosableFactionCodes) { factionModel.addElement(Faction.getFaction(sname).getFullName(Era.getEra(date.get(Calendar.YEAR)))); } factionModel.setSelectedItem(campaign.getFaction().getFullName(Era.getEra(date.get(Calendar.YEAR)))); comboFaction.setModel(factionModel); comboFaction.setMinimumSize(new java.awt.Dimension(400, 30)); comboFaction.setName("comboFaction"); // NOI18N comboFaction.setPreferredSize(new java.awt.Dimension(400, 30)); comboFaction.addActionListener(new java.awt.event.ActionListener() { @Override public void actionPerformed(java.awt.event.ActionEvent evt) { factionSelected(); } }); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 1; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; panGeneral.add(comboFaction, gridBagConstraints); JPanel unitRatingPanel = new JPanel(new FlowLayout(FlowLayout.CENTER, 1, 1)); useUnitRatingCheckBox.setText(resourceMap.getString("useUnitRatingCheckBox.text")); // NOI18N useUnitRatingCheckBox.setName("useUnitRatingCheckBox"); // NOI18N unitRatingPanel.add(useUnitRatingCheckBox); unitRatingPanel.add(Box.createHorizontalStrut(10)); JLabel unitRatingMethodLabel = new JLabel("Unit Rating Method:"); unitRatingMethodLabel.setName("unitRatingMethodLabel"); unitRatingPanel.add(unitRatingMethodLabel); unitRatingMethodCombo.setName("unitRatingMethodCombo"); unitRatingPanel.add(unitRatingMethodCombo); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 2; gridBagConstraints.gridwidth = 2; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; panGeneral.add(unitRatingPanel, gridBagConstraints); btnCamo.setMaximumSize(new java.awt.Dimension(84, 72)); btnCamo.setMinimumSize(new java.awt.Dimension(84, 72)); btnCamo.setName("btnCamo"); // NOI18N btnCamo.setPreferredSize(new java.awt.Dimension(84, 72)); btnCamo.addActionListener(new java.awt.event.ActionListener() { @Override public void actionPerformed(java.awt.event.ActionEvent evt) { btnCamoActionPerformed(evt); } }); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 5; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; panGeneral.add(btnCamo, gridBagConstraints); lblCamo.setText(resourceMap.getString("lblCamo.text")); // NOI18N lblCamo.setName("lblCamo"); // NOI18N gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 5; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; panGeneral.add(lblCamo, gridBagConstraints); tabOptions.addTab(resourceMap.getString("panGeneral.TabConstraints.tabTitle"), panGeneral); // NOI18N panRepair.setName("panRules"); // NOI18N panRepair.setLayout(new java.awt.GridBagLayout()); JPanel panSubRepair = new JPanel(new GridBagLayout()); JPanel panSubMaintenance = new JPanel(new GridBagLayout()); JPanel panSubAcquire = new JPanel(new GridBagLayout()); JPanel panSubDelivery = new JPanel(new GridBagLayout()); panSubRepair.setBorder(BorderFactory.createTitledBorder("Repair")); panSubMaintenance.setBorder(BorderFactory.createTitledBorder("Maintenance")); panSubAcquire.setBorder(BorderFactory.createTitledBorder("Acquisition")); panSubDelivery.setBorder(BorderFactory.createTitledBorder("Delivery")); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 0; gridBagConstraints.weightx = .5; gridBagConstraints.gridwidth = 1; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; panRepair.add(panSubRepair, gridBagConstraints); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 0; gridBagConstraints.weightx = .5; gridBagConstraints.gridwidth = 1; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; panRepair.add(panSubAcquire, gridBagConstraints); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 1; gridBagConstraints.gridwidth = 1; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; panRepair.add(panSubMaintenance, gridBagConstraints); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 1; gridBagConstraints.gridwidth = 1; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; panRepair.add(panSubDelivery, gridBagConstraints); //We want the new mass repair panel to span two cells gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 2; gridBagConstraints.weighty = 1; gridBagConstraints.gridwidth = GridBagConstraints.REMAINDER; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; useEraModsCheckBox.setText(resourceMap.getString("useEraModsCheckBox.text")); // NOI18N useEraModsCheckBox.setToolTipText(resourceMap.getString("useEraModsCheckBox.toolTipText")); // NOI18N useEraModsCheckBox.setName("useEraModsCheckBox"); // NOI18N gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 0; gridBagConstraints.weightx = 0.0; gridBagConstraints.weighty = 0.0; gridBagConstraints.fill = java.awt.GridBagConstraints.NONE; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; panSubRepair.add(useEraModsCheckBox, gridBagConstraints); assignedTechFirstCheckBox.setText(resourceMap.getString("assignedTechFirstCheckBox.text")); // NOI18N assignedTechFirstCheckBox.setToolTipText(resourceMap.getString("assignedTechFirstCheckBox.toolTipText")); // NOI18N assignedTechFirstCheckBox.setName("assignedTechFirstCheckBox"); // NOI18N gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 1; gridBagConstraints.weightx = 0.0; gridBagConstraints.weighty = 0.0; gridBagConstraints.fill = java.awt.GridBagConstraints.NONE; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; panSubRepair.add(assignedTechFirstCheckBox, gridBagConstraints); resetToFirstTechCheckBox.setText(resourceMap.getString("resetToFirstTechCheckBox.text")); // NOI18N resetToFirstTechCheckBox.setToolTipText(resourceMap.getString("resetToFirstTechCheckBox.toolTipText")); // NOI18N resetToFirstTechCheckBox.setName("resetToFirstTechCheckBox"); // NOI18N gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 2; gridBagConstraints.weightx = 0.0; gridBagConstraints.weighty = 0.0; gridBagConstraints.fill = java.awt.GridBagConstraints.NONE; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; panSubRepair.add(resetToFirstTechCheckBox, gridBagConstraints); useQuirksBox.setText(resourceMap.getString("useQuirksBox.text")); // NOI18N useQuirksBox.setToolTipText(resourceMap.getString("useQuirksBox.toolTipText")); // NOI18N useQuirksBox.setName("useQuirksBox"); // NOI18N gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 3; gridBagConstraints.fill = java.awt.GridBagConstraints.NONE; gridBagConstraints.weightx = 0.0; gridBagConstraints.weighty = 0.0; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; panSubRepair.add(useQuirksBox, gridBagConstraints); useDamageMargin.setText(resourceMap.getString("useDamageMargin.text")); // NOI18N useDamageMargin.setToolTipText(resourceMap.getString("useDamageMargin.toolTipText")); // NOI18N gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 4; gridBagConstraints.weightx = 0.0; gridBagConstraints.weighty = 0.0; gridBagConstraints.fill = java.awt.GridBagConstraints.NONE; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; panSubRepair.add(useDamageMargin, gridBagConstraints); useDamageMargin.addActionListener(new java.awt.event.ActionListener() { @Override public void actionPerformed(java.awt.event.ActionEvent evt) { if (useDamageMargin.isSelected()) { spnDamageMargin.setEnabled(true); } else { spnDamageMargin.setEnabled(false); } } }); spnDamageMargin = new JSpinner(new SpinnerNumberModel(options.getDestroyMargin(), 1, 20, 1)); ((JSpinner.DefaultEditor) spnDamageMargin.getEditor()).getTextField().setEditable(false); spnDamageMargin.setEnabled(options.isDestroyByMargin()); JPanel pnlDamageMargin = new JPanel(); pnlDamageMargin.add(new JLabel("Margin:")); pnlDamageMargin.add(spnDamageMargin); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 5; gridBagConstraints.weightx = 1.0; gridBagConstraints.weighty = 0.0; gridBagConstraints.fill = java.awt.GridBagConstraints.NONE; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; panSubRepair.add(pnlDamageMargin, gridBagConstraints); spnDestroyPartTarget = new JSpinner(new SpinnerNumberModel(options.getDestroyPartTarget(), 2, 13, 1)); ((JSpinner.DefaultEditor) spnDestroyPartTarget.getEditor()).getTextField().setEditable(false); JPanel pnlDestroyPartTarget = new JPanel(); pnlDestroyPartTarget.add(new JLabel("Equipment hit in combat survives on a roll of")); pnlDestroyPartTarget.add(spnDestroyPartTarget); pnlDestroyPartTarget.add(new JLabel("or better")); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 6; gridBagConstraints.weightx = 1.0; gridBagConstraints.weighty = 1.0; gridBagConstraints.fill = java.awt.GridBagConstraints.NONE; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; panSubRepair.add(pnlDestroyPartTarget, gridBagConstraints); checkMaintenance.setText(resourceMap.getString("checkMaintenance.text")); // NOI18N checkMaintenance.setToolTipText(resourceMap.getString("checkMaintenance.toolTipText")); // NOI18N gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 0; gridBagConstraints.weightx = 0.0; gridBagConstraints.weighty = 0.0; gridBagConstraints.fill = java.awt.GridBagConstraints.NONE; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; panSubMaintenance.add(checkMaintenance, gridBagConstraints); checkMaintenance.addActionListener(new java.awt.event.ActionListener() { @Override public void actionPerformed(java.awt.event.ActionEvent evt) { if (checkMaintenance.isSelected()) { spnMaintenanceDays.setEnabled(true); useQualityMaintenance.setEnabled(true); useUnofficalMaintenance.setEnabled(true); spnMaintenanceBonus.setEnabled(true); logMaintenance.setEnabled(true); } else { spnMaintenanceDays.setEnabled(false); useQualityMaintenance.setEnabled(false); useUnofficalMaintenance.setEnabled(false); spnMaintenanceBonus.setEnabled(false); logMaintenance.setEnabled(false); } } }); spnMaintenanceDays = new JSpinner(new SpinnerNumberModel(options.getMaintenanceCycleDays(), 1, 365, 1)); ((JSpinner.DefaultEditor) spnMaintenanceDays.getEditor()).getTextField().setEditable(false); spnMaintenanceDays.setEnabled(options.checkMaintenance()); JPanel pnlMaintenanceDays = new JPanel(); pnlMaintenanceDays.add(spnMaintenanceDays); pnlMaintenanceDays.add(new JLabel("Maintenance cycle length in days")); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 1; gridBagConstraints.weightx = 0.0; gridBagConstraints.weighty = 0.0; gridBagConstraints.fill = java.awt.GridBagConstraints.NONE; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; panSubMaintenance.add(pnlMaintenanceDays, gridBagConstraints); spnMaintenanceBonus = new JSpinner(new SpinnerNumberModel(options.getMaintenanceBonus(), -13, 13, 1)); ((JSpinner.DefaultEditor) spnMaintenanceBonus.getEditor()).getTextField().setEditable(false); spnMaintenanceBonus.setEnabled(options.checkMaintenance()); spnMaintenanceBonus.setToolTipText(resourceMap.getString("spnMaintenanceBonus.toolTipText")); // NOI18N JPanel pnlMaintenanceBonus = new JPanel(); pnlMaintenanceBonus.add(spnMaintenanceBonus); pnlMaintenanceBonus.add(new JLabel("Maintenance modifier")); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 2; gridBagConstraints.weightx = 0.0; gridBagConstraints.weighty = 0.0; gridBagConstraints.fill = java.awt.GridBagConstraints.NONE; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; panSubMaintenance.add(pnlMaintenanceBonus, gridBagConstraints); useQualityMaintenance.setText(resourceMap.getString("useQualityMaintenance.text")); // NOI18N useQualityMaintenance.setToolTipText(resourceMap.getString("useQualityMaintenance.toolTipText")); // NOI18N gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 3; gridBagConstraints.fill = java.awt.GridBagConstraints.NONE; gridBagConstraints.weightx = 0.0; gridBagConstraints.weighty = 0.0; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; panSubMaintenance.add(useQualityMaintenance, gridBagConstraints); reverseQualityNames.setText(resourceMap.getString("reverseQualityNames.text")); // NOI18N reverseQualityNames.setToolTipText(resourceMap.getString("reverseQualityNames.toolTipText")); // NOI18N gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 4; gridBagConstraints.fill = java.awt.GridBagConstraints.NONE; gridBagConstraints.weightx = 0.0; gridBagConstraints.weighty = 0.0; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; panSubMaintenance.add(reverseQualityNames, gridBagConstraints); useUnofficalMaintenance.setText(resourceMap.getString("useUnofficalMaintenance.text")); // NOI18N useUnofficalMaintenance.setToolTipText(resourceMap.getString("useUnofficalMaintenance.toolTipText")); // NOI18N gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 5; gridBagConstraints.fill = java.awt.GridBagConstraints.NONE; gridBagConstraints.weightx = 0.0; gridBagConstraints.weighty = 0.0; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; panSubMaintenance.add(useUnofficalMaintenance, gridBagConstraints); logMaintenance.setText(resourceMap.getString("logMaintenance.text")); // NOI18N logMaintenance.setToolTipText(resourceMap.getString("logMaintenance.toolTipText")); // NOI18N gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 6; gridBagConstraints.fill = java.awt.GridBagConstraints.NONE; gridBagConstraints.weightx = 1.0; gridBagConstraints.weighty = 1.0; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; panSubMaintenance.add(logMaintenance, gridBagConstraints); spnAcquireWaitingPeriod = new JSpinner(new SpinnerNumberModel(options.getWaitingPeriod(), 1, 365, 1)); ((JSpinner.DefaultEditor) spnAcquireWaitingPeriod.getEditor()).getTextField().setEditable(false); JPanel pnlWaitingPeriod = new JPanel(); pnlWaitingPeriod.add(spnAcquireWaitingPeriod); pnlWaitingPeriod.add(new JLabel("Waiting period (in days) between acquisition rolls")); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 1; gridBagConstraints.weightx = 0.0; gridBagConstraints.weighty = 0.0; gridBagConstraints.gridwidth = 2; gridBagConstraints.fill = java.awt.GridBagConstraints.NONE; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; panSubAcquire.add(pnlWaitingPeriod, gridBagConstraints); DefaultComboBoxModel<String> acquireSkillModel = new DefaultComboBoxModel<String>(); acquireSkillModel.addElement(CampaignOptions.S_TECH); acquireSkillModel.addElement(SkillType.S_ADMIN); acquireSkillModel.addElement(SkillType.S_SCROUNGE); acquireSkillModel.addElement(SkillType.S_NEG); acquireSkillModel.addElement(CampaignOptions.S_AUTO); acquireSkillModel.setSelectedItem(options.getAcquisitionSkill()); choiceAcquireSkill = new JComboBox<String>(acquireSkillModel); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 2; gridBagConstraints.fill = java.awt.GridBagConstraints.NONE; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; panSubAcquire.add(new JLabel("Acquisition Skill:"), gridBagConstraints); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 2; gridBagConstraints.fill = java.awt.GridBagConstraints.NONE; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; panSubAcquire.add(choiceAcquireSkill, gridBagConstraints); chkSupportStaffOnly.setText("Only support personnel can make acquisition checks"); // NOI18N //chkSupportStaffOnly.setToolTipText(resourceMap.getString("useQuirksBox.toolTipText")); // NOI18N gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 3; gridBagConstraints.gridwidth = 2; gridBagConstraints.fill = java.awt.GridBagConstraints.NONE; gridBagConstraints.weightx = 0.0; gridBagConstraints.weighty = 0.0; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; panSubAcquire.add(chkSupportStaffOnly, gridBagConstraints); spnAcquireClanPenalty = new JSpinner(new SpinnerNumberModel(options.getClanAcquisitionPenalty(), 0, 13, 1)); ((JSpinner.DefaultEditor) spnAcquireClanPenalty.getEditor()).getTextField().setEditable(false); JPanel pnlClanPenalty = new JPanel(); pnlClanPenalty.add(spnAcquireClanPenalty); pnlClanPenalty.add(new JLabel("Penalty for Clan equipment")); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 4; gridBagConstraints.weightx = 0.0; gridBagConstraints.weighty = 0.0; gridBagConstraints.gridwidth = 2; gridBagConstraints.fill = java.awt.GridBagConstraints.NONE; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; panSubAcquire.add(pnlClanPenalty, gridBagConstraints); spnAcquireIsPenalty = new JSpinner(new SpinnerNumberModel(options.getIsAcquisitionPenalty(), 0, 13, 1)); ((JSpinner.DefaultEditor) spnAcquireIsPenalty.getEditor()).getTextField().setEditable(false); JPanel pnlIsPenalty = new JPanel(); pnlIsPenalty.add(spnAcquireIsPenalty); pnlIsPenalty.add(new JLabel("Penalty for Inner Sphere equipment")); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 5; gridBagConstraints.weightx = 0.0; gridBagConstraints.weighty = 0.0; gridBagConstraints.gridwidth = 2; gridBagConstraints.fill = java.awt.GridBagConstraints.NONE; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; panSubAcquire.add(pnlIsPenalty, gridBagConstraints); txtMaxAcquisitions = new JTextField(4); txtMaxAcquisitions.setText(Integer.toString(options.getMaxAcquisitions())); txtMaxAcquisitions.setHorizontalAlignment(JTextField.RIGHT); txtMaxAcquisitions.setName("txtName"); // NOI18N JPanel pnlMaxAcquisitions = new JPanel(); pnlMaxAcquisitions.add(txtMaxAcquisitions); pnlMaxAcquisitions.add(new JLabel("Maximum Acquisitions Per Day (0 for unlimited)")); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 6; gridBagConstraints.weightx = 1.0; gridBagConstraints.weighty = 1.0; gridBagConstraints.gridwidth = 2; gridBagConstraints.fill = java.awt.GridBagConstraints.NONE; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; panSubAcquire.add(pnlMaxAcquisitions, gridBagConstraints); spnNDiceTransitTime = new JSpinner(new SpinnerNumberModel(options.getNDiceTransitTime(), 0, 365, 1)); ((JSpinner.DefaultEditor) spnNDiceTransitTime.getEditor()).getTextField().setEditable(false); spnConstantTransitTime = new JSpinner(new SpinnerNumberModel(options.getConstantTransitTime(), 0, 365, 1)); ((JSpinner.DefaultEditor) spnConstantTransitTime.getEditor()).getTextField().setEditable(false); spnAcquireMosBonus = new JSpinner(new SpinnerNumberModel(options.getAcquireMosBonus(), 0, 365, 1)); ((JSpinner.DefaultEditor) spnAcquireMosBonus.getEditor()).getTextField().setEditable(false); spnAcquireMinimum = new JSpinner(new SpinnerNumberModel(options.getAcquireMinimumTime(), 0, 365, 1)); ((JSpinner.DefaultEditor) spnAcquireMinimum.getEditor()).getTextField().setEditable(false); DefaultComboBoxModel<String> transitUnitModel = new DefaultComboBoxModel<String>(); for (int i = 0; i < CampaignOptions.TRANSIT_UNIT_NUM; i++) { transitUnitModel.addElement(CampaignOptions.getTransitUnitName(i)); } transitUnitModel.setSelectedItem(CampaignOptions.getTransitUnitName(options.getUnitTransitTime())); choiceTransitTimeUnits = new JComboBox<String>(transitUnitModel); DefaultComboBoxModel<String> transitMosUnitModel = new DefaultComboBoxModel<String>(); for (int i = 0; i < CampaignOptions.TRANSIT_UNIT_NUM; i++) { transitMosUnitModel.addElement(CampaignOptions.getTransitUnitName(i)); } transitMosUnitModel.setSelectedItem(CampaignOptions.getTransitUnitName(options.getAcquireMosUnit())); choiceAcquireMosUnits = new JComboBox<String>(transitMosUnitModel); DefaultComboBoxModel<String> transitMinUnitModel = new DefaultComboBoxModel<String>(); for (int i = 0; i < CampaignOptions.TRANSIT_UNIT_NUM; i++) { transitMinUnitModel.addElement(CampaignOptions.getTransitUnitName(i)); } transitMinUnitModel.setSelectedItem(CampaignOptions.getTransitUnitName(options.getAcquireMinimumTimeUnit())); choiceAcquireMinimumUnit = new JComboBox<String>(transitMinUnitModel); JPanel pnlTransitTime = new JPanel(); pnlTransitTime.add(new JLabel("Delivery Time:")); pnlTransitTime.add(spnNDiceTransitTime); pnlTransitTime.add(new JLabel("d6 + ")); pnlTransitTime.add(spnConstantTransitTime); pnlTransitTime.add(choiceTransitTimeUnits); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 0; gridBagConstraints.fill = java.awt.GridBagConstraints.NONE; gridBagConstraints.weightx = 0.0; gridBagConstraints.weighty = 0.0; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; panSubDelivery.add(pnlTransitTime, gridBagConstraints); JPanel pnlMinTransit = new JPanel(); pnlMinTransit.add(new JLabel("Minimum Transit Time:")); pnlMinTransit.add(spnAcquireMinimum); pnlMinTransit.add(choiceAcquireMinimumUnit); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 1; gridBagConstraints.fill = java.awt.GridBagConstraints.NONE; gridBagConstraints.weightx = 0.0; gridBagConstraints.weighty = 0.0; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; panSubDelivery.add(pnlMinTransit, gridBagConstraints); JPanel pnlMosBonus = new JPanel(); pnlMosBonus.add(new JLabel("Reduce delivery time by")); pnlMosBonus.add(spnAcquireMosBonus); pnlMosBonus.add(choiceAcquireMosUnits); pnlMosBonus.add(new JLabel("per MoS")); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 2; gridBagConstraints.fill = java.awt.GridBagConstraints.NONE; gridBagConstraints.weightx = 1.0; gridBagConstraints.weighty = 1.0; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; panSubDelivery.add(pnlMosBonus, gridBagConstraints); tabOptions.addTab(resourceMap.getString("panRepair.TabConstraints.tabTitle"), panRepair); // NOI18N panTech.setName("panTech"); // NOI18N panTech.setLayout(new java.awt.GridBagLayout()); limitByYearBox.setText(resourceMap.getString("limitByYearBox.text")); // NOI18N limitByYearBox.setToolTipText(resourceMap.getString("limitByYearBox.toolTipText")); // NOI18N limitByYearBox.setName("limitByYearBox"); // NOI18N gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 0; gridBagConstraints.gridwidth = 2; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; panTech.add(limitByYearBox, gridBagConstraints); disallowExtinctStuffBox.setText(resourceMap.getString("disallowExtinctStuffBox.text")); // NOI18N disallowExtinctStuffBox.setToolTipText(resourceMap.getString("disallowExtinctStuffBox.toolTipText")); // NOI18N disallowExtinctStuffBox.setName("disallowExtinctStuffBox"); // NOI18N gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 1; gridBagConstraints.gridwidth = 2; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; panTech.add(disallowExtinctStuffBox, gridBagConstraints); allowClanPurchasesBox.setText(resourceMap.getString("allowClanPurchasesBox.text")); // NOI18N allowClanPurchasesBox.setToolTipText(resourceMap.getString("allowClanPurchasesBox.toolTipText")); // NOI18N allowClanPurchasesBox.setName("allowClanPurchasesBox"); // NOI18N gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 2; gridBagConstraints.gridwidth = 2; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; panTech.add(allowClanPurchasesBox, gridBagConstraints); allowISPurchasesBox.setText(resourceMap.getString("allowISPurchasesBox.text")); // NOI18N allowISPurchasesBox.setToolTipText(resourceMap.getString("allowISPurchasesBox.toolTipText")); // NOI18N allowISPurchasesBox.setName("allowISPurchasesBox"); // NOI18N gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 3; gridBagConstraints.gridwidth = 2; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; panTech.add(allowISPurchasesBox, gridBagConstraints); allowCanonOnlyBox.setText(resourceMap.getString("allowCanonOnlyBox.text")); // NOI18N allowCanonOnlyBox.setToolTipText(resourceMap.getString("allowCanonOnlyBox.toolTipText")); // NOI18N allowCanonOnlyBox.setName("allowCanonOnlyBox"); // NOI18N gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 4; gridBagConstraints.gridwidth = 2; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; panTech.add(allowCanonOnlyBox, gridBagConstraints); allowCanonRefitOnlyBox.setText(resourceMap.getString("allowCanonRefitOnlyBox.text")); // NOI18N allowCanonRefitOnlyBox.setToolTipText(resourceMap.getString("allowCanonRefitOnlyBox.toolTipText")); // NOI18N allowCanonRefitOnlyBox.setName("allowCanonRefitOnlyBox"); // NOI18N gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 5; gridBagConstraints.gridwidth = 2; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; panTech.add(allowCanonRefitOnlyBox, gridBagConstraints); lblTechLevel = new JLabel(resourceMap.getString("lblTechLevel.text")); // NOI18N lblTechLevel.setName("lblTechLevel"); // NOI18N gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 6; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; panTech.add(lblTechLevel, gridBagConstraints); DefaultComboBoxModel<String> techLevelComboBoxModel = new DefaultComboBoxModel<String>(); techLevelComboBoxModel.addElement(CampaignOptions.getTechLevelName(CampaignOptions.TECH_INTRO)); techLevelComboBoxModel.addElement(CampaignOptions.getTechLevelName(CampaignOptions.TECH_STANDARD)); techLevelComboBoxModel.addElement(CampaignOptions.getTechLevelName(CampaignOptions.TECH_ADVANCED)); techLevelComboBoxModel.addElement(CampaignOptions.getTechLevelName(CampaignOptions.TECH_EXPERIMENTAL)); techLevelComboBoxModel.addElement(CampaignOptions.getTechLevelName(CampaignOptions.TECH_UNOFFICIAL)); choiceTechLevel.setModel(techLevelComboBoxModel); //choiceTechLevel.setToolTipText(resourceMap.getString("choiceTechLevel.toolTipText")); // NOI18N choiceTechLevel.setName("choiceTechLevel"); // NOI18N choiceTechLevel.setSelectedIndex(options.getTechLevel()); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 6; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; panTech.add(choiceTechLevel, gridBagConstraints); useAmmoByTypeBox.setText(resourceMap.getString("useAmmoByTypeBox.text")); // NOI18N useAmmoByTypeBox.setToolTipText(resourceMap.getString("useAmmoByTypeBox.toolTipText")); // NOI18N useAmmoByTypeBox.setName("useAmmoByTypeBox"); // NOI18N gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 7; gridBagConstraints.gridwidth = 2; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; panTech.add(useAmmoByTypeBox, gridBagConstraints); tabOptions.addTab(resourceMap.getString("panTech.TabConstraints.tabTitle"), panTech); // NOI18N panPersonnel.setName("panPersonnel"); // NOI18N panPersonnel.setLayout(new java.awt.GridBagLayout()); useTacticsBox.setText(resourceMap.getString("useTacticsBox.text")); // NOI18N useTacticsBox.setToolTipText(resourceMap.getString("useTacticsBox.toolTipText")); // NOI18N useTacticsBox.setName("useTacticsBox"); // NOI18N gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 0; gridBagConstraints.gridwidth = 2; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; panPersonnel.add(useTacticsBox, gridBagConstraints); useInitBonusBox.setText(resourceMap.getString("useInitBonusBox.text")); // NOI18N useInitBonusBox.setToolTipText(resourceMap.getString("useInitBonusBox.toolTipText")); // NOI18N useInitBonusBox.setName("useInitBonusBox"); // NOI18N gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 1; gridBagConstraints.gridwidth = 2; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; panPersonnel.add(useInitBonusBox, gridBagConstraints); useToughnessBox.setText(resourceMap.getString("useToughnessBox.text")); // NOI18N useToughnessBox.setToolTipText(resourceMap.getString("useToughnessBox.toolTipText")); // NOI18N useToughnessBox.setName("useToughnessBox"); // NOI18N gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 2; gridBagConstraints.gridwidth = 2; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; panPersonnel.add(useToughnessBox, gridBagConstraints); useArtilleryBox.setText(resourceMap.getString("useArtilleryBox.text")); // NOI18N useArtilleryBox.setToolTipText(resourceMap.getString("useArtilleryBox.toolTipText")); // NOI18N useArtilleryBox.setName("useArtilleryBox"); // NOI18N gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 3; gridBagConstraints.gridwidth = 2; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; panPersonnel.add(useArtilleryBox, gridBagConstraints); useAbilitiesBox.setText(resourceMap.getString("useAbilitiesBox.text")); // NOI18N useAbilitiesBox.setToolTipText(resourceMap.getString("useAbilitiesBox.toolTipText")); // NOI18N useAbilitiesBox.setName("useAbilitiesBox"); // NOI18N gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 4; gridBagConstraints.gridwidth = 2; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; panPersonnel.add(useAbilitiesBox, gridBagConstraints); useEdgeBox.setText(resourceMap.getString("useEdgeBox.text")); // NOI18N useEdgeBox.setToolTipText(resourceMap.getString("useEdgeBox.toolTipText")); // NOI18N useEdgeBox.setName("useEdgeBox"); // NOI18N gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 5; gridBagConstraints.gridwidth = 2; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; panPersonnel.add(useEdgeBox, gridBagConstraints); useImplantsBox.setText(resourceMap.getString("useImplantsBox.text")); // NOI18N useImplantsBox.setToolTipText(resourceMap.getString("useImplantsBox.toolTipText")); // NOI18N useImplantsBox.setName("useImplantsBox"); // NOI18N gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 6; gridBagConstraints.gridwidth = 2; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; panPersonnel.add(useImplantsBox, gridBagConstraints); chkCapturePrisoners.setText(resourceMap.getString("chkCapturePrisoners.text")); // NOI18N chkCapturePrisoners.setToolTipText(resourceMap.getString("chkCapturePrisoners.toolTipText")); // NOI18N gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 7; gridBagConstraints.gridwidth = 2; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; panPersonnel.add(chkCapturePrisoners, gridBagConstraints); DefaultComboBoxModel<String> prisonerStatusModel = new DefaultComboBoxModel<String>(); prisonerStatusModel.addElement("Prisoner"); prisonerStatusModel.addElement("Bondsman"); comboPrisonerStatus = new JComboBox<String>(prisonerStatusModel); comboPrisonerStatus.setSelectedIndex(options.getDefaultPrisonerStatus()); JPanel pnlPrisonerStatus = new JPanel(); pnlPrisonerStatus.add(new JLabel("Default Prisoner Status:")); pnlPrisonerStatus.add(comboPrisonerStatus); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 8; gridBagConstraints.gridwidth = 2; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; panPersonnel.add(pnlPrisonerStatus, gridBagConstraints); altQualityAveragingCheckBox.setText(resourceMap.getString("altQualityAveragingCheckBox.text")); // NOI18N altQualityAveragingCheckBox.setToolTipText(resourceMap.getString("altQualityAveragingCheckBox.toolTipText")); // NOI18N altQualityAveragingCheckBox.setName("altQualityAveragingCheckBox"); // NOI18N gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 9; gridBagConstraints.gridwidth = 2; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; panPersonnel.add(altQualityAveragingCheckBox, gridBagConstraints); useAdvancedMedicalBox.setText(resourceMap.getString("useAdvancedMedicalBox.text")); // NOI18N useAdvancedMedicalBox.setToolTipText(resourceMap.getString("useAdvancedMedicalBox.toolTipText")); // NOI18N useAdvancedMedicalBox.setName("useAdvancedMedicalBox"); // NOI18N gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 10; gridBagConstraints.gridwidth = 2; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; panPersonnel.add(useAdvancedMedicalBox, gridBagConstraints); useDylansRandomXpBox.setText(resourceMap.getString("useDylansRandomXpBox.text")); // NOI18N useDylansRandomXpBox.setToolTipText(resourceMap.getString("useDylansRandomXpBox.toolTipText")); // NOI18N useDylansRandomXpBox.setName("useDylansRandomXpBox"); // NOI18N gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 11; gridBagConstraints.gridwidth = 2; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; panPersonnel.add(useDylansRandomXpBox, gridBagConstraints); spnHealWaitingPeriod = new JSpinner(new SpinnerNumberModel(options.getHealingWaitingPeriod(), 1, 30, 1)); ((JSpinner.DefaultEditor) spnHealWaitingPeriod.getEditor()).getTextField().setEditable(false); JPanel pnlHealWaitingPeriod = new JPanel(); pnlHealWaitingPeriod.add(spnHealWaitingPeriod); pnlHealWaitingPeriod.add(new JLabel("Days to wait between healing checks by doctors")); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 12; gridBagConstraints.gridwidth = 2; //gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; panPersonnel.add(pnlHealWaitingPeriod, gridBagConstraints); spnNaturalHealWaitingPeriod = new JSpinner(new SpinnerNumberModel(options.getNaturalHealingWaitingPeriod(), 1, 365, 1)); ((JSpinner.DefaultEditor) spnNaturalHealWaitingPeriod.getEditor()).getTextField().setEditable(false); JPanel pnlNaturalHealWaitingPeriod = new JPanel(); pnlNaturalHealWaitingPeriod.add(spnNaturalHealWaitingPeriod); pnlNaturalHealWaitingPeriod.add(new JLabel("Days to wait for natural healing")); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 13; gridBagConstraints.gridwidth = 2; //gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; panPersonnel.add(pnlNaturalHealWaitingPeriod, gridBagConstraints); spnMinimumHitsForVees = new JSpinner(new SpinnerNumberModel(options.getMinimumHitsForVees(), 1, 5, 1)); ((JSpinner.DefaultEditor) spnMinimumHitsForVees.getEditor()).getTextField().setEditable(false); JPanel panMinimumHitsForVees = new JPanel(); panMinimumHitsForVees.add(spnMinimumHitsForVees); panMinimumHitsForVees.add(new JLabel("Minimum number of hits for wounded crews and infantry")); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 14; gridBagConstraints.gridwidth = 2; //gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; panPersonnel.add(panMinimumHitsForVees, gridBagConstraints); useRandomHitsForVees = new JCheckBox(); useRandomHitsForVees.setSelected(options.useRandomHitsForVees()); useRandomHitsForVees.setText(resourceMap.getString("useRandomHitsForVees.text")); // NOI18N useRandomHitsForVees.setToolTipText(resourceMap.getString("useRandomHitsForVees.toolTipText")); // NOI18N gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 15; gridBagConstraints.gridwidth = 2; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; panPersonnel.add(useRandomHitsForVees, gridBagConstraints); useTougherHealing = new JCheckBox(resourceMap.getString("useTougherHealing.text")); useTougherHealing.setSelected(options.useTougherHealing()); useTougherHealing.setToolTipText(resourceMap.getString("useTougherHealing.toolTipText")); // NOI18N gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 16; gridBagConstraints.gridwidth = 2; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; panPersonnel.add(useTougherHealing, gridBagConstraints); chkUseUnofficialProcreation = new JCheckBox("Use procreation (Unofficial)"); // NOI18N chkUseUnofficialProcreation.setSelected(options.useUnofficialProcreation()); //chkUseUnofficialProcreation.setToolTipText(resourceMap.getString("chkUseUnofficialProcreation.toolTipText")); // NOI18N gridBagConstraints.gridy = 17; panPersonnel.add(chkUseUnofficialProcreation, gridBagConstraints); chkUseUnofficialProcreationNoRelationship = new JCheckBox("Use procreation without a relationship (Unofficial)"); // NOI18N chkUseUnofficialProcreationNoRelationship.setSelected(options.useUnofficialProcreationNoRelationship()); //chkUseUnofficialProcreationNoRelationship.setToolTipText(resourceMap.getString("chkUseUnofficialProcreationNoRelationship.toolTipText")); // NOI18N gridBagConstraints.gridy = 18; panPersonnel.add(chkUseUnofficialProcreationNoRelationship, gridBagConstraints); chkUseParentage = new JCheckBox("Display children in the person panel"); chkUseParentage.setSelected(options.useParentage()); gridBagConstraints.gridy = 19; panPersonnel.add(chkUseParentage, gridBagConstraints); chkLogConception = new JCheckBox("Log Conception and Birth "); chkLogConception.setSelected(options.logConception()); gridBagConstraints.gridy = 20; panPersonnel.add(chkLogConception, gridBagConstraints); chkUseTransfers = new JCheckBox("Log Saver - Use Reassign instead of Remove/Assign"); // NOI18N chkUseTransfers.setSelected(options.useTransfers()); gridBagConstraints.gridy = 21; panPersonnel.add(chkUseTransfers, gridBagConstraints); JPanel panSalary = new JPanel(new GridBagLayout()); panSalary.setBorder(BorderFactory.createTitledBorder("Salary")); JPanel panMultiplier = new JPanel(new GridLayout(1, 3)); panMultiplier.setBorder(BorderFactory.createTitledBorder("Multipliers")); spnSalaryCommision = new JSpinner(new SpinnerNumberModel(options.getSalaryCommissionMultiplier(), 0, 10, 0.05)); ((JSpinner.DefaultEditor) spnSalaryCommision.getEditor()).getTextField().setEditable(false); JPanel panSalaryCommission = new JPanel(); panSalaryCommission.add(spnSalaryCommision); panSalaryCommission.add(new JLabel("Commissioned")); panMultiplier.add(panSalaryCommission); spnSalaryEnlisted = new JSpinner(new SpinnerNumberModel(options.getSalaryEnlistedMultiplier(), 0, 10, 0.05)); ((JSpinner.DefaultEditor) spnSalaryEnlisted.getEditor()).getTextField().setEditable(false); JPanel panSalaryEnlisted = new JPanel(); panSalaryEnlisted.add(spnSalaryEnlisted); panSalaryEnlisted.add(new JLabel("Enlisted")); panMultiplier.add(panSalaryEnlisted); spnSalaryAntiMek = new JSpinner(new SpinnerNumberModel(options.getSalaryAntiMekMultiplier(), 0, 10, 0.05)); ((JSpinner.DefaultEditor) spnSalaryAntiMek.getEditor()).getTextField().setEditable(false); JPanel panSalaryAntiMek = new JPanel(); panSalaryAntiMek.add(spnSalaryAntiMek); panSalaryAntiMek.add(new JLabel("Anti-Mek")); panMultiplier.add(panSalaryAntiMek); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 0; gridBagConstraints.weightx = 1.0; gridBagConstraints.weighty = 0.0; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; panSalary.add(panMultiplier, gridBagConstraints); JPanel panXpMultiplier = new JPanel(new GridLayout(2, 3)); panXpMultiplier.setBorder(BorderFactory.createTitledBorder("Experience Multipliers")); spnSalaryXp = new JSpinner[5]; JSpinner spnXpSalary; JPanel panXpSalary; for (int i = 0; i < 5; i++) { spnXpSalary = new JSpinner(new SpinnerNumberModel(options.getSalaryXpMultiplier(i), 0, 10, 0.05)); ((JSpinner.DefaultEditor) spnXpSalary.getEditor()).getTextField().setEditable(false); panXpSalary = new JPanel(); panXpSalary.add(spnXpSalary); panXpSalary.add(new JLabel(SkillType.getExperienceLevelName(i))); panXpMultiplier.add(panXpSalary); spnSalaryXp[i] = spnXpSalary; } gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 1; gridBagConstraints.weightx = 1.0; gridBagConstraints.weighty = 0.0; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; panSalary.add(panXpMultiplier, gridBagConstraints); JPanel panAllTypes = new JPanel(new GridLayout(Person.T_NUM / 2, 2)); JTextField txtType; JPanel panType; txtSalaryBase = new JTextField[Person.T_NUM]; for (int i = 1; i < Person.T_NUM; i++) { txtType = new JTextField(); txtType.setText(Integer.toString(options.getBaseSalary(i))); txtType.setPreferredSize(new Dimension(75, 20)); panType = new JPanel(new GridBagLayout()); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 0; gridBagConstraints.weightx = 1.0; gridBagConstraints.weighty = 0.0; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; panType.add(new JLabel(Person.getRoleDesc(i, false)), gridBagConstraints); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 0; gridBagConstraints.weightx = 0.0; gridBagConstraints.weighty = 0.0; gridBagConstraints.fill = java.awt.GridBagConstraints.NONE; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; panType.add(txtType, gridBagConstraints); txtSalaryBase[i] = txtType; panAllTypes.add(panType); } JScrollPane scrSalaryBase = new JScrollPane(panAllTypes); scrSalaryBase.setBorder(BorderFactory.createTitledBorder("Base Salaries")); scrSalaryBase.setOpaque(false); scrSalaryBase.setPreferredSize(new Dimension(200, 200)); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 2; gridBagConstraints.weightx = 1.0; gridBagConstraints.weighty = 1.0; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; panSalary.add(scrSalaryBase, gridBagConstraints); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 3; gridBagConstraints.gridy = 0; gridBagConstraints.gridheight = 22; gridBagConstraints.weightx = 1.0; gridBagConstraints.weighty = 1.0; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; panPersonnel.add(panSalary, gridBagConstraints); tabOptions.addTab(resourceMap.getString("panPersonnel.TabConstraints.tabTitle"), panPersonnel); // NOI18N panFinances.setName("panFinances"); // NOI18N panFinances.setLayout(new java.awt.GridBagLayout()); payForPartsBox.setText(resourceMap.getString("payForPartsBox.text")); // NOI18N payForPartsBox.setToolTipText(resourceMap.getString("payForPartsBox.toolTipText")); // NOI18N payForPartsBox.setName("payForPartsBox"); // NOI18N gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 0; gridBagConstraints.gridwidth = 2; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; panFinances.add(payForPartsBox, gridBagConstraints); payForUnitsBox.setText(resourceMap.getString("payForUnitsBox.text")); // NOI18N payForUnitsBox.setToolTipText(resourceMap.getString("payForUnitsBox.toolTipText")); // NOI18N payForUnitsBox.setName("payForUnitsBox"); // NOI18N gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 1; gridBagConstraints.gridwidth = 2; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; panFinances.add(payForUnitsBox, gridBagConstraints); payForSalariesBox.setText(resourceMap.getString("payForSalariesBox.text")); // NOI18N payForSalariesBox.setToolTipText(resourceMap.getString("payForSalariesBox.toolTipText")); // NOI18N payForSalariesBox.setName("payForSalariesBox"); // NOI18N gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 2; gridBagConstraints.gridwidth = 2; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; panFinances.add(payForSalariesBox, gridBagConstraints); payForOverheadBox.setText(resourceMap.getString("payForOverheadBox.text")); // NOI18N payForOverheadBox.setToolTipText(resourceMap.getString("payForOverheadBox.toolTipText")); // NOI18N payForOverheadBox.setName("payForOverheadBox"); // NOI18N gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 3; gridBagConstraints.gridwidth = 2; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; panFinances.add(payForOverheadBox, gridBagConstraints); payForMaintainBox.setText(resourceMap.getString("payForMaintainBox.text")); // NOI18N payForMaintainBox.setToolTipText(resourceMap.getString("payForMaintainBox.toolTipText")); // NOI18N payForMaintainBox.setName("payForMaintainBox"); // NOI18N gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 4; gridBagConstraints.gridwidth = 2; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; panFinances.add(payForMaintainBox, gridBagConstraints); payForTransportBox.setText(resourceMap.getString("payForTransportBox.text")); // NOI18N payForTransportBox.setToolTipText(resourceMap.getString("payForTransportBox.toolTipText")); // NOI18N payForTransportBox.setName("payForTransportBox"); // NOI18N gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 5; gridBagConstraints.gridwidth = 2; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; panFinances.add(payForTransportBox, gridBagConstraints); sellUnitsBox.setText(resourceMap.getString("sellUnitsBox.text")); // NOI18N sellUnitsBox.setToolTipText(resourceMap.getString("sellUnitsBox.toolTipText")); // NOI18N sellUnitsBox.setName("sellUnitsBox"); // NOI18N gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 6; gridBagConstraints.gridwidth = 2; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; panFinances.add(sellUnitsBox, gridBagConstraints); sellPartsBox.setText(resourceMap.getString("sellPartsBox.text")); // NOI18N sellPartsBox.setToolTipText(resourceMap.getString("sellPartsBox.toolTipText")); // NOI18N sellPartsBox.setName("sellPartsBox"); // NOI18N gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 7; gridBagConstraints.gridwidth = 2; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; panFinances.add(sellPartsBox, gridBagConstraints); payForRecruitmentBox.setText(resourceMap.getString("payForRecruitmentBox.text")); // NOI18N payForRecruitmentBox.setToolTipText(resourceMap.getString("payForRecruitmentBox.toolTipText")); // NOI18N gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 8; gridBagConstraints.gridwidth = 2; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; panFinances.add(payForRecruitmentBox, gridBagConstraints); useLoanLimitsBox.setText(resourceMap.getString("useLoanLimitsBox.text")); // NOI18N useLoanLimitsBox.setToolTipText(resourceMap.getString("useLoanLimitsBox.toolTipText")); // NOI18N gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 9; gridBagConstraints.gridwidth = 2; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; panFinances.add(useLoanLimitsBox, gridBagConstraints); // Unofficial maintenance costs usePercentageMaintBox = new JCheckBox(resourceMap.getString("usePercentageMaintBox.text")); // NOI18N usePercentageMaintBox.setToolTipText(resourceMap.getString("usePercentageMaintBox.toolTipText")); // NOI18N gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 10; gridBagConstraints.gridwidth = 2; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; panFinances.add(usePercentageMaintBox, gridBagConstraints); // Unofficial infantry don't count for contract pay useInfantryDontCountBox = new JCheckBox(resourceMap.getString("infantryDontCount.text")); // NOI18N useInfantryDontCountBox.setToolTipText(resourceMap.getString("infantryDontCount.toolTipText")); // NOI18N gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 11; gridBagConstraints.gridwidth = 2; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; panFinances.add(useInfantryDontCountBox, gridBagConstraints); clanPriceModifierLabel.setText(resourceMap.getString("clanPriceModifierLabel.text")); // NOI18N clanPriceModifierLabel.setName("clanPriceModifierLabel"); // NOI18N gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 3; gridBagConstraints.gridy = 0; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; panFinances.add(clanPriceModifierLabel, gridBagConstraints); spnClanPriceModifier = new JSpinner(new SpinnerNumberModel(options.getClanPriceModifier(), 1.0, null, 0.1)); spnClanPriceModifier.setEditor(new JSpinner.NumberEditor(spnClanPriceModifier, "0.00")); spnClanPriceModifier.setToolTipText(resourceMap.getString("clanPriceModifierJFormattedTextField.toolTipText")); // NOI18N gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 2; gridBagConstraints.gridy = 0; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; panFinances.add(spnClanPriceModifier, gridBagConstraints); //JPanel panUsedParts = new JPanel(new GridBagLayout()); usedPartsValueLabel.setText(resourceMap.getString("usedPartsValueLabel.text")); // NOI18N usedPartsValueLabel.setName("usedPartsValueLabel"); // NOI18N gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 2; gridBagConstraints.gridy = 1; gridBagConstraints.gridwidth = 2; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; panFinances.add(usedPartsValueLabel, gridBagConstraints); spnUsedPartsValue = new JSpinner[6]; gridBagConstraints.gridwidth = 1; for (int i = Part.QUALITY_A; i <= Part.QUALITY_F; i++) { gridBagConstraints.gridy++; gridBagConstraints.gridx = 3; gridBagConstraints.insets = new Insets(0, 20, 0, 0); panFinances.add(new JLabel(Part.getQualityName(i, options.reverseQualityNames()) + " Quality"), gridBagConstraints); gridBagConstraints.gridx = 2; gridBagConstraints.insets = new Insets(0, 10, 0, 0); spnUsedPartsValue[i] = new JSpinner(new SpinnerNumberModel(options.getUsedPartsValue(i), 0.00, 1.00, 0.05)); spnUsedPartsValue[i].setEditor(new JSpinner.NumberEditor(spnUsedPartsValue[i], "0.00")); spnUsedPartsValue[i].setToolTipText(resourceMap.getString("usedPartsValueJFormattedTextField.toolTipText")); // NOI18N panFinances.add(spnUsedPartsValue[i], gridBagConstraints); } damagedPartsValueLabel.setText(resourceMap.getString("damagedPartsValueLabel.text")); // NOI18N damagedPartsValueLabel.setName("damagedPartsValueLabel"); // NOI18N gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 3; gridBagConstraints.gridy = 8; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; panFinances.add(damagedPartsValueLabel, gridBagConstraints); spnDamagedPartsValue = new JSpinner(new SpinnerNumberModel(options.getDamagedPartsValue(), 0.00, 1.00, 0.05)); spnDamagedPartsValue.setEditor(new JSpinner.NumberEditor(spnDamagedPartsValue, "0.00")); spnDamagedPartsValue.setToolTipText(resourceMap.getString("damagedPartsValueJFormattedTextField.toolTipText")); // NOI18N gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 2; gridBagConstraints.gridy = 8; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; panFinances.add(spnDamagedPartsValue, gridBagConstraints); gridBagConstraints.gridx = 3; gridBagConstraints.gridy = 9; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; panFinances.add(new JLabel("Reimbursement % (as decimal) for cancelled orders"), gridBagConstraints); spnOrderRefund = new JSpinner(new SpinnerNumberModel(options.GetCanceledOrderReimbursement(), 0.00, 1.00, 0.05)); spnOrderRefund.setEditor(new JSpinner.NumberEditor(spnOrderRefund, "0.00")); //spnDamagedPartsValue.setToolTipText(resourceMap.getString("damagedPartsValueJFormattedTextField.toolTipText")); // NOI18N gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 2; gridBagConstraints.gridy = 9; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; panFinances.add(spnOrderRefund, gridBagConstraints); tabOptions.addTab(resourceMap.getString("panFinances.TabConstraints.tabTitle"), panFinances); // NOI18N panMercenary.setName("panMercenary"); // NOI18N panMercenary.setLayout(new java.awt.GridBagLayout()); btnContractEquipment = new JRadioButton(resourceMap.getString("panMercenary.IntOpsPayment.title")); btnContractEquipment.setToolTipText(resourceMap.getString("panMercenary.IntOpsPayment.tooltip")); btnContractPersonnel = new JRadioButton(resourceMap.getString("panMercenary.FMMRPayment.title")); btnContractPersonnel.setToolTipText(resourceMap.getString("panMercenary.FMMRPayment.tooltip")); if (options.useEquipmentContractBase()) { btnContractEquipment.setSelected(true); } else { btnContractPersonnel.setSelected(true); } spnEquipPercent = new JSpinner(new SpinnerNumberModel(options.getEquipmentContractPercent(), 0.1, 20, 0.1)); ((JSpinner.DefaultEditor) spnEquipPercent.getEditor()).getTextField().setEditable(false); ButtonGroup groupContract = new ButtonGroup(); groupContract.add(btnContractEquipment); groupContract.add(btnContractPersonnel); chkEquipContractSaleValue = new JCheckBox("Base on equipment sale value"); chkEquipContractSaleValue.setSelected(options.useEquipmentContractSaleValue()); chkBLCSaleValue = new JCheckBox("Base battle loss compensation on equipment sale value"); chkBLCSaleValue.setSelected(options.useBLCSaleValue()); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 0; gridBagConstraints.fill = java.awt.GridBagConstraints.NONE; gridBagConstraints.gridwidth = 3; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; panMercenary.add(btnContractEquipment, gridBagConstraints); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 1; gridBagConstraints.fill = java.awt.GridBagConstraints.NONE; gridBagConstraints.insets = new Insets(5, 30, 5, 5); gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; panMercenary.add(new JLabel("Percent:"), gridBagConstraints); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 1; gridBagConstraints.fill = java.awt.GridBagConstraints.NONE; //gridBagConstraints.weightx = 1.0; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; panMercenary.add(spnEquipPercent, gridBagConstraints); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 2; gridBagConstraints.gridy = 1; gridBagConstraints.fill = java.awt.GridBagConstraints.NONE; //gridBagConstraints.weightx = 1.0; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; panMercenary.add(chkEquipContractSaleValue, gridBagConstraints); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 2; gridBagConstraints.gridwidth = 3; //gridBagConstraints.weighty = 1.0; gridBagConstraints.fill = java.awt.GridBagConstraints.NONE; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; panMercenary.add(btnContractPersonnel, gridBagConstraints); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 3; gridBagConstraints.gridwidth = 3; //gridBagConstraints.weighty = 1.0; gridBagConstraints.fill = java.awt.GridBagConstraints.NONE; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; panMercenary.add(chkBLCSaleValue, gridBagConstraints); tabOptions.addTab(resourceMap.getString("panMercenary.TabConstraints.tabTitle"), panMercenary); // NOI18N Set<String> spaNames = SpecialAbility.getAllSpecialAbilities().keySet(); //We need to create a temporary hash of special abilities that we can modify without //changing the underlying one in case the user cancels the changes tempSPA = new Hashtable<String, SpecialAbility>(); for(String name : spaNames) { tempSPA.put(name, SpecialAbility.getAbility(name).clone()); } panXP.setName("panXP"); // NOI18N panXP.setLayout(new java.awt.GridBagLayout()); lblScenarioXP = new JLabel(resourceMap.getString("lblScenarioXP.text")); spnScenarioXP = new JSpinner(new SpinnerNumberModel(options.getScenarioXP(), 0, 10000, 1)); ((JSpinner.DefaultEditor) spnScenarioXP.getEditor()).getTextField().setEditable(false); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 0; gridBagConstraints.fill = java.awt.GridBagConstraints.NONE; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5); panXP.add(spnScenarioXP, gridBagConstraints); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 0; gridBagConstraints.gridwidth = 3; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5); panXP.add(lblScenarioXP, gridBagConstraints); lblKillXP = new JLabel(resourceMap.getString("lblKillXP.text")); spnKillXP = new JSpinner(new SpinnerNumberModel(options.getKillXPAward(), 0, 10000, 1)); ((JSpinner.DefaultEditor) spnKillXP.getEditor()).getTextField().setEditable(false); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 1; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5); panXP.add(spnKillXP, gridBagConstraints); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 1; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5); panXP.add(lblKillXP, gridBagConstraints); lblKills = new JLabel(resourceMap.getString("lblKills.text")); spnKills = new JSpinner(new SpinnerNumberModel(options.getKillsForXP(), 0, 10000, 1)); ((JSpinner.DefaultEditor) spnKills.getEditor()).getTextField().setEditable(false); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 2; gridBagConstraints.gridy = 1; gridBagConstraints.fill = java.awt.GridBagConstraints.NONE; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5); panXP.add(spnKills, gridBagConstraints); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 3; gridBagConstraints.gridy = 1; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5); panXP.add(lblKills, gridBagConstraints); lblTaskXP = new JLabel(resourceMap.getString("lblKillXP.text")); spnTaskXP = new JSpinner(new SpinnerNumberModel(options.getTaskXP(), 0, 10000, 1)); ((JSpinner.DefaultEditor) spnTaskXP.getEditor()).getTextField().setEditable(false); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 2; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5); panXP.add(spnTaskXP, gridBagConstraints); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 2; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5); panXP.add(lblTaskXP, gridBagConstraints); lblTasks = new JLabel(resourceMap.getString("lblTasks.text")); spnNTasksXP = new JSpinner(new SpinnerNumberModel(options.getNTasksXP(), 0, 10000, 1)); ((JSpinner.DefaultEditor) spnNTasksXP.getEditor()).getTextField().setEditable(false); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 2; gridBagConstraints.gridy = 2; gridBagConstraints.fill = java.awt.GridBagConstraints.NONE; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5); panXP.add(spnNTasksXP, gridBagConstraints); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 3; gridBagConstraints.gridy = 2; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5); panXP.add(lblTasks, gridBagConstraints); lblSuccessXp = new JLabel(resourceMap.getString("lblSuccessXP.text")); spnSuccessXP = new JSpinner(new SpinnerNumberModel(options.getSuccessXP(), 0, 10000, 1)); ((JSpinner.DefaultEditor) spnSuccessXP.getEditor()).getTextField().setEditable(false); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 3; gridBagConstraints.fill = java.awt.GridBagConstraints.NONE; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5); panXP.add(spnSuccessXP, gridBagConstraints); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 3; gridBagConstraints.gridwidth = 3; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5); panXP.add(lblSuccessXp, gridBagConstraints); lblMistakeXP = new JLabel(resourceMap.getString("lblMistakeXP.text")); spnMistakeXP = new JSpinner(new SpinnerNumberModel(options.getMistakeXP(), 0, 10000, 1)); ((JSpinner.DefaultEditor) spnMistakeXP.getEditor()).getTextField().setEditable(false); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 4; gridBagConstraints.fill = java.awt.GridBagConstraints.NONE; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5); panXP.add(spnMistakeXP, gridBagConstraints); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 4; gridBagConstraints.gridwidth = 3; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5); panXP.add(lblMistakeXP, gridBagConstraints); spnIdleXP = new JSpinner(new SpinnerNumberModel(options.getIdleXP(), 0, 10000, 1)); ((JSpinner.DefaultEditor) spnIdleXP.getEditor()).getTextField().setEditable(false); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 5; gridBagConstraints.fill = java.awt.GridBagConstraints.NONE; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5); panXP.add(spnIdleXP, gridBagConstraints); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 5; gridBagConstraints.fill = java.awt.GridBagConstraints.NONE; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5); panXP.add(new JLabel("XP for every"), gridBagConstraints); spnMonthsIdleXP = new JSpinner(new SpinnerNumberModel(options.getMonthsIdleXP(), 0, 36, 1)); ((JSpinner.DefaultEditor) spnMonthsIdleXP.getEditor()).getTextField().setEditable(false); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 2; gridBagConstraints.gridy = 5; gridBagConstraints.fill = java.awt.GridBagConstraints.NONE; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5); panXP.add(spnMonthsIdleXP, gridBagConstraints); gridBagConstraints.gridx = 3; gridBagConstraints.gridy = 5; gridBagConstraints.fill = java.awt.GridBagConstraints.NONE; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5); panXP.add(new JLabel("active month(s) on a 2d6 roll of greater than or equal to"), gridBagConstraints); spnTargetIdleXP = new JSpinner(new SpinnerNumberModel(options.getTargetIdleXP(), 2, 13, 1)); ((JSpinner.DefaultEditor) spnTargetIdleXP.getEditor()).getTextField().setEditable(false); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 4; gridBagConstraints.gridy = 5; gridBagConstraints.fill = java.awt.GridBagConstraints.NONE; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5); panXP.add(spnTargetIdleXP, gridBagConstraints); spnContractNegotiationXP = new JSpinner(new SpinnerNumberModel(options.getContractNegotiationXP(), 0, 10000, 1)); ((JSpinner.DefaultEditor) spnContractNegotiationXP.getEditor()).getTextField().setEditable(false); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 6; gridBagConstraints.fill = java.awt.GridBagConstraints.NONE; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5); panXP.add(spnContractNegotiationXP, gridBagConstraints); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 6; gridBagConstraints.fill = java.awt.GridBagConstraints.NONE; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5); panXP.add(new JLabel("XP awarded to the selected negotiator for a new contract"), gridBagConstraints); spnAdminWeeklyXP = new JSpinner(new SpinnerNumberModel(options.getAdminXP(), 0, 10000, 1)); ((JSpinner.DefaultEditor) spnAdminWeeklyXP.getEditor()).getTextField().setEditable(false); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 7; gridBagConstraints.fill = java.awt.GridBagConstraints.NONE; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5); panXP.add(spnAdminWeeklyXP, gridBagConstraints); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 7; gridBagConstraints.fill = java.awt.GridBagConstraints.NONE; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5); panXP.add(new JLabel("XP awarded to each administrator every Monday for the work of the previous"), gridBagConstraints); spnAdminWeeklyXPPeriod = new JSpinner(new SpinnerNumberModel(options.getAdminXPPeriod(), 1, 100, 1)); ((JSpinner.DefaultEditor) spnAdminWeeklyXPPeriod.getEditor()).getTextField().setEditable(false); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 2; gridBagConstraints.gridy = 7; gridBagConstraints.fill = java.awt.GridBagConstraints.NONE; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5); panXP.add(spnAdminWeeklyXPPeriod, gridBagConstraints); gridBagConstraints.gridx = 3; gridBagConstraints.gridy = 7; gridBagConstraints.fill = java.awt.GridBagConstraints.NONE; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5); panXP.add(new JLabel("week(s)"), gridBagConstraints); txtInstructionsXP = new JTextArea(); txtInstructionsXP.setText(resourceMap.getString("txtInstructionsXP.text")); txtInstructionsXP.setName("txtInstructions"); txtInstructionsXP.setEditable(false); txtInstructionsXP.setEditable(false); txtInstructionsXP.setLineWrap(true); txtInstructionsXP.setWrapStyleWord(true); txtInstructionsXP.setBorder(BorderFactory.createCompoundBorder( BorderFactory.createTitledBorder(resourceMap.getString("txtInstructionsXP.title")), BorderFactory.createEmptyBorder(5, 5, 5, 5))); txtInstructionsXP.setOpaque(false); txtInstructionsXP.setMinimumSize(new Dimension(550, 120)); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 8; gridBagConstraints.gridwidth = 6; gridBagConstraints.weightx = 1.0; gridBagConstraints.weighty = 0.0; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5); panXP.add(txtInstructionsXP, gridBagConstraints); String[] colNames = {"+0", "+1", "+2", "+3", "+4", "+5", "+6", "+7", "+8", "+9", "+10"}; tableXP = new JTable(SkillType.getSkillCostsArray(), colNames); tableXP.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); tableXP.setRowSelectionAllowed(false); tableXP.setColumnSelectionAllowed(false); tableXP.setCellSelectionEnabled(true); scrXP = new JScrollPane(tableXP); scrXP.setMinimumSize(new Dimension(550, 140)); scrXP.setPreferredSize(new Dimension(550, 140)); JTable rowTable = new RowNamesTable(tableXP); scrXP.setRowHeaderView(rowTable); scrXP.setCorner(JScrollPane.UPPER_LEFT_CORNER, rowTable.getTableHeader()); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 9; gridBagConstraints.weightx = 1.0; gridBagConstraints.weighty = 1.0; gridBagConstraints.gridwidth = 5; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5); panXP.add(scrXP, gridBagConstraints); tabOptions.addTab(resourceMap.getString("panXP.TabConstraints.tabTitle"), panXP); // NOI18N panSkill.setName("panSkill"); // NOI18N panSkill.setLayout(new java.awt.GridBagLayout()); JPanel skPanel; gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 0; gridBagConstraints.weightx = 1.0; gridBagConstraints.weighty = 1.0; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5); GridBagConstraints c; JSpinner spnTarget; JSpinner spnGreen; JSpinner spnReg; JSpinner spnVet; JSpinner spnElite; SkillType type; JLabel lblSkill; for (String skillName : SkillType.getSkillList()) { type = SkillType.getType(skillName); skPanel = new JPanel(); c = new java.awt.GridBagConstraints(); c.gridx = 0; c.gridy = 0; c.weightx = 1.0; c.weighty = 1.0; c.fill = java.awt.GridBagConstraints.BOTH; c.anchor = java.awt.GridBagConstraints.WEST; c.insets = new java.awt.Insets(5, 5, 5, 5); lblSkill = new JLabel(resourceMap.getString("lblSkillTarget.text")); skPanel.add(lblSkill, c); c.gridx++; spnTarget = new JSpinner(new SpinnerNumberModel(type.getTarget(), 0, 12, 1)); ((JSpinner.DefaultEditor) spnTarget.getEditor()).getTextField().setEditable(false); hashSkillTargets.put(skillName, spnTarget); skPanel.add(spnTarget, c); c.gridx++; lblSkill = new JLabel(resourceMap.getString("lblSkillGreen.text")); skPanel.add(lblSkill, c); c.gridx++; spnGreen = new JSpinner(new SpinnerNumberModel(type.getGreenLevel(), 0, 10, 1)); ((JSpinner.DefaultEditor) spnGreen.getEditor()).getTextField().setEditable(false); hashGreenSkill.put(skillName, spnGreen); skPanel.add(spnGreen, c); c.gridx++; lblSkill = new JLabel(resourceMap.getString("lblSkillRegular.text")); skPanel.add(lblSkill, c); c.gridx++; spnReg = new JSpinner(new SpinnerNumberModel(type.getRegularLevel(), 0, 10, 1)); ((JSpinner.DefaultEditor) spnReg.getEditor()).getTextField().setEditable(false); hashRegSkill.put(skillName, spnReg); skPanel.add(spnReg, c); c.gridx++; lblSkill = new JLabel(resourceMap.getString("lblSkillVeteran.text")); skPanel.add(lblSkill, c); c.gridx++; spnVet = new JSpinner(new SpinnerNumberModel(type.getVeteranLevel(), 0, 10, 1)); ((JSpinner.DefaultEditor) spnVet.getEditor()).getTextField().setEditable(false); hashVetSkill.put(skillName, spnVet); skPanel.add(spnVet, c); c.gridx++; lblSkill = new JLabel(resourceMap.getString("lblSkillElite.text")); skPanel.add(lblSkill, c); c.gridx++; spnElite = new JSpinner(new SpinnerNumberModel(type.getEliteLevel(), 0, 10, 1)); ((JSpinner.DefaultEditor) spnElite.getEditor()).getTextField().setEditable(false); hashEliteSkill.put(skillName, spnElite); skPanel.add(spnElite, c); c.gridx++; skPanel.setBorder(BorderFactory.createTitledBorder(skillName)); panSkill.add(skPanel, gridBagConstraints); gridBagConstraints.gridy++; } JScrollPane scrSkill = new JScrollPane(panSkill); scrSkill.setPreferredSize(new java.awt.Dimension(500, 400)); tabOptions.addTab(resourceMap.getString("panSkill.TabConstraints.tabTitle"), scrSkill); // NOI18N panSpecialAbilities = new JPanel(new GridBagLayout()); btnAddSPA = new JButton("Add Another Special Ability"); btnAddSPA.addActionListener(new java.awt.event.ActionListener() { @Override public void actionPerformed(java.awt.event.ActionEvent evt) { btnAddSPA(); } }); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.fill = GridBagConstraints.NONE; gridBagConstraints.anchor = GridBagConstraints.NORTHWEST; gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 0; gridBagConstraints.weightx =1.0; gridBagConstraints.weighty =0.0; panSpecialAbilities.add(btnAddSPA, gridBagConstraints); btnAddSPA.setEnabled(!getUnusedSPA().isEmpty()); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.fill = GridBagConstraints.BOTH; gridBagConstraints.anchor = GridBagConstraints.NORTHWEST; gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 1; gridBagConstraints.weightx =1.0; gridBagConstraints.weighty =1.0; for(String name : spaNames) { panSpecialAbilities.add(new SpecialAbilityPanel(tempSPA.get(name), this), gridBagConstraints); gridBagConstraints.gridy++; } JScrollPane scrSPA = new JScrollPane(panSpecialAbilities); scrSPA.setPreferredSize(new java.awt.Dimension(500, 400)); tabOptions.addTab("Special Abilities", scrSPA); // NOI18N panRandomSkill.setName("panRandomSkill"); // NOI18N panRandomSkill.setLayout(new java.awt.GridBagLayout()); JPanel panRollTable = new JPanel(new GridLayout(6, 3, 5, 0)); panRollTable.add(new JLabel("<html><b>Value</b></html>")); panRollTable.add(new JLabel("<html><b>Level</b></html>")); panRollTable.add(new JLabel("<html><b># Abils</b></html>")); panRollTable.add(new JLabel("less than 2")); JLabel lblUltraGreen = new JLabel("Ultra-Green/None"); lblUltraGreen.setToolTipText(resourceMap.getString("lblUltraGreen.toolTipText")); panRollTable.add(lblUltraGreen); panRollTable.add(new JLabel("0")); panRollTable.add(new JLabel("2-5")); panRollTable.add(new JLabel("Green")); panRollTable.add(new JLabel("0")); panRollTable.add(new JLabel("6-9")); panRollTable.add(new JLabel("Regular")); panRollTable.add(new JLabel("0")); panRollTable.add(new JLabel("10-11")); panRollTable.add(new JLabel("Veteran")); panRollTable.add(new JLabel("1")); panRollTable.add(new JLabel("12 or more")); panRollTable.add(new JLabel("Elite")); panRollTable.add(new JLabel("2")); panRollTable.setBorder(BorderFactory.createCompoundBorder( BorderFactory.createTitledBorder("2d6 + Bonus"), BorderFactory.createEmptyBorder(5, 5, 5, 5))); lblOverallRecruitBonus = new JLabel(resourceMap.getString("lblOverallRecruitBonus.text")); chkExtraRandom = new JCheckBox(resourceMap.getString("chkExtraRandom.text")); chkExtraRandom.setToolTipText(resourceMap.getString("chkExtraRandom.toolTipText")); chkExtraRandom.setSelected(rskillPrefs.randomizeSkill()); chkClanBonus = new JCheckBox(resourceMap.getString("chkClanBonus.text")); chkClanBonus.setToolTipText(resourceMap.getString("chkClanBonus.toolTipText")); chkClanBonus.setSelected(rskillPrefs.useClanBonuses()); lblProbAntiMek = new JLabel(resourceMap.getString("lblProbAntiMek.text")); spnProbAntiMek = new JSpinner(new SpinnerNumberModel(rskillPrefs.getAntiMekProb(), 0, 100, 5)); ((JSpinner.DefaultEditor) spnProbAntiMek.getEditor()).getTextField().setEditable(false); spnOverallRecruitBonus = new JSpinner(new SpinnerNumberModel(rskillPrefs.getOverallRecruitBonus(), -12, 12, 1)); ((JSpinner.DefaultEditor) spnOverallRecruitBonus.getEditor()).getTextField().setEditable(false); spnOverallRecruitBonus.setToolTipText(resourceMap.getString("spnOverallRecruitBonus.toolTipText")); spnTypeRecruitBonus = new JSpinner[Person.T_NUM]; int nrow = (int) Math.ceil(Person.T_NUM / 4.0); JPanel panTypeRecruitBonus = new JPanel(new GridLayout(nrow, 4)); JSpinner spin; JPanel panRecruit; for (int i = 0; i < Person.T_NUM; i++) { panRecruit = new JPanel(new GridBagLayout()); gridBagConstraints = new java.awt.GridBagConstraints(); spin = new JSpinner(new SpinnerNumberModel(rskillPrefs.getRecruitBonus(i), -12, 12, 1)); ((JSpinner.DefaultEditor) spin.getEditor()).getTextField().setEditable(false); spnTypeRecruitBonus[i] = spin; gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 0; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; gridBagConstraints.insets = new Insets(2, 5, 0, 0); panRecruit.add(spin, gridBagConstraints); gridBagConstraints.gridx = 1; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.weightx = 1.0; panRecruit.add(new JLabel(Person.getRoleDesc(i, false)), gridBagConstraints); panTypeRecruitBonus.add(panRecruit); } panTypeRecruitBonus.setBorder(BorderFactory.createCompoundBorder( BorderFactory.createTitledBorder(resourceMap.getString("panTypeRecruitBonus.title")), BorderFactory.createEmptyBorder(5, 5, 5, 5))); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 0; gridBagConstraints.gridwidth = 2; gridBagConstraints.fill = java.awt.GridBagConstraints.NONE; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5); panRandomSkill.add(chkExtraRandom, gridBagConstraints); JPanel panClanPheno = new JPanel(new GridLayout(2, 2)); spnProbPhenoMW = new JSpinner(new SpinnerNumberModel(options.getProbPhenoMW(), 0, 100, 5)); ((JSpinner.DefaultEditor) spnProbPhenoMW.getEditor()).getTextField().setEditable(false); JPanel panPhenoMW = new JPanel(); panPhenoMW.add(spnProbPhenoMW); panPhenoMW.add(new JLabel("Mechwarrior")); panPhenoMW.setToolTipText(resourceMap.getString("panPhenoMW.toolTipText")); panClanPheno.add(panPhenoMW); spnProbPhenoAero = new JSpinner(new SpinnerNumberModel(options.getProbPhenoAero(), 0, 100, 5)); ((JSpinner.DefaultEditor) spnProbPhenoAero.getEditor()).getTextField().setEditable(false); JPanel panPhenoAero = new JPanel(); panPhenoAero.add(spnProbPhenoAero); panPhenoAero.add(new JLabel("Aero Pilot")); panPhenoAero.setToolTipText(resourceMap.getString("panPhenoMW.toolTipText")); panClanPheno.add(panPhenoAero); spnProbPhenoBA = new JSpinner(new SpinnerNumberModel(options.getProbPhenoBA(), 0, 100, 5)); ((JSpinner.DefaultEditor) spnProbPhenoBA.getEditor()).getTextField().setEditable(false); JPanel panPhenoBA = new JPanel(); panPhenoBA.add(spnProbPhenoBA); panPhenoBA.add(new JLabel("Elemental")); panPhenoBA.setToolTipText(resourceMap.getString("panPhenoMW.toolTipText")); panClanPheno.add(panPhenoBA); spnProbPhenoVee = new JSpinner(new SpinnerNumberModel(options.getProbPhenoVee(), 0, 100, 5)); ((JSpinner.DefaultEditor) spnProbPhenoVee.getEditor()).getTextField().setEditable(false); JPanel panPhenoVee = new JPanel(); panPhenoVee.add(spnProbPhenoVee); panPhenoVee.add(new JLabel("Vehicle")); panPhenoVee.setToolTipText(resourceMap.getString("panPhenoMW.toolTipText")); panClanPheno.add(panPhenoVee); panClanPheno.setBorder(BorderFactory.createTitledBorder("Trueborn Phenotype Probabilites")); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 1; gridBagConstraints.gridwidth = 2; gridBagConstraints.fill = java.awt.GridBagConstraints.NONE; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5); panRandomSkill.add(panClanPheno, gridBagConstraints); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 2; gridBagConstraints.gridy = 0; gridBagConstraints.gridheight = 3; gridBagConstraints.weightx = 1.0; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5); panRandomSkill.add(panRollTable, gridBagConstraints); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 2; gridBagConstraints.fill = java.awt.GridBagConstraints.NONE; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5); panRandomSkill.add(spnProbAntiMek, gridBagConstraints); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 2; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5); panRandomSkill.add(lblProbAntiMek, gridBagConstraints); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 3; gridBagConstraints.fill = java.awt.GridBagConstraints.NONE; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5); panRandomSkill.add(spnOverallRecruitBonus, gridBagConstraints); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 3; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.weightx = 1.0; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5); panRandomSkill.add(lblOverallRecruitBonus, gridBagConstraints); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 4; gridBagConstraints.gridwidth = 3; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5); panRandomSkill.add(panTypeRecruitBonus, gridBagConstraints); JPanel panArtillery = new JPanel(); panArtillery.setBorder(BorderFactory.createCompoundBorder( BorderFactory.createTitledBorder("Artillery Skill"), BorderFactory.createEmptyBorder(5, 5, 5, 5))); spnArtyProb = new JSpinner(new SpinnerNumberModel(rskillPrefs.getArtilleryProb(), 0, 100, 5)); ((JSpinner.DefaultEditor) spnArtyProb.getEditor()).getTextField().setEditable(false); spnArtyProb.setToolTipText(resourceMap.getString("spnArtyProb.toolTipText")); panArtillery.add(spnArtyProb); panArtillery.add(new JLabel("Probability")); spnArtyBonus = new JSpinner(new SpinnerNumberModel(rskillPrefs.getArtilleryBonus(), -10, 10, 1)); ((JSpinner.DefaultEditor) spnArtyBonus.getEditor()).getTextField().setEditable(false); panArtillery.add(spnArtyBonus); panArtillery.add(new JLabel("Bonus")); JPanel panSecondary = new JPanel(); spnSecondProb = new JSpinner(new SpinnerNumberModel(rskillPrefs.getSecondSkillProb(), 0, 100, 5)); ((JSpinner.DefaultEditor) spnSecondProb.getEditor()).getTextField().setEditable(false); spnSecondProb.setToolTipText(resourceMap.getString("spnSecondProb.toolTipText")); panSecondary.add(spnSecondProb); panSecondary.add(new JLabel("Probability")); spnSecondBonus = new JSpinner(new SpinnerNumberModel(rskillPrefs.getSecondSkillBonus(), -10, 10, 1)); ((JSpinner.DefaultEditor) spnSecondBonus.getEditor()).getTextField().setEditable(false); panSecondary.add(spnSecondBonus); panSecondary.add(new JLabel("Bonus")); panSecondary.setBorder(BorderFactory.createCompoundBorder( BorderFactory.createTitledBorder("Secondary Skills"), BorderFactory.createEmptyBorder(5, 5, 5, 5))); JPanel panTactics = new JPanel(); spnTacticsGreen = new JSpinner(new SpinnerNumberModel(rskillPrefs.getTacticsMod(SkillType.EXP_GREEN), -10, 10, 1)); ((JSpinner.DefaultEditor) spnTacticsGreen.getEditor()).getTextField().setEditable(false); spnTacticsGreen.setToolTipText(resourceMap.getString("spnTacticsGreen.toolTipText")); spnTacticsReg = new JSpinner(new SpinnerNumberModel(rskillPrefs.getTacticsMod(SkillType.EXP_REGULAR), -10, 10, 1)); ((JSpinner.DefaultEditor) spnTacticsReg.getEditor()).getTextField().setEditable(false); spnTacticsReg.setToolTipText(resourceMap.getString("spnTacticsReg.toolTipText")); spnTacticsVet = new JSpinner(new SpinnerNumberModel(rskillPrefs.getTacticsMod(SkillType.EXP_VETERAN), -10, 10, 1)); ((JSpinner.DefaultEditor) spnTacticsVet.getEditor()).getTextField().setEditable(false); spnTacticsVet.setToolTipText(resourceMap.getString("spnTacticsVet.toolTipText")); spnTacticsElite = new JSpinner(new SpinnerNumberModel(rskillPrefs.getTacticsMod(SkillType.EXP_ELITE), -10, 10, 1)); ((JSpinner.DefaultEditor) spnTacticsElite.getEditor()).getTextField().setEditable(false); spnTacticsElite.setToolTipText(resourceMap.getString("spnTacticsElite.toolTipText")); panTactics.add(spnTacticsGreen); panTactics.add(new JLabel("Green")); panTactics.add(spnTacticsReg); panTactics.add(new JLabel("Reg")); panTactics.add(spnTacticsVet); panTactics.add(new JLabel("Vet")); panTactics.add(spnTacticsElite); panTactics.add(new JLabel("Elite")); panTactics.setBorder(BorderFactory.createCompoundBorder( BorderFactory.createTitledBorder("Tactics Skill"), BorderFactory.createEmptyBorder(5, 5, 5, 5))); JPanel panSmallArms = new JPanel(); spnCombatSA = new JSpinner(new SpinnerNumberModel(rskillPrefs.getCombatSmallArmsBonus(), -10, 10, 1)); ((JSpinner.DefaultEditor) spnCombatSA.getEditor()).getTextField().setEditable(false); spnCombatSA.setToolTipText(resourceMap.getString("spnCombatSA.toolTipText")); spnSupportSA = new JSpinner(new SpinnerNumberModel(rskillPrefs.getSupportSmallArmsBonus(), -10, 10, 1)); ((JSpinner.DefaultEditor) spnSupportSA.getEditor()).getTextField().setEditable(false); spnSupportSA.setToolTipText(resourceMap.getString("spnSupportSA.toolTipText")); panSmallArms.add(spnCombatSA); panSmallArms.add(new JLabel("Combat Personnel")); panSmallArms.add(spnSupportSA); panSmallArms.add(new JLabel("Support Personnel")); panSmallArms.setBorder(BorderFactory.createCompoundBorder( BorderFactory.createTitledBorder("Small Arms Skill"), BorderFactory.createEmptyBorder(5, 5, 5, 5))); JPanel panAbilities = new JPanel(); spnAbilGreen = new JSpinner(new SpinnerNumberModel(rskillPrefs.getSpecialAbilBonus(SkillType.EXP_GREEN), -10, 10, 1)); ((JSpinner.DefaultEditor) spnAbilGreen.getEditor()).getTextField().setEditable(false); spnAbilGreen.setToolTipText(resourceMap.getString("spnAbilGreen.toolTipText")); spnAbilReg = new JSpinner(new SpinnerNumberModel(rskillPrefs.getSpecialAbilBonus(SkillType.EXP_REGULAR), -10, 10, 1)); ((JSpinner.DefaultEditor) spnAbilReg.getEditor()).getTextField().setEditable(false); spnAbilReg.setToolTipText(resourceMap.getString("spnAbilReg.toolTipText")); spnAbilVet = new JSpinner(new SpinnerNumberModel(rskillPrefs.getSpecialAbilBonus(SkillType.EXP_VETERAN), -10, 10, 1)); ((JSpinner.DefaultEditor) spnAbilVet.getEditor()).getTextField().setEditable(false); spnAbilVet.setToolTipText(resourceMap.getString("spnAbilVet.toolTipText")); spnAbilElite = new JSpinner(new SpinnerNumberModel(rskillPrefs.getSpecialAbilBonus(SkillType.EXP_ELITE), -10, 10, 1)); ((JSpinner.DefaultEditor) spnAbilElite.getEditor()).getTextField().setEditable(false); spnAbilElite.setToolTipText(resourceMap.getString("spnAbilElite.toolTipText")); panAbilities.add(spnAbilGreen); panAbilities.add(new JLabel("Green")); panAbilities.add(spnAbilReg); panAbilities.add(new JLabel("Reg")); panAbilities.add(spnAbilVet); panAbilities.add(new JLabel("Vet")); panAbilities.add(spnAbilElite); panAbilities.add(new JLabel("Elite")); panAbilities.setBorder(BorderFactory.createCompoundBorder( BorderFactory.createTitledBorder("Special Abilities"), BorderFactory.createEmptyBorder(5, 5, 5, 5))); JPanel panOtherBonuses = new JPanel(new GridLayout(3, 2)); panOtherBonuses.add(panArtillery); panOtherBonuses.add(panSecondary); panOtherBonuses.add(panTactics); panOtherBonuses.add(panAbilities); panOtherBonuses.add(panSmallArms); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 5; gridBagConstraints.gridwidth = 3; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5); panRandomSkill.add(panOtherBonuses, gridBagConstraints); JScrollPane scrRandomSkill = new JScrollPane(panRandomSkill); scrRandomSkill.setPreferredSize(new java.awt.Dimension(500, 400)); tabOptions.addTab(resourceMap.getString("panRandomSkill.TabConstraints.tabTitle"), scrRandomSkill); // NOI18N panRank.setName("panRank"); // NOI18N panRank.setLayout(new java.awt.GridBagLayout()); lblRank.setText(resourceMap.getString("lblRank.text")); // NOI18N lblRank.setName("lblRank"); // NOI18N gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 1; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; panRank.add(lblRank, gridBagConstraints); DefaultComboBoxModel<String> rankModel = new DefaultComboBoxModel<String>(); for (int i = 0; i < Ranks.RS_NUM; i++) { rankModel.addElement(Ranks.getRankSystemName(i)); } comboRanks.setModel(rankModel); comboRanks.setSelectedIndex(campaign.getRanks().getRankSystem()); comboRanks.setName("comboRanks"); // NOI18N comboRanks.setActionCommand("fillRanks"); comboRanks.addActionListener(new java.awt.event.ActionListener() { @Override public void actionPerformed(java.awt.event.ActionEvent evt) { if (evt.getActionCommand().equals("fillRanks")) fillRankInfo(); } }); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 1; gridBagConstraints.fill = java.awt.GridBagConstraints.NONE; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; panRank.add(comboRanks, gridBagConstraints); /*btnAddRank = new JButton("Add Rank"); gridBagConstraints.gridx = 2; gridBagConstraints.gridy = 0; gridBagConstraints.fill = java.awt.GridBagConstraints.NONE; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; panRank.add(btnAddRank, gridBagConstraints); btnAddRank.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { addRank(); } }); btnDeleteRank = new JButton("Remove Rank"); gridBagConstraints.gridx = 3; gridBagConstraints.gridy = 0; gridBagConstraints.fill = java.awt.GridBagConstraints.NONE; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; panRank.add(btnDeleteRank, gridBagConstraints); btnDeleteRank.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { removeRank(); } }); btnDeleteRank.setEnabled(false);*/ ranksModel = new RankTableModel(campaign.getRanks().getRanksForModel(), rankColNames); tableRanks = new JTable(ranksModel); tableRanks.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); tableRanks.setRowSelectionAllowed(false); tableRanks.setColumnSelectionAllowed(false); tableRanks.setCellSelectionEnabled(true); tableRanks.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS); tableRanks.setIntercellSpacing(new Dimension(0, 0)); tableRanks.setShowGrid(false); TableColumn column = null; for (int i = 0; i < RankTableModel.COL_NUM; i++) { column = tableRanks.getColumnModel().getColumn(i); column.setPreferredWidth(ranksModel.getColumnWidth(i)); column.setCellRenderer(ranksModel.getRenderer()); if (i == RankTableModel.COL_PAYMULT) { column.setCellEditor(new SpinnerEditor()); } } tableRanks.getSelectionModel().addListSelectionListener( new ListSelectionListener() { @Override public void valueChanged( javax.swing.event.ListSelectionEvent evt) { tableRanksValueChanged(evt); } }); AbstractAction rankCellAction = new AbstractAction() { private static final long serialVersionUID = -7586376360964669234L; @Override public void actionPerformed(ActionEvent e) { TableCellListener tcl = (TableCellListener)e.getSource(); if (!(tcl.getOldValue().equals(tcl.getNewValue()))) { comboRanks.setActionCommand("noFillRanks"); comboRanks.setSelectedIndex(Ranks.RS_CUSTOM); comboRanks.setActionCommand("fillRanks"); } } }; @SuppressWarnings("unused") // FIXME: TableCellListener rankCellListener = new TableCellListener(tableRanks, rankCellAction); scrRanks.setViewportView(tableRanks); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 2; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.weightx = 1.0; gridBagConstraints.weighty = 1.0; gridBagConstraints.gridwidth = 2; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5); scrRanks.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); scrRanks.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED); panRank.add(scrRanks, gridBagConstraints); //scrRanks.setMinimumSize(new Dimension(500, 500)); //scrRanks.setPreferredSize(new Dimension(500, 500)); //scrRanks.setMaximumSize(new Dimension(500, 500)); JTextArea txtInstructionsRanks = new JTextArea(); txtInstructionsRanks.setText(resourceMap.getString("txtInstructionsRanks.text")); txtInstructionsRanks.setEditable(false); txtInstructionsRanks.setLineWrap(true); txtInstructionsRanks.setWrapStyleWord(true); txtInstructionsRanks.setBorder(BorderFactory.createCompoundBorder( BorderFactory.createTitledBorder(resourceMap.getString("txtInstructionsRanks.title")), BorderFactory.createEmptyBorder(5, 5, 5, 5))); txtInstructionsRanks.setOpaque(false); txtInstructionsRanks.setMinimumSize(new Dimension(250, 120)); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 0; gridBagConstraints.gridwidth = 2; gridBagConstraints.weightx = 1.0; gridBagConstraints.weighty = 0.0; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5); //txtInstructionsRanks.setMinimumSize(new Dimension(400, 400)); panRank.add(txtInstructionsRanks, gridBagConstraints); tabOptions.addTab(resourceMap.getString("panRank.TabConstraints.tabTitle"), panRank); // NOI18N panNameGen.setName("panNameGen"); // NOI18N panNameGen.setLayout(new java.awt.GridBagLayout()); useFactionForNamesBox.setText(resourceMap.getString("useFactionForNamesBox.text")); // NOI18N useFactionForNamesBox.setToolTipText(resourceMap.getString("useFactionForNamesBox.toolTipText")); // NOI18N useFactionForNamesBox.setName("useFactionForNamesBox"); // NOI18N useFactionForNamesBox.setSelected(options.useFactionForNames()); useFactionForNamesBox.addActionListener(new java.awt.event.ActionListener() { @Override public void actionPerformed(java.awt.event.ActionEvent evt) { useFactionForNamesBoxEvent(evt); } }); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 0; gridBagConstraints.gridwidth = 2; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; panNameGen.add(useFactionForNamesBox, gridBagConstraints); lblFactionNames.setText(resourceMap.getString("lblFactionNames.text")); // NOI18N lblFactionNames.setName("lblFactionNames"); // NOI18N gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 1; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; panNameGen.add(lblFactionNames, gridBagConstraints); DefaultComboBoxModel<String> factionNamesModel = new DefaultComboBoxModel<String>(); for (Iterator<String> i = campaign.getRNG().getFactions(); i.hasNext(); ) { String faction = (String) i.next(); factionNamesModel.addElement(faction); } factionNamesModel.setSelectedItem(campaign.getRNG().getChosenFaction()); comboFactionNames.setModel(factionNamesModel); comboFactionNames.setMinimumSize(new java.awt.Dimension(400, 30)); comboFactionNames.setName("comboFactionNames"); // NOI18N comboFactionNames.setPreferredSize(new java.awt.Dimension(400, 30)); comboFactionNames.setEnabled(!useFactionForNamesBox.isSelected()); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 1; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; panNameGen.add(comboFactionNames, gridBagConstraints); lblGender.setText(resourceMap.getString("lblGender.text")); // NOI18N lblGender.setName("lblGender"); // NOI18N gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 2; gridBagConstraints.insets = new Insets(10, 0, 0, 0); gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; panNameGen.add(lblGender, gridBagConstraints); sldGender.setMaximum(100); sldGender.setMinimum(0); sldGender.setMajorTickSpacing(25); sldGender.setPaintTicks(true); sldGender.setPaintLabels(true); sldGender.setValue(campaign.getRNG().getPercentFemale()); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 2; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; gridBagConstraints.insets = new Insets(10, 0, 0, 0); panNameGen.add(sldGender, gridBagConstraints); panRandomPortrait.setName("panRandomPortait"); // NOI18N panRandomPortrait.setLayout(new BorderLayout()); JPanel panUsePortrait = new JPanel(new GridLayout(nrow, 4)); chkUsePortrait = new JCheckBox[Person.T_NUM]; JCheckBox box; for (int i = 0; i < Person.T_NUM; i++) { box = new JCheckBox(Person.getRoleDesc(i, false)); box.setSelected(options.usePortraitForType(i)); panUsePortrait.add(box); chkUsePortrait[i] = box; } panRandomPortrait.add(panUsePortrait, BorderLayout.CENTER); JTextArea txtPortraitInst = new JTextArea(resourceMap.getString("txtPortraitInst.text")); txtPortraitInst.setPreferredSize(new Dimension(728, 50)); txtPortraitInst.setEditable(false); txtPortraitInst.setLineWrap(true); txtPortraitInst.setWrapStyleWord(true); txtPortraitInst.setOpaque(false); panRandomPortrait.add(txtPortraitInst, BorderLayout.PAGE_START); panRandomPortrait.setBorder(BorderFactory.createCompoundBorder( BorderFactory.createTitledBorder(resourceMap.getString("panRandomPortait.title")), BorderFactory.createEmptyBorder(5, 5, 5, 5))); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 3; gridBagConstraints.gridwidth = 2; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.insets = new Insets(10, 0, 0, 0); gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; panNameGen.add(panRandomPortrait, gridBagConstraints); tabOptions.addTab(resourceMap.getString("panNameGen.TabConstraints.tabTitle"), panNameGen); // NOI18N // Start Personnel Market panPersonnelMarket = new JPanel(); personnelMarketType = new JComboBox<String>(); personnelMarketReportRefresh = new JCheckBox("Display a report when market refreshes"); personnelMarketRandomEliteRemoval = new JTextField(); personnelMarketRandomVeteranRemoval = new JTextField(); personnelMarketRandomRegularRemoval = new JTextField(); personnelMarketRandomGreenRemoval = new JTextField(); personnelMarketRandomUltraGreenRemoval = new JTextField(); personnelMarketDylansWeight = new JSpinner(new SpinnerNumberModel(options.getPersonnelMarketDylansWeight(), 0.1, 0.8, 0.1)); personnelMarketTypeLabel = new JLabel("Market Type:"); personnelMarketRandomEliteRemovalLabel = new JLabel("Random & Dylan's Elite Removal"); personnelMarketRandomVeteranRemovalLabel = new JLabel("Random & Dylan's Veteran Removal"); personnelMarketRandomRegularRemovalLabel = new JLabel("Random & Dylan's Regular Removal"); personnelMarketRandomGreenRemovalLabel = new JLabel("Random & Dylan's Green Removal"); personnelMarketRandomUltraGreenRemovalLabel = new JLabel("Random & Dylan's Ultra-Green Removal"); personnelMarketDylansWeightLabel = new JLabel("<html>Weight for Dylan's Method to choose most" + "<br />common unit type based on your forces</html>"); personnelMarketReportRefresh.setSelected(options.getPersonnelMarketReportRefresh()); for (int i = PersonnelMarket.TYPE_RANDOM; i < PersonnelMarket.TYPE_NUM; i++) { personnelMarketType.addItem(PersonnelMarket.getTypeName(i)); } personnelMarketType.setSelectedIndex(options.getPersonnelMarketType()); personnelMarketRandomEliteRemoval.setText(Integer.toString(options.getPersonnelMarketRandomEliteRemoval())); personnelMarketRandomVeteranRemoval.setText(Integer.toString(options.getPersonnelMarketRandomVeteranRemoval())); personnelMarketRandomRegularRemoval.setText(Integer.toString(options.getPersonnelMarketRandomRegularRemoval())); personnelMarketRandomGreenRemoval.setText(Integer.toString(options.getPersonnelMarketRandomGreenRemoval())); personnelMarketRandomUltraGreenRemoval.setText(Integer.toString(options .getPersonnelMarketRandomUltraGreenRemoval())); personnelMarketRandomEliteRemoval.setEnabled(personnelMarketType.getSelectedIndex() == PersonnelMarket .TYPE_RANDOM || personnelMarketType.getSelectedIndex() == PersonnelMarket .TYPE_DYLANS); personnelMarketRandomVeteranRemoval.setEnabled(personnelMarketType.getSelectedIndex() == PersonnelMarket .TYPE_RANDOM || personnelMarketType.getSelectedIndex() == PersonnelMarket .TYPE_DYLANS); personnelMarketRandomRegularRemoval.setEnabled(personnelMarketType.getSelectedIndex() == PersonnelMarket .TYPE_RANDOM || personnelMarketType.getSelectedIndex() == PersonnelMarket .TYPE_DYLANS); personnelMarketRandomGreenRemoval.setEnabled(personnelMarketType.getSelectedIndex() == PersonnelMarket .TYPE_RANDOM || personnelMarketType.getSelectedIndex() == PersonnelMarket .TYPE_DYLANS); personnelMarketRandomUltraGreenRemoval.setEnabled(personnelMarketType.getSelectedIndex() == PersonnelMarket .TYPE_RANDOM || personnelMarketType.getSelectedIndex() == PersonnelMarket.TYPE_DYLANS); panPersonnelMarket.setName("panPersonnelMarket"); panPersonnelMarket.setLayout(new java.awt.GridBagLayout()); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 0; gridBagConstraints.gridwidth = 1; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.insets = new Insets(10, 0, 0, 0); gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; panPersonnelMarket.add(personnelMarketTypeLabel, gridBagConstraints); personnelMarketType.setSelectedIndex(options.getPersonnelMarketType()); personnelMarketType.addActionListener(new java.awt.event.ActionListener() { @Override public void actionPerformed(java.awt.event.ActionEvent evt) { personnelMarketRandomEliteRemoval.setEnabled(personnelMarketType.getSelectedIndex() == PersonnelMarket.TYPE_RANDOM || personnelMarketType.getSelectedIndex() == PersonnelMarket.TYPE_DYLANS); personnelMarketRandomVeteranRemoval.setEnabled(personnelMarketType.getSelectedIndex() == PersonnelMarket.TYPE_RANDOM || personnelMarketType.getSelectedIndex() == PersonnelMarket.TYPE_DYLANS); personnelMarketRandomRegularRemoval.setEnabled(personnelMarketType.getSelectedIndex() == PersonnelMarket.TYPE_RANDOM || personnelMarketType.getSelectedIndex() == PersonnelMarket.TYPE_DYLANS); personnelMarketRandomGreenRemoval.setEnabled(personnelMarketType.getSelectedIndex() == PersonnelMarket.TYPE_RANDOM || personnelMarketType.getSelectedIndex() == PersonnelMarket.TYPE_DYLANS); personnelMarketRandomUltraGreenRemoval.setEnabled(personnelMarketType.getSelectedIndex() == PersonnelMarket.TYPE_RANDOM || personnelMarketType.getSelectedIndex() == PersonnelMarket.TYPE_DYLANS); } }); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 0; gridBagConstraints.gridwidth = 4; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.insets = new Insets(10, 0, 0, 0); gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; panPersonnelMarket.add(personnelMarketType, gridBagConstraints); personnelMarketReportRefresh.setSelected(options.getPersonnelMarketReportRefresh()); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 1; gridBagConstraints.gridwidth = 1; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.insets = new Insets(10, 0, 0, 0); gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; panPersonnelMarket.add(personnelMarketReportRefresh, gridBagConstraints); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 2; gridBagConstraints.gridwidth = 1; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.insets = new Insets(10, 0, 0, 0); gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; panPersonnelMarket.add(personnelMarketRandomEliteRemovalLabel, gridBagConstraints); personnelMarketRandomEliteRemoval.setText(Integer.toString(options.getPersonnelMarketRandomEliteRemoval())); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 2; gridBagConstraints.gridwidth = 1; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.insets = new Insets(10, 0, 0, 0); gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; panPersonnelMarket.add(personnelMarketRandomEliteRemoval, gridBagConstraints); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 3; gridBagConstraints.gridwidth = 1; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.insets = new Insets(10, 0, 0, 0); gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; panPersonnelMarket.add(personnelMarketRandomVeteranRemovalLabel, gridBagConstraints); personnelMarketRandomVeteranRemoval.setText(Integer.toString(options.getPersonnelMarketRandomVeteranRemoval())); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 3; gridBagConstraints.gridwidth = 1; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.insets = new Insets(10, 0, 0, 0); gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; panPersonnelMarket.add(personnelMarketRandomVeteranRemoval, gridBagConstraints); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 4; gridBagConstraints.gridwidth = 1; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.insets = new Insets(10, 0, 0, 0); gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; panPersonnelMarket.add(personnelMarketRandomRegularRemovalLabel, gridBagConstraints); personnelMarketRandomRegularRemoval.setText(Integer.toString(options.getPersonnelMarketRandomRegularRemoval())); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 4; gridBagConstraints.gridwidth = 1; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.insets = new Insets(10, 0, 0, 0); gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; panPersonnelMarket.add(personnelMarketRandomRegularRemoval, gridBagConstraints); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 5; gridBagConstraints.gridwidth = 1; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.insets = new Insets(10, 0, 0, 0); gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; panPersonnelMarket.add(personnelMarketRandomGreenRemovalLabel, gridBagConstraints); personnelMarketRandomGreenRemoval.setText(Integer.toString(options.getPersonnelMarketRandomGreenRemoval())); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 5; gridBagConstraints.gridwidth = 1; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.insets = new Insets(10, 0, 0, 0); gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; panPersonnelMarket.add(personnelMarketRandomGreenRemoval, gridBagConstraints); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 6; gridBagConstraints.gridwidth = 1; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.insets = new Insets(10, 0, 0, 0); gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; panPersonnelMarket.add(personnelMarketRandomUltraGreenRemovalLabel, gridBagConstraints); personnelMarketRandomUltraGreenRemoval.setText(Integer.toString(options .getPersonnelMarketRandomUltraGreenRemoval())); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 6; gridBagConstraints.gridwidth = 1; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.insets = new Insets(10, 0, 0, 0); gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; panPersonnelMarket.add(personnelMarketRandomUltraGreenRemoval, gridBagConstraints); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 7; gridBagConstraints.gridwidth = 1; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.insets = new Insets(10, 0, 0, 0); gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; panPersonnelMarket.add(personnelMarketDylansWeightLabel, gridBagConstraints); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 7; gridBagConstraints.gridwidth = 1; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.insets = new Insets(10, 0, 0, 0); gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; panPersonnelMarket.add(personnelMarketDylansWeight, gridBagConstraints); tabOptions.addTab(resourceMap.getString("panPersonnelMarket.TabConstraints.tabTitle"), panPersonnelMarket); // NOI18N // End Personnel Market // Start Against the Bot panAtB = new JPanel(); chkUseAtB = new JCheckBox(); cbSkillLevel = new JComboBox<String>(); chkUseShareSystem = new JCheckBox(); chkSharesExcludeLargeCraft = new JCheckBox(); chkSharesForAll = new JCheckBox(); chkRetirementRolls = new JCheckBox(); chkTrackUnitFatigue = new JCheckBox(); chkCustomRetirementMods = new JCheckBox(); chkTrackOriginalUnit = new JCheckBox(); chkLimitLanceWeight = new JCheckBox(); chkLimitLanceNumUnits = new JCheckBox(); chkUseLeadership = new JCheckBox(); chkUseStrategy = new JCheckBox(); spnBaseStrategyDeployment = new JSpinner(); spnAdditionalStrategyDeployment = new JSpinner(); chkAdjustPaymentForStrategy = new JCheckBox(); chkUseAero = new JCheckBox(); chkUseVehicles = new JCheckBox(); chkClanVehicles = new JCheckBox(); chkDoubleVehicles = new JCheckBox(); chkAdjustPlayerVehicles = new JCheckBox(); spnOpforLanceTypeMechs = new JSpinner(); spnOpforLanceTypeMixed = new JSpinner(); spnOpforLanceTypeVehicles = new JSpinner(); chkOpforUsesVTOLs = new JCheckBox(); chkUseDropShips = new JCheckBox(); availableRats = new JList<String>(); chosenRats = new JList<String>(); btnAddRat = new JButton(); btnRemoveRat = new JButton(); btnMoveRatUp = new JButton(); btnMoveRatDown = new JButton(); chkIgnoreRatEra = new JCheckBox(); spnSearchRadius = new JSpinner(); spnIntensity = new JSpinner(); chkVariableContractLength = new JCheckBox(); chkMercSizeLimited = new JCheckBox(); chkRestrictPartsByMission = new JCheckBox(); chkRegionalMechVariations = new JCheckBox(); chkUseWeatherConditions = new JCheckBox(); chkUseLightConditions = new JCheckBox(); chkUsePlanetaryConditions = new JCheckBox(); chkUseAtBCapture = new JCheckBox(); spnStartGameDelay = new JSpinner(); chkAeroRecruitsHaveUnits = new JCheckBox(); chkInstantUnitMarketDelivery = new JCheckBox(); chkContractMarketReportRefresh = new JCheckBox(); chkUnitMarketReportRefresh = new JCheckBox(); panAtB.setName("panAtB"); panAtB.setLayout(new java.awt.GridBagLayout()); JPanel panSubAtBAdmin = new JPanel(new GridBagLayout()); JPanel panSubAtBRat = new JPanel(new GridBagLayout()); JPanel panSubAtBContract = new JPanel(new GridBagLayout()); JPanel panSubAtBScenario = new JPanel(new GridBagLayout()); panSubAtBAdmin.setBorder(BorderFactory.createTitledBorder("Unit Administration")); panSubAtBRat.setBorder(BorderFactory.createTitledBorder("Random Assignment Tables")); panSubAtBContract.setBorder(BorderFactory.createTitledBorder("Contract Operations")); panSubAtBScenario.setBorder(BorderFactory.createTitledBorder("Scenarios")); chkUseAtB.setText(resourceMap.getString("chkUseAtB.text")); chkUseAtB.setToolTipText(resourceMap.getString("chkUseAtB.toolTipText")); chkUseAtB.setSelected(options.getUseAtB()); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 0; gridBagConstraints.gridwidth = 2; gridBagConstraints.fill = java.awt.GridBagConstraints.NONE; gridBagConstraints.insets = new Insets(10, 10, 10, 10); gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; panAtB.add(chkUseAtB, gridBagConstraints); chkUseAtB.addActionListener(ev -> { enableAtBComponents(panAtB, chkUseAtB.isSelected()); enableAtBComponents(panSubAtBRat, chkUseAtB.isSelected() && btnStaticRATs.isSelected()); }); JLabel lblSkillLevel = new JLabel(resourceMap.getString("lblSkillLevel.text")); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 1; gridBagConstraints.gridwidth = 1; panAtB.add(lblSkillLevel, gridBagConstraints); cbSkillLevel.addItem("Ultra-green"); cbSkillLevel.addItem("Green"); cbSkillLevel.addItem("Regular"); cbSkillLevel.addItem("Veteran"); cbSkillLevel.addItem("Elite"); cbSkillLevel.setSelectedIndex(options.getSkillLevel()); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 1; panAtB.add(cbSkillLevel, gridBagConstraints); btnDynamicRATs = new JRadioButton(resourceMap.getString("btnDynamicRATs.text")); btnDynamicRATs.setToolTipText(resourceMap.getString("btnDynamicRATs.tooltip")); btnDynamicRATs.setSelected(!options.useStaticRATs()); gridBagConstraints.gridx = 2; gridBagConstraints.gridy = 0; panAtB.add(btnDynamicRATs, gridBagConstraints); btnStaticRATs = new JRadioButton(resourceMap.getString("btnStaticRATs.text")); btnStaticRATs.setToolTipText(resourceMap.getString("btnStaticRATs.tooltip")); btnStaticRATs.setSelected(options.useStaticRATs()); gridBagConstraints.gridx = 2; gridBagConstraints.gridy = 1; panAtB.add(btnStaticRATs, gridBagConstraints); btnStaticRATs.addItemListener(ev -> enableAtBComponents(panSubAtBRat, btnStaticRATs.isSelected())); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 2; gridBagConstraints.gridwidth = 2; panAtB.add(panSubAtBAdmin, gridBagConstraints); gridBagConstraints.gridx = 2; gridBagConstraints.gridy = 2; panAtB.add(panSubAtBRat, gridBagConstraints); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 3; panAtB.add(panSubAtBContract, gridBagConstraints); gridBagConstraints.gridx = 2; gridBagConstraints.gridy = 3; panAtB.add(panSubAtBScenario, gridBagConstraints); chkUseShareSystem.setText(resourceMap.getString("chkUseShareSystem.text")); chkUseShareSystem.setToolTipText(resourceMap.getString("chkUseShareSystem.toolTipText")); chkUseShareSystem.setSelected(options.getUseShareSystem()); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 0; gridBagConstraints.gridwidth = 1; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.insets = new Insets(5, 5, 5, 5); gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; panSubAtBAdmin.add(chkUseShareSystem, gridBagConstraints); chkSharesExcludeLargeCraft.setText(resourceMap.getString("chkSharesExcludeLargeCraft.text")); chkSharesExcludeLargeCraft.setToolTipText(resourceMap.getString("chkSharesExcludeLargeCraft.toolTipText")); chkSharesExcludeLargeCraft.setSelected(options.getSharesExcludeLargeCraft()); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 1; gridBagConstraints.gridwidth = 1; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.insets = new Insets(5, 5, 5, 5); gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; panSubAtBAdmin.add(chkSharesExcludeLargeCraft, gridBagConstraints); chkSharesForAll.setText(resourceMap.getString("chkSharesForAll.text")); chkSharesForAll.setToolTipText(resourceMap.getString("chkSharesForAll.toolTipText")); chkSharesForAll.setSelected(options.getSharesForAll()); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 2; gridBagConstraints.gridwidth = 1; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.insets = new Insets(5, 5, 5, 5); gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; panSubAtBAdmin.add(chkSharesForAll, gridBagConstraints); chkAeroRecruitsHaveUnits.setText(resourceMap.getString("chkAeroRecruitsHaveUnits.text")); chkAeroRecruitsHaveUnits.setToolTipText(resourceMap.getString("chkAeroRecruitsHaveUnits.toolTipText")); chkAeroRecruitsHaveUnits.setSelected(options.getAeroRecruitsHaveUnits()); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 3; panSubAtBAdmin.add(chkAeroRecruitsHaveUnits, gridBagConstraints); chkRetirementRolls.setText(resourceMap.getString("chkRetirementRolls.text")); chkRetirementRolls.setToolTipText(resourceMap.getString("chkRetirementRolls.toolTipText")); chkRetirementRolls.setSelected(options.doRetirementRolls()); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 4; panSubAtBAdmin.add(chkRetirementRolls, gridBagConstraints); chkCustomRetirementMods.setText(resourceMap.getString("chkCustomRetirementMods.text")); chkCustomRetirementMods.setToolTipText(resourceMap.getString("chkCustomRetirementMods.toolTipText")); chkCustomRetirementMods.setSelected(options.getCustomRetirementMods()); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 5; panSubAtBAdmin.add(chkCustomRetirementMods, gridBagConstraints); chkTrackUnitFatigue.setText(resourceMap.getString("chkTrackUnitFatigue.text")); chkTrackUnitFatigue.setToolTipText(resourceMap.getString("chkTrackUnitFatigue.toolTipText")); chkTrackUnitFatigue.setSelected(options.getTrackUnitFatigue()); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 6; panSubAtBAdmin.add(chkTrackUnitFatigue, gridBagConstraints); chkUseLeadership.setText(resourceMap.getString("chkUseLeadership.text")); chkUseLeadership.setToolTipText(resourceMap.getString("chkUseLeadership.toolTipText")); chkUseLeadership.setSelected(options.getUseLeadership()); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 7; panSubAtBAdmin.add(chkUseLeadership, gridBagConstraints); chkTrackOriginalUnit.setText(resourceMap.getString("chkTrackOriginalUnit.text")); chkTrackOriginalUnit.setToolTipText(resourceMap.getString("chkTrackOriginalUnit.toolTipText")); chkTrackOriginalUnit.setSelected(options.getTrackOriginalUnit()); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 8; panSubAtBAdmin.add(chkTrackOriginalUnit, gridBagConstraints); chkUseAero.setText(resourceMap.getString("chkUseAero.text")); chkUseAero.setToolTipText(resourceMap.getString("chkUseAero.toolTipText")); chkUseAero.setSelected(options.getUseAero()); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 9; panSubAtBAdmin.add(chkUseAero, gridBagConstraints); chkUseVehicles.setText(resourceMap.getString("chkUseVehicles.text")); chkUseVehicles.setToolTipText(resourceMap.getString("chkUseVehicles.toolTipText")); chkUseVehicles.setSelected(options.getUseVehicles()); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 10; panSubAtBAdmin.add(chkUseVehicles, gridBagConstraints); chkClanVehicles.setText(resourceMap.getString("chkClanVehicles.text")); chkClanVehicles.setToolTipText(resourceMap.getString("chkClanVehicles.toolTipText")); chkClanVehicles.setSelected(options.getUseVehicles()); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 11; panSubAtBAdmin.add(chkClanVehicles, gridBagConstraints); chkInstantUnitMarketDelivery.setText(resourceMap.getString("chkInstantUnitMarketDelivery.text")); chkInstantUnitMarketDelivery.setToolTipText(resourceMap.getString("chkInstantUnitMarketDelivery.toolTipText")); chkInstantUnitMarketDelivery.setSelected(options.getInstantUnitMarketDelivery()); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 12; panSubAtBAdmin.add(chkInstantUnitMarketDelivery, gridBagConstraints); chkContractMarketReportRefresh.setText(resourceMap.getString("chkContractMarketReportRefresh.text")); chkContractMarketReportRefresh.setSelected(options.getContractMarketReportRefresh()); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 13; panSubAtBAdmin.add(chkContractMarketReportRefresh, gridBagConstraints); chkUnitMarketReportRefresh.setText(resourceMap.getString("chkUnitMarketReportRefresh.text")); chkUnitMarketReportRefresh.setSelected(options.getUnitMarketReportRefresh()); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 14; panSubAtBAdmin.add(chkUnitMarketReportRefresh, gridBagConstraints); ButtonGroup group = new ButtonGroup(); group.add(btnDynamicRATs); group.add(btnStaticRATs); chosenRatModel = new DefaultListModel<String>(); for (String rat : options.getRATs()) { List<Integer> eras = RATManager.getAllRATCollections().get(rat); if (eras != null) { StringBuilder displayName = new StringBuilder(rat); if (eras.size() > 0) { displayName.append(" (").append(eras.get(0)); if (eras.size() > 1) { displayName.append("-").append(eras.get(eras.size() - 1)); } displayName.append(")"); } chosenRatModel.addElement(displayName.toString()); } } chosenRats.setModel(chosenRatModel); chosenRats.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); chosenRats.addListSelectionListener(new ListSelectionListener() { @Override public void valueChanged(ListSelectionEvent arg0) { btnRemoveRat.setEnabled(chosenRats.getSelectedIndex() >= 0); btnMoveRatUp.setEnabled(chosenRats.getSelectedIndex() > 0); btnMoveRatDown.setEnabled(chosenRatModel.size() > chosenRats.getSelectedIndex() + 1); } }); availableRatModel = new DefaultListModel<String>(); for (String rat : RATManager.getAllRATCollections().keySet()) { List<Integer> eras = RATManager.getAllRATCollections().get(rat); if (eras != null) { StringBuilder displayName = new StringBuilder(rat); if (eras.size() > 0) { displayName.append(" (").append(eras.get(0)); if (eras.size() > 1) { displayName.append("-").append(eras.get(eras.size() - 1)); } displayName.append(")"); } if (!chosenRatModel.contains(displayName.toString())) { availableRatModel.addElement(displayName.toString()); } } } availableRats.setModel(availableRatModel); availableRats.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); availableRats.addListSelectionListener(new ListSelectionListener() { @Override public void valueChanged(ListSelectionEvent arg0) { btnAddRat.setEnabled(availableRats.getSelectedIndex() >= 0); } }); JTextArea txtRatInstructions = new JTextArea(); txtRatInstructions.setEditable(false); txtRatInstructions.setWrapStyleWord(true); txtRatInstructions.setLineWrap(true); txtRatInstructions.setText(resourceMap.getString("txtRatInstructions.text")); gridBagConstraints = new GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 2; gridBagConstraints.gridwidth = 3; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.insets = new Insets(5, 5, 5, 5); gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; panSubAtBRat.add(txtRatInstructions, gridBagConstraints); JLabel lblChosenRats = new JLabel(resourceMap.getString("lblChosenRats.text")); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 3; gridBagConstraints.gridwidth = 1; panSubAtBRat.add(lblChosenRats, gridBagConstraints); JLabel lblAvailableRats = new JLabel(resourceMap.getString("lblAvailableRats.text")); gridBagConstraints.gridx = 2; gridBagConstraints.gridy = 3; panSubAtBRat.add(lblAvailableRats, gridBagConstraints); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 4; panSubAtBRat.add(chosenRats, gridBagConstraints); gridBagConstraints.gridx = 2; gridBagConstraints.gridy = 4; panSubAtBRat.add(availableRats, gridBagConstraints); JPanel panRatButtons = new JPanel(); panRatButtons.setLayout(new javax.swing.BoxLayout(panRatButtons, javax.swing.BoxLayout.Y_AXIS)); btnAddRat.setText(resourceMap.getString("btnAddRat.text")); btnAddRat.setToolTipText(resourceMap.getString("btnAddRat.toolTipText")); btnAddRat.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent arg0) { int selectedIndex = availableRats.getSelectedIndex(); chosenRatModel.addElement(availableRats.getSelectedValue()); availableRatModel.removeElementAt(availableRats.getSelectedIndex()); availableRats.setSelectedIndex(Math.min(selectedIndex, availableRatModel.size() - 1)); } }); btnAddRat.setEnabled(false); panRatButtons.add(btnAddRat); btnRemoveRat.setText(resourceMap.getString("btnRemoveRat.text")); btnRemoveRat.setToolTipText(resourceMap.getString("btnRemoveRat.toolTipText")); btnRemoveRat.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent arg0) { int selectedIndex = chosenRats.getSelectedIndex(); availableRatModel.addElement(chosenRats.getSelectedValue()); chosenRatModel.removeElementAt(chosenRats.getSelectedIndex()); chosenRats.setSelectedIndex(Math.min(selectedIndex, chosenRatModel.size() - 1)); } }); btnRemoveRat.setEnabled(false); panRatButtons.add(btnRemoveRat); btnMoveRatUp.setText(resourceMap.getString("btnMoveRatUp.text")); btnMoveRatUp.setToolTipText(resourceMap.getString("btnMoveRatUp.toolTipText")); btnMoveRatUp.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent arg0) { int selectedIndex = chosenRats.getSelectedIndex(); String tmp = chosenRatModel.getElementAt(selectedIndex); chosenRatModel.setElementAt(chosenRatModel.getElementAt(selectedIndex - 1), selectedIndex); chosenRatModel.setElementAt(tmp, selectedIndex - 1); chosenRats.setSelectedIndex(selectedIndex - 1); } }); btnMoveRatUp.setEnabled(false); panRatButtons.add(btnMoveRatUp); btnMoveRatDown.setText(resourceMap.getString("btnMoveRatDown.text")); btnMoveRatDown.setToolTipText(resourceMap.getString("btnMoveRatDown.toolTipText")); btnMoveRatDown.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent arg0) { int selectedIndex = chosenRats.getSelectedIndex(); String tmp = chosenRatModel.getElementAt(selectedIndex); chosenRatModel.setElementAt(chosenRatModel.getElementAt(selectedIndex + 1), selectedIndex); chosenRatModel.setElementAt(tmp, selectedIndex + 1); chosenRats.setSelectedIndex(selectedIndex + 1); } }); btnMoveRatDown.setEnabled(false); panRatButtons.add(btnMoveRatDown); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 4; panSubAtBRat.add(panRatButtons, gridBagConstraints); chkIgnoreRatEra.setText(resourceMap.getString("chkIgnoreRatEra.text")); chkIgnoreRatEra.setToolTipText(resourceMap.getString("chkIgnoreRatEra.toolTipText")); chkIgnoreRatEra.setSelected(options.canIgnoreRatEra()); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 5; panSubAtBRat.add(chkIgnoreRatEra, gridBagConstraints); JLabel lblSearchRadius = new JLabel(resourceMap.getString("lblSearchRadius.text")); gridBagConstraints = new GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 0; gridBagConstraints.fill = java.awt.GridBagConstraints.NONE; gridBagConstraints.insets = new Insets(5, 5, 5, 5); gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; panSubAtBContract.add(lblSearchRadius, gridBagConstraints); spnSearchRadius.setModel(new SpinnerNumberModel(options.getSearchRadius(), 100, 2500, 100)); spnSearchRadius.setToolTipText(resourceMap.getString("spnSearchRadius.toolTipText")); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 0; panSubAtBContract.add(spnSearchRadius, gridBagConstraints); chkVariableContractLength.setText(resourceMap.getString("chkVariableContractLength.text")); chkVariableContractLength.setSelected(options.getVariableContractLength()); chkVariableContractLength.setToolTipText(resourceMap.getString("chkVariableContractLength.toolTipText")); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 1; gridBagConstraints.gridwidth = 2; panSubAtBContract.add(chkVariableContractLength, gridBagConstraints); chkMercSizeLimited.setText(resourceMap.getString("chkMercSizeLimited.text")); chkMercSizeLimited.setSelected(options.isMercSizeLimited()); chkMercSizeLimited.setToolTipText(resourceMap.getString("chkMercSizeLimited.toolTipText")); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 2; gridBagConstraints.gridwidth = 2; panSubAtBContract.add(chkMercSizeLimited, gridBagConstraints); chkRestrictPartsByMission.setText(resourceMap.getString("chkRestrictPartsByMission.text")); chkRestrictPartsByMission.setSelected(options.getRestrictPartsByMission()); chkRestrictPartsByMission.setToolTipText(resourceMap.getString("chkRestrictPartsByMission.toolTipText")); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 3; gridBagConstraints.gridwidth = 2; panSubAtBContract.add(chkRestrictPartsByMission, gridBagConstraints); chkLimitLanceWeight.setText(resourceMap.getString("chkLimitLanceWeight.text")); chkLimitLanceWeight.setSelected(options.getLimitLanceWeight()); chkLimitLanceWeight.setToolTipText(resourceMap.getString("chkLimitLanceWeight.toolTipText")); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 4; gridBagConstraints.gridwidth = 2; panSubAtBContract.add(chkLimitLanceWeight, gridBagConstraints); chkLimitLanceNumUnits.setText(resourceMap.getString("chkLimitLanceNumUnits.text")); chkLimitLanceNumUnits.setSelected(options.getLimitLanceNumUnits()); chkLimitLanceNumUnits.setToolTipText(resourceMap.getString("chkLimitLanceNumUnits.toolTipText")); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 5; gridBagConstraints.gridwidth = 2; panSubAtBContract.add(chkLimitLanceNumUnits, gridBagConstraints); JLabel lblLanceStructure = new JLabel(resourceMap.getString("lblLanceStructure.text")); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 6; gridBagConstraints.gridwidth = 1; panSubAtBContract.add(lblLanceStructure, gridBagConstraints); chkUseStrategy.setText(resourceMap.getString("chkUseStrategy.text")); chkUseStrategy.setSelected(options.getUseStrategy()); chkUseStrategy.setToolTipText(resourceMap.getString("chkUseStrategy.toolTipText")); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 7; gridBagConstraints.gridwidth = 2; panSubAtBContract.add(chkUseStrategy, gridBagConstraints); JLabel lblBaseStrategyDeployment = new JLabel(resourceMap.getString("lblBaseStrategyDeployment.text")); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 8; gridBagConstraints.gridwidth = 1; panSubAtBContract.add(lblBaseStrategyDeployment, gridBagConstraints); spnBaseStrategyDeployment.setModel(new SpinnerNumberModel(options.getBaseStrategyDeployment(), 0, 10, 1)); spnBaseStrategyDeployment.setToolTipText(resourceMap.getString("spnBaseStrategyDeployment.toolTipText")); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 8; panSubAtBContract.add(spnBaseStrategyDeployment, gridBagConstraints); JLabel lblAdditionalStrategyDeployment = new JLabel(resourceMap.getString("lblAdditionalStrategyDeployment.text")); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 9; gridBagConstraints.gridwidth = 1; panSubAtBContract.add(lblAdditionalStrategyDeployment, gridBagConstraints); spnAdditionalStrategyDeployment.setModel(new SpinnerNumberModel(options.getAdditionalStrategyDeployment(), 0, 10, 1)); spnAdditionalStrategyDeployment.setToolTipText(resourceMap.getString("spnAdditionalStrategyDeployment.toolTipText")); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 9; panSubAtBContract.add(spnAdditionalStrategyDeployment, gridBagConstraints); chkAdjustPaymentForStrategy.setText(resourceMap.getString("chkAdjustPaymentForStrategy.text")); chkAdjustPaymentForStrategy.setSelected(options.getAdjustPaymentForStrategy()); chkAdjustPaymentForStrategy.setToolTipText(resourceMap.getString("chkAdjustPaymentForStrategy.toolTipText")); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 10; gridBagConstraints.gridwidth = 2; panSubAtBContract.add(chkAdjustPaymentForStrategy, gridBagConstraints); JLabel lblIntensity = new JLabel(resourceMap.getString("lblIntensity.text")); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 11; panSubAtBContract.add(lblIntensity, gridBagConstraints); spnIntensity.setModel(new SpinnerNumberModel(options.getIntensity(), 0.1, 5.0, 0.1)); spnIntensity.setToolTipText(resourceMap.getString("spnIntensity.toolTipText")); spnIntensity.setValue(options.getIntensity()); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 11; panSubAtBContract.add(spnIntensity, gridBagConstraints); spnIntensity.addChangeListener(new ChangeListener() { @Override public void stateChanged(ChangeEvent arg0) { updateBattleChances(); } }); JLabel lblBattleFrequency = new JLabel(resourceMap.getString("lblBattleFrequency.text")); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 12; gridBagConstraints.gridwidth = 2; panSubAtBContract.add(lblBattleFrequency, gridBagConstraints); JLabel lblFightChance = new JLabel(resourceMap.getString("lblFightChance.text")); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 13; gridBagConstraints.gridwidth = 1; panSubAtBContract.add(lblFightChance, gridBagConstraints); lblFightPct = new JLabel(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 13; panSubAtBContract.add(lblFightPct, gridBagConstraints); JLabel lblDefendChance = new JLabel(resourceMap.getString("lblDefendChance.text")); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 14; gridBagConstraints.gridwidth = 1; panSubAtBContract.add(lblDefendChance, gridBagConstraints); lblDefendPct = new JLabel(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 14; panSubAtBContract.add(lblDefendPct, gridBagConstraints); JLabel lblScoutChance = new JLabel(resourceMap.getString("lblScoutChance.text")); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 15; gridBagConstraints.gridwidth = 1; panSubAtBContract.add(lblScoutChance, gridBagConstraints); lblScoutPct = new JLabel(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 15; panSubAtBContract.add(lblScoutPct, gridBagConstraints); JLabel lblTrainingChance = new JLabel(resourceMap.getString("lblTrainingChance.text")); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 16; gridBagConstraints.gridwidth = 1; panSubAtBContract.add(lblTrainingChance, gridBagConstraints); lblTrainingPct = new JLabel(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 16; panSubAtBContract.add(lblTrainingPct, gridBagConstraints); updateBattleChances(); chkDoubleVehicles.setText(resourceMap.getString("chkDoubleVehicles.text")); chkDoubleVehicles.setToolTipText(resourceMap.getString("chkDoubleVehicles.toolTipText")); chkDoubleVehicles.setSelected(options.getDoubleVehicles()); gridBagConstraints = new GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 0; gridBagConstraints.gridwidth = 2; gridBagConstraints.fill = GridBagConstraints.NONE; gridBagConstraints.insets = new Insets(5, 5, 5, 5); gridBagConstraints.anchor = GridBagConstraints.NORTHWEST; panSubAtBScenario.add(chkDoubleVehicles, gridBagConstraints); JLabel lblOpforLanceType = new JLabel(resourceMap.getString("lblOpforLanceType.text")); lblOpforLanceType.setToolTipText(resourceMap.getString("lblOpforLanceType.toolTipText")); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 1; gridBagConstraints.gridwidth = 2; gridBagConstraints.fill = GridBagConstraints.NONE; gridBagConstraints.insets = new Insets(5, 5, 5, 5); gridBagConstraints.anchor = GridBagConstraints.NORTHWEST; panSubAtBScenario.add(lblOpforLanceType, gridBagConstraints); spnOpforLanceTypeMechs.setModel(new SpinnerNumberModel(options.getOpforLanceTypeMechs(), 0, 10, 1)); spnOpforLanceTypeMechs.setToolTipText(resourceMap.getString("lblOpforLanceType.toolTipText")); spnOpforLanceTypeMixed.setModel(new SpinnerNumberModel(options.getOpforLanceTypeMixed(), 0, 10, 1)); spnOpforLanceTypeMixed.setToolTipText(resourceMap.getString("lblOpforLanceType.toolTipText")); spnOpforLanceTypeVehicles.setModel(new SpinnerNumberModel(options.getOpforLanceTypeVehicles(), 0, 10, 1)); spnOpforLanceTypeVehicles.setToolTipText(resourceMap.getString("lblOpforLanceType.toolTipText")); JPanel panOpforLanceType = new JPanel(); panOpforLanceType.add(new JLabel(resourceMap.getString("lblOpforLanceTypeMek.text"))); panOpforLanceType.add(spnOpforLanceTypeMechs); panOpforLanceType.add(new JLabel(resourceMap.getString("lblOpforLanceTypeMixed.text"))); panOpforLanceType.add(spnOpforLanceTypeMixed); panOpforLanceType.add(new JLabel(resourceMap.getString("lblOpforLanceTypeVehicle.text"))); panOpforLanceType.add(spnOpforLanceTypeVehicles); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 2; gridBagConstraints.gridwidth = 2; gridBagConstraints.fill = GridBagConstraints.NONE; gridBagConstraints.insets = new Insets(5, 5, 5, 5); gridBagConstraints.anchor = GridBagConstraints.NORTHWEST; panSubAtBScenario.add(panOpforLanceType, gridBagConstraints); chkOpforUsesVTOLs.setText(resourceMap.getString("chkOpforUsesVTOLs.text")); chkOpforUsesVTOLs.setToolTipText(resourceMap.getString("chkOpforUsesVTOLs.toolTipText")); chkOpforUsesVTOLs.setSelected(options.getOpforUsesVTOLs()); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 3; gridBagConstraints.gridwidth = 2; gridBagConstraints.fill = GridBagConstraints.NONE; gridBagConstraints.insets = new Insets(5, 5, 5, 5); gridBagConstraints.anchor = GridBagConstraints.NORTHWEST; panSubAtBScenario.add(chkOpforUsesVTOLs, gridBagConstraints); chkAdjustPlayerVehicles.setText(resourceMap.getString("chkAdjustPlayerVehicles.text")); chkAdjustPlayerVehicles.setToolTipText(resourceMap.getString("chkAdjustPlayerVehicles.toolTipText")); chkAdjustPlayerVehicles.setSelected(options.getAdjustPlayerVehicles()); gridBagConstraints = new GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 4; gridBagConstraints.gridwidth = 2; gridBagConstraints.fill = GridBagConstraints.NONE; gridBagConstraints.insets = new Insets(5, 5, 5, 5); gridBagConstraints.anchor = GridBagConstraints.NORTHWEST; panSubAtBScenario.add(chkAdjustPlayerVehicles, gridBagConstraints); chkRegionalMechVariations.setText(resourceMap.getString("chkRegionalMechVariations.text")); chkRegionalMechVariations.setToolTipText(resourceMap.getString("chkRegionalMechVariations.toolTipText")); chkRegionalMechVariations.setSelected(options.getRegionalMechVariations()); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 5; gridBagConstraints.gridwidth = 2; gridBagConstraints.fill = GridBagConstraints.NONE; gridBagConstraints.insets = new Insets(5, 5, 5, 5); gridBagConstraints.anchor = GridBagConstraints.NORTHWEST; panSubAtBScenario.add(chkRegionalMechVariations, gridBagConstraints); chkUseDropShips.setText(resourceMap.getString("chkUseDropShips.text")); chkUseDropShips.setToolTipText(resourceMap.getString("chkUseDropShips.toolTipText")); chkUseDropShips.setSelected(options.getUseDropShips()); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 6; gridBagConstraints.gridwidth = 2; gridBagConstraints.fill = GridBagConstraints.NONE; gridBagConstraints.insets = new Insets(5, 5, 5, 5); gridBagConstraints.anchor = GridBagConstraints.NORTHWEST; panSubAtBScenario.add(chkUseDropShips, gridBagConstraints); chkUseWeatherConditions.setText(resourceMap.getString("chkUseWeatherConditions.text")); chkUseWeatherConditions.setToolTipText(resourceMap.getString("chkUseWeatherConditions.toolTipText")); chkUseWeatherConditions.setSelected(options.getUseWeatherConditions()); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 7; gridBagConstraints.gridwidth = 2; gridBagConstraints.fill = GridBagConstraints.NONE; gridBagConstraints.insets = new Insets(5, 5, 5, 5); gridBagConstraints.anchor = GridBagConstraints.NORTHWEST; panSubAtBScenario.add(chkUseWeatherConditions, gridBagConstraints); chkUseLightConditions.setText(resourceMap.getString("chkUseLightConditions.text")); chkUseLightConditions.setToolTipText(resourceMap.getString("chkUseLightConditions.toolTipText")); chkUseLightConditions.setSelected(options.getUseLightConditions()); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 8; gridBagConstraints.gridwidth = 2; gridBagConstraints.fill = GridBagConstraints.NONE; gridBagConstraints.insets = new Insets(5, 5, 5, 5); gridBagConstraints.anchor = GridBagConstraints.NORTHWEST; panSubAtBScenario.add(chkUseLightConditions, gridBagConstraints); chkUsePlanetaryConditions.setText(resourceMap.getString("chkUsePlanetaryConditions.text")); chkUsePlanetaryConditions.setToolTipText(resourceMap.getString("chkUsePlanetaryConditions.toolTipText")); chkUsePlanetaryConditions.setSelected(options.getUsePlanetaryConditions()); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 9; gridBagConstraints.gridwidth = 2; gridBagConstraints.fill = GridBagConstraints.NONE; gridBagConstraints.insets = new Insets(5, 5, 5, 5); gridBagConstraints.anchor = GridBagConstraints.NORTHWEST; panSubAtBScenario.add(chkUsePlanetaryConditions, gridBagConstraints); chkUseAtBCapture.setText(resourceMap.getString("chkUseAtBCapture.text")); chkUseAtBCapture.setToolTipText(resourceMap.getString("chkUseAtBCapture.toolTipText")); chkUseAtBCapture.setSelected(options.getUseAtBCapture()); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 10; gridBagConstraints.gridwidth = 2; gridBagConstraints.fill = GridBagConstraints.NONE; gridBagConstraints.insets = new Insets(5, 5, 5, 5); gridBagConstraints.anchor = GridBagConstraints.NORTHWEST; panSubAtBScenario.add(chkUseAtBCapture, gridBagConstraints); JTextArea txtStartGameDelay = new JTextArea(); txtStartGameDelay.setText(resourceMap.getString("txtStartGameDelay.text")); txtStartGameDelay.setName("txtStartGameDelay"); txtStartGameDelay.setEditable(false); txtStartGameDelay.setLineWrap(true); txtStartGameDelay.setWrapStyleWord(true); txtStartGameDelay.setOpaque(false); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 11; gridBagConstraints.gridwidth = 2; gridBagConstraints.fill = GridBagConstraints.BOTH; gridBagConstraints.insets = new Insets(5, 5, 5, 5); gridBagConstraints.anchor = GridBagConstraints.NORTHWEST; panSubAtBScenario.add(txtStartGameDelay, gridBagConstraints); JLabel lblStartGameDelay = new JLabel(resourceMap.getString("spnStartGameDelay.text")); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 12; gridBagConstraints.gridwidth = 1; gridBagConstraints.fill = GridBagConstraints.NONE; gridBagConstraints.insets = new Insets(5, 5, 5, 5); gridBagConstraints.anchor = GridBagConstraints.NORTHWEST; panSubAtBScenario.add(lblStartGameDelay, gridBagConstraints); spnStartGameDelay.setModel(new SpinnerNumberModel(options.getStartGameDelay(), 0, 1500, 25)); spnStartGameDelay.setToolTipText(resourceMap.getString("spnStartGameDelay.toolTipText")); spnStartGameDelay.setValue(options.getStartGameDelay()); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 13; gridBagConstraints.gridwidth = 1; gridBagConstraints.fill = GridBagConstraints.NONE; gridBagConstraints.insets = new Insets(5, 5, 5, 5); gridBagConstraints.anchor = GridBagConstraints.NORTHWEST; panSubAtBScenario.add(spnStartGameDelay, gridBagConstraints); JScrollPane scrAtB = new JScrollPane(panAtB); scrAtB.setPreferredSize(new java.awt.Dimension(500, 400)); tabOptions.addTab(resourceMap.getString("panAtB.TabConstraints.tabTitle"), scrAtB); // NOI18N enableAtBComponents(panAtB, chkUseAtB.isSelected()); enableAtBComponents(panSubAtBRat, chkUseAtB.isSelected() && btnStaticRATs.isSelected()); javax.swing.SwingUtilities.invokeLater(new Runnable() { public void run() { scrSPA.getVerticalScrollBar().setValue(0); scrAtB.getVerticalScrollBar().setValue(0); } }); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 0; gridBagConstraints.gridwidth = 4; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; gridBagConstraints.weightx = 1.0; gridBagConstraints.weighty = 1.0; getContentPane().add(tabOptions, gridBagConstraints); btnOkay.setText(resourceMap.getString("btnOkay.text")); // NOI18N btnOkay.setName("btnOkay"); // NOI18N btnOkay.addActionListener(new java.awt.event.ActionListener() { @Override public void actionPerformed(java.awt.event.ActionEvent evt) { btnOkayActionPerformed(); } }); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 1; gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST; gridBagConstraints.weightx = 0.25; getContentPane().add(btnOkay, gridBagConstraints); btnSave.setText(resourceMap.getString("btnSave.text")); // NOI18N btnSave.setName("btnSave"); // NOI18N btnSave.addActionListener(new java.awt.event.ActionListener() { @Override public void actionPerformed(java.awt.event.ActionEvent evt) { btnSaveActionPerformed(); } }); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 1; gridBagConstraints.anchor = java.awt.GridBagConstraints.CENTER; gridBagConstraints.weightx = 0.25; getContentPane().add(btnSave, gridBagConstraints); btnLoad.setText(resourceMap.getString("btnLoad.text")); // NOI18N btnLoad.setName("btnLoad"); // NOI18N btnLoad.addActionListener(new java.awt.event.ActionListener() { @Override public void actionPerformed(java.awt.event.ActionEvent evt) { btnLoadActionPerformed(); } }); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 2; gridBagConstraints.gridy = 1; gridBagConstraints.anchor = java.awt.GridBagConstraints.CENTER; gridBagConstraints.weightx = 0.25; getContentPane().add(btnLoad, gridBagConstraints); btnCancel.setText(resourceMap.getString("btnCancel.text")); // NOI18N btnCancel.setName("btnCancel"); // NOI18N btnCancel.addActionListener(new java.awt.event.ActionListener() { @Override public void actionPerformed(java.awt.event.ActionEvent evt) { btnCancelActionPerformed(evt); } }); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 3; gridBagConstraints.gridy = 1; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; gridBagConstraints.weightx = 0.25; getContentPane().add(btnCancel, gridBagConstraints); pack(); }// </editor-fold>//GEN-END:initComponents private void txtNameActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_txtNameActionPerformed // TODO add your handling code here: }//GEN-LAST:event_txtNameActionPerformed private void factionSelected() { if (useFactionForNamesBox.isSelected()) { switchFaction(); } } private void switchFaction() { String factionCode = Faction.getFactionFromFullNameAndEra(String.valueOf(comboFaction.getSelectedItem()), Era.getEra(date.get(Calendar.YEAR))) .getNameGenerator(); boolean found = false; for (Iterator<String> i = campaign.getRNG().getFactions(); i.hasNext(); ) { String nextFaction = (String) i.next(); if (nextFaction.equals(factionCode)) { found = true; break; } } if (found) { comboFactionNames.setSelectedItem(factionCode); } } private void fillRankInfo() { Ranks ranks = new Ranks(comboRanks.getSelectedIndex()); ranksModel.setDataVector(ranks.getRanksForModel(), rankColNames); TableColumn column = null; for (int i = 0; i < RankTableModel.COL_NUM; i++) { column = tableRanks.getColumnModel().getColumn(i); column.setPreferredWidth(ranksModel.getColumnWidth(i)); column.setCellRenderer(ranksModel.getRenderer()); if (i == RankTableModel.COL_PAYMULT) { column.setCellEditor(new SpinnerEditor()); } } } @SuppressWarnings("unused") // FIXME: private void tableRanksValueChanged(javax.swing.event.ListSelectionEvent evt) { int row = tableRanks.getSelectedRow(); //btnDeleteRank.setEnabled(row != -1); } @SuppressWarnings("unused") // FIXME private void addRank() { Object[] rank = {"Unknown", false, 1.0}; int row = tableRanks.getSelectedRow(); if (row == -1) { if (ranksModel.getRowCount() > 0) { rank[1] = ranksModel.getValueAt(ranksModel.getRowCount() - 1, 1); } ranksModel.addRow(rank); tableRanks.setRowSelectionInterval(tableRanks.getRowCount() - 1, tableRanks.getRowCount() - 1); } else { rank[1] = ranksModel.getValueAt(row, 1); ranksModel.insertRow(row + 1, rank); tableRanks.setRowSelectionInterval(row + 1, row + 1); } } @SuppressWarnings("unused") // FIXME private void removeRank() { int row = tableRanks.getSelectedRow(); if (row > -1) { ranksModel.removeRow(row); } if (tableRanks.getRowCount() == 0) { return; } if (tableRanks.getRowCount() > row) { tableRanks.setRowSelectionInterval(row, row); } else { tableRanks.setRowSelectionInterval(row - 1, row - 1); } } private void useFactionForNamesBoxEvent(java.awt.event.ActionEvent evt) { if (useFactionForNamesBox.isSelected()) { comboFactionNames.setEnabled(false); switchFaction(); } else { comboFactionNames.setEnabled(true); } } private void btnLoadActionPerformed() { ArrayList<GamePreset> presets = GamePreset.getGamePresetsIn(MekHQ.PRESET_DIR); if(!presets.isEmpty()) { ChooseGamePresetDialog cgpd = new ChooseGamePresetDialog(null, true, presets); cgpd.setVisible(true); if(!cgpd.wasCancelled() && null != cgpd.getSelectedPreset()) { cgpd.getSelectedPreset().apply(campaign); ////TODO: it would be nice if we could just update the choices in this dialog now //rather than closing it, but that is currently not possible given how //this dialog is set up MekHQ.triggerEvent(new OptionsChangedEvent(campaign)); this.setVisible(false); } } } private void btnSaveActionPerformed() { if (txtName.getText().length() == 0) { return; } GamePresetDescriptionDialog gpdd = new GamePresetDescriptionDialog(null, true, "Enter a title", "Enter description of preset"); gpdd.setVisible(true); if(!gpdd.wasChanged()) { return; } MekHQ.logMessage("Saving campaign options..."); // Choose a file... JFileChooser saveOptions = new JFileChooser(MekHQ.PRESET_DIR); saveOptions.setDialogTitle("Save Campaign Options as Presets"); //saveCpgn.setFileFilter(new CampaignFileFilter()); saveOptions.setSelectedFile(new File("myoptions.xml")); //$NON-NLS-1$ int returnVal = saveOptions.showSaveDialog(getParent()); if ((returnVal != JFileChooser.APPROVE_OPTION) || (saveOptions.getSelectedFile() == null)) { // I want a file, y'know! return; } File file = saveOptions.getSelectedFile(); if (file == null) { // I want a file, y'know! return; } String path = file.getPath(); if (!path.endsWith(".xml")) { path += ".xml"; file = new File(path); } // check for existing file and make a back-up if found String path2 = path + "_backup"; File backupFile = new File(path2); if (file.exists()) { Utilities.copyfile(file, backupFile); } updateOptions(); GamePreset preset = new GamePreset(gpdd.getTitle(), gpdd.getDesc(), options, rskillPrefs, SkillType.lookupHash, SpecialAbility.getAllSpecialAbilities()); // Then save it out to that file. FileOutputStream fos = null; PrintWriter pw = null; try { fos = new FileOutputStream(file); pw = new PrintWriter(new OutputStreamWriter(fos, "UTF-8")); preset.writeToXml(pw, 0); pw.flush(); pw.close(); fos.close(); // delete the backup file because we didn't need it if (backupFile.exists()) { backupFile.delete(); } MekHQ.logMessage("Campaign options saved to " + file); } catch (Exception ex) { MekHQ.logError(ex); JOptionPane .showMessageDialog( null, "Whoops, for some reason the game presets could not be saved", "Could not save presets", JOptionPane.ERROR_MESSAGE); file.delete(); if (backupFile.exists()) { Utilities.copyfile(backupFile, file); backupFile.delete(); } } this.setVisible(false); } private void updateOptions() { campaign.setName(txtName.getText()); campaign.calendar = date; // Ensure that the MegaMek year GameOption matches the campaign year GameOptions gameOpts = campaign.getGameOptions(); int campaignYear = campaign.getCalendar().get(Calendar.YEAR); if (gameOpts.intOption("year") != campaignYear) { gameOpts.getOption("year").setValue(campaignYear); } campaign.setFactionCode(Faction.getFactionFromFullNameAndEra (String.valueOf(comboFaction.getSelectedItem()), Era.getEra(date.get(Calendar.YEAR))).getShortName()); if (null != comboFactionNames.getSelectedItem()) { campaign.getRNG().setChosenFaction((String) comboFactionNames.getSelectedItem()); } campaign.getRNG().setPerentFemale(sldGender.getValue()); campaign.setRankSystem(comboRanks.getSelectedIndex()); if (comboRanks.getSelectedIndex() == Ranks.RS_CUSTOM) { campaign.getRanks().setRanksFromModel(ranksModel); } campaign.setCamoCategory(camoCategory); campaign.setCamoFileName(camoFileName); campaign.setColorIndex(colorIndex); for (int i = 0; i < chkUsePortrait.length; i++) { options.setUsePortraitForType(i, chkUsePortrait[i].isSelected()); } updateSkillTypes(); updateXPCosts(); // Rules panel options.setEraMods(useEraModsCheckBox.isSelected()); options.setAssignedTechFirst(assignedTechFirstCheckBox.isSelected()); options.setResetToFirstTech(resetToFirstTechCheckBox.isSelected()); options.setClanPriceModifier((Double) spnClanPriceModifier.getModel().getValue()); for (int i = Part.QUALITY_A; i <= Part.QUALITY_F; i++) { options.setUsedPartsValue((Double) spnUsedPartsValue[i].getModel().getValue(), i); } options.setDamagedPartsValue((Double) spnDamagedPartsValue.getModel().getValue()); options.setCanceledOrderReimbursement((Double) spnOrderRefund.getModel().getValue()); options.setDragoonRating(useUnitRatingCheckBox.isSelected()); options.setUnitRatingMethod(UnitRatingMethod.getUnitRatingMethod((String) unitRatingMethodCombo .getSelectedItem())); options.setFactionForNames(useFactionForNamesBox.isSelected()); options.setUseTactics(useTacticsBox.isSelected()); campaign.getGameOptions().getOption("command_init").setValue(useTacticsBox.isSelected()); options.setDestroyByMargin(useDamageMargin.isSelected()); options.setDestroyMargin((Integer) spnDamageMargin.getModel().getValue()); options.setDestroyPartTarget((Integer) spnDestroyPartTarget.getModel().getValue()); options.setCheckMaintenance(checkMaintenance.isSelected()); options.setUseQualityMaintenance(useQualityMaintenance.isSelected()); options.setReverseQualityNames(reverseQualityNames.isSelected()); options.setUseUnofficalMaintenance(useUnofficalMaintenance.isSelected()); options.setMaintenanceBonus((Integer) spnMaintenanceBonus.getModel().getValue()); options.setMaintenanceCycleDays((Integer) spnMaintenanceDays.getModel().getValue()); options.setInitBonus(useInitBonusBox.isSelected()); campaign.getGameOptions().getOption("individual_initiative").setValue(useInitBonusBox.isSelected()); options.setToughness(useToughnessBox.isSelected()); campaign.getGameOptions().getOption("toughness").setValue(useToughnessBox.isSelected()); options.setArtillery(useArtilleryBox.isSelected()); campaign.getGameOptions().getOption("artillery_skill").setValue(useArtilleryBox.isSelected()); options.setAbilities(useAbilitiesBox.isSelected()); campaign.getGameOptions().getOption("pilot_advantages").setValue(useAbilitiesBox.isSelected()); options.setEdge(useEdgeBox.isSelected()); campaign.getGameOptions().getOption("edge").setValue(useEdgeBox.isSelected()); options.setImplants(useImplantsBox.isSelected()); options.setCapturePrisoners(chkCapturePrisoners.isSelected()); campaign.getGameOptions().getOption("manei_domini").setValue(useImplantsBox.isSelected()); options.setAltQualityAveraging(altQualityAveragingCheckBox.isSelected()); options.setAdvancedMedical(useAdvancedMedicalBox.isSelected()); options.setDylansRandomXp(useDylansRandomXpBox.isSelected()); options.setPayForParts(payForPartsBox.isSelected()); options.setPayForUnits(payForUnitsBox.isSelected()); options.setPayForSalaries(payForSalariesBox.isSelected()); options.setPayForOverhead(payForOverheadBox.isSelected()); options.setPayForMaintain(payForMaintainBox.isSelected()); options.setPayForTransport(payForTransportBox.isSelected()); options.setPayForRecruitment(payForRecruitmentBox.isSelected()); options.setLoanLimits(useLoanLimitsBox.isSelected()); options.setUsePercentageMaint(usePercentageMaintBox.isSelected()); options.setUseInfantryDontCount(useInfantryDontCountBox.isSelected()); options.setSellUnits(sellUnitsBox.isSelected()); options.setSellParts(sellPartsBox.isSelected()); options.setEquipmentContractBase(btnContractEquipment.isSelected()); options.setEquipmentContractPercent((Double) spnEquipPercent.getModel().getValue()); options.setEquipmentContractSaleValue(chkEquipContractSaleValue.isSelected()); options.setBLCSaleValue(chkBLCSaleValue.isSelected()); options.setQuirks(useQuirksBox.isSelected()); campaign.getGameOptions().getOption("stratops_quirks").setValue(useQuirksBox.isSelected()); options.setWaitingPeriod((Integer) spnAcquireWaitingPeriod.getModel().getValue()); options.setAcquisitionSkill((String) choiceAcquireSkill.getSelectedItem()); options.setAcquisitionSupportStaffOnly(chkSupportStaffOnly.isSelected()); options.setClanAcquisitionPenalty((Integer) spnAcquireClanPenalty.getModel().getValue()); options.setIsAcquisitionPenalty((Integer) spnAcquireIsPenalty.getModel().getValue()); options.setMaxAcquisitions(Integer.parseInt(txtMaxAcquisitions.getText())); options.setNDiceTransitTime((Integer) spnNDiceTransitTime.getModel().getValue()); options.setConstantTransitTime((Integer) spnConstantTransitTime.getModel().getValue()); options.setUnitTransitTime(choiceTransitTimeUnits.getSelectedIndex()); options.setAcquireMosBonus((Integer) spnAcquireMosBonus.getModel().getValue()); options.setAcquireMinimumTime((Integer) spnAcquireMinimum.getModel().getValue()); options.setAcquireMinimumTimeUnit(choiceAcquireMinimumUnit.getSelectedIndex()); options.setAcquireMosUnit(choiceAcquireMosUnits.getSelectedIndex()); options.setScenarioXP((Integer) spnScenarioXP.getModel().getValue()); options.setKillsForXP((Integer) spnKills.getModel().getValue()); options.setKillXPAward((Integer) spnKillXP.getModel().getValue()); options.setTaskXP((Integer) spnTaskXP.getModel().getValue()); options.setNTasksXP((Integer) spnNTasksXP.getModel().getValue()); options.setSuccessXP((Integer) spnSuccessXP.getModel().getValue()); options.setMistakeXP((Integer) spnMistakeXP.getModel().getValue()); options.setIdleXP((Integer) spnIdleXP.getModel().getValue()); options.setMonthsIdleXP((Integer) spnMonthsIdleXP.getModel().getValue()); options.setContractNegotiationXP((Integer) spnContractNegotiationXP.getModel().getValue()); options.setAdminXP((Integer) spnAdminWeeklyXP.getModel().getValue()); options.setAdminXPPeriod((Integer) spnAdminWeeklyXPPeriod.getModel().getValue()); options.setTargetIdleXP((Integer) spnTargetIdleXP.getModel().getValue()); options.setLimitByYear(limitByYearBox.isSelected()); options.setDisallowExtinctStuff(disallowExtinctStuffBox.isSelected()); options.setAllowClanPurchases(allowClanPurchasesBox.isSelected()); options.setAllowISPurchases(allowISPurchasesBox.isSelected()); options.setAllowCanonOnly(allowCanonOnlyBox.isSelected()); campaign.getGameOptions().getOption("canon_only").setValue(allowCanonOnlyBox.isSelected()); options.setAllowCanonRefitOnly(allowCanonRefitOnlyBox.isSelected()); options.setUseAmmoByType(useAmmoByTypeBox.isSelected()); options.setTechLevel(choiceTechLevel.getSelectedIndex()); campaign.getGameOptions().getOption("techlevel").setValue((String)choiceTechLevel.getSelectedItem()); //we need to reset healing time options through the campaign because we may need to //loop through personnel to make adjustments campaign.setHealingTimeOptions((Integer) spnHealWaitingPeriod.getModel().getValue(), (Integer) spnNaturalHealWaitingPeriod.getModel().getValue()); options.setMinimumHitsForVees((Integer) spnMinimumHitsForVees.getModel().getValue()); options.setUseRandomHitsForVees(useRandomHitsForVees.isSelected()); options.setTougherHealing(useTougherHealing.isSelected()); options.setUseUnofficialProcreation(chkUseUnofficialProcreation.isSelected()); options.setUseUnofficialProcreationNoRelationship(chkUseUnofficialProcreationNoRelationship.isSelected()); options.setUseParentage(chkUseParentage.isSelected()); options.setLogConception(chkLogConception.isSelected()); options.setUseTransfers(chkUseTransfers.isSelected()); options.setDefaultPrisonerStatus(comboPrisonerStatus.getSelectedIndex()); rskillPrefs.setOverallRecruitBonus((Integer) spnOverallRecruitBonus.getModel().getValue()); for (int i = 0; i < Person.T_NUM; i++) { rskillPrefs.setRecruitBonus(i, (Integer) spnTypeRecruitBonus[i].getModel().getValue()); } rskillPrefs.setRandomizeSkill(chkExtraRandom.isSelected()); rskillPrefs.setAntiMekProb((Integer) spnProbAntiMek.getModel().getValue()); rskillPrefs.setArtilleryProb((Integer) spnArtyProb.getModel().getValue()); rskillPrefs.setArtilleryBonus((Integer) spnArtyBonus.getModel().getValue()); rskillPrefs.setSecondSkillProb((Integer) spnSecondProb.getModel().getValue()); rskillPrefs.setSecondSkillBonus((Integer) spnSecondBonus.getModel().getValue()); rskillPrefs.setTacticsMod(SkillType.EXP_GREEN, (Integer) spnTacticsGreen.getModel().getValue()); rskillPrefs.setTacticsMod(SkillType.EXP_REGULAR, (Integer) spnTacticsReg.getModel().getValue()); rskillPrefs.setTacticsMod(SkillType.EXP_VETERAN, (Integer) spnTacticsVet.getModel().getValue()); rskillPrefs.setTacticsMod(SkillType.EXP_ELITE, (Integer) spnTacticsElite.getModel().getValue()); rskillPrefs.setCombatSmallArmsBonus((Integer) spnCombatSA.getModel().getValue()); rskillPrefs.setSupportSmallArmsBonus((Integer) spnSupportSA.getModel().getValue()); rskillPrefs.setSpecialAbilBonus(SkillType.EXP_GREEN, (Integer) spnAbilGreen.getModel().getValue()); rskillPrefs.setSpecialAbilBonus(SkillType.EXP_REGULAR, (Integer) spnAbilReg.getModel().getValue()); rskillPrefs.setSpecialAbilBonus(SkillType.EXP_VETERAN, (Integer) spnAbilVet.getModel().getValue()); rskillPrefs.setSpecialAbilBonus(SkillType.EXP_ELITE, (Integer) spnAbilElite.getModel().getValue()); options.setProbPhenoMW((Integer) spnProbPhenoMW.getModel().getValue()); options.setProbPhenoAero((Integer) spnProbPhenoAero.getModel().getValue()); options.setProbPhenoBA((Integer) spnProbPhenoBA.getModel().getValue()); options.setProbPhenoVee((Integer) spnProbPhenoVee.getModel().getValue()); //start salary for (int i = 1; i < Person.T_NUM; i++) { try { int salary = Integer.parseInt(txtSalaryBase[i].getText()); options.setBaseSalary(salary, i); } catch (NumberFormatException ex) { //dont change it } } for (int i = 0; i < 5; i++) { options.setSalaryXpMultiplier((Double) spnSalaryXp[i].getModel().getValue(), i); } options.setSalaryCommissionMultiplier((Double) spnSalaryCommision.getModel().getValue()); options.setSalaryEnlistedMultiplier((Double) spnSalaryEnlisted.getModel().getValue()); options.setSalaryAntiMekMultiplier((Double) spnSalaryAntiMek.getModel().getValue()); //end salary //start SPA SpecialAbility.replaceSpecialAbilities(tempSPA); //end SPA // Start Personnel Market options.setPersonnelMarketDylansWeight((Double) personnelMarketDylansWeight.getValue()); options.setPersonnelMarketRandomEliteRemoval(Integer.parseInt(personnelMarketRandomEliteRemoval.getText())); options.setPersonnelMarketRandomVeteranRemoval(Integer.parseInt(personnelMarketRandomVeteranRemoval.getText())); options.setPersonnelMarketRandomRegularRemoval(Integer.parseInt(personnelMarketRandomRegularRemoval.getText())); options.setPersonnelMarketRandomGreenRemoval(Integer.parseInt(personnelMarketRandomGreenRemoval.getText())); options.setPersonnelMarketRandomUltraGreenRemoval(Integer.parseInt(personnelMarketRandomUltraGreenRemoval .getText())); options.setPersonnelMarketReportRefresh(personnelMarketReportRefresh.isSelected()); options.setPersonnelMarketType(personnelMarketType.getSelectedIndex()); // End Personnel Market // Start Against the Bot options.setUseAtB(chkUseAtB.isSelected()); options.setSkillLevel(cbSkillLevel.getSelectedIndex()); options.setUseShareSystem(chkUseShareSystem.isSelected()); options.setSharesExcludeLargeCraft(chkSharesExcludeLargeCraft.isSelected()); options.setSharesForAll(chkSharesForAll.isSelected()); options.setTrackOriginalUnit(chkTrackOriginalUnit.isSelected()); options.setRetirementRolls(chkRetirementRolls.isSelected()); options.setCustomRetirementMods(chkCustomRetirementMods.isSelected()); options.setTrackUnitFatigue(chkTrackUnitFatigue.isSelected()); options.setLimitLanceWeight(chkLimitLanceWeight.isSelected()); options.setLimitLanceNumUnits(chkLimitLanceNumUnits.isSelected()); options.setUseLeadership(chkUseLeadership.isSelected()); options.setUseStrategy(chkUseStrategy.isSelected()); options.setBaseStrategyDeployment((Integer)spnBaseStrategyDeployment.getValue()); options.setAdditionalStrategyDeployment((Integer)spnAdditionalStrategyDeployment.getValue()); options.setAdjustPaymentForStrategy(chkAdjustPaymentForStrategy.isSelected()); options.setUseAero(chkUseAero.isSelected()); options.setUseVehicles(chkUseVehicles.isSelected()); options.setClanVehicles(chkClanVehicles.isSelected()); options.setDoubleVehicles(chkDoubleVehicles.isSelected()); options.setAdjustPlayerVehicles(chkAdjustPlayerVehicles.isSelected()); options.setOpforLanceTypeMechs((Integer)spnOpforLanceTypeMechs.getValue()); options.setOpforLanceTypeMixed((Integer)spnOpforLanceTypeMixed.getValue()); options.setOpforLanceTypeVehicles((Integer)spnOpforLanceTypeVehicles.getValue()); options.setOpforUsesVTOLs(chkOpforUsesVTOLs.isSelected()); options.setUseDropShips(chkUseDropShips.isSelected()); options.setStaticRATs(btnStaticRATs.isSelected()); options.setIgnoreRatEra(chkIgnoreRatEra.isSelected()); //Strip dates used in display name String[] ratList = new String[chosenRatModel.size()]; for (int i = 0; i < chosenRatModel.size(); i++) { ratList[i] = chosenRatModel.elementAt(i).replaceFirst(" \\(.*?\\)", ""); } options.setRATs(ratList); options.setSearchRadius((Integer)spnSearchRadius.getValue()); options.setIntensity((Double)spnIntensity.getValue()); options.setVariableContractLength(chkVariableContractLength.isSelected()); options.setMercSizeLimited(chkMercSizeLimited.isSelected()); options.setRestrictPartsByMission(chkRestrictPartsByMission.isSelected()); options.setRegionalMechVariations(chkRegionalMechVariations.isSelected()); options.setUseWeatherConditions(chkUseWeatherConditions.isSelected()); options.setUseLightConditions(chkUseLightConditions.isSelected()); options.setUsePlanetaryConditions(chkUsePlanetaryConditions.isSelected()); options.setUseAtBCapture(chkUseAtBCapture.isSelected()); options.setStartGameDelay((Integer)spnStartGameDelay.getValue()); options.setAeroRecruitsHaveUnits(chkAeroRecruitsHaveUnits.isSelected()); options.setInstantUnitMarketDelivery(chkInstantUnitMarketDelivery.isSelected()); options.setContractMarketReportRefresh(chkContractMarketReportRefresh.isSelected()); options.setContractMarketReportRefresh(chkUnitMarketReportRefresh.isSelected()); // End Against the Bot MekHQ.triggerEvent(new OptionsChangedEvent(campaign, options)); } private void btnOkayActionPerformed() { if (txtName.getText().length() > 0) { updateOptions(); this.setVisible(false); } } private void updateXPCosts() { for (int i = 0; i < SkillType.skillList.length; i++) { for (int j = 0; j < 11; j++) { try { int cost = Integer.parseInt((String) tableXP.getValueAt(i, j)); SkillType.setCost(SkillType.skillList[i], cost, j); } catch (NumberFormatException e) { MekHQ.logMessage("unreadable value in skill cost table for " + SkillType.skillList[i]); } } } //campaign.getSkillCosts().setScenarioXP((Integer)spnScenarioXP.getModel().getValue()); } private void updateSkillTypes() { for (String skillName : SkillType.getSkillList()) { SkillType type = SkillType.getType(skillName); if (null != hashSkillTargets.get(skillName)) { type.setTarget((Integer) hashSkillTargets.get(skillName).getModel().getValue()); } if (null != hashGreenSkill.get(skillName)) { type.setGreenLevel((Integer) hashGreenSkill.get(skillName).getModel().getValue()); } if (null != hashRegSkill.get(skillName)) { type.setRegularLevel((Integer) hashRegSkill.get(skillName).getModel().getValue()); } if (null != hashVetSkill.get(skillName)) { type.setVeteranLevel((Integer) hashVetSkill.get(skillName).getModel().getValue()); } if (null != hashEliteSkill.get(skillName)) { type.setEliteLevel((Integer) hashEliteSkill.get(skillName).getModel().getValue()); } } } private void btnCancelActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnCancelActionPerformed cancelled = true; this.setVisible(false); }//GEN-LAST:event_btnCancelActionPerformed public boolean wasCancelled() { return cancelled; } private void btnDateActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnDateActionPerformed // show the date chooser DateChooser dc = new DateChooser(frame, date); // user can either choose a date or cancel by closing if (dc.showDateChooser() == DateChooser.OK_OPTION) { date = dc.getDate(); btnDate.setText(getDateAsString()); factionModel = new SortedComboBoxModel<String>(); for (String sname : Faction.choosableFactionCodes) { factionModel.addElement(Faction.getFaction(sname).getFullName(Era.getEra(date.get(Calendar.YEAR)))); } factionModel.setSelectedItem(campaign.getFaction().getFullName(Era.getEra(date.get(Calendar.YEAR)))); comboFaction.setModel(factionModel); } }//GEN-LAST:event_btnDateActionPerformed private void btnCamoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnCamoActionPerformed CamoChoiceDialog ccd = new CamoChoiceDialog(frame, true, camoCategory, camoFileName, colorIndex, camos); ccd.setVisible(true); camoCategory = ccd.getCategory(); camoFileName = ccd.getFileName(); if (ccd.getColorIndex() != -1) { colorIndex = ccd.getColorIndex(); } setCamoIcon(); }//GEN-LAST:event_btnCamoActionPerformed private Vector<String> getUnusedSPA() { Vector<String> unused = new Vector<String>(); PilotOptions poptions = new PilotOptions(); for (Enumeration<IOptionGroup> i = poptions.getGroups(); i.hasMoreElements();) { IOptionGroup group = i.nextElement(); if (!group.getKey().equalsIgnoreCase(PilotOptions.LVL3_ADVANTAGES)) { continue; } for (Enumeration<IOption> j = group.getOptions(); j.hasMoreElements();) { IOption option = j.nextElement(); if(null == tempSPA.get(option.getName())) { unused.add(option.getName()); } } } for (String key : SpecialAbility.getAllDefaultSpecialAbilities().keySet()) { if(null == tempSPA.get(key) && !unused.contains(key)) { unused.add(key); } } return unused; } public Hashtable<String, SpecialAbility> getCurrentSPA() { return tempSPA; } private void btnAddSPA() { SelectUnusedAbilityDialog suad = new SelectUnusedAbilityDialog(this.frame, getUnusedSPA(), getCurrentSPA()); suad.setVisible(true); panSpecialAbilities.removeAll(); GridBagConstraints gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.fill = GridBagConstraints.NONE; gridBagConstraints.anchor = GridBagConstraints.NORTHWEST; gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 0; gridBagConstraints.weightx =1.0; gridBagConstraints.weighty =0.0; panSpecialAbilities.add(btnAddSPA, gridBagConstraints); btnAddSPA.setEnabled(!getUnusedSPA().isEmpty()); gridBagConstraints.fill = GridBagConstraints.BOTH; gridBagConstraints.anchor = GridBagConstraints.NORTHWEST; gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 1; gridBagConstraints.weightx =1.0; gridBagConstraints.weighty =1.0; for(String title : tempSPA.keySet()) { panSpecialAbilities.add(new SpecialAbilityPanel(tempSPA.get(title), this), gridBagConstraints); gridBagConstraints.gridy++; } panSpecialAbilities.revalidate(); panSpecialAbilities.repaint(); } public void btnRemoveSPA(String name) { tempSPA.remove(name); //we also need to cycle through the existing SPAs and remove this one from //any prereqs for(String key: tempSPA.keySet()) { SpecialAbility otherAbil = tempSPA.get(key); Vector<String> prereq = otherAbil.getPrereqAbilities(); Vector<String> invalid = otherAbil.getInvalidAbilities(); Vector<String> remove = otherAbil.getRemovedAbilities(); if(prereq.remove(name)) { otherAbil.setPrereqAbilities(prereq); } if(invalid.remove(name)) { otherAbil.setInvalidAbilities(invalid); } if(remove.remove(name)) { otherAbil.setRemovedAbilities(remove); } } panSpecialAbilities.removeAll(); GridBagConstraints gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.fill = GridBagConstraints.NONE; gridBagConstraints.anchor = GridBagConstraints.NORTHWEST; gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 0; gridBagConstraints.weightx =1.0; gridBagConstraints.weighty =0.0; panSpecialAbilities.add(btnAddSPA, gridBagConstraints); btnAddSPA.setEnabled(true); gridBagConstraints.fill = GridBagConstraints.BOTH; gridBagConstraints.anchor = GridBagConstraints.NORTHWEST; gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 1; gridBagConstraints.weightx =1.0; gridBagConstraints.weighty =1.0; for(String title : tempSPA.keySet()) { panSpecialAbilities.add(new SpecialAbilityPanel(tempSPA.get(title), this), gridBagConstraints); gridBagConstraints.gridy++; } panSpecialAbilities.revalidate(); panSpecialAbilities.repaint(); } public String getDateAsString() { return dateFormat.format(date.getTime()); } public void setCamoIcon() { if (null == camoCategory) { return; } if (Player.NO_CAMO.equals(camoCategory)) { int colorInd = colorIndex; if (colorInd == -1) { colorInd = 0; } BufferedImage tempImage = new BufferedImage(84, 72, BufferedImage.TYPE_INT_RGB); Graphics2D graphics = tempImage.createGraphics(); graphics.setColor(PlayerColors.getColor(colorInd)); graphics.fillRect(0, 0, 84, 72); btnCamo.setIcon(new ImageIcon(tempImage)); return; } // Try to get the camo file. try { // Translate the root camo directory name. if (Player.ROOT_CAMO.equals(camoCategory)) { camoCategory = ""; //$NON-NLS-1$ } Image camo = (Image) camos.getItem(camoCategory, camoFileName); btnCamo.setIcon(new ImageIcon(camo)); } catch (Exception err) { //err.printStackTrace(); JOptionPane.showMessageDialog( this, "Cannot find your camo file.\n" + "Setting to default color.\n" + "You should browse to the correct camo file,\n" + "or if it isn't available copy it into MekHQ's" + "data/images/camo folder.", "Missing Camo File", JOptionPane.WARNING_MESSAGE); camoCategory = Player.NO_CAMO; colorIndex = 0; setCamoIcon(); } } private void enableAtBComponents(JPanel panel, boolean enabled) { for (Component c : panel.getComponents()) { if (c.equals(chkUseAtB)) { continue; } if (c instanceof JPanel) { enableAtBComponents((JPanel)c, enabled); } else if (enabled && c.equals(btnAddRat)) { c.setEnabled(availableRats.getSelectedIndex() >= 0); } else if (enabled && c.equals(btnRemoveRat)) { c.setEnabled(chosenRats.getSelectedIndex() >= 0); } else if (enabled && c.equals(btnMoveRatUp)) { c.setEnabled(chosenRats.getSelectedIndex() > 0); } else if (enabled && c.equals(btnMoveRatDown)) { c.setEnabled(availableRats.getSelectedIndex() >= 0 && chosenRatModel.size() > chosenRats.getSelectedIndex() + 1); } else { c.setEnabled(enabled); } } } private void updateBattleChances() { double intensity = (Double)spnIntensity.getValue(); lblFightPct.setText((int)(40.0 * intensity / (40.0 * intensity + 60.0) * 100.0 + 0.5) + "%"); lblDefendPct.setText((int)(20.0 * intensity / (20.0 * intensity + 80.0) * 100.0 + 0.5) + "%"); lblScoutPct.setText((int)(60.0 * intensity / (60.0 * intensity + 40.0) * 100.0 + 0.5) + "%"); lblTrainingPct.setText((int)(10.0 * intensity / (10.0 * intensity + 90.0) * 100.0 + 0.5) + "%"); } /* * Taken from: * http://tips4java.wordpress.com/2008/11/18/row-number-table/ * Use a JTable as a renderer for row numbers of a given main table. * This table must be added to the row header of the scrollpane that * contains the main table. */ public class RowNamesTable extends JTable implements ChangeListener, PropertyChangeListener { /** * */ private static final long serialVersionUID = 3151119498072423302L; private JTable main; public RowNamesTable(JTable table) { main = table; main.addPropertyChangeListener(this); setFocusable(false); setAutoCreateColumnsFromModel(false); setModel(main.getModel()); setSelectionModel(main.getSelectionModel()); TableColumn column = new TableColumn(); column.setHeaderValue(" "); addColumn(column); column.setCellRenderer(new RowNumberRenderer()); getColumnModel().getColumn(0).setPreferredWidth(120); setPreferredScrollableViewportSize(getPreferredSize()); } @Override public void addNotify() { super.addNotify(); Component c = getParent(); // Keep scrolling of the row table in sync with the main table. if (c instanceof JViewport) { JViewport viewport = (JViewport) c; viewport.addChangeListener(this); } } /* * Delegate method to main table */ @Override public int getRowCount() { return main.getRowCount(); } @Override public int getRowHeight(int row) { return main.getRowHeight(row); } /* * This table does not use any data from the main TableModel, * so just return a value based on the row parameter. */ @Override public Object getValueAt(int row, int column) { return SkillType.skillList[row]; } /* * Don't edit data in the main TableModel by mistake */ @Override public boolean isCellEditable(int row, int column) { return false; } // // Implement the ChangeListener // @Override public void stateChanged(ChangeEvent e) { // Keep the scrolling of the row table in sync with main table JViewport viewport = (JViewport) e.getSource(); JScrollPane scrollPane = (JScrollPane) viewport.getParent(); scrollPane.getVerticalScrollBar().setValue(viewport.getViewPosition().y); } // // Implement the PropertyChangeListener // @Override public void propertyChange(PropertyChangeEvent e) { // Keep the row table in sync with the main table if ("selectionModel".equals(e.getPropertyName())) { setSelectionModel(main.getSelectionModel()); } if ("model".equals(e.getPropertyName())) { setModel(main.getModel()); } } /* * Borrow the renderer from JDK1.4.2 table header */ private class RowNumberRenderer extends DefaultTableCellRenderer { /** * */ private static final long serialVersionUID = -5430873664301394767L; public RowNumberRenderer() { setHorizontalAlignment(JLabel.LEFT); } @Override public Component getTableCellRendererComponent( JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { if (table != null) { JTableHeader header = table.getTableHeader(); if (header != null) { setForeground(header.getForeground()); setBackground(header.getBackground()); setFont(header.getFont()); } } if (isSelected) { setFont(getFont().deriveFont(Font.BOLD)); } setText((value == null) ? "" : value.toString()); setBorder(UIManager.getBorder("TableHeader.cellBorder")); return this; } } } public static class SpinnerEditor extends DefaultCellEditor { /** * */ private static final long serialVersionUID = -2711422398394960413L; JSpinner spinner; JSpinner.NumberEditor editor; JTextField textField; boolean valueSet; // Initializes the spinner. public SpinnerEditor() { super(new JTextField()); spinner = new JSpinner(new SpinnerNumberModel(1.0, 0, 10, 0.05)); editor = ((JSpinner.NumberEditor) spinner.getEditor()); textField = editor.getTextField(); textField.addFocusListener(new FocusListener() { @Override public void focusGained(FocusEvent fe) { System.err.println("Got focus"); //textField.setSelectionStart(0); //textField.setSelectionEnd(1); SwingUtilities.invokeLater(new Runnable() { @Override public void run() { if (valueSet) { textField.setCaretPosition(1); } } }); } @Override public void focusLost(FocusEvent fe) { } }); textField.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent ae) { stopCellEditing(); } }); } // Prepares the spinner component and returns it. @Override public Component getTableCellEditorComponent( JTable table, Object value, boolean isSelected, int row, int column ) { if (!valueSet) { spinner.setValue(value); } SwingUtilities.invokeLater(new Runnable() { @Override public void run() { textField.requestFocus(); } }); return spinner; } @Override public boolean isCellEditable(EventObject eo) { System.err.println("isCellEditable"); if (eo instanceof KeyEvent) { KeyEvent ke = (KeyEvent) eo; System.err.println("key event: " + ke.getKeyChar()); textField.setText(String.valueOf(ke.getKeyChar())); //textField.select(1,1); //textField.setCaretPosition(1); //textField.moveCaretPosition(1); valueSet = true; } else { valueSet = false; } return true; } // Returns the spinners current value. @Override public Object getCellEditorValue() { return spinner.getValue(); } @Override public boolean stopCellEditing() { System.err.println("Stopping edit"); try { editor.commitEdit(); spinner.commitEdit(); } catch (java.text.ParseException e) { JOptionPane.showMessageDialog(null, "Invalid value, discarding."); } return super.stopCellEditing(); } } }