From: <jde...@us...> - 2010-08-21 21:48:37
|
Revision: 12907 http://pcgen.svn.sourceforge.net/pcgen/?rev=12907&view=rev Author: jdempsey Date: 2010-08-21 21:48:30 +0000 (Sat, 21 Aug 2010) Log Message: ----------- Summary tab - Implement selection and commit for skill langauges Modified Paths: -------------- sandbox/cdomui/code/src/java/pcgen/core/analysis/SkillLanguage.java sandbox/cdomui/code/src/java/pcgen/core/chooser/AbstractBasicChoiceManager.java sandbox/cdomui/code/src/java/pcgen/core/chooser/CDOMChoiceManager.java sandbox/cdomui/code/src/java/pcgen/core/chooser/ChoiceManagerList.java sandbox/cdomui/code/src/java/pcgen/gui2/facade/LanguageChooserFacadeImpl.java sandbox/cdomui/code/src/java/pcgen/util/chooser/ChooserFactory.java Modified: sandbox/cdomui/code/src/java/pcgen/core/analysis/SkillLanguage.java =================================================================== --- sandbox/cdomui/code/src/java/pcgen/core/analysis/SkillLanguage.java 2010-08-21 21:39:38 UTC (rev 12906) +++ sandbox/cdomui/code/src/java/pcgen/core/analysis/SkillLanguage.java 2010-08-21 21:48:30 UTC (rev 12907) @@ -25,6 +25,7 @@ import java.util.Iterator; import java.util.List; +import pcgen.cdom.base.CDOMObject; import pcgen.cdom.base.Constants; import pcgen.cdom.enumeration.StringKey; import pcgen.core.Globals; @@ -111,25 +112,28 @@ Globals.sortChooserLists(available, selected); ChooserInterface lc = ChooserFactory.getChooserInstance(); - lc.setVisible(false); - lc.setAvailableList(available); - lc.setSelectedList(selected); - lc.setTotalChoicesAvail(numLanguages); - lc.setPoolFlag(false); - lc.setVisible(true); + if (lc != null) + { + lc.setVisible(false); + lc.setAvailableList(available); + lc.setSelectedList(selected); + lc.setTotalChoicesAvail(numLanguages); + lc.setPoolFlag(false); + lc.setVisible(true); - aPC.clearLanguages(); - aPC.addLanguages(selected); + aPC.clearLanguages(); + aPC.addLanguages(selected); - // Add in all choice-excluded languages - aPC.addLanguages(excludedLangs); - aPC.removeAllAssociations(languageSkill); - // TODO Fix this to allow Language objects. - for (Iterator<?> i = lc.getSelectedList().iterator(); i.hasNext();) - { - aPC.addAssociation(languageSkill, ((Language) i.next()).getKeyName()); + // Add in all choice-excluded languages + aPC.addLanguages(excludedLangs); + aPC.removeAllAssociations(languageSkill); + // TODO Fix this to allow Language objects. + for (Iterator<?> i = lc.getSelectedList().iterator(); i.hasNext();) + { + aPC.addAssociation(languageSkill, ((Language) i.next()).getKeyName()); + } + aPC.setDirty(true); } - aPC.setDirty(true); return true; } @@ -148,7 +152,7 @@ * @param excludedLangs The list of languages that cannot be selected. */ public static void buildLanguageListsForSkill(PlayerCharacter aPC, - Skill languageSkill, List<Language> selected, List<Language> available, + CDOMObject languageSkill, List<Language> selected, List<Language> available, List<Language> excludedLangs) { String reqType = null; Modified: sandbox/cdomui/code/src/java/pcgen/core/chooser/AbstractBasicChoiceManager.java =================================================================== --- sandbox/cdomui/code/src/java/pcgen/core/chooser/AbstractBasicChoiceManager.java 2010-08-21 21:39:38 UTC (rev 12906) +++ sandbox/cdomui/code/src/java/pcgen/core/chooser/AbstractBasicChoiceManager.java 2010-08-21 21:48:30 UTC (rev 12907) @@ -135,16 +135,8 @@ public List<T> doChooser(PlayerCharacter aPc, final List<T> availableList, final List<T> selectedList, final List<String> reservedList) { - int selectedPoolValue = (selectedList.size() + (choicesPerUnitCost - 1)) - / choicesPerUnitCost; - int reservedPoolValue = (reservedList.size() + (choicesPerUnitCost - 1)) - / choicesPerUnitCost; - int limitedChoices = numberOfChoices - reservedPoolValue + selectedPoolValue; - int effectiveTotalChoices = numberOfChoices == -1 ? controller - .getTotalChoices() : limitedChoices; - int effectiveChoices = Math - .min(controller.getPool() + selectedPoolValue, - effectiveTotalChoices / choicesPerUnitCost); + int effectiveChoices = + getNumEffectiveChoices(selectedList, reservedList); final ChooserInterface chooser = getChooserInstance(); boolean dupsAllowed = controller.isMultYes() && controller.isStackYes(); @@ -171,6 +163,29 @@ } /** + * Calculate the number of effective choices the user can make. + * + * @param selectedList The list of already selected items. + * @param reservedList + * @return The number of choices that may be made + */ + public int getNumEffectiveChoices(final List<T> selectedList, + final List<String> reservedList) + { + int selectedPoolValue = (selectedList.size() + (choicesPerUnitCost - 1)) + / choicesPerUnitCost; + int reservedPoolValue = (reservedList.size() + (choicesPerUnitCost - 1)) + / choicesPerUnitCost; + int limitedChoices = numberOfChoices - reservedPoolValue + selectedPoolValue; + int effectiveTotalChoices = numberOfChoices == -1 ? controller + .getTotalChoices() : limitedChoices; + int effectiveChoices = Math + .min(controller.getPool() + selectedPoolValue, + effectiveTotalChoices / choicesPerUnitCost); + return effectiveChoices; + } + + /** * Retrieve the appropriate chooser to use and set its title. * * @return The chooser to be displayed to the user. Modified: sandbox/cdomui/code/src/java/pcgen/core/chooser/CDOMChoiceManager.java =================================================================== --- sandbox/cdomui/code/src/java/pcgen/core/chooser/CDOMChoiceManager.java 2010-08-21 21:39:38 UTC (rev 12906) +++ sandbox/cdomui/code/src/java/pcgen/core/chooser/CDOMChoiceManager.java 2010-08-21 21:48:30 UTC (rev 12907) @@ -92,22 +92,8 @@ public List<T> doChooser(PlayerCharacter aPc, final List<T> availableList, final List<T> selectedList, final List<String> reservedList) { - int selectedPoolValue = (selectedList.size() + (choicesPerUnitCost - 1)) - / choicesPerUnitCost; - int reservedPoolValue = (reservedList.size() + (choicesPerUnitCost - 1)) - / choicesPerUnitCost; - int effectiveTotalChoices; - if (numberOfChoices == null) - { - effectiveTotalChoices = controller.getTotalChoices(); - } - else - { - effectiveTotalChoices = (numberOfChoices - reservedPoolValue + selectedPoolValue); - } - int effectiveChoices = Math - .min(controller.getPool() + selectedPoolValue, - effectiveTotalChoices / choicesPerUnitCost); + int effectiveChoices = + getNumEffectiveChoices(selectedList, reservedList); final ChooserInterface chooser = getChooserInstance(); boolean dupsAllowed = controller.isMultYes() && controller.isStackYes(); @@ -132,6 +118,35 @@ } /** + * Calculate the number of effective choices the user can make. + * + * @param selectedList The list of already selected items. + * @param reservedList + * @return The number of choices that may be made + */ + public int getNumEffectiveChoices(final List<T> selectedList, + final List<String> reservedList) + { + int selectedPoolValue = (selectedList.size() + (choicesPerUnitCost - 1)) + / choicesPerUnitCost; + int reservedPoolValue = (reservedList.size() + (choicesPerUnitCost - 1)) + / choicesPerUnitCost; + int effectiveTotalChoices; + if (numberOfChoices == null) + { + effectiveTotalChoices = controller.getTotalChoices(); + } + else + { + effectiveTotalChoices = (numberOfChoices - reservedPoolValue + selectedPoolValue); + } + int effectiveChoices = Math + .min(controller.getPool() + selectedPoolValue, + effectiveTotalChoices / choicesPerUnitCost); + return effectiveChoices; + } + + /** * Retrieve the appropriate chooser to use and set its title. * * @return The chooser to be displayed to the user. Modified: sandbox/cdomui/code/src/java/pcgen/core/chooser/ChoiceManagerList.java =================================================================== --- sandbox/cdomui/code/src/java/pcgen/core/chooser/ChoiceManagerList.java 2010-08-21 21:39:38 UTC (rev 12906) +++ sandbox/cdomui/code/src/java/pcgen/core/chooser/ChoiceManagerList.java 2010-08-21 21:48:30 UTC (rev 12907) @@ -86,4 +86,14 @@ final PlayerCharacter aPC, final List<T> selected); + /** + * Calculate the number of effective choices the user can make. + * + * @param selectedList The list of already selected items. + * @param reservedList + * @return The number of choices that may be made + */ + public int getNumEffectiveChoices(final List<T> selectedList, + final List<String> reservedList); + } Modified: sandbox/cdomui/code/src/java/pcgen/gui2/facade/LanguageChooserFacadeImpl.java =================================================================== --- sandbox/cdomui/code/src/java/pcgen/gui2/facade/LanguageChooserFacadeImpl.java 2010-08-21 21:39:38 UTC (rev 12906) +++ sandbox/cdomui/code/src/java/pcgen/gui2/facade/LanguageChooserFacadeImpl.java 2010-08-21 21:48:30 UTC (rev 12907) @@ -23,12 +23,20 @@ package pcgen.gui2.facade; import java.util.ArrayList; +import java.util.Collections; +import java.util.Iterator; import java.util.List; import pcgen.cdom.base.CDOMObject; -import pcgen.core.GameMode; +import pcgen.cdom.enumeration.StringKey; import pcgen.core.Language; +import pcgen.core.PObject; import pcgen.core.PlayerCharacter; +import pcgen.core.Skill; +import pcgen.core.analysis.SkillLanguage; +import pcgen.core.analysis.SkillRankControl; +import pcgen.core.chooser.ChoiceManagerList; +import pcgen.core.chooser.ChooserUtilities; import pcgen.core.facade.DefaultReferenceFacade; import pcgen.core.facade.LanguageChooserFacade; import pcgen.core.facade.LanguageFacade; @@ -38,8 +46,8 @@ /** * The Class <code>LanguageChooserFacadeImpl</code> is an implementation of the - * LanguageChooserFacade for the gui2 package. It is responsible for holding - * details of a possible selection of languages. + * LanguageChooserFacade for the gui2 package. It is responsible for managing + * details of a possible selection of languages. * * <br/> * Last Editor: $Author$ @@ -59,6 +67,15 @@ private DefaultReferenceFacade<Integer> numSelectionsRemain; private CharacterFacadeImpl pcFacade; + /** + * Create a new LanguageChooserFacadeImpl. This is initially empty but will be + * populated upon the available list being requested. Called commit or rollback + * ends the 'transaction'. + * + * @param pcFacade The character facade managing this chooser facade. + * @param name The name of the chooser + * @param source The source of the languages list, null for racial bionus languages. + */ public LanguageChooserFacadeImpl(CharacterFacadeImpl pcFacade, String name, CDOMObject source) { this.pcFacade = pcFacade; @@ -70,11 +87,11 @@ selectedList = new DefaultListFacade<LanguageFacade>(); originalSelectedList = new DefaultListFacade<LanguageFacade>(); numSelectionsRemain = new DefaultReferenceFacade<Integer>(0); - - //buildLanguageList(); - } + /** + * Populate the lists of availabel and selected languages ready for use by a chooser. + */ private void buildLanguageList() { if (source == null) @@ -88,7 +105,7 @@ } /** - * + * Build up the language lists for a choice of racial bonus languages. */ private void buildBonusLangList() { @@ -105,19 +122,37 @@ numSelectionsRemain.setReference(bonusLangMax-selLangs.size()); } + /** + * Build up the language lists for a choice of languages linked to a rules + * object. e.g. The speak language skill. + */ private void buildObjectLangList() { -// List<Language> availLangs = new ArrayList<Language>(); -// GameMode gm = ((GameMode) pcFacade.getDataSet().getGameMode()).g; -// List<Language> selLangs = new ArrayList<Language>(); -// -// //CDOMObject skill = theCharacter.getSkillKeyed(speakLangSkill.getKeyName()); -// List<String> langList = theCharacter.getAssociationList(source); -// -// refreshLangListContents(availLangs, availableList); -// refreshLangListContents(selLangs, selectedList); -// int skillLangMax = theCharacter.languageNum(true) - theCharacter.languageNum(false); -// numSelectionsRemain.setReference(skillLangMax-selLangs.size()); + final List<Language> availLangs = new ArrayList<Language>(); + final List<Language> selLangs = new ArrayList<Language>(); + final List<Language> excludedLangs = new ArrayList<Language>(); + String aChoice = source.getSafe(StringKey.CHOICE_STRING); + + SkillLanguage.buildLanguageListsForSkill(theCharacter, source, selLangs, availLangs, excludedLangs); + + refreshLangListContents(availLangs, availableList); + refreshLangListContents(selLangs, selectedList); + refreshLangListContents(selLangs, originalSelectedList); + + int numSelections = 0; + if (source instanceof Skill) + { + numSelections = + SkillRankControl.getTotalRank(theCharacter, (Skill) source) + .intValue() + - selectedList.getSize(); + } + else + { + ChoiceManagerList aMan = ChooserUtilities.getChoiceManager((PObject) source, aChoice, theCharacter); + numSelections = aMan.getNumEffectiveChoices(selLangs, new ArrayList<String>()); + } + numSelectionsRemain.setReference(numSelections); } /** @@ -126,6 +161,7 @@ */ private void refreshLangListContents(List<Language> langList, DefaultListFacade<LanguageFacade> langListFacade) { + Collections.sort(langList); langListFacade.clearContents(); for (Language language : langList) { @@ -209,7 +245,11 @@ if (source != null) { - //TODO: Link the languages to the source + theCharacter.removeAllAssociations(source); + for (LanguageFacade langFacade : selectedList) + { + theCharacter.addAssociation(source, ((Language) langFacade).getKeyName()); + } } // Update list on character facade Modified: sandbox/cdomui/code/src/java/pcgen/util/chooser/ChooserFactory.java =================================================================== --- sandbox/cdomui/code/src/java/pcgen/util/chooser/ChooserFactory.java 2010-08-21 21:39:38 UTC (rev 12906) +++ sandbox/cdomui/code/src/java/pcgen/util/chooser/ChooserFactory.java 2010-08-21 21:48:30 UTC (rev 12907) @@ -47,6 +47,10 @@ */ public static ChooserInterface getChooserInstance() { + if (interfaceClassname == null) + { + return null; + } try { Class<?> c = Class.forName(interfaceClassname); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |