Revision: 19028
http://sourceforge.net/p/pcgen/code/19028
Author: jdempsey
Date: 2013-01-06 01:50:21 +0000 (Sun, 06 Jan 2013)
Log Message:
-----------
Move default choosers to use new UI choosers
* Migrate subclass chooser to new dialog
* Add info panel to chooser dialogs with info to show.
Issue#: CODE-1852
Modified Paths:
--------------
Trunk/pcgen/code/src/java/pcgen/cdom/facet/AddedTemplateFacet.java
Trunk/pcgen/code/src/java/pcgen/core/Globals.java
Trunk/pcgen/code/src/java/pcgen/core/analysis/SubClassApplication.java
Trunk/pcgen/code/src/java/pcgen/core/chooser/CDOMChoiceManager.java
Trunk/pcgen/code/src/java/pcgen/core/chooser/CDOMChooserFacadeImpl.java
Trunk/pcgen/code/src/java/pcgen/core/facade/ChooserFacade.java
Trunk/pcgen/code/src/java/pcgen/core/facade/InfoFactory.java
Trunk/pcgen/code/src/java/pcgen/core/kit/KitAbilities.java
Trunk/pcgen/code/src/java/pcgen/core/kit/KitAlignment.java
Trunk/pcgen/code/src/java/pcgen/core/kit/KitBio.java
Trunk/pcgen/code/src/java/pcgen/core/kit/KitDeity.java
Trunk/pcgen/code/src/java/pcgen/core/kit/KitGear.java
Trunk/pcgen/code/src/java/pcgen/core/kit/KitProf.java
Trunk/pcgen/code/src/java/pcgen/core/kit/KitSkill.java
Trunk/pcgen/code/src/java/pcgen/core/kit/KitSpells.java
Trunk/pcgen/code/src/java/pcgen/gui2/dialog/ChooserDialog.java
Trunk/pcgen/code/src/java/pcgen/gui2/facade/CharacterFacadeImpl.java
Trunk/pcgen/code/src/java/pcgen/gui2/facade/CharacterUtils.java
Trunk/pcgen/code/src/java/pcgen/gui2/facade/GeneralChooserFacadeBase.java
Trunk/pcgen/code/src/java/pcgen/gui2/facade/Gui2InfoFactory.java
Trunk/pcgen/code/src/java/pcgen/gui2/facade/SpellSupportFacadeImpl.java
Trunk/pcgen/code/src/java/pcgen/gui2/facade/TempBonusHelper.java
Trunk/pcgen/code/src/java/pcgen/resources/lang/LanguageBundle.properties
Modified: Trunk/pcgen/code/src/java/pcgen/cdom/facet/AddedTemplateFacet.java
===================================================================
--- Trunk/pcgen/code/src/java/pcgen/cdom/facet/AddedTemplateFacet.java 2013-01-05 22:21:36 UTC (rev 19027)
+++ Trunk/pcgen/code/src/java/pcgen/cdom/facet/AddedTemplateFacet.java 2013-01-06 01:50:21 UTC (rev 19028)
@@ -174,7 +174,7 @@
title += " (" + anOwner.getDisplayName() + ")";
}
Globals.getChoiceFromList(title, availableList, selectedList, 1,
- forceChoice);
+ forceChoice, trackingFacet.getPC(id));
if (selectedList.size() == 1)
{
return selectedList.get(0);
Modified: Trunk/pcgen/code/src/java/pcgen/core/Globals.java
===================================================================
--- Trunk/pcgen/code/src/java/pcgen/core/Globals.java 2013-01-05 22:21:36 UTC (rev 19027)
+++ Trunk/pcgen/code/src/java/pcgen/core/Globals.java 2013-01-06 01:50:21 UTC (rev 19028)
@@ -72,6 +72,7 @@
import pcgen.core.spell.Spell;
import pcgen.core.utils.CoreUtility;
import pcgen.core.utils.MessageType;
+import pcgen.gui2.facade.Gui2InfoFactory;
import pcgen.persistence.PersistenceManager;
import pcgen.rules.context.ConsolidatedListCommitStrategy;
import pcgen.rules.context.LoadContext;
@@ -1405,16 +1406,19 @@
}
/**
- * Geta choice from a list
- * @param title
- * @param choiceList
- * @param selectedList
- * @param pool
+ * Get a choice from a list
+ * @param title The title of the chooser dialog.
+ * @param choiceList The list of possible choices.
+ * @param selectedList The values already selected (none of which should be in the available list).
+ * @param pool The number of choices the user can make.
+ * @param pc The character the choice is being made for.
* @return a choice
*/
- public static <T> List<T> getChoiceFromList(final String title, final List<T> choiceList, final List<T> selectedList, final int pool)
+ public static <T> List<T> getChoiceFromList(final String title,
+ final List<T> choiceList, final List<T> selectedList, final int pool,
+ PlayerCharacter pc)
{
- return getChoiceFromList(title, choiceList, selectedList, pool, false);
+ return getChoiceFromList(title, choiceList, selectedList, pool, false, pc);
}
/**
@@ -1424,9 +1428,12 @@
* @param selectedList The values already selected (none of which should be in the available list).
* @param pool The number of choices the user can make.
* @param forceChoice true if the user will be forced to make all choices.
+ * @param pc The character the choice is being made for.
* @return The list of choices made by the user.
*/
- public static <T> List<T> getChoiceFromList(final String title, final List<T> choiceList, final List<T> selectedList, final int pool, final boolean forceChoice)
+ public static <T> List<T> getChoiceFromList(final String title,
+ final List<T> choiceList, final List<T> selectedList, final int pool,
+ final boolean forceChoice, PlayerCharacter pc)
{
List<T> startingSelectedList = new ArrayList<T>();
if (selectedList != null)
@@ -1440,6 +1447,7 @@
startingSelectedList, pool);
chooserFacade.setAllowsDups(false);
chooserFacade.setRequireCompleteSelection(forceChoice);
+ chooserFacade.setInfoFactory(new Gui2InfoFactory(pc));
ChooserFactory.getDelegate().showGeneralChooser(chooserFacade);
return chooserFacade.getFinalSelected();
Modified: Trunk/pcgen/code/src/java/pcgen/core/analysis/SubClassApplication.java
===================================================================
--- Trunk/pcgen/code/src/java/pcgen/core/analysis/SubClassApplication.java 2013-01-05 22:21:36 UTC (rev 19027)
+++ Trunk/pcgen/code/src/java/pcgen/core/analysis/SubClassApplication.java 2013-01-06 01:50:21 UTC (rev 19028)
@@ -20,9 +20,6 @@
package pcgen.core.analysis;
import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.Iterator;
import java.util.List;
import pcgen.cdom.base.Constants;
@@ -34,9 +31,13 @@
import pcgen.core.PlayerCharacter;
import pcgen.core.SpellProhibitor;
import pcgen.core.SubClass;
+import pcgen.core.chooser.CDOMChooserFacadeImpl;
+import pcgen.core.facade.ChooserFacade.ChooserTreeViewType;
import pcgen.core.prereq.PrereqHandler;
+import pcgen.gui2.facade.Gui2InfoFactory;
+import pcgen.system.LanguageBundle;
+import pcgen.util.Logging;
import pcgen.util.chooser.ChooserFactory;
-import pcgen.util.chooser.ChooserInterface;
import pcgen.util.enumeration.ProhibitedSpellType;
public class SubClassApplication
@@ -50,12 +51,7 @@
return;
}
- List<String> columnNames = new ArrayList<String>(3);
- columnNames.add("Name");
- columnNames.add("Cost");
- columnNames.add("Other");
-
- List<List> choiceList = new ArrayList<List>();
+ List<PCClass> availableList = new ArrayList<PCClass>();
String subClassKey = aPC.getSubClassName(cl);
boolean subClassSelected = subClassKey != null
&& !subClassKey.equals(Constants.NONE)
@@ -67,108 +63,68 @@
{
continue;
}
-
- final List<Object> columnList = new ArrayList<Object>(3);
-
- columnList.add(sc);
- columnList.add(Integer.toString(sc.getSafe(IntegerKey.COST)));
- columnList.add(SubClassApplication.getSupplementalDisplayInfo(sc));
-
+
// If a subclass has already been selected, only add that one
if (!subClassSelected
|| sc.getKeyName().equals(
aPC.getSubClassName(cl)))
{
- choiceList.add(columnList);
+ availableList.add(sc);
}
}
- Collections.sort(choiceList, new Comparator<List>()
- {
- @Override
- public int compare(List o1, List o2)
- {
- try
- {
- PCClass class1 = ((List<PCClass>) o1).get(0);
- PCClass class2 = ((List<PCClass>) o2).get(0);
- return class1.compareTo(class2);
- }
- catch (RuntimeException e)
- {
- return 0;
- }
- }
- });
-
- // add base class to the chooser at the TOP
+ // add base class to the chooser
if (cl.getSafe(ObjectKey.ALLOWBASECLASS)
&& (!subClassSelected || cl.getKeyName().equals(
aPC.getSubClassName(cl))))
{
- final List<Object> columnList2 = new ArrayList<Object>(3);
- columnList2.add(cl);
- columnList2.add("0");
- columnList2.add("");
- choiceList.add(0, columnList2);
+ availableList.add(0, cl);
}
/*
* REFACTOR This makes an assumption that SubClasses are ONLY Schools, which may
* not be a fabulous assumption
*/
- final ChooserInterface c = ChooserFactory.getChooserInstance();
-
- c.setTitle("School Choice (Specialisation)");
- c
- .setMessageText("Make a selection. The cost column indicates the cost of that selection. "
- + "If this cost is non-zero, you will be asked to also "
- + "select items from this list to give up to cover that cost.");
- c.setTotalChoicesAvail(1);
- c.setPoolFlag(false);
-
- // c.setCostColumnNumber(1); // Allow 1 choice, regardless of
- // cost...cost will be applied in second phase
- c.setAvailableColumnNames(columnNames);
- c.setAvailableList(choiceList);
-
- if (choiceList.size() == 1)
+ List<PCClass> selectedSubClasses;
+ CDOMChooserFacadeImpl<PCClass> chooserFacade =
+ new CDOMChooserFacadeImpl<PCClass>(
+ LanguageBundle.getString("in_schoolSpecChoice"), availableList, //$NON-NLS-1$
+ new ArrayList<PCClass>(), 1);
+ chooserFacade.setDefaultView(ChooserTreeViewType.NAME);
+ chooserFacade.setInfoFactory(new Gui2InfoFactory(aPC));
+
+ if (availableList.size() == 1)
{
- c.setSelectedList(choiceList);
+ selectedSubClasses = availableList;
}
- else if (choiceList.size() != 0)
+ else if (availableList.size() == 0)
{
- c.setVisible(true);
+ Logging.log(Logging.WARNING, "No subclass choices avaialble for " + cl);
+ return;
}
+ else
+ {
+ ChooserFactory.getDelegate().showGeneralChooser(chooserFacade);
+ selectedSubClasses = chooserFacade.getFinalSelected();
+ }
- List<List<PCClass>> selectedList;
if (!cl.getSafe(ObjectKey.ALLOWBASECLASS))
{
- while (c.getSelectedList().size() == 0)
+ while (selectedSubClasses.size() == 0)
{
- c.setVisible(true);
+ ChooserFactory.getDelegate().showGeneralChooser(chooserFacade);
+ selectedSubClasses = chooserFacade.getFinalSelected();
}
- selectedList = c.getSelectedList();
-
}
- else
- {
- selectedList = c.getSelectedList();
- }
- if (selectedList.size() == 0)
+ if (selectedSubClasses.size() == 0)
{
return;
}
- List<PCClass> selectedRow = selectedList.get(0);
- if (selectedRow.size() == 0)
- {
- return;
- }
- PCClass subselected = selectedRow.get(0);
+ PCClass subselected = selectedSubClasses.get(0);
- if (!selectedList.isEmpty() && subselected instanceof SubClass)
+ if (subselected instanceof SubClass)
{
aPC.removeProhibitedSchools(cl);
/*
@@ -178,8 +134,8 @@
SubClass sc = (SubClass) subselected;
- choiceList = new ArrayList<List>();
-
+ availableList.clear();
+
for (SubClass sub : subClassList)
{
if (sub.equals(sc))
@@ -192,20 +148,13 @@
continue;
}
- final List<Object> columnList = new ArrayList<Object>(3);
-
int displayedCost = sub.getProhibitCost();
if (displayedCost == 0)
{
continue;
}
- columnList.add(sub);
- columnList.add(Integer.toString(displayedCost));
- columnList.add(SubClassApplication.getSupplementalDisplayInfo(sub));
- columnList.add(sub.getChoice());
-
- choiceList.add(columnList);
+ availableList.add(sub);
}
setSubClassKey(aPC, cl, sc.getKeyName());
@@ -215,29 +164,22 @@
aPC.setAssoc(cl, AssociationKey.SPECIALTY, sc.getChoice());
}
- columnNames.add("Specialty");
-
if (sc.getSafe(IntegerKey.COST) != 0)
{
- final ChooserInterface c1 = ChooserFactory.getChooserInstance();
- c1.setTitle("School Choice (Prohibited)");
- c1.setAvailableColumnNames(columnNames);
- c1.setAvailableList(choiceList);
- c1
- .setMessageText("Make a selection. You must make as many selections "
- + "necessary to cover the cost of your previous selections.");
- c1.setTotalChoicesAvail(sc.getSafe(IntegerKey.COST));
- c1.setPoolFlag(true);
- c1.setCostColumnNumber(1);
- c1.setNegativeAllowed(true);
- c1.setVisible(true);
- selectedList = c1.getSelectedList();
-
- for (Iterator<List<PCClass>> i = selectedList.iterator(); i
- .hasNext();)
+ chooserFacade =
+ new CDOMChooserFacadeImpl<PCClass>(
+ LanguageBundle.getString("in_schoolProhibitChoice"), //$NON-NLS-1$
+ availableList, new ArrayList<PCClass>(), sc
+ .getSafe(IntegerKey.COST));
+ chooserFacade.setDefaultView(ChooserTreeViewType.NAME);
+ chooserFacade.setInfoFactory(new Gui2InfoFactory(aPC));
+ chooserFacade.setRequireCompleteSelection(true);
+ ChooserFactory.getDelegate().showGeneralChooser(chooserFacade);
+ selectedSubClasses = chooserFacade.getFinalSelected();
+
+ for (PCClass choice : chooserFacade.getFinalSelected())
{
- final List columns = i.next();
- sc = (SubClass) columns.get(0);
+ sc = (SubClass) choice;
SpellProhibitor prohibSchool = new SpellProhibitor();
prohibSchool.setType(ProhibitedSpellType.SCHOOL);
prohibSchool.addValue(sc.getChoice());
@@ -272,27 +214,4 @@
}
}
- private static String getSupplementalDisplayInfo(SubClass sc) {
- boolean added = false;
- StringBuilder displayInfo = new StringBuilder();
- if (sc.getSafe(IntegerKey.KNOWN_SPELLS_FROM_SPECIALTY) != 0) {
- displayInfo.append("SPECIALTY SPELLS:").append(
- sc.getSafe(IntegerKey.KNOWN_SPELLS_FROM_SPECIALTY));
- added = true;
- }
-
- if (sc.getSpellBaseStat() != null) {
- if (added) {
- displayInfo.append(" ");
- }
- displayInfo.append("SPELL BASE STAT:").append(sc.getSpellBaseStat());
- added = true;
- }
-
- if (!added) {
- displayInfo.append(' ');
- }
- return displayInfo.toString();
- }
-
}
Modified: Trunk/pcgen/code/src/java/pcgen/core/chooser/CDOMChoiceManager.java
===================================================================
--- Trunk/pcgen/code/src/java/pcgen/core/chooser/CDOMChoiceManager.java 2013-01-05 22:21:36 UTC (rev 19027)
+++ Trunk/pcgen/code/src/java/pcgen/core/chooser/CDOMChoiceManager.java 2013-01-06 01:50:21 UTC (rev 19028)
@@ -10,6 +10,7 @@
import pcgen.core.Globals;
import pcgen.core.PlayerCharacter;
import pcgen.core.facade.ChooserFacade.ChooserTreeViewType;
+import pcgen.gui2.facade.Gui2InfoFactory;
import pcgen.system.LanguageBundle;
import pcgen.util.Logging;
import pcgen.util.chooser.ChooserFactory;
@@ -163,6 +164,7 @@
selectedList, effectiveChoices);
chooserFacade.setDefaultView(ChooserTreeViewType.NAME);
chooserFacade.setAllowsDups(dupsAllowed);
+ chooserFacade.setInfoFactory(new Gui2InfoFactory(aPc));
ChooserFactory.getDelegate().showGeneralChooser(chooserFacade);
return chooserFacade.getFinalSelected();
Modified: Trunk/pcgen/code/src/java/pcgen/core/chooser/CDOMChooserFacadeImpl.java
===================================================================
--- Trunk/pcgen/code/src/java/pcgen/core/chooser/CDOMChooserFacadeImpl.java 2013-01-05 22:21:36 UTC (rev 19027)
+++ Trunk/pcgen/code/src/java/pcgen/core/chooser/CDOMChooserFacadeImpl.java 2013-01-06 01:50:21 UTC (rev 19028)
@@ -40,6 +40,7 @@
import pcgen.core.facade.ChooserFacade;
import pcgen.core.facade.DefaultReferenceFacade;
import pcgen.core.facade.InfoFacade;
+import pcgen.core.facade.InfoFactory;
import pcgen.core.facade.ReferenceFacade;
import pcgen.core.facade.util.DefaultListFacade;
import pcgen.core.facade.util.ListFacade;
@@ -91,6 +92,10 @@
private final String stringDelimiter;
+ private boolean infoAvailable = false;
+
+ private InfoFactory infoFactory = null;
+
/**
* Create a new instance of GeneraChooserFacadeBase with default localised
* text for the chooser. Note none of the supplied lists will be directly
@@ -185,6 +190,7 @@
if (object instanceof InfoFacade)
{
infoFacadeList.add((InfoFacade) object);
+ infoAvailable = true;
}
else if (object instanceof CDOMObject)
{
@@ -424,6 +430,31 @@
return requireCompleteSelection;
}
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public boolean isInfoAvailable()
+ {
+ return infoAvailable;
+ }
+
+ /**
+ * @return the infoFactory
+ */
+ public InfoFactory getInfoFactory()
+ {
+ return infoFactory;
+ }
+
+ /**
+ * @param infoFactory the infoFactory to set
+ */
+ public void setInfoFactory(InfoFactory infoFactory)
+ {
+ this.infoFactory = infoFactory;
+ }
+
private class CDOMInfoWrapper implements InfoFacade
{
private final CDOMObject cdomObj;
Modified: Trunk/pcgen/code/src/java/pcgen/core/facade/ChooserFacade.java
===================================================================
--- Trunk/pcgen/code/src/java/pcgen/core/facade/ChooserFacade.java 2013-01-05 22:21:36 UTC (rev 19027)
+++ Trunk/pcgen/code/src/java/pcgen/core/facade/ChooserFacade.java 2013-01-06 01:50:21 UTC (rev 19028)
@@ -155,4 +155,15 @@
* @return true if the chooser needs to have 0 remaining selections before being committed.
*/
public boolean isRequireCompleteSelection();
+
+ /**
+ * @return Do the items in this chooser have extra info above a name.
+ */
+ public boolean isInfoAvailable();
+
+ /**
+ * Retrieve the factory which provides descriptions for items.
+ * @return The info factory.
+ */
+ public InfoFactory getInfoFactory();
}
Modified: Trunk/pcgen/code/src/java/pcgen/core/facade/InfoFactory.java
===================================================================
--- Trunk/pcgen/code/src/java/pcgen/core/facade/InfoFactory.java 2013-01-05 22:21:36 UTC (rev 19027)
+++ Trunk/pcgen/code/src/java/pcgen/core/facade/InfoFactory.java 2013-01-06 01:50:21 UTC (rev 19028)
@@ -96,6 +96,13 @@
public String getHTMLInfo(TempBonusFacade tempBonusFacade);
/**
+ * Produce the HTML information string for a facade.
+ * @param facade The object to be described.
+ * @return The HTML information string
+ */
+ public String getHTMLInfo(InfoFacade facade);
+
+ /**
* Produce the HTML information string for spell book or spell list.
* @param name The spell book or spell list.
* @return The HTML information string
Modified: Trunk/pcgen/code/src/java/pcgen/core/kit/KitAbilities.java
===================================================================
--- Trunk/pcgen/code/src/java/pcgen/core/kit/KitAbilities.java 2013-01-05 22:21:36 UTC (rev 19027)
+++ Trunk/pcgen/code/src/java/pcgen/core/kit/KitAbilities.java 2013-01-06 01:50:21 UTC (rev 19028)
@@ -199,7 +199,7 @@
selected =
Globals.getChoiceFromList("Choose abilities",
available, new ArrayList<AbilitySelection>(),
- numberOfChoices);
+ numberOfChoices, aPC);
if (selected.size() != 0)
{
Modified: Trunk/pcgen/code/src/java/pcgen/core/kit/KitAlignment.java
===================================================================
--- Trunk/pcgen/code/src/java/pcgen/core/kit/KitAlignment.java 2013-01-05 22:21:36 UTC (rev 19027)
+++ Trunk/pcgen/code/src/java/pcgen/core/kit/KitAlignment.java 2013-01-06 01:50:21 UTC (rev 19028)
@@ -74,7 +74,7 @@
{
List<PCAlignment> sel = new ArrayList<PCAlignment>(1);
Globals.getChoiceFromList("Choose alignment", alignments, sel,
- 1);
+ 1, aPC);
if (sel.size() == 1)
{
align = sel.get(0);
Modified: Trunk/pcgen/code/src/java/pcgen/core/kit/KitBio.java
===================================================================
--- Trunk/pcgen/code/src/java/pcgen/core/kit/KitBio.java 2013-01-05 22:21:36 UTC (rev 19027)
+++ Trunk/pcgen/code/src/java/pcgen/core/kit/KitBio.java 2013-01-06 01:50:21 UTC (rev 19028)
@@ -110,7 +110,7 @@
{
List<Gender> selList = new ArrayList<Gender>(1);
Globals.getChoiceFromList("Choose Gender", theGenders, selList,
- 1);
+ 1, aPC);
if (selList.size() == 1)
{
selectedGender = selList.get(0);
Modified: Trunk/pcgen/code/src/java/pcgen/core/kit/KitDeity.java
===================================================================
--- Trunk/pcgen/code/src/java/pcgen/core/kit/KitDeity.java 2013-01-05 22:21:36 UTC (rev 19027)
+++ Trunk/pcgen/code/src/java/pcgen/core/kit/KitDeity.java 2013-01-06 01:50:21 UTC (rev 19028)
@@ -175,7 +175,7 @@
xs =
Globals.getChoiceFromList("Choose Domains", theDomains,
new ArrayList<CDOMSingleRef<Domain>>(),
- numberOfChoices);
+ numberOfChoices, aPC);
if (xs.size() != 0)
{
Modified: Trunk/pcgen/code/src/java/pcgen/core/kit/KitGear.java
===================================================================
--- Trunk/pcgen/code/src/java/pcgen/core/kit/KitGear.java 2013-01-05 22:21:36 UTC (rev 19027)
+++ Trunk/pcgen/code/src/java/pcgen/core/kit/KitGear.java 2013-01-06 01:50:21 UTC (rev 19028)
@@ -209,7 +209,7 @@
else
{
List<Equipment> selected = new ArrayList<Equipment>(1);
- Globals.getChoiceFromList("Choose equipment", eqList, selected, 1);
+ Globals.getChoiceFromList("Choose equipment", eqList, selected, 1, aPC);
if (selected.size() == 1)
{
theEquipment = selected.get(0);
Modified: Trunk/pcgen/code/src/java/pcgen/core/kit/KitProf.java
===================================================================
--- Trunk/pcgen/code/src/java/pcgen/core/kit/KitProf.java 2013-01-05 22:21:36 UTC (rev 19027)
+++ Trunk/pcgen/code/src/java/pcgen/core/kit/KitProf.java 2013-01-06 01:50:21 UTC (rev 19028)
@@ -218,7 +218,7 @@
Globals
.getChoiceFromList("Choose Proficiencies",
aProfList, new ArrayList<WeaponProf>(),
- numberOfChoices);
+ numberOfChoices, aPC);
if (xs.size() != 0)
{
Modified: Trunk/pcgen/code/src/java/pcgen/core/kit/KitSkill.java
===================================================================
--- Trunk/pcgen/code/src/java/pcgen/core/kit/KitSkill.java 2013-01-05 22:21:36 UTC (rev 19027)
+++ Trunk/pcgen/code/src/java/pcgen/core/kit/KitSkill.java 2013-01-06 01:50:21 UTC (rev 19028)
@@ -141,7 +141,7 @@
List<String> warnings)
{
skillsToAdd = new ArrayList<KitSkillAdd>();
- List<Skill> skillChoices = getSkillChoices();
+ List<Skill> skillChoices = getSkillChoices(aPC);
if (skillChoices == null || skillChoices.size() == 0)
{
@@ -301,7 +301,7 @@
return "Skills";
}
- private List<Skill> getSkillChoices()
+ private List<Skill> getSkillChoices(PlayerCharacter aPC)
{
final List<Skill> skillsOfType = new ArrayList<Skill>();
@@ -321,7 +321,7 @@
List<Skill> skillChoices = new ArrayList<Skill>();
Globals.getChoiceFromList("Select skill", skillsOfType, skillChoices,
- getSafeCount());
+ getSafeCount(), aPC);
return skillChoices;
}
Modified: Trunk/pcgen/code/src/java/pcgen/core/kit/KitSpells.java
===================================================================
--- Trunk/pcgen/code/src/java/pcgen/core/kit/KitSpells.java 2013-01-05 22:21:36 UTC (rev 19027)
+++ Trunk/pcgen/code/src/java/pcgen/core/kit/KitSpells.java 2013-01-06 01:50:21 UTC (rev 19028)
@@ -202,7 +202,7 @@
{
xs = Globals.getChoiceFromList("Choose " + aClass.getKeyName()
+ " spell(s) for " + workingBook, aSpellList,
- new ArrayList<KitSpellBookEntry>(), numberOfChoices);
+ new ArrayList<KitSpellBookEntry>(), numberOfChoices, aPC);
if (xs.size() != 0)
{
Modified: Trunk/pcgen/code/src/java/pcgen/gui2/dialog/ChooserDialog.java
===================================================================
--- Trunk/pcgen/code/src/java/pcgen/gui2/dialog/ChooserDialog.java 2013-01-05 22:21:36 UTC (rev 19027)
+++ Trunk/pcgen/code/src/java/pcgen/gui2/dialog/ChooserDialog.java 2013-01-06 01:50:21 UTC (rev 19028)
@@ -45,16 +45,20 @@
import javax.swing.JSplitPane;
import javax.swing.ListSelectionModel;
import javax.swing.WindowConstants;
+import javax.swing.event.ListSelectionEvent;
+import javax.swing.event.ListSelectionListener;
import pcgen.core.facade.ChooserFacade;
import pcgen.core.facade.ChooserFacade.ChooserTreeViewType;
import pcgen.core.facade.InfoFacade;
+import pcgen.core.facade.InfoFactory;
import pcgen.core.facade.event.ReferenceEvent;
import pcgen.core.facade.event.ReferenceListener;
import pcgen.core.facade.util.DefaultListFacade;
import pcgen.core.facade.util.DelegatingListFacade;
import pcgen.core.facade.util.ListFacade;
import pcgen.gui2.tools.Icons;
+import pcgen.gui2.tools.InfoPane;
import pcgen.gui2.util.FacadeListModel;
import pcgen.gui2.util.JListEx;
import pcgen.gui2.util.JTreeViewTable;
@@ -82,7 +86,7 @@
* @version $Revision$
*/
@SuppressWarnings("serial")
-public class ChooserDialog extends JDialog implements ActionListener, ReferenceListener<Integer>
+public class ChooserDialog extends JDialog implements ActionListener, ReferenceListener<Integer>, ListSelectionListener
{
private final ChooserFacade chooser;
@@ -91,6 +95,7 @@
private final GeneralTreeViewModel treeViewModel;
private final FacadeListModel<InfoFacade> listModel;
private final JListEx list;
+ private final InfoPane infoPane;
private boolean committed;
/**
@@ -107,6 +112,7 @@
this.treeViewModel = new GeneralTreeViewModel();
this.list = new JListEx();
this.listModel = new FacadeListModel<InfoFacade>();
+ this.infoPane = new InfoPane();
treeViewModel.setDelegate(chooser.getAvailableList());
listModel.setListFacade(chooser.getSelectedList());
@@ -177,7 +183,19 @@
rightPane.add(buttonPane2, BorderLayout.SOUTH);
split.setRightComponent(rightPane);
- pane.add(split, BorderLayout.CENTER);
+
+ if (chooser.isInfoAvailable())
+ {
+ JSplitPane infoSplit = new JSplitPane(JSplitPane.VERTICAL_SPLIT);
+ infoSplit.setTopComponent(split);
+ infoSplit.setBottomComponent(infoPane);
+ pane.add(infoSplit, BorderLayout.CENTER);
+ availTable.getSelectionModel().addListSelectionListener(this);
+ }
+ else
+ {
+ pane.add(split, BorderLayout.CENTER);
+ }
JPanel bottomPane = new JPanel(new FlowLayout());
JButton button = new JButton("Ok");
button.setActionCommand("OK");
@@ -197,6 +215,23 @@
}
@Override
+ public void valueChanged(ListSelectionEvent e)
+ {
+ if (!e.getValueIsAdjusting())
+ {
+ if (e.getSource() == availTable.getSelectionModel())
+ {
+ InfoFacade target = (InfoFacade) availTable.getSelectedObject();
+ InfoFactory factory = chooser.getInfoFactory();
+ if (factory != null && target!=null)
+ {
+ infoPane.setText(factory.getHTMLInfo(target));
+ }
+ }
+ }
+ }
+
+ @Override
public void actionPerformed(ActionEvent e)
{
if (e.getActionCommand().equals("ADD") || e.getSource() == availTable)
Modified: Trunk/pcgen/code/src/java/pcgen/gui2/facade/CharacterFacadeImpl.java
===================================================================
--- Trunk/pcgen/code/src/java/pcgen/gui2/facade/CharacterFacadeImpl.java 2013-01-05 22:21:36 UTC (rev 19027)
+++ Trunk/pcgen/code/src/java/pcgen/gui2/facade/CharacterFacadeImpl.java 2013-01-06 01:50:21 UTC (rev 19028)
@@ -1216,7 +1216,7 @@
Equipment aEq = null;
Object target =
TempBonusHelper.getTempBonusTarget(originObj,
- theCharacter, delegate);
+ theCharacter, delegate, infoFactory);
if (target == null)
{
return;
Modified: Trunk/pcgen/code/src/java/pcgen/gui2/facade/CharacterUtils.java
===================================================================
--- Trunk/pcgen/code/src/java/pcgen/gui2/facade/CharacterUtils.java 2013-01-05 22:21:36 UTC (rev 19027)
+++ Trunk/pcgen/code/src/java/pcgen/gui2/facade/CharacterUtils.java 2013-01-06 01:50:21 UTC (rev 19028)
@@ -11,8 +11,8 @@
import pcgen.core.RuleConstants;
import pcgen.core.SizeAdjustment;
import pcgen.core.utils.CoreUtility;
+import pcgen.system.LanguageBundle;
import pcgen.util.Logging;
-import pcgen.system.LanguageBundle;
public class CharacterUtils
{
@@ -70,10 +70,9 @@
}
List<Equipment> selectedClothes = new ArrayList<Equipment>();
- Globals
- .getChoiceFromList(
- LanguageBundle
- .getString("in_sumSelectAFreeSetOfClothing"), clothes, selectedClothes, 1); //$NON-NLS-1$
+ Globals.getChoiceFromList(
+ LanguageBundle.getString("in_sumSelectAFreeSetOfClothing"), //$NON-NLS-1$
+ clothes, selectedClothes, 1, aPC);
if (selectedClothes.size() != 0)
{
Modified: Trunk/pcgen/code/src/java/pcgen/gui2/facade/GeneralChooserFacadeBase.java
===================================================================
--- Trunk/pcgen/code/src/java/pcgen/gui2/facade/GeneralChooserFacadeBase.java 2013-01-05 22:21:36 UTC (rev 19027)
+++ Trunk/pcgen/code/src/java/pcgen/gui2/facade/GeneralChooserFacadeBase.java 2013-01-06 01:50:21 UTC (rev 19028)
@@ -30,6 +30,7 @@
import pcgen.core.facade.ChooserFacade;
import pcgen.core.facade.DefaultReferenceFacade;
import pcgen.core.facade.InfoFacade;
+import pcgen.core.facade.InfoFactory;
import pcgen.core.facade.ReferenceFacade;
import pcgen.core.facade.util.DefaultListFacade;
import pcgen.core.facade.util.ListFacade;
@@ -72,6 +73,8 @@
ChooserTreeViewType.TYPE_NAME;
private boolean requireCompleteSelection;
+
+ private final InfoFactory infoFactory;
/**
* Create a new instance of GeneraChooserFacadeBase with default localised
@@ -82,8 +85,10 @@
* @param available The list of items to select from.
* @param selected The list of items already selected. The user may choose to deselect items from this list.
* @param maxNewSelections The number of selections the user may make in addition to those in the selected list.
+ * @param infoFactory The factory which provides descriptions for items.
*/
- GeneralChooserFacadeBase(String name, List<InfoFacade> available, List<InfoFacade> selected, int maxNewSelections)
+ GeneralChooserFacadeBase(String name, List<InfoFacade> available, List<InfoFacade> selected, int maxNewSelections,
+ InfoFactory infoFactory)
{
this(name, available, selected, maxNewSelections,
LanguageBundle.getString("in_available"), //$NON-NLS-1$
@@ -91,7 +96,8 @@
LanguageBundle.getString("in_selected"), //$NON-NLS-1$
LanguageBundle.getString("in_selRemain"), //$NON-NLS-1$
LanguageBundle.getString("in_add"), //$NON-NLS-1$
- LanguageBundle.getString("in_remove")); //$NON-NLS-1$
+ LanguageBundle.getString("in_remove"), //$NON-NLS-1$
+ infoFactory);
}
/**
@@ -108,12 +114,14 @@
* @param selectionCountName The label for the number of selections remaining.
* @param addButtonName The label for the add button.
* @param removeButtonName The label for the remove button.
+ * @param infoFactory The factory which provides descriptions for items.
*/
GeneralChooserFacadeBase(String name, List<InfoFacade> available,
List<InfoFacade> selected, int maxNewSelections,
String availableTableTitle, String availableTableTypeNameTitle,
String selectedTableTitle,
- String selectionCountName, String addButtonName, String removeButtonName)
+ String selectionCountName, String addButtonName, String removeButtonName,
+ InfoFactory infoFactory)
{
this.name = name;
this.origAvailable = available;
@@ -125,6 +133,7 @@
this.selectionCountName = selectionCountName;
this.addButtonName = addButtonName;
this.removeButtonName = removeButtonName;
+ this.infoFactory = infoFactory;
// Build working content
availableList = new DefaultListFacade<InfoFacade>(origAvailable);
@@ -305,4 +314,22 @@
return requireCompleteSelection;
}
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public boolean isInfoAvailable()
+ {
+ return true;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public InfoFactory getInfoFactory()
+ {
+ return infoFactory;
+ }
+
}
Modified: Trunk/pcgen/code/src/java/pcgen/gui2/facade/Gui2InfoFactory.java
===================================================================
--- Trunk/pcgen/code/src/java/pcgen/gui2/facade/Gui2InfoFactory.java 2013-01-05 22:21:36 UTC (rev 19027)
+++ Trunk/pcgen/code/src/java/pcgen/gui2/facade/Gui2InfoFactory.java 2013-01-06 01:50:21 UTC (rev 19028)
@@ -95,6 +95,7 @@
import pcgen.core.facade.DeityFacade;
import pcgen.core.facade.DomainFacade;
import pcgen.core.facade.EquipmentFacade;
+import pcgen.core.facade.InfoFacade;
import pcgen.core.facade.InfoFactory;
import pcgen.core.facade.KitFacade;
import pcgen.core.facade.RaceFacade;
@@ -109,6 +110,7 @@
import pcgen.gui2.util.HtmlInfoBuilder;
import pcgen.system.LanguageBundle;
import pcgen.system.PCGenSettings;
+import pcgen.util.Delta;
import pcgen.util.Logging;
import pcgen.util.enumeration.Tab;
@@ -148,7 +150,7 @@
public Gui2InfoFactory(PlayerCharacter pc)
{
this.pc = pc;
- this.charDisplay = pc.getDisplay();
+ this.charDisplay = pc == null ? null : pc.getDisplay();
}
/* (non-Javadoc)
@@ -162,7 +164,7 @@
return EMPTY_STRING;
}
String[] favClass = Globals.getContext().unparseSubtoken((Race)race, "FAVCLASS");
- return StringUtil.join(favClass, EMPTY_STRING);
+ return StringUtil.join(favClass, ", ");
}
/* (non-Javadoc)
@@ -252,7 +254,7 @@
String aString;
boolean isSubClass = aClass instanceof SubClass;
- if (isSubClass)
+ if (isSubClass && parentClassFacade != null)
{
parentClass = (PCClass) parentClassFacade;
}
@@ -262,6 +264,13 @@
.piString(aClass, false));
b.appendLineBreak();
+ // Subclass cost - at the top to make choices easier
+ if (isSubClass && aClass.getSafe(IntegerKey.COST) != 0)
+ {
+ b.appendI18nElement("in_clInfoCost", String.valueOf(aClass.getSafe(IntegerKey.COST))); //$NON-NLS-1$
+ b.appendLineBreak();
+ }
+
// Type
aString = aClass.getType();
if (isSubClass && (aString.length() == 0))
@@ -329,6 +338,16 @@
b.appendI18nElement("in_requirements", aString); //$NON-NLS-1$
}
+ // Sub class extra info
+ if (isSubClass)
+ {
+ int specialtySpells = aClass.getSafe(IntegerKey.KNOWN_SPELLS_FROM_SPECIALTY);
+ b.appendLineBreak();
+ b.appendI18nElement("in_clSpecialtySpells", Delta.toString(specialtySpells)); //$NON-NLS-1$
+ b.appendSpacer();
+ b.appendI18nElement("in_clSpecialty", ((SubClass) aClass).getChoice()); //$NON-NLS-1$
+ }
+
// Source
aString = aClass.getSource();
if (isSubClass && (aString.length() == 0))
@@ -1076,7 +1095,7 @@
return EMPTY_STRING;
}
- if (!(tempBonusFacade instanceof TempBonusFacade))
+ if (!(tempBonusFacade instanceof TempBonusFacadeImpl))
{
final HtmlInfoBuilder infoText = new HtmlInfoBuilder();
infoText.appendTitleElement(tempBonusFacade.toString());
@@ -1189,6 +1208,80 @@
return infoText.toString();
}
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public String getHTMLInfo(InfoFacade facade)
+ {
+ if (facade == null)
+ {
+ return EMPTY_STRING;
+ }
+
+ // Use a more detailed info if we can
+ if (facade instanceof AbilityFacade)
+ {
+ return getHTMLInfo((AbilityFacade) facade);
+ }
+ if (facade instanceof ClassFacade)
+ {
+ return getHTMLInfo((ClassFacade) facade, null);
+ }
+ if (facade instanceof DeityFacade)
+ {
+ return getHTMLInfo((DeityFacade) facade);
+ }
+ if (facade instanceof DomainFacade)
+ {
+ return getHTMLInfo((DomainFacade) facade);
+ }
+ if (facade instanceof EquipmentFacade)
+ {
+ return getHTMLInfo((EquipmentFacade) facade);
+ }
+ if (facade instanceof KitFacade)
+ {
+ return getHTMLInfo((KitFacade) facade);
+ }
+ if (facade instanceof RaceFacade)
+ {
+ return getHTMLInfo((RaceFacade) facade);
+ }
+ if (facade instanceof SkillFacade)
+ {
+ return getHTMLInfo((SkillFacade) facade);
+ }
+ if (facade instanceof SpellFacade)
+ {
+ return getHTMLInfo((SpellFacade) facade);
+ }
+ if (facade instanceof TempBonusFacade)
+ {
+ return getHTMLInfo((TempBonusFacade) facade);
+ }
+ if (facade instanceof TemplateFacade)
+ {
+ return getHTMLInfo((TemplateFacade) facade);
+ }
+
+ final HtmlInfoBuilder infoText = new HtmlInfoBuilder();
+ infoText.appendTitleElement(facade.toString());
+ infoText.appendLineBreak();
+
+ if (facade.getType().length() > 0)
+ {
+ infoText.appendI18nElement("in_irInfoType", facade.getType()); //$NON-NLS-1$
+ infoText.appendLineBreak();
+ }
+
+ infoText.appendI18nElement(
+ "in_itmInfoLabelTextSource", //$NON-NLS-1$
+ facade.getSource());
+
+ return infoText.toString();
+ }
+
private static class ObjectTypeComparator implements Comparator<BaseKit>
{
@Override
Modified: Trunk/pcgen/code/src/java/pcgen/gui2/facade/SpellSupportFacadeImpl.java
===================================================================
--- Trunk/pcgen/code/src/java/pcgen/gui2/facade/SpellSupportFacadeImpl.java 2013-01-05 22:21:36 UTC (rev 19027)
+++ Trunk/pcgen/code/src/java/pcgen/gui2/facade/SpellSupportFacadeImpl.java 2013-01-06 01:50:21 UTC (rev 19028)
@@ -77,6 +77,7 @@
import pcgen.core.facade.EquipmentListFacade.EquipmentListEvent;
import pcgen.core.facade.EquipmentListFacade.EquipmentListListener;
import pcgen.core.facade.InfoFacade;
+import pcgen.core.facade.InfoFactory;
import pcgen.core.facade.SpellFacade;
import pcgen.core.facade.SpellSupportFacade;
import pcgen.core.facade.TodoFacade.CharacterTab;
@@ -129,6 +130,7 @@
private DefaultReferenceFacade<String> defaultSpellBook;
private TodoManager todoManager;
private CharacterFacade pcFacade;
+ private final InfoFactory infoFactory;
/**
@@ -146,6 +148,7 @@
CharacterFacade pcFacade)
{
this.pc = pc;
+ this.infoFactory = pcFacade.getInfoFactory();
this.charDisplay = pc.getDisplay();
this.delegate = delegate;
this.dataSet = dataSet;
@@ -350,7 +353,9 @@
}
final ArrayList<Ability> selectedList = new ArrayList<Ability>();
- GeneralChooserFacadeBase chooserFacade = new GeneralChooserFacadeBase(label, availableList, new ArrayList<InfoFacade>(), 99)
+ GeneralChooserFacadeBase chooserFacade =
+ new GeneralChooserFacadeBase(label, availableList,
+ new ArrayList<InfoFacade>(), 99, infoFactory)
{
/**
* {@inheritDoc}
Modified: Trunk/pcgen/code/src/java/pcgen/gui2/facade/TempBonusHelper.java
===================================================================
--- Trunk/pcgen/code/src/java/pcgen/gui2/facade/TempBonusHelper.java 2013-01-05 22:21:36 UTC (rev 19027)
+++ Trunk/pcgen/code/src/java/pcgen/gui2/facade/TempBonusHelper.java 2013-01-06 01:50:21 UTC (rev 19028)
@@ -45,6 +45,7 @@
import pcgen.core.display.CharacterDisplay;
import pcgen.core.facade.ChooserFacade.ChooserTreeViewType;
import pcgen.core.facade.InfoFacade;
+import pcgen.core.facade.InfoFactory;
import pcgen.core.facade.UIDelegate;
import pcgen.core.prereq.PrereqHandler;
import pcgen.core.prereq.Prerequisite;
@@ -81,11 +82,13 @@
* @param originObj The rules object providing the bonus.
* @param theCharacter The target character.
* @param delegate The user interface delegate which will provide the chooser.
+ * @param infoFactory An object to provide formatted information about an object.
* @return The temporary equipment item, the character or null if the request
* was cancelled.
*/
- static Object getTempBonusTarget(
- CDOMObject originObj, PlayerCharacter theCharacter, UIDelegate delegate)
+ static Object getTempBonusTarget(CDOMObject originObj,
+ PlayerCharacter theCharacter, UIDelegate delegate,
+ InfoFactory infoFactory)
{
List<InfoFacade> possibleTargets =
getListOfApplicableEquipment(originObj, theCharacter);
@@ -111,7 +114,7 @@
final ArrayList<InfoFacade> selectedList = new ArrayList<InfoFacade>();
GeneralChooserFacadeBase chooserFacade =
new GeneralChooserFacadeBase(label, possibleTargets,
- new ArrayList<InfoFacade>(), 1)
+ new ArrayList<InfoFacade>(), 1, infoFactory)
{
/**
* {@inheritDoc}
Modified: Trunk/pcgen/code/src/java/pcgen/resources/lang/LanguageBundle.properties
===================================================================
--- Trunk/pcgen/code/src/java/pcgen/resources/lang/LanguageBundle.properties 2013-01-05 22:21:36 UTC (rev 19027)
+++ Trunk/pcgen/code/src/java/pcgen/resources/lang/LanguageBundle.properties 2013-01-06 01:50:21 UTC (rev 19028)
@@ -644,6 +644,8 @@
in_clInfo=Class Info
+in_clInfoCost=Choice Cost
+
in_clInfoType=Type
in_clInfoHD=HD
@@ -652,6 +654,12 @@
in_clInfoBaseStat=Base Stat
+in_clSubClassInfo=Subclass Info
+
+in_clSpecialty=Specialty
+
+in_clSpecialtySpells=Specialty Spells
+
in_clYouAreNotQualifiedToTakeTheClass=You are not qualified to take the class
in_clTodoLevelUp=Select a class and add a level.
@@ -2128,6 +2136,9 @@
in_equipChoiceMod=Select {0} ({1})
in_equipChoiceSelectMod=Select modifier ({0})
+in_schoolSpecChoice=School Choice (Specialisation)
+in_schoolProhibitChoice=School Choice (Prohibited)
+
# House Rules/PRERULE lines
InfoSpells.caster.type=Spell Caster Type
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|