From: <jde...@us...> - 2008-07-20 07:25:12
|
Revision: 7205 http://pcgen.svn.sourceforge.net/pcgen/?rev=7205&view=rev Author: jdempsey Date: 2008-07-20 07:24:45 +0000 (Sun, 20 Jul 2008) Log Message: ----------- FReq: [Pathfinder] Experience point tables Issue#: 2016413 Modified Paths: -------------- Trunk/pcgen/code/src/java/pcgen/core/GameMode.java Trunk/pcgen/code/src/java/pcgen/core/Globals.java Trunk/pcgen/code/src/java/pcgen/core/SettingsHandler.java Trunk/pcgen/code/src/java/pcgen/gui/PreferencesDialog.java Trunk/pcgen/code/src/java/pcgen/gui/prop/LanguageBundle.properties Trunk/pcgen/code/src/java/pcgen/persistence/lst/LevelLoader.java Trunk/pcgen/code/src/java/pcgen/persistence/lst/LstSystemLoader.java Trunk/pcgen/code/src/test/pcgen/io/ExportHandlerTest.java Trunk/pcgen/code/src/test/plugin/exporttokens/SkillTokenTest.java Added Paths: ----------- Trunk/pcgen/code/src/java/pcgen/gui/prefs/ Trunk/pcgen/code/src/java/pcgen/gui/prefs/ExperiencePanel.java Trunk/pcgen/code/src/java/pcgen/gui/prefs/MonsterPanel.java Trunk/pcgen/code/src/java/pcgen/gui/prefs/PCGenPrefsPanel.java Modified: Trunk/pcgen/code/src/java/pcgen/core/GameMode.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/GameMode.java 2008-07-20 06:06:42 UTC (rev 7204) +++ Trunk/pcgen/code/src/java/pcgen/core/GameMode.java 2008-07-20 07:24:45 UTC (rev 7205) @@ -72,7 +72,7 @@ private List<ClassType> classTypeList = new ArrayList<ClassType>(); private List<String> defaultDataSetList = new ArrayList<String>(); private List<String> defaultDeityList = new ArrayList<String>(); - private Map<String, LevelInfo> levelInfo = new HashMap<String, LevelInfo>(); + private Map<String, Map<String, LevelInfo>> levelInfo = new HashMap<String, Map<String, LevelInfo>>(); private List<String> loadStrings = new ArrayList<String>(); private List<String> skillMultiplierLevels = new ArrayList<String>(); private List<String> wcStepsList = new ArrayList<String>(); @@ -193,6 +193,9 @@ private List<String> resizableTypeList = new ArrayList<String>(); private Map<Class<?>, Set<String>> hiddenTypes = new HashMap<Class<?>, Set<String>>(); + private List<String> xpTableNames = new ArrayList<String>(); + private String currXpTableName; + /** * Creates a new instance of GameMode. * @@ -566,21 +569,30 @@ } /** - * map of LevelInfo objects + * map of LevelInfo objects. + * + * @param xpTable the xp table to be used + * * @return level info map */ - public Map<String, LevelInfo> getLevelInfo() + public Map<String, LevelInfo> getLevelInfo(final String xpTable) { - return levelInfo; + return levelInfo.get(xpTable); } /** * Add the level info * @param levInfo */ - public void addLevelInfo(final LevelInfo levInfo) + public void addLevelInfo(final String xpTable, final LevelInfo levInfo) { - levelInfo.put(levInfo.getLevelString(),levInfo); + Map<String, LevelInfo> tableInfo = levelInfo.get(xpTable); + if (tableInfo == null) + { + tableInfo = new HashMap<String, LevelInfo>(); + levelInfo.put(xpTable, tableInfo); + } + tableInfo.put(levInfo.getLevelString(),levInfo); } /** @@ -3452,5 +3464,58 @@ Set<String> set = hiddenTypes.get(cl); return set != null && set.contains(type); } + + /** + * Gets the name of the currently selected experience table + * + * @return the XP table name + */ + public String getXpTableName() + { + if (currXpTableName == null || currXpTableName.equals("")) + { + if (xpTableNames.isEmpty()) + { + xpTableNames.add("Default"); + } + currXpTableName = xpTableNames.get(0); + } + return currXpTableName; + } + + /** + * Sets the name of the currently selected experience table + * + * @param tableName the new XP table name + */ + public void setXpTableName(String tableName) + { + currXpTableName = tableName; + } + + /** + * Gets the array of names of defined experience tables. + * + * @return the xp table names + */ + public List<String> getAvailXpTableNames() + { + return xpTableNames; + } + + /** + * Sets the array of names of defined experience tables. + * + * @param names the new avail XP table names + */ + public void setAvailXpTableNames(List<String> names) + { + xpTableNames = names; + } + + public void addXpTable(String name) + { + xpTableNames.add(name); + } } Modified: Trunk/pcgen/code/src/java/pcgen/core/Globals.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/Globals.java 2008-07-20 06:06:42 UTC (rev 7204) +++ Trunk/pcgen/code/src/java/pcgen/core/Globals.java 2008-07-20 07:24:45 UTC (rev 7205) @@ -1240,7 +1240,13 @@ */ public static Map<String, LevelInfo> getLevelInfo() { - return SettingsHandler.getGame().getLevelInfo(); + GameMode game = SettingsHandler.getGame(); + Map<String, LevelInfo> levelInfo = game.getLevelInfo(game.getXpTableName()); + if (levelInfo == null) + { + levelInfo = new HashMap<String, LevelInfo>(); + } + return levelInfo; } /** Modified: Trunk/pcgen/code/src/java/pcgen/core/SettingsHandler.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/SettingsHandler.java 2008-07-20 06:06:42 UTC (rev 7204) +++ Trunk/pcgen/code/src/java/pcgen/core/SettingsHandler.java 2008-07-20 07:24:45 UTC (rev 7205) @@ -715,6 +715,8 @@ game.setAllStatsValue(getPCGenOption("gameMode." + key + ".allStatsValue", 10)); game.setRollMethod(getPCGenOption("gameMode." + key + ".rollMethod", 0)); //$NON-NLS-1$ + game.setXpTableName(getPCGenOption("gameMode." + key + ".xpTableName", "")); //$NON-NLS-1$ //$NON-NLS-2$ + getChosenCampaignFiles(game); } @@ -1521,6 +1523,7 @@ setPCGenOption("gameMode." + gameModeKey + ".rollMethod", gameMode.getRollMethod()); //$NON-NLS-1$ setPCGenOption("gameMode." + gameModeKey + ".rollMethodExpression", gameMode.getRollMethodExpressionName()); //$NON-NLS-1$ setPCGenOption("gameMode." + gameModeKey + ".allStatsValue", gameMode.getAllStatsValue()); + setPCGenOption("gameMode." + gameModeKey + ".xpTableName", gameMode.getXpTableName()); } setRuleChecksInOptions("ruleChecks"); //$NON-NLS-1$ Modified: Trunk/pcgen/code/src/java/pcgen/gui/PreferencesDialog.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/gui/PreferencesDialog.java 2008-07-20 06:06:42 UTC (rev 7204) +++ Trunk/pcgen/code/src/java/pcgen/gui/PreferencesDialog.java 2008-07-20 07:24:45 UTC (rev 7205) @@ -63,6 +63,9 @@ import pcgen.core.utils.MessageType; import pcgen.core.utils.ShowMessageDelegate; import pcgen.gui.panes.FlippingSplitPane; +import pcgen.gui.prefs.ExperiencePanel; +import pcgen.gui.prefs.MonsterPanel; +import pcgen.gui.prefs.PCGenPrefsPanel; import pcgen.gui.utils.*; import pcgen.util.Logging; import pcgen.util.PropertyFactory; @@ -367,11 +370,9 @@ private JCheckBox expertGUICheckBox = new JCheckBox(); private JCheckBox featDescriptionShown = new JCheckBox(); // private JCheckBox featDialogShownAtLevelUp = new JCheckBox(); - private JCheckBox hideMonsterClasses = new JCheckBox(); // Level Up private JCheckBox hpDialogShownAtLevelUp = new JCheckBox(); - private JCheckBox ignoreMonsterHDCap = new JCheckBox(); private JCheckBox loadURL = new JCheckBox(); private JCheckBox maxHpAtFirstLevel = new JCheckBox(); private JCheckBox maxHpAtFirstClassLevel = new JCheckBox(); @@ -396,7 +397,6 @@ private JCheckBox showMemory = new JCheckBox(); private JCheckBox showImagePreview = new JCheckBox(); - // "Monsters" private JCheckBox useOutputNamesEquipment = new JCheckBox(); private JCheckBox useOutputNamesSpells = new JCheckBox(); private JCheckBox waitCursor = new JCheckBox(); @@ -509,6 +509,12 @@ private String[] paperNames = null; private String[] unitSetNames = null; + // "Monsters" + private PCGenPrefsPanel monsterPanel; + + // "Experience" + private PCGenPrefsPanel experiencePanel; + //Plugins private static PreferencesComponent compInst; private PreferencesPluginsPanel pluginsPanel; @@ -727,9 +733,11 @@ // SettingsHandler.setIntCrossClassSkillCost(crossClassSkillCostCombo.getSelectedIndex()); // Monsters - SettingsHandler.setHideMonsterClasses(hideMonsterClasses.isSelected()); - SettingsHandler.setIgnoreMonsterHDCap(ignoreMonsterHDCap.isSelected()); + monsterPanel.setOptionsBasedOnControls(); + // Expereience + experiencePanel.setOptionsBasedOnControls(); + // Tab Options switch (mainTabPlacementCombo.getSelectedIndex()) { @@ -1249,9 +1257,11 @@ // crossClassSkillCostCombo.setSelectedIndex(SettingsHandler.getIntCrossClassSkillCost()); // Monsters - hideMonsterClasses.setSelected(SettingsHandler.hideMonsterClasses()); - ignoreMonsterHDCap.setSelected(SettingsHandler.isIgnoreMonsterHDCap()); - + monsterPanel.applyOptionValuesToControls(); + + // Experience + experiencePanel.applyOptionValuesToControls(); + // Colors prereqQualifyColor.setForeground(new Color(SettingsHandler .getPrereqQualifyColor())); @@ -2924,65 +2934,6 @@ return lafPanel; } - private JPanel buildMonstersPanel() - { - GridBagLayout gridbag = new GridBagLayout(); - GridBagConstraints c = new GridBagConstraints(); - JLabel label; - Border etched = null; - TitledBorder title1 = - BorderFactory.createTitledBorder(etched, in_monsters); - JPanel monstersPanel = new JPanel(); - - title1.setTitleJustification(TitledBorder.LEFT); - monstersPanel.setBorder(title1); - gridbag = new GridBagLayout(); - monstersPanel.setLayout(gridbag); - c = new GridBagConstraints(); - c.fill = GridBagConstraints.HORIZONTAL; - c.anchor = GridBagConstraints.NORTHWEST; - c.insets = new Insets(2, 2, 2, 2); - - Utility.buildConstraints(c, 0, 0, 2, 1, 0, 0); - label = - new JLabel(PropertyFactory - .getString("in_Prefs_defaultMonsters") - + ": "); - gridbag.setConstraints(label, c); - monstersPanel.add(label); - Utility.buildConstraints(c, 2, 0, 1, 1, 0, 0); - - Utility.buildConstraints(c, 0, 1, 2, 1, 0, 0); - label = - new JLabel(PropertyFactory - .getString("in_Prefs_hideMonsterClasses") - + ": "); - gridbag.setConstraints(label, c); - monstersPanel.add(label); - Utility.buildConstraints(c, 2, 1, 1, 1, 0, 0); - gridbag.setConstraints(hideMonsterClasses, c); - monstersPanel.add(hideMonsterClasses); - - Utility.buildConstraints(c, 0, 2, 2, 1, 0, 0); - label = - new JLabel(PropertyFactory - .getString("in_Prefs_ignoreMonsterHDCap") - + ": "); - gridbag.setConstraints(label, c); - monstersPanel.add(label); - Utility.buildConstraints(c, 2, 2, 1, 1, 0, 0); - gridbag.setConstraints(ignoreMonsterHDCap, c); - monstersPanel.add(ignoreMonsterHDCap); - - Utility.buildConstraints(c, 5, 20, 1, 1, 1, 1); - c.fill = GridBagConstraints.BOTH; - label = new JLabel(" "); - gridbag.setConstraints(label, c); - monstersPanel.add(label); - - return monstersPanel; - } - private JPanel buildOutputPanel() { GridBagLayout gridbag = new GridBagLayout(); @@ -3236,7 +3187,12 @@ characterNode.add(new DefaultMutableTreeNode(in_houseRules)); settingsPanel.add(buildHouseRulesPanel(), in_houseRules); characterNode.add(new DefaultMutableTreeNode(in_monsters)); - settingsPanel.add(buildMonstersPanel(), in_monsters); + monsterPanel = new MonsterPanel(); + settingsPanel.add(monsterPanel, monsterPanel.getTitle()); + experiencePanel = new ExperiencePanel(); + characterNode + .add(new DefaultMutableTreeNode(experiencePanel.getTitle())); + settingsPanel.add(experiencePanel, experiencePanel.getTitle()); rootNode.add(characterNode); appearanceNode = new DefaultMutableTreeNode(in_appearance); Added: Trunk/pcgen/code/src/java/pcgen/gui/prefs/ExperiencePanel.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/gui/prefs/ExperiencePanel.java (rev 0) +++ Trunk/pcgen/code/src/java/pcgen/gui/prefs/ExperiencePanel.java 2008-07-20 07:24:45 UTC (rev 7205) @@ -0,0 +1,136 @@ +/* + * ExperiencePanel.java + * Copyright 2008 (C) James Dempsey + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * Created on 20/07/2008 14:21:40 + * + * $Id: $ + */ +package pcgen.gui.prefs; + +import java.awt.GridBagConstraints; +import java.awt.GridBagLayout; +import java.awt.Insets; +import java.util.List; + +import javax.swing.BorderFactory; +import javax.swing.JLabel; +import javax.swing.border.Border; +import javax.swing.border.TitledBorder; + +import pcgen.core.GameMode; +import pcgen.core.SettingsHandler; +import pcgen.gui.utils.JComboBoxEx; +import pcgen.gui.utils.Utility; +import pcgen.util.PropertyFactory; + +/** + * The Class <code>ExperiencePanel</code> is responsible for + * displaying experience related preferences and allowing the + * preferences to be edited by the user. + * + * Last Editor: $Author: $ + * Last Edited: $Date: $ + * + * @author James Dempsey <jde...@us...> + * @version $Revision: $ + */ +@SuppressWarnings("serial") +public class ExperiencePanel extends PCGenPrefsPanel +{ + private static String in_experience = + PropertyFactory.getString("in_Prefs_experience"); + private JComboBoxEx xpTableCombo = new JComboBoxEx(); + + /** + * Instantiates a new monster panel. + */ + public ExperiencePanel() + { + GridBagLayout gridbag = new GridBagLayout(); + GridBagConstraints c = new GridBagConstraints(); + JLabel label; + Border etched = null; + TitledBorder title1 = + BorderFactory.createTitledBorder(etched, in_experience); + + title1.setTitleJustification(TitledBorder.LEFT); + this.setBorder(title1); + gridbag = new GridBagLayout(); + this.setLayout(gridbag); + c = new GridBagConstraints(); + c.fill = GridBagConstraints.HORIZONTAL; + c.anchor = GridBagConstraints.NORTHWEST; + c.insets = new Insets(2, 2, 2, 2); + + Utility.buildConstraints(c, 0, 0, 2, 1, 0, 0); + label = + new JLabel(PropertyFactory + .getString("in_Prefs_xpTable") + + ": "); + gridbag.setConstraints(label, c); + this.add(label); + Utility.buildConstraints(c, 2, 0, 1, 1, 0, 0); + gridbag.setConstraints(xpTableCombo, c); + this.add(xpTableCombo); + + Utility.buildConstraints(c, 5, 20, 1, 1, 1, 1); + c.fill = GridBagConstraints.BOTH; + label = new JLabel(" "); + gridbag.setConstraints(label, c); + this.add(label); + } + + /* (non-Javadoc) + * @see pcgen.gui.prefs.PCGenPrefsPanel#getTitle() + */ + @Override + public String getTitle() + { + return in_experience; + } + + /* (non-Javadoc) + * @see pcgen.gui.prefs.PreferencesPanel#applyPreferences() + */ + @Override + public void setOptionsBasedOnControls() + { + final GameMode gameMode = SettingsHandler.getGame(); + gameMode.setXpTableName(String.valueOf(xpTableCombo.getSelectedItem())); + } + + /* (non-Javadoc) + * @see pcgen.gui.prefs.PreferencesPanel#initPreferences() + */ + @Override + public void applyOptionValuesToControls() + { + final GameMode gameMode = SettingsHandler.getGame(); + final String xpTableName = gameMode.getXpTableName(); + + List<String> xpTableNames = gameMode.getAvailXpTableNames(); + xpTableCombo.removeAllItems(); + + for (String name : xpTableNames) + { + xpTableCombo.addItem(name); + } + xpTableCombo.setSelectedItem(xpTableName); + } + +} Added: Trunk/pcgen/code/src/java/pcgen/gui/prefs/MonsterPanel.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/gui/prefs/MonsterPanel.java (rev 0) +++ Trunk/pcgen/code/src/java/pcgen/gui/prefs/MonsterPanel.java 2008-07-20 07:24:45 UTC (rev 7205) @@ -0,0 +1,146 @@ +/* + * MonsterPanel.java + * Copyright 2008 (C) James Dempsey + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * Created on 20/07/2008 13:23:43 + * + * $Id: $ + */ +package pcgen.gui.prefs; + +import java.awt.GridBagConstraints; +import java.awt.GridBagLayout; +import java.awt.Insets; + +import javax.swing.BorderFactory; +import javax.swing.JCheckBox; +import javax.swing.JLabel; +import javax.swing.border.Border; +import javax.swing.border.TitledBorder; + +import pcgen.core.SettingsHandler; +import pcgen.gui.utils.Utility; +import pcgen.util.PropertyFactory; + +/** + * The Class <code>MonsterPanel</code> is responsible for + * displaying monster related preferences and allowing the + * preferences to be edited by the user. + * + * Last Editor: $Author: $ + * Last Edited: $Date: $ + * + * @author James Dempsey <jde...@us...> + * @version $Revision: $ + */ +@SuppressWarnings("serial") +public class MonsterPanel extends PCGenPrefsPanel +{ + private static String in_monsters = + PropertyFactory.getString("in_Prefs_monsters"); + private JCheckBox hideMonsterClasses = new JCheckBox(); + private JCheckBox ignoreMonsterHDCap = new JCheckBox(); + + /** + * Instantiates a new monster panel. + */ + public MonsterPanel() + { + GridBagLayout gridbag = new GridBagLayout(); + GridBagConstraints c = new GridBagConstraints(); + JLabel label; + Border etched = null; + TitledBorder title1 = + BorderFactory.createTitledBorder(etched, in_monsters); + + title1.setTitleJustification(TitledBorder.LEFT); + this.setBorder(title1); + gridbag = new GridBagLayout(); + this.setLayout(gridbag); + c = new GridBagConstraints(); + c.fill = GridBagConstraints.HORIZONTAL; + c.anchor = GridBagConstraints.NORTHWEST; + c.insets = new Insets(2, 2, 2, 2); + +// Utility.buildConstraints(c, 0, 0, 2, 1, 0, 0); +// label = +// new JLabel(PropertyFactory +// .getString("in_Prefs_defaultMonsters") +// + ": "); +// gridbag.setConstraints(label, c); +// this.add(label); +// Utility.buildConstraints(c, 2, 0, 1, 1, 0, 0); + + Utility.buildConstraints(c, 0, 1, 2, 1, 0, 0); + label = + new JLabel(PropertyFactory + .getString("in_Prefs_hideMonsterClasses") + + ": "); + gridbag.setConstraints(label, c); + this.add(label); + Utility.buildConstraints(c, 2, 1, 1, 1, 0, 0); + gridbag.setConstraints(hideMonsterClasses, c); + this.add(hideMonsterClasses); + + Utility.buildConstraints(c, 0, 2, 2, 1, 0, 0); + label = + new JLabel(PropertyFactory + .getString("in_Prefs_ignoreMonsterHDCap") + + ": "); + gridbag.setConstraints(label, c); + this.add(label); + Utility.buildConstraints(c, 2, 2, 1, 1, 0, 0); + gridbag.setConstraints(ignoreMonsterHDCap, c); + this.add(ignoreMonsterHDCap); + + Utility.buildConstraints(c, 5, 20, 1, 1, 1, 1); + c.fill = GridBagConstraints.BOTH; + label = new JLabel(" "); + gridbag.setConstraints(label, c); + this.add(label); + } + + /* (non-Javadoc) + * @see pcgen.gui.prefs.PCGenPrefsPanel#getTitle() + */ + @Override + public String getTitle() + { + return in_monsters; + } + + /* (non-Javadoc) + * @see pcgen.gui.prefs.PreferencesPanel#applyPreferences() + */ + @Override + public void setOptionsBasedOnControls() + { + SettingsHandler.setHideMonsterClasses(hideMonsterClasses.isSelected()); + SettingsHandler.setIgnoreMonsterHDCap(ignoreMonsterHDCap.isSelected()); + } + + /* (non-Javadoc) + * @see pcgen.gui.prefs.PreferencesPanel#initPreferences() + */ + @Override + public void applyOptionValuesToControls() + { + hideMonsterClasses.setSelected(SettingsHandler.hideMonsterClasses()); + ignoreMonsterHDCap.setSelected(SettingsHandler.isIgnoreMonsterHDCap()); + } + +} Added: Trunk/pcgen/code/src/java/pcgen/gui/prefs/PCGenPrefsPanel.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/gui/prefs/PCGenPrefsPanel.java (rev 0) +++ Trunk/pcgen/code/src/java/pcgen/gui/prefs/PCGenPrefsPanel.java 2008-07-20 07:24:45 UTC (rev 7205) @@ -0,0 +1,56 @@ +/* + * PreferencesPanel.java + * Copyright 2008 (C) James Dempsey + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * Created on 20/07/2008 12:29:10 + * + * $Id: $ + */ +package pcgen.gui.prefs; + +import javax.swing.JPanel; + +/** + * The abstract class <code>PCGenPrefsPanel</code> defines the + * interface for a panel in the Preferences dialog. + * + * Last Editor: $Author: $ + * Last Edited: $Date: $ + * + * @author James Dempsey <jde...@us...> + * @version $Revision: $ + */ +@SuppressWarnings("serial") +public abstract class PCGenPrefsPanel extends JPanel +{ + + /** + * Returns the title of the panel. + */ + public abstract String getTitle(); + + /** + * Initialises the panel's values based on the current preferences. + */ + public abstract void applyOptionValuesToControls(); + + /** + * Updates the current preferences based on the panel's values. + */ + public abstract void setOptionsBasedOnControls(); + +} Modified: Trunk/pcgen/code/src/java/pcgen/gui/prop/LanguageBundle.properties =================================================================== --- Trunk/pcgen/code/src/java/pcgen/gui/prop/LanguageBundle.properties 2008-07-20 06:06:42 UTC (rev 7204) +++ Trunk/pcgen/code/src/java/pcgen/gui/prop/LanguageBundle.properties 2008-07-20 07:24:45 UTC (rev 7205) @@ -2910,6 +2910,10 @@ in_Prefs_ignoreMonsterHDCap=Ignore Monster HD Cap +in_Prefs_experience=Experience + +in_Prefs_xpTable=Experience table to be used + in_Prefs_pcgen=PCGen in_Prefs_pcgenTip=Settings that affect the way PCGen works. Modified: Trunk/pcgen/code/src/java/pcgen/persistence/lst/LevelLoader.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/persistence/lst/LevelLoader.java 2008-07-20 06:06:42 UTC (rev 7204) +++ Trunk/pcgen/code/src/java/pcgen/persistence/lst/LevelLoader.java 2008-07-20 07:24:45 UTC (rev 7205) @@ -27,8 +27,10 @@ import java.net.URI; import java.util.Map; +import java.util.Set; import java.util.StringTokenizer; +import pcgen.core.GameMode; import pcgen.core.LevelInfo; import pcgen.persistence.SystemLoader; import pcgen.util.Logging; @@ -56,14 +58,43 @@ * @param inputLine The line to be parsed * @param lineNum The number of the line being parsed. */ - public static void parseLine(LevelInfo levelInfo, String inputLine, - int lineNum, URI source) + public static String parseLine(GameMode gameMode, String inputLine, + int lineNum, URI source, String xpTable) { - if (levelInfo == null) + if (gameMode == null) { - return; + return ""; } + // Deal with the start of a new XPTable definition + if (inputLine.startsWith("XPTABLE:")) + { + String value = inputLine.substring(8); + if (value.indexOf("\t") >= 0) + { + value = value.substring(0, value.indexOf("\t")); + } + value = value.trim(); + if (value.equals("")) + { + Logging.errorPrint("Error parsing level line \"" + + inputLine + "\": empty XPTABLE value."); + } + else + { + gameMode.addXpTable(value); + return value; + } + } + + // Provide a default fallback table name for backwards compatibility + if (xpTable.equals("")) + { + xpTable = "Default"; + gameMode.addXpTable(xpTable); + } + + final LevelInfo levelInfo = new LevelInfo(); final StringTokenizer colToken = new StringTokenizer(inputLine, SystemLoader.TAB_DELIM); @@ -103,5 +134,80 @@ + colString + "' at line " + lineNum + ". Token ignored."); } } + if (validateLevelInfo(gameMode, xpTable, levelInfo, inputLine, lineNum, source)) + { + gameMode.addLevelInfo(xpTable, levelInfo); + } + return xpTable; } + + private static boolean validateLevelInfo(GameMode gameMode, String xpTable, + LevelInfo levelInfo, String inputLine, + int lineNum, URI source) + { + String level = levelInfo.getLevelString(); + if (level == null) + { + Logging.errorPrint("LevelLoader got empty level value in '" + + inputLine + "' at line " + lineNum + " of " + source + ". Line ignored."); + return false; + } + Map<String, LevelInfo> existingInfo = gameMode.getLevelInfo(xpTable); + if (existingInfo == null) + { + // No data on this table held yet, so it has to be right + return true; + } + + // Not a number so just check for a duplicate + if (existingInfo.get(level) != null) + { + Logging.errorPrint("LevelLoader got duplicate level value of '" + level + "' in '" + + inputLine + "' at line " + lineNum + " of " + source + ". Line ignored."); + return false; + } + if (!isNumeric(level)) + { + // Not a number so must be good now + return true; + } + + int levelValue = getIntValue(level); + Set<String> keys = existingInfo.keySet(); + for (String lvlKey : keys) + { + if (levelValue < getIntValue(existingInfo.get(lvlKey).getLevelString())) + { + Logging.errorPrint("LevelLoader got out of sequence level value of '" + level + "' in '" + + inputLine + "' at line " + lineNum + " of " + source + ". Line ignored."); + return false; + } + } + return true; + } + + private static boolean isNumeric(String level) + { + try + { + Integer.parseInt(level); + return true; + } + catch (NumberFormatException e) + { + return false; + } + } + + private static int getIntValue(String level) + { + try + { + return Integer.parseInt(level); + } + catch (NumberFormatException e) + { + return 0; + } + } } \ No newline at end of file Modified: Trunk/pcgen/code/src/java/pcgen/persistence/lst/LstSystemLoader.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/persistence/lst/LstSystemLoader.java 2008-07-20 06:06:42 UTC (rev 7204) +++ Trunk/pcgen/code/src/java/pcgen/persistence/lst/LstSystemLoader.java 2008-07-20 07:24:45 UTC (rev 7205) @@ -1013,7 +1013,7 @@ } String[] fileLines = data.split(LstFileLoader.LINE_SEPARATOR_REGEXP); - + String xpTable = ""; for (int i = 0; i < fileLines.length; i++) { String aLine = fileLines[i]; @@ -1031,9 +1031,7 @@ } else if (aType.equals("level")) { - final LevelInfo level = new LevelInfo(); - LevelLoader.parseLine(level, aLine, i + 1, uri); - gameMode.addLevelInfo(level); + xpTable = LevelLoader.parseLine(gameMode, aLine, i + 1, uri, xpTable); } else if (aType.equals("rules")) { Modified: Trunk/pcgen/code/src/test/pcgen/io/ExportHandlerTest.java =================================================================== --- Trunk/pcgen/code/src/test/pcgen/io/ExportHandlerTest.java 2008-07-20 06:06:42 UTC (rev 7204) +++ Trunk/pcgen/code/src/test/pcgen/io/ExportHandlerTest.java 2008-07-20 07:24:45 UTC (rev 7205) @@ -107,7 +107,7 @@ levelInfo.setMaxClassSkillString("LEVEL+3"); levelInfo.setMaxCrossClassSkillString("(LEVEL+3)/2"); GameMode gamemode = SettingsHandler.getGame(); - gamemode.addLevelInfo(levelInfo); + gamemode.addLevelInfo("Default", levelInfo); //Stats setPCStat(character, "DEX", 16); Modified: Trunk/pcgen/code/src/test/plugin/exporttokens/SkillTokenTest.java =================================================================== --- Trunk/pcgen/code/src/test/plugin/exporttokens/SkillTokenTest.java 2008-07-20 06:06:42 UTC (rev 7204) +++ Trunk/pcgen/code/src/test/plugin/exporttokens/SkillTokenTest.java 2008-07-20 07:24:45 UTC (rev 7205) @@ -96,7 +96,7 @@ levelInfo.setMaxClassSkillString("LEVEL+3"); levelInfo.setMaxCrossClassSkillString("(LEVEL+3)/2"); GameMode gamemode = SettingsHandler.getGame(); - gamemode.addLevelInfo(levelInfo); + gamemode.addLevelInfo("Default", levelInfo); //Stats setPCStat(character, "DEX", 16); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |