From: <jde...@us...> - 2011-02-09 12:11:39
|
Revision: 14535 http://pcgen.svn.sourceforge.net/pcgen/?rev=14535&view=rev Author: jdempsey Date: 2011-02-09 12:11:32 +0000 (Wed, 09 Feb 2011) Log Message: ----------- Implement New Domains Tab * Add isQualifiedFor method for domains Issue#: CODE-508 Modified Paths: -------------- sandbox/cdomui/code/src/java/pcgen/core/facade/CharacterFacade.java sandbox/cdomui/code/src/java/pcgen/gui2/facade/CharacterFacadeImpl.java Modified: sandbox/cdomui/code/src/java/pcgen/core/facade/CharacterFacade.java =================================================================== --- sandbox/cdomui/code/src/java/pcgen/core/facade/CharacterFacade.java 2011-02-09 11:53:11 UTC (rev 14534) +++ sandbox/cdomui/code/src/java/pcgen/core/facade/CharacterFacade.java 2011-02-09 12:11:32 UTC (rev 14535) @@ -473,4 +473,10 @@ */ public void refreshRollMethod(); + /** + * Check if the character meets all requirements to take the domain. + * @param domain The domain to be checked. + * @return True if the character can take the domain, false if not. + */ + public boolean isQualifiedFor(DomainFacade domain); } Modified: sandbox/cdomui/code/src/java/pcgen/gui2/facade/CharacterFacadeImpl.java =================================================================== --- sandbox/cdomui/code/src/java/pcgen/gui2/facade/CharacterFacadeImpl.java 2011-02-09 11:53:11 UTC (rev 14534) +++ sandbox/cdomui/code/src/java/pcgen/gui2/facade/CharacterFacadeImpl.java 2011-02-09 12:11:32 UTC (rev 14535) @@ -2603,4 +2603,23 @@ return infoFactory; } + /* (non-Javadoc) + * @see pcgen.core.facade.CharacterFacade#isQualifiedFor(pcgen.core.facade.DomainFacade) + */ + public boolean isQualifiedFor(DomainFacade domainFacade) + { + if (!(domainFacade instanceof Domain)) + { + return false; + } + + Domain domain = (Domain) domainFacade; + if (/*!PrereqHandler.passesAll(addedDomain.getPrerequisiteList(), pc, addedDomain) + || */!domain.qualifies(theCharacter)) + { + return false; + } + return true; + } + } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jde...@us...> - 2011-02-10 11:44:33
|
Revision: 14543 http://pcgen.svn.sourceforge.net/pcgen/?rev=14543&view=rev Author: jdempsey Date: 2011-02-10 11:44:26 +0000 (Thu, 10 Feb 2011) Log Message: ----------- Implement New Domains Tab * Add support for prereqs on the granting of a domain Issue#: CODE-508 Modified Paths: -------------- sandbox/cdomui/code/src/java/pcgen/core/Domain.java sandbox/cdomui/code/src/java/pcgen/gui2/facade/CharacterFacadeImpl.java sandbox/cdomui/code/src/java/pcgen/gui2/facade/Gui2InfoFactory.java Added Paths: ----------- sandbox/cdomui/code/src/java/pcgen/gui2/facade/DomainFacadeImpl.java Modified: sandbox/cdomui/code/src/java/pcgen/core/Domain.java =================================================================== --- sandbox/cdomui/code/src/java/pcgen/core/Domain.java 2011-02-10 06:43:17 UTC (rev 14542) +++ sandbox/cdomui/code/src/java/pcgen/core/Domain.java 2011-02-10 11:44:26 UTC (rev 14543) @@ -30,7 +30,6 @@ import pcgen.cdom.base.CDOMList; import pcgen.cdom.enumeration.ObjectKey; -import pcgen.core.facade.DomainFacade; import pcgen.core.spell.Spell; /** @@ -39,7 +38,7 @@ * @author Bryan McRoberts <mer...@us...> * @version $Revision$ */ -public final class Domain extends PObject implements DomainFacade +public final class Domain extends PObject { /** * (non-Javadoc) @@ -87,14 +86,4 @@ { return "DOMAIN|" + this.getKeyName(); } - - public String getInfo() - { - return getDisplayName(); - } - - public String getSource() - { - return getDefaultSourceString(); - } } Modified: sandbox/cdomui/code/src/java/pcgen/gui2/facade/CharacterFacadeImpl.java =================================================================== --- sandbox/cdomui/code/src/java/pcgen/gui2/facade/CharacterFacadeImpl.java 2011-02-10 06:43:17 UTC (rev 14542) +++ sandbox/cdomui/code/src/java/pcgen/gui2/facade/CharacterFacadeImpl.java 2011-02-10 11:44:26 UTC (rev 14543) @@ -37,6 +37,7 @@ import javax.swing.undo.UndoManager; +import pcgen.cdom.base.AssociatedPrereqObject; import pcgen.cdom.base.CDOMObject; import pcgen.cdom.base.CDOMReference; import pcgen.cdom.base.Constants; @@ -286,7 +287,7 @@ charLevelsFacade.addHitPointListener(this); deity = new DefaultReferenceFacade<DeityFacade>(pc.getDeity()); - domains = new DefaultListFacade<DomainFacade>(pc.getDomainSet()); + domains = new DefaultListFacade<DomainFacade>(); maxDomains = new DefaultReferenceFacade<Integer>(pc.getMaxCharacterDomains()); remainingDomains = new DefaultReferenceFacade<Integer>(pc.getMaxCharacterDomains() @@ -1509,18 +1510,18 @@ */ public void addDomain(DomainFacade domainFacade) { - if (!(domainFacade instanceof Domain)) + if (!(domainFacade instanceof DomainFacadeImpl)) { return; } - Domain domain = (Domain) domainFacade; + DomainFacadeImpl domainFI = (DomainFacadeImpl) domainFacade; + Domain domain = domainFI.getObject(null); if (theCharacter.hasDomain(domain)) { return; } - //TODO: prereqs based on how the domain is accessed - if (!PrereqHandler.passesAll(domain.getPrerequisiteList(), theCharacter, domain)) + if (!isQualifiedFor(domainFacade)) { delegate.showErrorMessage(Constants.s_APPNAME, LanguageBundle .getFormattedString("in_qualifyMess", domain.getDisplayName())); @@ -1537,8 +1538,8 @@ return; } - domains.addElement(domain); - theCharacter.addDomain((Domain) domain); + domains.addElement(domainFI); + theCharacter.addDomain(domain); DomainApplication.applyDomain(theCharacter, domain); theCharacter.calcActiveBonuses(); @@ -1561,7 +1562,7 @@ public void removeDomain(DomainFacade domain) { domains.removeElement(domain); - theCharacter.removeDomain((Domain) domain); + theCharacter.removeDomain(((DomainFacadeImpl) domain).getObject(null)); remainingDomains.setReference(theCharacter.getMaxCharacterDomains() - theCharacter.getDomainCount()); } @@ -1601,18 +1602,26 @@ */ private void buildAvailableDomainsList() { - List<Domain> availDomainList = new ArrayList<Domain>(); + List<DomainFacadeImpl> availDomainList = new ArrayList<DomainFacadeImpl>(); + List<DomainFacadeImpl> selDomainList = new ArrayList<DomainFacadeImpl>(); Deity pcDeity = theCharacter.getDeity(); if (pcDeity != null) { - for (CDOMReference<Domain> domains : pcDeity.getSafeListMods(Deity.DOMAINLIST)) + for (CDOMReference<Domain> domains : pcDeity + .getSafeListMods(Deity.DOMAINLIST)) { - for (Domain d : domains.getContainedObjects()) + Collection<AssociatedPrereqObject> assoc = + pcDeity.getListAssociations(Deity.DOMAINLIST, domains); + for (AssociatedPrereqObject apo : assoc) { - if (!availDomainList.contains(d)) + for (Domain d : domains.getContainedObjects()) { - availDomainList.add(d); + if (!isDomainInList(availDomainList, d)) + { + availDomainList.add(new DomainFacadeImpl(d, apo + .getPrerequisiteList())); + } } } } @@ -1634,25 +1643,86 @@ processDomainList(cl, availDomainList); } } + + + // Loop through the character's selected domains + for (Domain d : theCharacter.getDomainSet()) + { + DomainFacadeImpl domainFI = new DomainFacadeImpl(d); + boolean found = false; + for (DomainFacadeImpl row : availDomainList) + { + if (d.equals(row.getObject(null))) + { + domainFI = row; + found = true; + break; + } + } + + if (!found) + { + availDomainList.add(domainFI); + } + + if (!isDomainInList(selDomainList, d)) + { + selDomainList.add(domainFI); + } + } + availDomains.setContents(availDomainList); + domains.setContents(selDomainList); maxDomains.setReference(theCharacter.getMaxCharacterDomains()); remainingDomains.setReference(theCharacter.getMaxCharacterDomains() - theCharacter.getDomainCount()); } + /** + * Check if a domain is a list of domains, irrespective of prerequisites. + * + * @param qualDomainList The list of domains with their prerequisites. + * @param qualDomain The domain to search for. + * @return tue if the domain is in the list + */ + private boolean isDomainInList( + List<DomainFacadeImpl> qualDomainList, + Domain domain) + { + for (DomainFacadeImpl row : qualDomainList) + { + if (domain.equals(row.getObject(null))) + { + return true; + } + } + return false; + } + private void processAddDomains(CDOMObject cdo, - final List<Domain> availDomainList) + final List<DomainFacadeImpl> availDomainList) { Collection<CDOMReference<Domain>> domains = cdo.getListMods(PCClass.ALLOWED_DOMAINS); if (domains != null) { for (CDOMReference<Domain> ref : domains) { - for (Domain d : ref.getContainedObjects()) + Collection<AssociatedPrereqObject> assoc = + cdo.getListAssociations(PCClass.ALLOWED_DOMAINS, ref); + for (AssociatedPrereqObject apo : assoc) { - if (!availDomainList.contains(d)) + for (Domain d : ref.getContainedObjects()) { - availDomainList.add(d); + /* + * TODO This gate produces a rather interesting, and + * potentially wrong situation. What if two ADDDOMAINS + * exist with different PRE? Doesn't this fail? + */ + if (!isDomainInList(availDomainList, d)) + { + availDomainList.add(new DomainFacadeImpl(d, apo + .getPrerequisiteList())); + } } } } @@ -1660,15 +1730,16 @@ } private void processDomainList(CDOMObject obj, - final List<Domain> availDomainList) + final List<DomainFacadeImpl> availDomainList) { for (QualifiedObject<CDOMSingleRef<Domain>> qo : obj.getSafeListFor(ListKey.DOMAIN)) { CDOMSingleRef<Domain> ref = qo.getObject(null); Domain domain = ref.resolvesTo(); - if (!availDomainList.contains(domain)) + if (!isDomainInList(availDomainList, domain)) { - availDomainList.add(domain); + availDomainList.add(new DomainFacadeImpl(domain, qo + .getPrerequisiteList())); } } } @@ -2608,16 +2679,18 @@ */ public boolean isQualifiedFor(DomainFacade domainFacade) { - if (!(domainFacade instanceof Domain)) + if (!(domainFacade instanceof DomainFacadeImpl)) { return false; } - Domain domain = (Domain) domainFacade; - if (/*!PrereqHandler.passesAll(addedDomain.getPrerequisiteList(), pc, addedDomain) - || */!domain.qualifies(theCharacter)) + DomainFacadeImpl domainFI = (DomainFacadeImpl) domainFacade; + Domain domain = domainFI.getObject(null); + if (!PrereqHandler.passesAll(domainFI.getPrerequisiteList(), + theCharacter, domain) + || !domain.qualifies(theCharacter)) { - return false; + return false; } return true; } Added: sandbox/cdomui/code/src/java/pcgen/gui2/facade/DomainFacadeImpl.java =================================================================== --- sandbox/cdomui/code/src/java/pcgen/gui2/facade/DomainFacadeImpl.java (rev 0) +++ sandbox/cdomui/code/src/java/pcgen/gui2/facade/DomainFacadeImpl.java 2011-02-10 11:44:26 UTC (rev 14543) @@ -0,0 +1,117 @@ +/** + * DomainFacadeImpl.java + * Copyright James Dempsey, 2010 + * + * 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 09/02/2011 11:12:26 PM + * + * $Id$ + */ +package pcgen.gui2.facade; + +import java.util.List; + +import pcgen.core.Domain; +import pcgen.core.QualifiedObject; +import pcgen.core.facade.DomainFacade; +import pcgen.core.prereq.Prerequisite; + +/** + * The Class <code>DomainFacadeImpl</code> groups the prereqs for gaining access + * to a domain with the domain. This allows these prereqs to be displayed and + * enforced by the UI. + * + * <br/> + * Last Editor: $Author$ + * Last Edited: $Date$ + * + * @author James Dempsey <jde...@us...> + * @version $Revision$ + */ +public class DomainFacadeImpl extends QualifiedObject<Domain> implements DomainFacade +{ + + /** Default Constructor */ + public DomainFacadeImpl() + { + super(); + } + + /** + * Constructor + * @param domain + */ + public DomainFacadeImpl(Domain domain) + { + super(domain); + } + + /** + * Constructor + * @param domain + * @param aPrereqList + */ + public DomainFacadeImpl( final Domain domain, final List<Prerequisite> aPrereqList ) + { + super(domain, aPrereqList); + } + + /** + * Constructor + * @param domain + * @param prereq + */ + public DomainFacadeImpl( final Domain domain, Prerequisite prereq) + { + super(domain, prereq); + } + + /* (non-Javadoc) + * @see pcgen.core.facade.InfoFacade#getInfo() + */ + @Deprecated + public String getInfo() + { + return "This info method is deprecated. Please use the " + + "InfoFactory.getInfo(DomainFacade) method"; + } + + /* (non-Javadoc) + * @see pcgen.core.facade.InfoFacade#getKeyName() + */ + public String getKeyName() + { + return getObject(null).getKeyName(); + } + + /* (non-Javadoc) + * @see pcgen.core.facade.InfoFacade#getSource() + */ + public String getSource() + { + return getObject(null).getDefaultSourceString(); + } + + /* (non-Javadoc) + * @see pcgen.core.QualifiedObject#toString() + */ + @Override + public String toString() + { + return getObject(null).toString(); + } + +} Property changes on: sandbox/cdomui/code/src/java/pcgen/gui2/facade/DomainFacadeImpl.java ___________________________________________________________________ Added: svn:keywords + Date Author Revision Id Added: svn:eol-style + native Modified: sandbox/cdomui/code/src/java/pcgen/gui2/facade/Gui2InfoFactory.java =================================================================== --- sandbox/cdomui/code/src/java/pcgen/gui2/facade/Gui2InfoFactory.java 2011-02-10 06:43:17 UTC (rev 14542) +++ sandbox/cdomui/code/src/java/pcgen/gui2/facade/Gui2InfoFactory.java 2011-02-10 11:44:26 UTC (rev 14543) @@ -53,7 +53,6 @@ import pcgen.core.facade.RaceFacade; import pcgen.core.prereq.PrerequisiteUtilities; import pcgen.gui2.util.HtmlInfoBuilder; -import pcgen.system.LanguageBundle; /** * The Class <code>Gui2InfoFactory</code> provides character related information @@ -221,11 +220,12 @@ */ public String getHTMLInfo(DomainFacade domainFacade) { - if (!(domainFacade instanceof Domain)) + if (!(domainFacade instanceof DomainFacadeImpl)) { return ""; } - Domain aDomain = (Domain) domainFacade; + DomainFacadeImpl domainFI = (DomainFacadeImpl) domainFacade; + Domain aDomain = (Domain) domainFI.getObject(null); final HtmlInfoBuilder infoText = new HtmlInfoBuilder(); @@ -250,14 +250,16 @@ aString); } -// aString = PrerequisiteUtilities.preReqHTMLStringsForList(pc, null, prereqs, false); -// if (aString.length() != 0) -// { -// infoText.appendLineBreak(); -// infoText.appendI18nElement( -// "in_domainRequirements", //$NON-NLS-1$ -// aString); -// } + aString = + PrerequisiteUtilities.preReqHTMLStringsForList(pc, aDomain, + domainFI.getPrerequisiteList(), false); + if (aString.length() != 0) + { + infoText.appendLineBreak(); + infoText.appendI18nFormattedElement( + "in_domainRequirements", //$NON-NLS-1$ + aString); + } aString = aDomain.getDefaultSourceString(); if (aString.length() > 0) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jde...@us...> - 2011-02-10 11:55:51
|
Revision: 14545 http://pcgen.svn.sourceforge.net/pcgen/?rev=14545&view=rev Author: jdempsey Date: 2011-02-10 11:55:44 +0000 (Thu, 10 Feb 2011) Log Message: ----------- Add prereq checking of race and deity. Issue#: CODE-508,CODE-509 Modified Paths: -------------- sandbox/cdomui/code/src/java/pcgen/core/facade/CharacterFacade.java sandbox/cdomui/code/src/java/pcgen/gui2/facade/CharacterFacadeImpl.java Modified: sandbox/cdomui/code/src/java/pcgen/core/facade/CharacterFacade.java =================================================================== --- sandbox/cdomui/code/src/java/pcgen/core/facade/CharacterFacade.java 2011-02-10 11:54:37 UTC (rev 14544) +++ sandbox/cdomui/code/src/java/pcgen/core/facade/CharacterFacade.java 2011-02-10 11:55:44 UTC (rev 14545) @@ -474,6 +474,20 @@ public void refreshRollMethod(); /** + * Check if the character meets all requirements to be of the race. + * @param race The race to be checked. + * @return True if the character can be of the race, false if not. + */ + public boolean isQualifiedFor(RaceFacade race); + + /** + * Check if the character meets all requirements to follow the deity. + * @param deity The deity to be checked. + * @return True if the character can follow the deity, false if not. + */ + public boolean isQualifiedFor(DeityFacade deity); + + /** * Check if the character meets all requirements to take the domain. * @param domain The domain to be checked. * @return True if the character can take the domain, false if not. Modified: sandbox/cdomui/code/src/java/pcgen/gui2/facade/CharacterFacadeImpl.java =================================================================== --- sandbox/cdomui/code/src/java/pcgen/gui2/facade/CharacterFacadeImpl.java 2011-02-10 11:54:37 UTC (rev 14544) +++ sandbox/cdomui/code/src/java/pcgen/gui2/facade/CharacterFacadeImpl.java 2011-02-10 11:55:44 UTC (rev 14545) @@ -2675,6 +2675,42 @@ } /* (non-Javadoc) + * @see pcgen.core.facade.CharacterFacade#isQualifiedFor(pcgen.core.facade.RaceFacade) + */ + public boolean isQualifiedFor(RaceFacade raceFacade) + { + if (!(raceFacade instanceof Race)) + { + return false; + } + + Race race = (Race) raceFacade; + if (!race.qualifies(theCharacter)) + { + return false; + } + return true; + } + + /* (non-Javadoc) + * @see pcgen.core.facade.CharacterFacade#isQualifiedFor(pcgen.core.facade.DeityFacade) + */ + public boolean isQualifiedFor(DeityFacade deityFacade) + { + if (!(deityFacade instanceof Deity)) + { + return false; + } + + Deity deity = (Deity) deityFacade; + if (!deity.qualifies(theCharacter)) + { + return false; + } + return true; + } + + /* (non-Javadoc) * @see pcgen.core.facade.CharacterFacade#isQualifiedFor(pcgen.core.facade.DomainFacade) */ public boolean isQualifiedFor(DomainFacade domainFacade) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cpm...@us...> - 2011-02-10 19:54:27
|
Revision: 14548 http://pcgen.svn.sourceforge.net/pcgen/?rev=14548&view=rev Author: cpmeister Date: 2011-02-10 19:54:21 +0000 (Thu, 10 Feb 2011) Log Message: ----------- fixed error catching for loading source files when attempting to open a character. CharacterManager.getRequiredSources(File) needs to be implemented Modified Paths: -------------- sandbox/cdomui/code/src/java/pcgen/gui2/PCGenFrame.java sandbox/cdomui/code/src/java/pcgen/system/CharacterManager.java Modified: sandbox/cdomui/code/src/java/pcgen/gui2/PCGenFrame.java =================================================================== --- sandbox/cdomui/code/src/java/pcgen/gui2/PCGenFrame.java 2011-02-10 17:23:06 UTC (rev 14547) +++ sandbox/cdomui/code/src/java/pcgen/gui2/PCGenFrame.java 2011-02-10 19:54:21 UTC (rev 14548) @@ -354,35 +354,45 @@ */ public void loadCharacterFromFile(final File pcgFile) { - loadSourceSelection(CharacterManager.getRequiredSources(pcgFile)); - if (sourceLoader != null) + SourceSelectionFacade sources = CharacterManager.getRequiredSources(pcgFile); + if (sources == null) { - new Thread() + JOptionPane.showMessageDialog(this, + "Could not find source files for character:" + pcgFile, + "Unable To Load Character", JOptionPane.ERROR_MESSAGE); + } + else + { + loadSourceSelection(sources); + if (sourceLoader != null) { + new Thread() + { - public void run() - { - try + public void run() { - sourceLoader.join(); - SwingUtilities.invokeLater(new Runnable() + try { - - public void run() + sourceLoader.join(); + SwingUtilities.invokeLater(new Runnable() { - //TODO: close characters if necessary - CharacterManager.openCharacter(pcgFile, PCGenFrame.this, currentDataSetRef.getReference()); - } - }); + public void run() + { + //TODO: close characters if necessary + CharacterManager.openCharacter(pcgFile, PCGenFrame.this, currentDataSetRef.getReference()); + } + + }); + } + catch (InterruptedException ex) + { + //Do nothing + } } - catch (InterruptedException ex) - { - //Do nothing - } - } - }.start(); + }.start(); + } } } Modified: sandbox/cdomui/code/src/java/pcgen/system/CharacterManager.java =================================================================== --- sandbox/cdomui/code/src/java/pcgen/system/CharacterManager.java 2011-02-10 17:23:06 UTC (rev 14547) +++ sandbox/cdomui/code/src/java/pcgen/system/CharacterManager.java 2011-02-10 19:54:21 UTC (rev 14548) @@ -67,7 +67,7 @@ characters = new DefaultListFacade<CharacterFacade>(); recentCharacters = new DefaultListFacade<File>(); String[] recentFiles = PCGenSettings.getInstance().getStringArray(PCGenSettings.RECENT_CHARACTERS); - if(!ArrayUtils.isEmpty(recentFiles)) + if (!ArrayUtils.isEmpty(recentFiles)) { URI userdir = new File(ConfigurationSettings.getUserDir()).toURI(); for (int i = 0; i < recentFiles.length; i++) @@ -103,17 +103,22 @@ * @param delegate the UIDelegate that this character will use * @param dataset the dataset that this will be loaded with */ - public static PlayerCharacter openCharacter(File file, UIDelegate delegate, DataSetFacade dataset) + public static void openCharacter(File file, UIDelegate delegate, DataSetFacade dataset) { + openCharacterImpl(file, delegate, dataset); + } + + private static PlayerCharacter openCharacterImpl(File file, UIDelegate delegate, DataSetFacade dataset) + { Party party = Party.makeSingleCharacterParty(file); PlayerCharacter pc = party.load(null); - + if (pc != null) { CharacterFacade character = new CharacterFacadeImpl(pc, delegate, dataset); characters.addElement(character); } - + return pc; } @@ -130,10 +135,12 @@ Party party = Party.makePartyFromFile(file); party.load(new PCLoader() { + public PlayerCharacter loadPCFromFile(File characterFile) { - return openCharacter(characterFile, delegate, dataset); + return openCharacterImpl(characterFile, delegate, dataset); } + }); } @@ -202,7 +209,11 @@ public static void removeCharacter(CharacterFacade character) { characters.removeElement(character); - addRecentCharacterFile(character.getFileRef().getReference()); + File charFile = character.getFileRef().getReference(); + if (charFile != null) + { + addRecentCharacterFile(character.getFileRef().getReference()); + } } public static void removeAllCharacters() @@ -241,7 +252,7 @@ } PCGenSettings.getInstance().setStringArray(PCGenSettings.RECENT_CHARACTERS, files); } - + public static ListFacade<CharacterFacade> getCharacters() { return characters; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jde...@us...> - 2011-02-11 23:52:19
|
Revision: 14551 http://pcgen.svn.sourceforge.net/pcgen/?rev=14551&view=rev Author: jdempsey Date: 2011-02-11 23:52:12 +0000 (Fri, 11 Feb 2011) Log Message: ----------- Implement info generation for EquipmentFacade * Linked to both the purchase and equipping tabs Issue#: CODE-500 Modified Paths: -------------- sandbox/cdomui/code/src/java/pcgen/core/facade/InfoFactory.java sandbox/cdomui/code/src/java/pcgen/gui2/facade/Gui2InfoFactory.java sandbox/cdomui/code/src/java/pcgen/gui2/tabs/EquipInfoTab.java sandbox/cdomui/code/src/java/pcgen/gui2/tabs/PurchaseInfoTab.java sandbox/cdomui/code/src/java/pcgen/gui2/util/HtmlInfoBuilder.java Modified: sandbox/cdomui/code/src/java/pcgen/core/facade/InfoFactory.java =================================================================== --- sandbox/cdomui/code/src/java/pcgen/core/facade/InfoFactory.java 2011-02-11 11:46:53 UTC (rev 14550) +++ sandbox/cdomui/code/src/java/pcgen/core/facade/InfoFactory.java 2011-02-11 23:52:12 UTC (rev 14551) @@ -43,4 +43,11 @@ public String getHTMLInfo(DomainFacade domain); + /** + * Produce the HTML information string for an item for equipment. + * @param equipFacade The equipment item + * @return The HTML information string + */ + public String getHTMLInfo(EquipmentFacade equipFacade); + } Modified: sandbox/cdomui/code/src/java/pcgen/gui2/facade/Gui2InfoFactory.java =================================================================== --- sandbox/cdomui/code/src/java/pcgen/gui2/facade/Gui2InfoFactory.java 2011-02-11 11:46:53 UTC (rev 14550) +++ sandbox/cdomui/code/src/java/pcgen/gui2/facade/Gui2InfoFactory.java 2011-02-11 23:52:12 UTC (rev 14551) @@ -25,11 +25,15 @@ import java.text.DecimalFormat; import java.text.NumberFormat; import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.TreeSet; import pcgen.base.lang.StringUtil; import pcgen.cdom.base.CDOMReference; import pcgen.cdom.enumeration.FormulaKey; import pcgen.cdom.enumeration.ListKey; +import pcgen.cdom.enumeration.MapKey; import pcgen.cdom.enumeration.ObjectKey; import pcgen.cdom.enumeration.RaceSubType; import pcgen.cdom.enumeration.RaceType; @@ -37,22 +41,27 @@ import pcgen.cdom.reference.ReferenceUtilities; import pcgen.core.Deity; import pcgen.core.Domain; +import pcgen.core.Equipment; import pcgen.core.Globals; import pcgen.core.PCStat; import pcgen.core.PlayerCharacter; import pcgen.core.Race; +import pcgen.core.SettingsHandler; import pcgen.core.WeaponProf; import pcgen.core.analysis.BonusCalc; import pcgen.core.analysis.DescriptionFormatting; import pcgen.core.analysis.OutputNameFormatting; import pcgen.core.analysis.RaceStat; +import pcgen.core.character.WieldCategory; import pcgen.core.display.VisionDisplay; import pcgen.core.facade.DeityFacade; import pcgen.core.facade.DomainFacade; +import pcgen.core.facade.EquipmentFacade; import pcgen.core.facade.InfoFactory; import pcgen.core.facade.RaceFacade; import pcgen.core.prereq.PrerequisiteUtilities; import pcgen.gui2.util.HtmlInfoBuilder; +import pcgen.system.LanguageBundle; /** * The Class <code>Gui2InfoFactory</code> provides character related information @@ -275,6 +284,269 @@ } /* (non-Javadoc) + * @see pcgen.core.facade.InfoFactory#getHTMLInfo(pcgen.core.facade.EquipmentFacade) + */ + public String getHTMLInfo(EquipmentFacade equipFacade) + { + if (equipFacade == null || !(equipFacade instanceof Equipment)) + { + return ""; + } + + Equipment equip = (Equipment) equipFacade; + + final StringBuilder title = new StringBuilder(50); + title.append(OutputNameFormatting.piString(equip, false)); + + if (!equip.longName().equals(equip.getName())) + { + title.append("(").append(equip.longName()).append(")"); + } + + final HtmlInfoBuilder b = + new HtmlInfoBuilder(title.toString(), false); + b.appendLineBreak(); + + b.appendI18nElement("in_igInfoLabelTextType", //$NON-NLS-1$ + StringUtil.join(equip.getTrueTypeList(true), ". ")); + + // + // Should only be meaningful for weapons, but if included on some other piece of + // equipment, show it anyway + // + if (equip.isWeapon() || equip.get(ObjectKey.WIELD) != null) + { + b.appendLineBreak(); + final WieldCategory wCat = equip.getEffectiveWieldCategory(pc); + b.appendI18nElement("in_igInfoLabelTextWield", //$NON-NLS-1$ + wCat.getName()); + } + + // + // Only meaningful for weapons, armor and shields + // + if (equip.isWeapon() || equip.isArmor() || equip.isShield()) + { + b.appendLineBreak(); + final String value = + (pc.isProficientWith(equip) && equip.meetsPreReqs(pc)) + ? LanguageBundle.getString("in_igInfoLabelTextYes") //$NON-NLS-1$ + : (SettingsHandler.getPrereqFailColorAsHtmlStart() + + LanguageBundle.getString("in_igInfoLabelTextNo") + //$NON-NLS-1$ + SettingsHandler.getPrereqFailColorAsHtmlEnd()); + b.appendI18nElement("in_igInfoLabelTextProficient", value); //$NON-NLS-1$ + } + + final String cString = + PrerequisiteUtilities.preReqHTMLStringsForList(pc, null, equip + .getPrerequisiteList(), false); + + if (cString.length() > 0) + { + b.appendLineBreak(); + b.appendI18nElement("in_igInfoLabelTextReq", cString); //$NON-NLS-1$ + } + + String IDS = equip.getInterestingDisplayString(pc); + + if (IDS.length() > 0) + { + b.appendLineBreak(); + b.appendI18nElement("in_igInfoLabelTextProp", IDS); //$NON-NLS-1$ + } + + String bString = + Globals.getGameModeUnitSet().displayWeightInUnitSet( + equip.getWeight(pc).doubleValue()); + + if (bString.length() > 0) + { + b.appendLineBreak(); + bString += Globals.getGameModeUnitSet().getWeightUnit(); + b.appendI18nElement("in_igInfoLabelTextWeight", bString); //$NON-NLS-1$ + + } + + Integer a = equip.getMaxDex(pc); + + if (a.intValue() != 100) + { + b.appendSpacer(); + b.appendI18nElement("in_igInfoLabelTextMaxDex", a.toString()); //$NON-NLS-1$ + } + + a = equip.acCheck(pc); + + if (equip.isArmor() || equip.isShield() || (a.intValue() != 0)) + { + b.appendSpacer(); + b.appendI18nElement("in_igInfoLabelTextAcCheck", a.toString()); //$NON-NLS-1$ + } + + if (Globals.getGameModeACText().length() != 0) + { + a = equip.getACBonus(pc); + + if (equip.isArmor() || equip.isShield() || (a.intValue() != 0)) + { + b.appendSpacer(); + b.appendElement(LanguageBundle.getFormattedString( + "in_igInfoLabelTextAcBonus", //$NON-NLS-1$ + Globals.getGameModeACText()), a.toString()); + } + } + + if (Globals.getGameModeShowSpellTab()) + { + a = equip.spellFailure(pc); + + if (equip.isArmor() || equip.isShield() || (a.intValue() != 0)) + { + b.appendSpacer(); + b.appendI18nElement( + "in_igInfoLabelTextArcaneFailure", a.toString()); //$NON-NLS-1$ + } + } + + bString = Globals.getGameModeDamageResistanceText(); + + if (bString.length() != 0) + { + a = equip.eDR(pc); + + if (equip.isArmor() || equip.isShield() || (a.intValue() != 0)) + { + b.appendSpacer(); + b.appendElement(bString, a.toString()); + } + } + + bString = equip.moveString(); + + if (bString.length() > 0) + { + b.appendSpacer(); + b.appendI18nElement("in_igInfoLabelTextMove", bString); //$NON-NLS-1$ + } + + bString = equip.getSize(); + + if (bString.length() > 0) + { + b.appendSpacer(); + b.appendI18nElement("in_igInfoLabelTextSize", bString); //$NON-NLS-1$ + } + + bString = equip.getDamage(pc); + + if (bString.length() > 0) + { + + if (equip.isDouble()) + { + bString += "/" + equip.getAltDamage(pc); //$NON-NLS-1$ + } + + b.appendLineBreak(); + b.appendI18nElement("in_igInfoLabelTextDamage", bString); //$NON-NLS-1$ + } + + int critrange = pc.getCritRange(equip, true); + int altcritrange = pc.getCritRange(equip, false); + bString = critrange == 0 ? "" : Integer.toString(critrange); + if (equip.isDouble() && critrange != altcritrange) + { + bString += + "/" //$NON-NLS-1$ + + (altcritrange == 0 ? "" : Integer + .toString(altcritrange)); + } + + if (bString.length() > 0) + { + b.appendSpacer(); + b.appendI18nElement("in_ieInfoLabelTextCritRange", bString); //$NON-NLS-1$ + } + + bString = equip.getCritMult(); + if (equip.isDouble() + && !(equip.getCritMultiplier() == equip.getAltCritMultiplier())) + { + bString += "/" + equip.getAltCritMult(); //$NON-NLS-1$ + } + + if (bString.length() > 0) + { + b.appendSpacer(); + b.appendI18nElement("in_igInfoLabelTextCritMult", bString); //$NON-NLS-1$ + } + + if (equip.isWeapon()) + { + bString = + Globals.getGameModeUnitSet().displayDistanceInUnitSet( + equip.getRange(pc).intValue()); + + if (bString.length() > 0) + { + b.appendSpacer(); + b.appendI18nElement("in_igInfoLabelTextRange", bString + //$NON-NLS-1$ + Globals.getGameModeUnitSet().getDistanceUnit()); + } + } + + bString = equip.getContainerCapacityString(); + + if (bString.length() > 0) + { + b.appendLineBreak(); + b.appendI18nElement("in_igInfoLabelTextContainer", bString); //$NON-NLS-1$ + } + + bString = equip.getContainerContentsString(); + + if (bString.length() > 0) + { + b.appendSpacer(); + b.appendI18nElement("in_igInfoLabelTextCurrentlyContains", bString); //$NON-NLS-1$ + } + + final int charges = equip.getRemainingCharges(); + + if (charges >= 0) + { + b.appendLineBreak(); + b.appendI18nElement("in_igInfoLabelTextCharges", Integer.valueOf( //$NON-NLS-1$ + charges).toString()); + } + + Map<String, String> qualityMap = equip.getMapFor(MapKey.QUALITY); + if (qualityMap != null && !qualityMap.isEmpty()) + { + Set<String> qualities = new TreeSet<String>(); + for (Map.Entry<String, String> me : qualityMap.entrySet()) + { + qualities.add(new StringBuilder().append(me.getKey()).append( + ": ").append(me.getValue()).toString()); + } + + b.appendLineBreak(); + b.appendI18nElement("in_igInfoLabelTextQualities", StringUtil.join( //$NON-NLS-1$ + qualities, ", ")); //$NON-NLS-2$ + } + + bString = equip.getDefaultSourceString(); + if (bString.length() > 0) + { + b.appendLineBreak(); + b.appendI18nElement("in_igInfoLabelTextSource", bString); //$NON-NLS-1$ + } + b.appendLineBreak(); + + return b.toString(); + } + + /* (non-Javadoc) * @see pcgen.core.facade.InfoFactory#getLevelAdjustment(pcgen.core.facade.RaceFacade) */ public String getLevelAdjustment(RaceFacade raceFacade) Modified: sandbox/cdomui/code/src/java/pcgen/gui2/tabs/EquipInfoTab.java =================================================================== --- sandbox/cdomui/code/src/java/pcgen/gui2/tabs/EquipInfoTab.java 2011-02-11 11:46:53 UTC (rev 14550) +++ sandbox/cdomui/code/src/java/pcgen/gui2/tabs/EquipInfoTab.java 2011-02-11 23:52:12 UTC (rev 14551) @@ -26,6 +26,7 @@ import java.awt.event.ActionEvent; import java.util.Collections; import java.util.Hashtable; + import javax.swing.AbstractAction; import javax.swing.BorderFactory; import javax.swing.Box; @@ -35,8 +36,12 @@ import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JScrollPane; +import javax.swing.event.ListSelectionEvent; +import javax.swing.event.ListSelectionListener; import javax.swing.table.TableColumn; + import pcgen.core.facade.CharacterFacade; +import pcgen.core.facade.EquipmentFacade; import pcgen.core.facade.EquipmentSetFacade; import pcgen.core.facade.ReferenceFacade; import pcgen.core.facade.event.ReferenceEvent; @@ -251,6 +256,7 @@ state.put(AddSetAction.class, new AddSetAction(character)); state.put(RemoveSetAction.class, new RemoveSetAction(character)); state.put(LabelsUpdater.class, new LabelsUpdater(character)); + state.put(EquipInfoHandler.class, new EquipInfoHandler(character)); return state; } @@ -261,6 +267,7 @@ tableFilter, equipmentSetTable, equipButton, unequipButton); ((LabelsUpdater) state.get(LabelsUpdater.class)).install(); + ((EquipInfoHandler) state.get(EquipInfoHandler.class)).install(); unequipAllButton.setAction((UnequipAllAction) state.get(UnequipAllAction.class)); newSetButton.setAction((AddSetAction) state.get(AddSetAction.class)); @@ -272,6 +279,7 @@ { ((LabelsUpdater) state.get(LabelsUpdater.class)).uninstall(); ((EquipmentModel) state.get(EquipmentModel.class)).uninstall(); + ((EquipInfoHandler) state.get(EquipInfoHandler.class)).uninstall(); } public TabTitle getTabTitle() @@ -411,4 +419,52 @@ } + private class EquipInfoHandler implements ListSelectionListener + { + + private CharacterFacade character; + + public EquipInfoHandler(CharacterFacade character) + { + this.character = character; + } + + public void install() + { + equipmentTable.getSelectionModel().addListSelectionListener(this); + } + + public void uninstall() + { + equipmentTable.getSelectionModel().removeListSelectionListener(this); + } + + public void valueChanged(ListSelectionEvent e) + { + if (!e.getValueIsAdjusting()) + { + int selectedRows[] = equipmentTable.getSelectedRows(); + StringBuilder sb = new StringBuilder(2000); + for (int row : selectedRows) + { + EquipmentFacade equip = null; + if (row != -1) + { + Object value = equipmentTable.getModel().getValueAt(row, 0); + if (value instanceof EquipmentFacade) + { + equip = (EquipmentFacade) value; + } + } + if (equip != null) + { + sb.append(character.getInfoFactory().getHTMLInfo(equip)); + } + } + infoPane.setText("<html>"+sb.toString()+"</html>"); + } + } + + } + } Modified: sandbox/cdomui/code/src/java/pcgen/gui2/tabs/PurchaseInfoTab.java =================================================================== --- sandbox/cdomui/code/src/java/pcgen/gui2/tabs/PurchaseInfoTab.java 2011-02-11 11:46:53 UTC (rev 14550) +++ sandbox/cdomui/code/src/java/pcgen/gui2/tabs/PurchaseInfoTab.java 2011-02-11 23:52:12 UTC (rev 14551) @@ -27,6 +27,7 @@ import java.util.Collections; import java.util.Hashtable; import java.util.List; + import javax.swing.AbstractAction; import javax.swing.Box; import javax.swing.JButton; @@ -35,6 +36,7 @@ import javax.swing.SwingConstants; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; + import pcgen.core.facade.CharacterFacade; import pcgen.core.facade.EquipmentFacade; import pcgen.core.facade.EquipmentListFacade; @@ -179,10 +181,6 @@ private void setSelectedItem(EquipmentFacade item) { this.selectedItem = item; - if (item != null) - { - infoPane.setText(item.getInfo()); - } } public Hashtable<Object, Object> createModels(CharacterFacade character) @@ -192,6 +190,7 @@ state.put(PurchasedTreeViewModel.class, new PurchasedTreeViewModel(character)); state.put(AddAction.class, new AddAction(character)); state.put(RemoveAction.class, new RemoveAction(character)); + state.put(EquipInfoHandler.class, new EquipInfoHandler(character)); return state; } @@ -202,10 +201,12 @@ purchasedTable.setTreeViewModel((TreeViewModel) state.get(PurchasedTreeViewModel.class)); addEquipmentButton.setAction((AddAction) state.get(AddAction.class)); removeEquipmentButton.setAction((RemoveAction) state.get(RemoveAction.class)); + ((EquipInfoHandler) state.get(EquipInfoHandler.class)).install(); } public void storeModels(Hashtable<Object, Object> state) { + ((EquipInfoHandler) state.get(EquipInfoHandler.class)).uninstall(); } public TabTitle getTabTitle() @@ -270,6 +271,55 @@ } + + private class EquipInfoHandler implements ListSelectionListener + { + + private CharacterFacade character; + + public EquipInfoHandler(CharacterFacade character) + { + this.character = character; + } + + public void install() + { + availableTable.getSelectionModel().addListSelectionListener(this); + } + + public void uninstall() + { + availableTable.getSelectionModel().removeListSelectionListener(this); + } + + public void valueChanged(ListSelectionEvent e) + { + if (!e.getValueIsAdjusting()) + { + int selectedRows[] = availableTable.getSelectedRows(); + StringBuilder sb = new StringBuilder(2000); + for (int row : selectedRows) + { + EquipmentFacade equip = null; + if (row != -1) + { + Object value = availableTable.getModel().getValueAt(row, 0); + if (value instanceof EquipmentFacade) + { + equip = (EquipmentFacade) value; + } + } + if (equip != null) + { + sb.append(character.getInfoFactory().getHTMLInfo(equip)); + } + } + infoPane.setText("<html>"+sb.toString()+"</html>"); + } + } + + } + private static class AvailableTreeViewModel implements TreeViewModel<EquipmentFacade>, DataView<EquipmentFacade> { Modified: sandbox/cdomui/code/src/java/pcgen/gui2/util/HtmlInfoBuilder.java =================================================================== --- sandbox/cdomui/code/src/java/pcgen/gui2/util/HtmlInfoBuilder.java 2011-02-11 11:46:53 UTC (rev 14550) +++ sandbox/cdomui/code/src/java/pcgen/gui2/util/HtmlInfoBuilder.java 2011-02-11 23:52:12 UTC (rev 14551) @@ -38,10 +38,11 @@ public class HtmlInfoBuilder { private final StringBuilder buffer = new StringBuilder(300); + private final boolean fullDocument; public HtmlInfoBuilder() { - buffer.append("<html>"); + this(null, true); } /** @@ -49,11 +50,27 @@ */ public HtmlInfoBuilder(String title) { - buffer.append("<html>"); - appendTitleElement(title); + this(title, true); } /** + * @param title Element that will be added as the start of the string and emphasized. + * @param fullDocument Should html tags be added to make this a full html document + */ + public HtmlInfoBuilder(String title, boolean fullDocument) + { + this.fullDocument = fullDocument; + if (fullDocument) + { + buffer.append("<html>"); + } + if (title != null) + { + appendTitleElement(title); + } + } + + /** * Adds a string to the LabelText. * @param string String to add * @return HtmlInfoBuilder @@ -158,7 +175,10 @@ @Override public String toString() { - buffer.append("</html>"); + if (fullDocument) + { + buffer.append("</html>"); + } return buffer.toString(); } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cpm...@us...> - 2011-02-12 02:17:49
|
Revision: 14556 http://pcgen.svn.sourceforge.net/pcgen/?rev=14556&view=rev Author: cpmeister Date: 2011-02-12 02:17:42 +0000 (Sat, 12 Feb 2011) Log Message: ----------- minor refactoring Modified Paths: -------------- sandbox/cdomui/code/src/java/pcgen/core/facade/CharacterFacade.java sandbox/cdomui/code/src/java/pcgen/core/facade/InfoFactory.java sandbox/cdomui/code/src/java/pcgen/gui2/facade/CharacterFacadeImpl.java sandbox/cdomui/code/src/java/pcgen/gui2/facade/Gui2InfoFactory.java sandbox/cdomui/code/src/java/pcgen/gui2/tabs/PurchaseInfoTab.java sandbox/cdomui/code/src/java/pcgen/gui2/tabs/equip/EquipmentTableModel.java sandbox/cdomui/code/src/java/pcgen/gui2/tabs/equip/EquipmentTreeTableModel.java Modified: sandbox/cdomui/code/src/java/pcgen/core/facade/CharacterFacade.java =================================================================== --- sandbox/cdomui/code/src/java/pcgen/core/facade/CharacterFacade.java 2011-02-12 01:58:31 UTC (rev 14555) +++ sandbox/cdomui/code/src/java/pcgen/core/facade/CharacterFacade.java 2011-02-12 02:17:42 UTC (rev 14556) @@ -193,10 +193,6 @@ //public int getQuantity(EquipmentFacade equipment); public boolean isQualifiedFor(EquipmentFacade equipment); - public float getCost(EquipmentFacade equipment); - - public float getWeight(EquipmentFacade equipment); - /** * Create an equipment item sized for the character. Will return an existing * item if a suitable one already exists, including the passed in item if it Modified: sandbox/cdomui/code/src/java/pcgen/core/facade/InfoFactory.java =================================================================== --- sandbox/cdomui/code/src/java/pcgen/core/facade/InfoFactory.java 2011-02-12 01:58:31 UTC (rev 14555) +++ sandbox/cdomui/code/src/java/pcgen/core/facade/InfoFactory.java 2011-02-12 02:17:42 UTC (rev 14556) @@ -27,6 +27,11 @@ public interface InfoFactory { + + public float getCost(EquipmentFacade equipment); + + public float getWeight(EquipmentFacade equipment); + public String getPreReqHTML(RaceFacade race); public String getStatAdjustments(RaceFacade race); Modified: sandbox/cdomui/code/src/java/pcgen/gui2/facade/CharacterFacadeImpl.java =================================================================== --- sandbox/cdomui/code/src/java/pcgen/gui2/facade/CharacterFacadeImpl.java 2011-02-12 01:58:31 UTC (rev 14555) +++ sandbox/cdomui/code/src/java/pcgen/gui2/facade/CharacterFacadeImpl.java 2011-02-12 02:17:42 UTC (rev 14556) @@ -2528,18 +2528,6 @@ } /* (non-Javadoc) - * @see pcgen.core.facade.CharacterFacade#getWeight(pcgen.core.facade.EquipmentFacade) - */ - public float getWeight(EquipmentFacade equipment) - { - if (equipment instanceof Equipment) - { - return ((Equipment)equipment).getWeight(theCharacter); - } - return 0; - } - - /* (non-Javadoc) * @see pcgen.core.facade.CharacterFacade#createEquipmentSet(java.lang.String) */ public EquipmentSetFacade createEquipmentSet(String name) @@ -2570,18 +2558,6 @@ equipmentSets.removeElement(set); } - /* (non-Javadoc) - * @see pcgen.core.facade.CharacterFacade#getCost(pcgen.core.facade.EquipmentFacade) - */ - public float getCost(EquipmentFacade equipment) - { - if (equipment instanceof Equipment) - { - return ((Equipment)equipment).getCost(theCharacter).floatValue(); - } - return 0; - } - public ReferenceFacade<String> getCarriedWeightRef() { return carriedWeightRef; Modified: sandbox/cdomui/code/src/java/pcgen/gui2/facade/Gui2InfoFactory.java =================================================================== --- sandbox/cdomui/code/src/java/pcgen/gui2/facade/Gui2InfoFactory.java 2011-02-12 01:58:31 UTC (rev 14555) +++ sandbox/cdomui/code/src/java/pcgen/gui2/facade/Gui2InfoFactory.java 2011-02-12 02:17:42 UTC (rev 14556) @@ -647,4 +647,22 @@ return VisionDisplay.getVision(pc, (Race) race); } + public float getCost(EquipmentFacade equipment) + { + if (equipment instanceof Equipment) + { + return ((Equipment)equipment).getCost(pc).floatValue(); + } + return 0; + } + + public float getWeight(EquipmentFacade equipment) + { + if (equipment instanceof Equipment) + { + return ((Equipment)equipment).getWeight(pc); + } + return 0; + } + } Modified: sandbox/cdomui/code/src/java/pcgen/gui2/tabs/PurchaseInfoTab.java =================================================================== --- sandbox/cdomui/code/src/java/pcgen/gui2/tabs/PurchaseInfoTab.java 2011-02-12 01:58:31 UTC (rev 14555) +++ sandbox/cdomui/code/src/java/pcgen/gui2/tabs/PurchaseInfoTab.java 2011-02-12 02:17:42 UTC (rev 14556) @@ -360,7 +360,7 @@ public List<?> getData(EquipmentFacade obj) { - return Arrays.asList(character.getCost(obj), character.getWeight(obj)); + return Arrays.asList(character.getInfoFactory().getCost(obj), character.getInfoFactory().getWeight(obj)); } public List<? extends DataViewColumn> getDataColumns() @@ -412,7 +412,7 @@ public List<?> getData(EquipmentFacade obj) { - return Arrays.asList(character.getCost(obj), character.getWeight(obj), equipmentList.getQuantity(obj)); + return Arrays.asList(character.getInfoFactory().getCost(obj), character.getInfoFactory().getWeight(obj), equipmentList.getQuantity(obj)); } public List<? extends DataViewColumn> getDataColumns() Modified: sandbox/cdomui/code/src/java/pcgen/gui2/tabs/equip/EquipmentTableModel.java =================================================================== --- sandbox/cdomui/code/src/java/pcgen/gui2/tabs/equip/EquipmentTableModel.java 2011-02-12 01:58:31 UTC (rev 14555) +++ sandbox/cdomui/code/src/java/pcgen/gui2/tabs/equip/EquipmentTableModel.java 2011-02-12 02:17:42 UTC (rev 14556) @@ -107,7 +107,7 @@ case 3: return equipmentList.getQuantity(equipment); case 4: - return character.getWeight(equipment); + return character.getInfoFactory().getWeight(equipment); default: return null; } Modified: sandbox/cdomui/code/src/java/pcgen/gui2/tabs/equip/EquipmentTreeTableModel.java =================================================================== --- sandbox/cdomui/code/src/java/pcgen/gui2/tabs/equip/EquipmentTreeTableModel.java 2011-02-12 01:58:31 UTC (rev 14555) +++ sandbox/cdomui/code/src/java/pcgen/gui2/tabs/equip/EquipmentTreeTableModel.java 2011-02-12 02:17:42 UTC (rev 14556) @@ -161,7 +161,7 @@ case 3: return equipSet.getQuantity(pathNode); case 4: - return character.getWeight(pathNode.getEquipment()); + return character.getInfoFactory().getWeight(pathNode.getEquipment()); } default: return null; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cpm...@us...> - 2011-02-12 22:39:01
|
Revision: 14561 http://pcgen.svn.sourceforge.net/pcgen/?rev=14561&view=rev Author: cpmeister Date: 2011-02-12 22:38:54 +0000 (Sat, 12 Feb 2011) Log Message: ----------- Added methods to CharacterFacade and InfoFacade in preperation for the implementation of the TemplateInfoTab Issue#: CODE-510 Modified Paths: -------------- sandbox/cdomui/code/src/java/pcgen/core/PCTemplate.java sandbox/cdomui/code/src/java/pcgen/core/facade/CharacterFacade.java sandbox/cdomui/code/src/java/pcgen/core/facade/InfoFactory.java sandbox/cdomui/code/src/java/pcgen/core/facade/TemplateFacade.java sandbox/cdomui/code/src/java/pcgen/gui2/facade/CharacterFacadeImpl.java sandbox/cdomui/code/src/java/pcgen/gui2/facade/Gui2InfoFactory.java Modified: sandbox/cdomui/code/src/java/pcgen/core/PCTemplate.java =================================================================== --- sandbox/cdomui/code/src/java/pcgen/core/PCTemplate.java 2011-02-12 21:16:06 UTC (rev 14560) +++ sandbox/cdomui/code/src/java/pcgen/core/PCTemplate.java 2011-02-12 22:38:54 UTC (rev 14561) @@ -255,4 +255,14 @@ // end potential TO-DO change return list; } + + public String getInfo() + { + throw new UnsupportedOperationException("Not supported yet."); + } + + public String getSource() + { + return getDefaultSourceString(); + } } Modified: sandbox/cdomui/code/src/java/pcgen/core/facade/CharacterFacade.java =================================================================== --- sandbox/cdomui/code/src/java/pcgen/core/facade/CharacterFacade.java 2011-02-12 21:16:06 UTC (rev 14560) +++ sandbox/cdomui/code/src/java/pcgen/core/facade/CharacterFacade.java 2011-02-12 22:38:54 UTC (rev 14561) @@ -212,7 +212,13 @@ public boolean isAutomatic(LanguageFacade language); + public void addTemplate(TemplateFacade template); + + public void removeTemplate(TemplateFacade template); + + public ListFacade<TemplateFacade> getTemplates(); //public boolean isBonus(LanguageFacade language); + /** * Note: this returns both the bonuses that the character * has applied as well as the ones that haven't been applied. Modified: sandbox/cdomui/code/src/java/pcgen/core/facade/InfoFactory.java =================================================================== --- sandbox/cdomui/code/src/java/pcgen/core/facade/InfoFactory.java 2011-02-12 21:16:06 UTC (rev 14560) +++ sandbox/cdomui/code/src/java/pcgen/core/facade/InfoFactory.java 2011-02-12 22:38:54 UTC (rev 14561) @@ -27,7 +27,12 @@ public interface InfoFactory { + public String getLevelAdjustment(TemplateFacade template); + public String getModifier(TemplateFacade template); + + public String getPreReqHTML(TemplateFacade template); + public float getCost(EquipmentFacade equipment); public float getWeight(EquipmentFacade equipment); @@ -61,4 +66,6 @@ */ public String getHTMLInfo(EquipmentFacade equipFacade); + public String getHTMLInfo(TemplateFacade template); + } Modified: sandbox/cdomui/code/src/java/pcgen/core/facade/TemplateFacade.java =================================================================== --- sandbox/cdomui/code/src/java/pcgen/core/facade/TemplateFacade.java 2011-02-12 21:16:06 UTC (rev 14560) +++ sandbox/cdomui/code/src/java/pcgen/core/facade/TemplateFacade.java 2011-02-12 22:38:54 UTC (rev 14561) @@ -18,13 +18,13 @@ * * Created on Aug 16, 2008, 2:37:56 PM */ - package pcgen.core.facade; /** * * @author Connor Petty <cpm...@us...> */ -public interface TemplateFacade { - +public interface TemplateFacade extends InfoFacade +{ + public String getType(); } Modified: sandbox/cdomui/code/src/java/pcgen/gui2/facade/CharacterFacadeImpl.java =================================================================== --- sandbox/cdomui/code/src/java/pcgen/gui2/facade/CharacterFacadeImpl.java 2011-02-12 21:16:06 UTC (rev 14560) +++ sandbox/cdomui/code/src/java/pcgen/gui2/facade/CharacterFacadeImpl.java 2011-02-12 22:38:54 UTC (rev 14561) @@ -97,6 +97,7 @@ import pcgen.core.facade.SkillFacade; import pcgen.core.facade.StatFacade; import pcgen.core.facade.TempBonusFacade; +import pcgen.core.facade.TemplateFacade; import pcgen.core.facade.TodoFacade; import pcgen.core.facade.UIDelegate; import pcgen.core.facade.CharacterLevelsFacade.CharacterLevelEvent; @@ -2707,4 +2708,19 @@ return true; } + public void addTemplate(TemplateFacade template) + { + throw new UnsupportedOperationException("Not supported yet."); + } + + public void removeTemplate(TemplateFacade template) + { + throw new UnsupportedOperationException("Not supported yet."); + } + + public ListFacade<TemplateFacade> getTemplates() + { + throw new UnsupportedOperationException("Not supported yet."); + } + } Modified: sandbox/cdomui/code/src/java/pcgen/gui2/facade/Gui2InfoFactory.java =================================================================== --- sandbox/cdomui/code/src/java/pcgen/gui2/facade/Gui2InfoFactory.java 2011-02-12 21:16:06 UTC (rev 14560) +++ sandbox/cdomui/code/src/java/pcgen/gui2/facade/Gui2InfoFactory.java 2011-02-12 22:38:54 UTC (rev 14561) @@ -62,6 +62,7 @@ import pcgen.core.facade.InfoFactory; import pcgen.core.facade.RaceFacade; import pcgen.core.facade.SkillFacade; +import pcgen.core.facade.TemplateFacade; import pcgen.core.prereq.PrerequisiteUtilities; import pcgen.gui2.util.HtmlInfoBuilder; import pcgen.system.LanguageBundle; @@ -665,4 +666,24 @@ return 0; } + public String getLevelAdjustment(TemplateFacade template) + { + throw new UnsupportedOperationException("Not supported yet."); + } + + public String getModifier(TemplateFacade template) + { + throw new UnsupportedOperationException("Not supported yet."); + } + + public String getPreReqHTML(TemplateFacade template) + { + throw new UnsupportedOperationException("Not supported yet."); + } + + public String getHTMLInfo(TemplateFacade template) + { + throw new UnsupportedOperationException("Not supported yet."); + } + } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cpm...@us...> - 2011-02-12 23:44:57
|
Revision: 14562 http://pcgen.svn.sourceforge.net/pcgen/?rev=14562&view=rev Author: cpmeister Date: 2011-02-12 23:44:50 +0000 (Sat, 12 Feb 2011) Log Message: ----------- TemplateInfoTab completed Issue#: CODE-510 Modified Paths: -------------- sandbox/cdomui/code/src/java/pcgen/core/facade/CharacterFacade.java sandbox/cdomui/code/src/java/pcgen/gui2/facade/CharacterFacadeImpl.java sandbox/cdomui/code/src/java/pcgen/gui2/tabs/TemplateInfoTab.java Modified: sandbox/cdomui/code/src/java/pcgen/core/facade/CharacterFacade.java =================================================================== --- sandbox/cdomui/code/src/java/pcgen/core/facade/CharacterFacade.java 2011-02-12 22:38:54 UTC (rev 14561) +++ sandbox/cdomui/code/src/java/pcgen/core/facade/CharacterFacade.java 2011-02-12 23:44:50 UTC (rev 14562) @@ -51,7 +51,7 @@ { public InfoFactory getInfoFactory(); - + public UndoManager getUndoManager(); public ReferenceFacade<GenderFacade> getGenderRef(); @@ -331,12 +331,12 @@ public ReferenceFacade<Integer> getMaxDomains(); public ReferenceFacade<Integer> getRemainingDomainSelectionsRef(); - + /** * @return The domains which the character has access to. */ public ListFacade<DomainFacade> getAvailableDomains(); - + public ListFacade<LanguageFacade> getLanguages(); // // public void setBonusLanguages(List<LanguageFacade> languages); @@ -495,4 +495,7 @@ * @return True if the character can take the domain, false if not. */ public boolean isQualifiedFor(DomainFacade domain); + + public boolean isQualifiedFor(TemplateFacade templateFacade); + } Modified: sandbox/cdomui/code/src/java/pcgen/gui2/facade/CharacterFacadeImpl.java =================================================================== --- sandbox/cdomui/code/src/java/pcgen/gui2/facade/CharacterFacadeImpl.java 2011-02-12 22:38:54 UTC (rev 14561) +++ sandbox/cdomui/code/src/java/pcgen/gui2/facade/CharacterFacadeImpl.java 2011-02-12 23:44:50 UTC (rev 14562) @@ -2723,4 +2723,9 @@ throw new UnsupportedOperationException("Not supported yet."); } + public boolean isQualifiedFor(TemplateFacade templateFacade) + { + throw new UnsupportedOperationException("Not supported yet."); + } + } Modified: sandbox/cdomui/code/src/java/pcgen/gui2/tabs/TemplateInfoTab.java =================================================================== --- sandbox/cdomui/code/src/java/pcgen/gui2/tabs/TemplateInfoTab.java 2011-02-12 22:38:54 UTC (rev 14561) +++ sandbox/cdomui/code/src/java/pcgen/gui2/tabs/TemplateInfoTab.java 2011-02-12 23:44:50 UTC (rev 14562) @@ -18,36 +18,426 @@ * * Created on Sep 13, 2010, 6:22:26 PM */ - package pcgen.gui2.tabs; +import java.awt.BorderLayout; +import java.awt.Component; +import java.awt.event.ActionEvent; +import java.util.Arrays; +import java.util.Collections; import java.util.Hashtable; +import java.util.List; +import javax.swing.AbstractAction; +import javax.swing.Box; +import javax.swing.JButton; +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.JTree; +import javax.swing.event.ListSelectionEvent; +import javax.swing.event.ListSelectionListener; +import javax.swing.tree.DefaultMutableTreeNode; +import javax.swing.tree.DefaultTreeCellRenderer; import pcgen.core.facade.CharacterFacade; +import pcgen.core.facade.InfoFactory; +import pcgen.core.facade.TemplateFacade; +import pcgen.core.facade.event.ListEvent; +import pcgen.core.facade.event.ListListener; +import pcgen.core.facade.util.DefaultListFacade; +import pcgen.core.facade.util.ListFacade; +import pcgen.gui2.UIPropertyContext; +import pcgen.gui2.filter2.Filter; +import pcgen.gui2.filter2.FilterBar; +import pcgen.gui2.filter2.FilteredListFacade; +import pcgen.gui2.filter2.FilteredTreeViewTable; +import pcgen.gui2.filter2.SearchFilterPanel; +import pcgen.gui2.tools.FlippingSplitPane; +import pcgen.gui2.tools.Icons; +import pcgen.gui2.tools.InfoPane; +import pcgen.gui2.util.SortMode; +import pcgen.gui2.util.SortingPriority; +import pcgen.gui2.util.treeview.DataView; +import pcgen.gui2.util.treeview.DataViewColumn; +import pcgen.gui2.util.treeview.DefaultDataViewColumn; +import pcgen.gui2.util.treeview.TreeView; +import pcgen.gui2.util.treeview.TreeViewModel; +import pcgen.gui2.util.treeview.TreeViewPath; /** * * @author Connor Petty <cpm...@us...> */ -public class TemplateInfoTab implements CharacterInfoTab{ +public class TemplateInfoTab extends FlippingSplitPane implements CharacterInfoTab +{ + private final TabTitle tabTitle = new TabTitle("Templates"); + private final FilteredTreeViewTable availableTable; + private final FilteredTreeViewTable selectedTable; + private final JButton addButton; + private final JButton removeButton; + private final InfoPane infoPane; + + public TemplateInfoTab() + { + this.availableTable = new FilteredTreeViewTable(); + this.selectedTable = new FilteredTreeViewTable(); + this.addButton = new JButton(); + this.removeButton = new JButton(); + this.infoPane = new InfoPane("Template Info"); + initComponents(); + } + + private void initComponents() + { + FlippingSplitPane topPane = new FlippingSplitPane(); + setTopComponent(topPane); + setOrientation(VERTICAL_SPLIT); + + JPanel availPanel = new JPanel(new BorderLayout()); + FilterBar bar = new FilterBar(); + bar.addDisplayableFilter(new SearchFilterPanel()); + availPanel.add(bar, BorderLayout.NORTH); + + availableTable.setDisplayableFilter(bar); + availableTable.setSortingPriority(Collections.singletonList(new SortingPriority(0, SortMode.ASCENDING))); + availableTable.sortModel(); + availPanel.add(new JScrollPane(availableTable), BorderLayout.CENTER); + + Box box = Box.createHorizontalBox(); + box.add(Box.createHorizontalGlue()); + box.add(addButton); + box.add(Box.createHorizontalGlue()); + availPanel.add(box, BorderLayout.SOUTH); + + topPane.setLeftComponent(availPanel); + + JPanel selPanel = new JPanel(new BorderLayout()); + selectedTable.setSortingPriority(Collections.singletonList(new SortingPriority(0, SortMode.ASCENDING))); + selectedTable.sortModel(); + selPanel.add(new JScrollPane(selectedTable), BorderLayout.CENTER); + + box = Box.createHorizontalBox(); + box.add(Box.createHorizontalGlue()); + box.add(removeButton); + box.add(Box.createHorizontalGlue()); + selPanel.add(box, BorderLayout.SOUTH); + + topPane.setRightComponent(selPanel); + setBottomComponent(infoPane); + } + + private enum Models + { + + AvailableModel, + SelectedModel, + InfoHandler, + AddAction, + RemoveAction, + TemplateRenderer + } + public Hashtable<Object, Object> createModels(CharacterFacade character) { - throw new UnsupportedOperationException("Not supported yet."); + Hashtable<Object, Object> state = new Hashtable<Object, Object>(); + state.put(Models.AvailableModel, new TemplateTreeViewModel(character, true)); + state.put(Models.SelectedModel, new TemplateTreeViewModel(character, false)); + state.put(Models.InfoHandler, new InfoHandler(character)); + state.put(Models.AddAction, new AddAction(character)); + state.put(Models.RemoveAction, new RemoveAction(character)); + state.put(Models.TemplateRenderer, new TemplateRenderer(character)); + return state; } public void restoreModels(Hashtable<?, ?> state) { - throw new UnsupportedOperationException("Not supported yet."); + availableTable.setTreeViewModel((TemplateTreeViewModel) state.get(Models.AvailableModel)); + selectedTable.setTreeViewModel((TemplateTreeViewModel) state.get(Models.SelectedModel)); + ((InfoHandler) state.get(InfoHandler.class)).install(); + + addButton.setAction((AddAction) state.get(Models.AddAction)); + removeButton.setAction((RemoveAction) state.get(Models.RemoveAction)); + availableTable.setTreeCellRenderer((TemplateRenderer) state.get(Models.TemplateRenderer)); + selectedTable.setTreeCellRenderer((TemplateRenderer) state.get(Models.TemplateRenderer)); } public void storeModels(Hashtable<Object, Object> state) { - throw new UnsupportedOperationException("Not supported yet."); + ((InfoHandler) state.get(InfoHandler.class)).uninstall(); } public TabTitle getTabTitle() { - throw new UnsupportedOperationException("Not supported yet."); + return tabTitle; } + private class TemplateRenderer extends DefaultTreeCellRenderer + { + + private CharacterFacade character; + + public TemplateRenderer(CharacterFacade character) + { + this.character = character; + setTextNonSelectionColor(UIPropertyContext.getQualifiedColor()); + setClosedIcon(null); + setLeafIcon(null); + setOpenIcon(null); + } + + @Override + public Component getTreeCellRendererComponent(JTree tree, Object value, boolean sel, boolean expanded, boolean leaf, int row, boolean hasFocus) + { + + super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus); + Object obj = ((DefaultMutableTreeNode) value).getUserObject(); + if (obj instanceof TemplateFacade && !character.isQualifiedFor((TemplateFacade) obj)) + { + setForeground(UIPropertyContext.getNotQualifiedColor()); + } + return this; + } + + } + + private class InfoHandler implements ListSelectionListener + { + + private CharacterFacade character; + + public InfoHandler(CharacterFacade character) + { + this.character = character; + } + + public void install() + { + availableTable.getSelectionModel().addListSelectionListener(this); + selectedTable.getSelectionModel().addListSelectionListener(this); + } + + public void uninstall() + { + availableTable.getSelectionModel().removeListSelectionListener(this); + selectedTable.getSelectionModel().removeListSelectionListener(this); + } + + public void valueChanged(ListSelectionEvent e) + { + if (!e.getValueIsAdjusting()) + { + Object obj = null; + if (e.getSource() == availableTable.getSelectionModel()) + { + int selectedRow = availableTable.getSelectedRow(); + if (selectedRow != -1) + { + obj = availableTable.getModel().getValueAt(selectedRow, 0); + } + } + else + { + int selectedRow = selectedTable.getSelectedRow(); + if (selectedRow != -1) + { + obj = selectedTable.getModel().getValueAt(selectedRow, 0); + } + } + if (obj instanceof TemplateFacade) + { + infoPane.setText(character.getInfoFactory().getHTMLInfo((TemplateFacade) obj)); + } + } + } + + } + + private class AddAction extends AbstractAction + { + + private CharacterFacade character; + + public AddAction(CharacterFacade character) + { + this.character = character; + putValue(SMALL_ICON, Icons.Forward16.getImageIcon()); + } + + public void actionPerformed(ActionEvent e) + { + List<Object> data = availableTable.getSelectedData(); + for (Object object : data) + { + if (object instanceof TemplateFacade) + { + character.addTemplate((TemplateFacade) object); + return; + } + } + } + + } + + private class RemoveAction extends AbstractAction + { + + private CharacterFacade character; + + public RemoveAction(CharacterFacade character) + { + this.character = character; + putValue(SMALL_ICON, Icons.Back16.getImageIcon()); + } + + public void actionPerformed(ActionEvent e) + { + List<Object> data = selectedTable.getSelectedData(); + for (Object object : data) + { + if (object instanceof TemplateFacade) + { + character.removeTemplate((TemplateFacade) object); + return; + } + } + } + + } + + private static class TemplateTreeViewModel + implements TreeViewModel<TemplateFacade>, DataView<TemplateFacade>, + Filter<CharacterFacade, TemplateFacade>, ListListener<TemplateFacade> + { + + private static final DefaultListFacade<? extends TreeView<TemplateFacade>> treeViews = + new DefaultListFacade<TreeView<TemplateFacade>>(Arrays.asList(TemplateTreeView.values())); + private final List<DefaultDataViewColumn> columns; + private final CharacterFacade character; + private final InfoFactory infoFactory; + private final boolean isAvailModel; + private FilteredListFacade<CharacterFacade, TemplateFacade> templates; + + public TemplateTreeViewModel(CharacterFacade character, boolean isAvailModel) + { + this.character = character; + this.infoFactory = character.getInfoFactory(); + this.isAvailModel = isAvailModel; + if (isAvailModel) + { + templates = new FilteredListFacade<CharacterFacade, TemplateFacade>(); + templates.setContext(character); + templates.setFilter(this); + templates.setDelegate(character.getDataSet().getTemplates()); + character.getTemplates().addListListener(this); + columns = Arrays.asList(new DefaultDataViewColumn("Lvl Adj", String.class, true), + new DefaultDataViewColumn("Modifier", String.class, true), + new DefaultDataViewColumn("Pre-Reqs", String.class, true), + new DefaultDataViewColumn("Source", String.class, false)); + } + else + { + templates = null; + columns = Arrays.asList(new DefaultDataViewColumn("Lvl Adj", String.class, false), + new DefaultDataViewColumn("Modifier", String.class, false), + new DefaultDataViewColumn("Pre-Reqs", String.class, false), + new DefaultDataViewColumn("Source", String.class, false)); + } + } + + public ListFacade<? extends TreeView<TemplateFacade>> getTreeViews() + { + return treeViews; + } + + public int getDefaultTreeViewIndex() + { + return 0; + } + + public DataView<TemplateFacade> getDataView() + { + return this; + } + + public ListFacade<TemplateFacade> getDataModel() + { + if (isAvailModel) + { + return templates; + } + else + { + return character.getTemplates(); + } + } + + public List<?> getData(TemplateFacade obj) + { + return Arrays.asList(infoFactory.getLevelAdjustment(obj), + infoFactory.getModifier(obj), + infoFactory.getPreReqHTML(obj), + obj.getSource()); + } + + public List<? extends DataViewColumn> getDataColumns() + { + return columns; + } + + public void elementAdded(ListEvent<TemplateFacade> e) + { + templates.refilter(); + } + + public void elementRemoved(ListEvent<TemplateFacade> e) + { + templates.refilter(); + } + + public void elementsChanged(ListEvent<TemplateFacade> e) + { + templates.refilter(); + } + + public boolean accept(CharacterFacade context, TemplateFacade element) + { + return !context.getTemplates().containsElement(element); + } + + } + + private enum TemplateTreeView implements TreeView<TemplateFacade> + { + + NAME("Name"), + TYPE_NAME("Type/Name"), + SOURCE_NAME("Source/Name"); + private String name; + + private TemplateTreeView(String name) + { + this.name = name; + } + + public String getViewName() + { + return name; + } + + public List<TreeViewPath<TemplateFacade>> getPaths(TemplateFacade pobj) + { + switch (this) + { + case NAME: + return Collections.singletonList(new TreeViewPath<TemplateFacade>(pobj)); + case TYPE_NAME: + return Collections.singletonList(new TreeViewPath<TemplateFacade>(pobj, pobj.getType())); + case SOURCE_NAME: + return Collections.singletonList(new TreeViewPath<TemplateFacade>(pobj, pobj.getSource())); + default: + throw new InternalError(); + } + } + + } + } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jde...@us...> - 2011-02-13 01:32:41
|
Revision: 14563 http://pcgen.svn.sourceforge.net/pcgen/?rev=14563&view=rev Author: jdempsey Date: 2011-02-13 01:32:32 +0000 (Sun, 13 Feb 2011) Log Message: ----------- Allow characters to be loaded if you are already in the game mode. Modified Paths: -------------- sandbox/cdomui/code/src/java/pcgen/gui2/PCGenFrame.java sandbox/cdomui/code/src/java/pcgen/io/PCGIOHandler.java sandbox/cdomui/code/src/java/pcgen/io/PCGParser.java sandbox/cdomui/code/src/java/pcgen/io/PCGVer2Parser.java sandbox/cdomui/code/src/java/pcgen/system/CharacterManager.java Modified: sandbox/cdomui/code/src/java/pcgen/gui2/PCGenFrame.java =================================================================== --- sandbox/cdomui/code/src/java/pcgen/gui2/PCGenFrame.java 2011-02-12 23:44:50 UTC (rev 14562) +++ sandbox/cdomui/code/src/java/pcgen/gui2/PCGenFrame.java 2011-02-13 01:32:32 UTC (rev 14563) @@ -354,14 +354,14 @@ */ public void loadCharacterFromFile(final File pcgFile) { - SourceSelectionFacade sources = CharacterManager.getRequiredSources(pcgFile); + SourceSelectionFacade sources = CharacterManager.getRequiredSources(pcgFile, PCGenFrame.this); if (sources == null) { JOptionPane.showMessageDialog(this, "Could not find source files for character:" + pcgFile, "Unable To Load Character", JOptionPane.ERROR_MESSAGE); } - else + else if (!sources.getCampaigns().isEmpty()) { loadSourceSelection(sources); if (sourceLoader != null) @@ -394,6 +394,10 @@ }.start(); } } + else + { + CharacterManager.openCharacter(pcgFile, PCGenFrame.this, currentDataSetRef.getReference()); + } } /** Modified: sandbox/cdomui/code/src/java/pcgen/io/PCGIOHandler.java =================================================================== --- sandbox/cdomui/code/src/java/pcgen/io/PCGIOHandler.java 2011-02-12 23:44:50 UTC (rev 14562) +++ sandbox/cdomui/code/src/java/pcgen/io/PCGIOHandler.java 2011-02-13 01:32:32 UTC (rev 14563) @@ -27,12 +27,15 @@ import java.io.BufferedReader; import java.io.BufferedWriter; +import java.io.File; +import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import java.util.StringTokenizer; @@ -44,6 +47,7 @@ import pcgen.cdom.inst.PCClassLevel; import pcgen.core.Ability; import pcgen.core.AbilityCategory; +import pcgen.core.Campaign; import pcgen.core.Globals; import pcgen.core.PCClass; import pcgen.core.PlayerCharacter; @@ -207,42 +211,9 @@ warnings.clear(); - final List<String> lines = new ArrayList<String>(); + final List<String> lines = readPcgLines(in); + boolean isPCGVersion2 = isPCGCersion2(lines); - boolean isPCGVersion2 = false; - - // try reading in all the lines in the .pcg file - BufferedReader br = null; - - try - { - br = new BufferedReader(new InputStreamReader(in, "UTF-8")); - - String aLine; - - while ((aLine = br.readLine()) != null) - { - lines.add(aLine); - isPCGVersion2 |= aLine.startsWith(IOConstants.TAG_PCGVERSION); - } - } - catch (IOException ioe) - { - Logging.errorPrint("Exception in PCGIOHandler::read", ioe); - } - finally - { - try - { - br.close(); - } - catch (IOException e) - { - Logging.errorPrint("Couldn't close file in PCGIOHandler.read", - e); - } - } - pcToBeRead.setImporting(true); // If not validating, disable user preference for loading the campaign. @@ -297,7 +268,61 @@ } } + private boolean isPCGCersion2(List<String> lines) + { + for (String aLine : lines) + { + if (aLine.startsWith(IOConstants.TAG_PCGVERSION)) + { + return true; + } + } + return false; + } + /** + * @param in + * @return + */ + private List<String> readPcgLines(InputStream in) + { + final List<String> lines = new ArrayList<String>(); + + // try reading in all the lines in the .pcg file + BufferedReader br = null; + + try + { + br = new BufferedReader(new InputStreamReader(in, "UTF-8")); + + String aLine; + + while ((aLine = br.readLine()) != null) + { + lines.add(aLine); + //isPCGVersion2 |= aLine.startsWith(IOConstants.TAG_PCGVERSION); + } + } + catch (IOException ioe) + { + Logging.errorPrint("Exception in PCGIOHandler::read", ioe); + } + finally + { + try + { + br.close(); + } + catch (IOException e) + { + Logging.errorPrint("Couldn't close file in PCGIOHandler.read", + e); + } + } + return lines; + } + + /** * Writes the contents of the given PlayerCharacter to a stream * <p/> * <br>author: Thomas Behr 11-03-02 @@ -567,4 +592,79 @@ // make sure we are not dirty aPC.setDirty(false); } + + /** + * Read in the list of sources required for the character. + * @param pcgFile The character file + * @return The list of sources + */ + public List<Campaign> readSources(File pcgFile) + { + InputStream in = null; + + try + { + in = new FileInputStream(pcgFile); + return internalReadSources(in); + } + catch (IOException ex) + { + Logging.errorPrint("Exception in IOHandler::read when reading", ex); + } + finally + { + if (in != null) + { + try + { + in.close(); + } + catch (IOException e) + { + Logging.errorPrint("Exception in IOHandler::readSources", e); + } + catch (NullPointerException e) + { + Logging.errorPrint( + "Could not create file inputStream IOHandler::readSources", e); + } + } + } + return null; + } + + private List<Campaign> internalReadSources(InputStream in) + { + // Read lines from file + final List<String> lines = readPcgLines(in); + + // Verify it is ver2 + boolean isPCGVersion2 = isPCGCersion2(lines); + + final String[] pcgLines = lines.toArray(new String[lines.size()]); + + if (isPCGVersion2) + { + //PlayerCharacter aPC = new PlayerCharacter(); + final PCGParser parser = new PCGVer2Parser(null); + try + { + // Extract list of sources + return parser.parcePCGSourceOnly(pcgLines); + } + catch (PCGParseException pcgex) + { + errors.add(pcgex.getMessage() + Constants.s_LINE_SEP + "Method: " + + pcgex.getMethod() + '\n' + "Line: " + pcgex.getLine()); + } + + warnings.addAll(parser.getWarnings()); + } + else + { + errors.add("Cannot open PCG file"); + } + + return Collections.emptyList(); + } } Modified: sandbox/cdomui/code/src/java/pcgen/io/PCGParser.java =================================================================== --- sandbox/cdomui/code/src/java/pcgen/io/PCGParser.java 2011-02-12 23:44:50 UTC (rev 14562) +++ sandbox/cdomui/code/src/java/pcgen/io/PCGParser.java 2011-02-13 01:32:32 UTC (rev 14563) @@ -22,6 +22,8 @@ import java.util.List; +import pcgen.core.Campaign; + /** * <code>PCGParser</code><br> * @author Thomas Behr 07-09-02 @@ -47,8 +49,18 @@ * @param lines the String to parse * @throws PCGParseException */ - void parsePCG(String[] lines) throws PCGParseException; + public void parsePCG(String[] lines) throws PCGParseException; + /** + * Check the game mode and then build a list of campaigns the character + * requires to be loaded. + * + * @param lines The PCG lines to be parsed. + * @return The list of campaigns. + * @throws PCGParseException If the lines are invalid + */ + public List<Campaign> parcePCGSourceOnly(String[] lines) throws PCGParseException; + /** * @return the baseFeatPool Modified: sandbox/cdomui/code/src/java/pcgen/io/PCGVer2Parser.java =================================================================== --- sandbox/cdomui/code/src/java/pcgen/io/PCGVer2Parser.java 2011-02-12 23:44:50 UTC (rev 14562) +++ sandbox/cdomui/code/src/java/pcgen/io/PCGVer2Parser.java 2011-02-13 01:32:32 UTC (rev 14563) @@ -28,6 +28,7 @@ import java.math.BigDecimal; import java.util.ArrayList; import java.util.Collection; +import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; @@ -101,8 +102,8 @@ import pcgen.persistence.PersistenceLayerException; import pcgen.persistence.PersistenceManager; import pcgen.rules.context.ReferenceContext; +import pcgen.system.LanguageBundle; import pcgen.util.Logging; -import pcgen.system.LanguageBundle; import pcgen.util.enumeration.ProhibitedSpellType; /** @@ -177,6 +178,49 @@ */ public void parsePCG(String[] lines) throws PCGParseException { + buildPcgLineCache(lines); + + parseCachedLines(); + } + + /** + * Check the game mode and then build a list of campaigns the character + * requires to be loaded. + * + * @param lines The PCG lines to be parsed. + * @return The list of campaigns. + * @throws PCGParseException If the lines are invalid + */ + public List<Campaign> parcePCGSourceOnly(String[] lines) throws PCGParseException + { + buildPcgLineCache(lines); + + if (cache.containsKey(TAG_GAMEMODE)) + { + parseGameMode(cache.get(TAG_GAMEMODE).get(0)); + } + + /* + * #System Information + * CAMPAIGN:CMP - Monkey Book I - Book For Monkeys + * CAMPAIGN:CMP - Monkey Book II - Book By Monkeys + * ... + * + * first thing to do is checking campaigns - no matter what! + */ + if (cache.containsKey(TAG_CAMPAIGN)) + { + return getCampaignList(cache.get(TAG_CAMPAIGN)); + } + + return Collections.emptyList(); + } + + /** + * @param lines + */ + private void buildPcgLineCache(String[] lines) + { initCache(lines.length); for (int i = 0; i < lines.length; ++i) @@ -186,8 +230,6 @@ cacheLine(lines[i].trim()); } } - - parseCachedLines(); } /* @@ -1375,47 +1417,11 @@ private void parseCampaignLines(final List<String> lines) throws PCGParseException { - final List<Campaign> campaigns = new ArrayList<Campaign>(); if (SettingsHandler.isLoadCampaignsWithPC()) { - PCGTokenizer tokens; + final List<Campaign> campaigns = getCampaignList(lines); - for (final String line : lines) - { - try - { - tokens = new PCGTokenizer(line); - } - catch (PCGParseException pcgpex) - { - /* - * Campaigns are critical for characters, - * need to stop the load process - * - * Thomas Behr 14-08-02 - */ - throw new PCGParseException( - "parseCampaignLines", line, pcgpex.getMessage()); //$NON-NLS-1$ - } - - for (PCGElement element : tokens.getElements()) - { - final Campaign aCampaign = - Globals.getCampaignKeyed(element.getText()); - - if (aCampaign != null - && aCampaign.containsInList(ListKey.GAME_MODE, SettingsHandler.getGame() - .getName())) - { - if (!aCampaign.isLoaded()) - { - campaigns.add(aCampaign); - } - } - } - } - if (campaigns.size() > 0) { try @@ -1433,11 +1439,11 @@ "parseCampaignLines", "N/A", e.getMessage()); //$NON-NLS-1$ //$NON-NLS-2$ } - if (Globals.getUseGUI()) - { - pcgen.gui.PCGen_Frame1.getInst().getMainSource() - .updateLoadedCampaignsUI(); - } +// if (Globals.getUseGUI()) +// { +// pcgen.gui.PCGen_Frame1.getInst().getMainSource() +// .updateLoadedCampaignsUI(); +// } } } @@ -1449,6 +1455,56 @@ } } + /** + * Build a list of campaigns as specified on the supplied lines. + * @param lines The campaign lines from the PCG file. + * @return The list of campaigns. + * @throws PCGParseException If the line format is invalid + */ + private List<Campaign> getCampaignList(final List<String> lines) + throws PCGParseException + { + final List<Campaign> campaigns = new ArrayList<Campaign>(); + PCGTokenizer tokens; + + for (final String line : lines) + { + try + { + tokens = new PCGTokenizer(line); + } + catch (PCGParseException pcgpex) + { + /* + * Campaigns are critical for characters, + * need to stop the load process + * + * Thomas Behr 14-08-02 + */ + throw new PCGParseException( + "parseCampaignLines", line, pcgpex.getMessage()); //$NON-NLS-1$ + } + + for (PCGElement element : tokens.getElements()) + { + final Campaign aCampaign = + Globals.getCampaignKeyed(element.getText()); + + if (aCampaign != null + && aCampaign.containsInList(ListKey.GAME_MODE, + SettingsHandler.getGame().getName())) + { + if (!aCampaign.isLoaded()) + { + campaigns.add(aCampaign); + } + } + } + } + + return campaigns; + } + private void parseCatchPhraseLine(final String line) { thePC.setCatchPhrase(EntityEncoder.decode(line Modified: sandbox/cdomui/code/src/java/pcgen/system/CharacterManager.java =================================================================== --- sandbox/cdomui/code/src/java/pcgen/system/CharacterManager.java 2011-02-12 23:44:50 UTC (rev 14562) +++ sandbox/cdomui/code/src/java/pcgen/system/CharacterManager.java 2011-02-13 01:32:32 UTC (rev 14563) @@ -23,11 +23,16 @@ import java.io.File; import java.io.IOException; import java.net.URI; +import java.util.ArrayList; +import java.util.List; import org.apache.commons.lang.ArrayUtils; import pcgen.cdom.base.Constants; +import pcgen.core.Campaign; import pcgen.core.PlayerCharacter; +import pcgen.core.SettingsHandler; +import pcgen.core.facade.CampaignFacade; import pcgen.core.facade.CharacterFacade; import pcgen.core.facade.DataSetFacade; import pcgen.core.facade.SourceSelectionFacade; @@ -38,6 +43,7 @@ import pcgen.core.party.Party; import pcgen.gui2.facade.CharacterFacadeImpl; import pcgen.io.PCGFile; +import pcgen.io.PCGIOHandler; import pcgen.util.Logging; /** @@ -147,16 +153,35 @@ /** * * @param pcgFile a character file + * @param delegate The UIDelegate used to display message to the user * @return a SourceSelectionFacade */ - public static SourceSelectionFacade getRequiredSources(File pcgFile) + public static SourceSelectionFacade getRequiredSources(File pcgFile, UIDelegate delegate) { if (!PCGFile.isPCGenCharacterFile(pcgFile)) { throw new IllegalArgumentException(); } - //TODO: implement this - return null; + + final PCGIOHandler ioHandler = new PCGIOHandler(); + //TODO: Switch game modes + List<Campaign> campaigns = ioHandler.readSources(pcgFile); + if (!ioHandler.getErrors().isEmpty()) + { + for (String msg : ioHandler.getErrors()) + { + delegate.showErrorMessage(Constants.s_APPNAME, msg); + Logging.errorPrint(msg); + return null; + } + } + List<CampaignFacade> facades = new ArrayList<CampaignFacade>(campaigns); + + SourceSelectionFacade selection = + FacadeFactory.createSourceSelection(SettingsHandler.getGame(), + facades); + + return selection; } /** This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jde...@us...> - 2011-02-13 03:18:00
|
Revision: 14565 http://pcgen.svn.sourceforge.net/pcgen/?rev=14565&view=rev Author: jdempsey Date: 2011-02-13 03:17:53 +0000 (Sun, 13 Feb 2011) Log Message: ----------- Implement New TemplatesTab * Hide hidden templates Issue#: CODE-510 Modified Paths: -------------- sandbox/cdomui/code/src/java/pcgen/core/DataSet.java sandbox/cdomui/code/src/java/pcgen/util/enumeration/Visibility.java Modified: sandbox/cdomui/code/src/java/pcgen/core/DataSet.java =================================================================== --- sandbox/cdomui/code/src/java/pcgen/core/DataSet.java 2011-02-13 02:37:43 UTC (rev 14564) +++ sandbox/cdomui/code/src/java/pcgen/core/DataSet.java 2011-02-13 03:17:53 UTC (rev 14565) @@ -24,6 +24,7 @@ import java.util.Map; import pcgen.cdom.base.Constants; +import pcgen.cdom.enumeration.ObjectKey; import pcgen.cdom.enumeration.StringKey; import pcgen.core.character.EquipSlot; import pcgen.core.facade.AbilityCategoryFacade; @@ -44,6 +45,7 @@ import pcgen.core.facade.util.DefaultListFacade; import pcgen.core.facade.util.ListFacade; import pcgen.rules.context.LoadContext; +import pcgen.util.enumeration.View; /** * @@ -107,7 +109,10 @@ } for (PCTemplate template : context.ref.getConstructedCDOMObjects(PCTemplate.class)) { - templates.addElement(template); + if (template.getSafe(ObjectKey.VISIBILITY).isVisibleTo(View.VISIBLE, false)) + { + templates.addElement(template); + } } for (PCAlignment alignment : context.ref.getConstructedCDOMObjects(PCAlignment.class)) { Modified: sandbox/cdomui/code/src/java/pcgen/util/enumeration/Visibility.java =================================================================== --- sandbox/cdomui/code/src/java/pcgen/util/enumeration/Visibility.java 2011-02-13 02:37:43 UTC (rev 14564) +++ sandbox/cdomui/code/src/java/pcgen/util/enumeration/Visibility.java 2011-02-13 03:17:53 UTC (rev 14565) @@ -34,27 +34,25 @@ * @param isExporting Is the visibility being detemerined for an export function * @return true if the visibility can be viewed, false if not. */ - public boolean isVisibileTo(View view, boolean isExporting) + public boolean isVisibleTo(View view, boolean isExporting) { - if (view == View.ALL) + switch (view) { - return true; - } - if (view == View.HIDDEN) - { - if (this == Visibility.HIDDEN || this == Visibility.DISPLAY_ONLY) - { + case ALL: return true; - } + + case HIDDEN: + return (this == Visibility.HIDDEN || this == Visibility.DISPLAY_ONLY); + + case VISIBLE: + default: + if (isExporting) + { + return (this == Visibility.DEFAULT || this == Visibility.OUTPUT_ONLY); + } + + return (this == Visibility.DEFAULT || this == Visibility.DISPLAY_ONLY); } - else - { - if (this == Visibility.DEFAULT || this == Visibility.OUTPUT_ONLY) - { - return true; - } - } - return false; /* * TODO Need to deal with QUALIFY */ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jde...@us...> - 2011-02-13 05:18:37
|
Revision: 14566 http://pcgen.svn.sourceforge.net/pcgen/?rev=14566&view=rev Author: jdempsey Date: 2011-02-13 05:18:30 +0000 (Sun, 13 Feb 2011) Log Message: ----------- Implement ability, class and skill info generation Modified Paths: -------------- sandbox/cdomui/code/src/java/pcgen/core/facade/InfoFactory.java sandbox/cdomui/code/src/java/pcgen/gui2/facade/Gui2InfoFactory.java sandbox/cdomui/code/src/java/pcgen/resources/lang/LanguageBundle.properties Modified: sandbox/cdomui/code/src/java/pcgen/core/facade/InfoFactory.java =================================================================== --- sandbox/cdomui/code/src/java/pcgen/core/facade/InfoFactory.java 2011-02-13 03:17:53 UTC (rev 14565) +++ sandbox/cdomui/code/src/java/pcgen/core/facade/InfoFactory.java 2011-02-13 05:18:30 UTC (rev 14566) @@ -49,7 +49,7 @@ public String getHTMLInfo(RaceFacade race); - public String getHTMLInfo(ClassFacade pcClass); + public String getHTMLInfo(ClassFacade pcClass, ClassFacade parentClass); public String getHTMLInfo(SkillFacade skill); Modified: sandbox/cdomui/code/src/java/pcgen/gui2/facade/Gui2InfoFactory.java =================================================================== --- sandbox/cdomui/code/src/java/pcgen/gui2/facade/Gui2InfoFactory.java 2011-02-13 03:17:53 UTC (rev 14565) +++ sandbox/cdomui/code/src/java/pcgen/gui2/facade/Gui2InfoFactory.java 2011-02-13 05:18:30 UTC (rev 14566) @@ -22,6 +22,7 @@ */ package pcgen.gui2.facade; +import java.math.BigDecimal; import java.text.DecimalFormat; import java.text.NumberFormat; import java.util.List; @@ -31,6 +32,8 @@ import pcgen.base.lang.StringUtil; import pcgen.cdom.base.CDOMReference; +import pcgen.cdom.content.HitDie; +import pcgen.cdom.enumeration.AspectName; import pcgen.cdom.enumeration.FormulaKey; import pcgen.cdom.enumeration.ListKey; import pcgen.cdom.enumeration.MapKey; @@ -38,21 +41,29 @@ import pcgen.cdom.enumeration.RaceSubType; import pcgen.cdom.enumeration.RaceType; import pcgen.cdom.enumeration.StringKey; +import pcgen.cdom.helper.Aspect; import pcgen.cdom.reference.ReferenceUtilities; +import pcgen.core.Ability; +import pcgen.core.BenefitFormatting; import pcgen.core.Deity; import pcgen.core.Domain; import pcgen.core.Equipment; import pcgen.core.Globals; +import pcgen.core.PCClass; import pcgen.core.PCStat; import pcgen.core.PCTemplate; import pcgen.core.PlayerCharacter; import pcgen.core.Race; import pcgen.core.SettingsHandler; +import pcgen.core.Skill; +import pcgen.core.SubClass; import pcgen.core.WeaponProf; import pcgen.core.analysis.BonusCalc; import pcgen.core.analysis.DescriptionFormatting; import pcgen.core.analysis.OutputNameFormatting; import pcgen.core.analysis.RaceStat; +import pcgen.core.analysis.SkillModifier; +import pcgen.core.analysis.SkillRankControl; import pcgen.core.analysis.TemplateModifier; import pcgen.core.character.WieldCategory; import pcgen.core.display.VisionDisplay; @@ -84,6 +95,7 @@ public class Gui2InfoFactory implements InfoFactory { private static NumberFormat ADJ_FMT = new DecimalFormat("+0;-0"); + private static NumberFormat COST_FMT = new DecimalFormat("0.#"); private PlayerCharacter pc; @@ -164,22 +176,267 @@ return infoText.toString(); } - public String getHTMLInfo(ClassFacade pcClass) + /* (non-Javadoc) + * @see pcgen.core.facade.InfoFactory#getHTMLInfo(pcgen.core.facade.ClassFacade, pcgen.core.facade.ClassFacade) + */ + public String getHTMLInfo(ClassFacade classFacade, + ClassFacade parentClassFacade) { - // TODO Auto-generated method stub - return ""; + if (!(classFacade instanceof PCClass) || classFacade == null) + { + return ""; + } + PCClass aClass = (PCClass) classFacade; + PCClass parentClass = aClass; + + String aString; + boolean isSubClass = aClass instanceof SubClass; + if (isSubClass) + { + parentClass = (PCClass) parentClassFacade; + } + + final HtmlInfoBuilder b = + new HtmlInfoBuilder(OutputNameFormatting + .piString(aClass, false)); + b.appendLineBreak(); + + // Type + aString = aClass.getType(); + if (isSubClass && (aString.length() == 0)) + { + aString = parentClass.getType(); + } + b.appendI18nElement("in_clInfoType", aString); //$NON-NLS-1$ + + // Hit Die + HitDie hitDie = aClass.getSafe(ObjectKey.LEVEL_HITDIE); + if (isSubClass && HitDie.ZERO.equals(hitDie)) + { + hitDie = parentClass.getSafe(ObjectKey.LEVEL_HITDIE); + } + if (!HitDie.ZERO.equals(hitDie)) + { + b.appendSpacer(); + b.appendI18nElement("in_clInfoHD", "d" + hitDie.getDie()); //$NON-NLS-1$ //$NON-NLS-2$ + } + + if (Globals.getGameModeShowSpellTab()) + { + aString = aClass.get(StringKey.SPELLTYPE); + + if (isSubClass && aString == null) + { + aString = parentClass.getSpellType(); + } + + b.appendSpacer(); + b.appendI18nElement("in_clInfoSpellType", aString); //$NON-NLS-1$ + + aString = aClass.getSpellBaseStat(); + + /* + * CONSIDER This test here is the ONLY place where the "magical" + * value of null is tested for in getSpellBaseStat(). This is + * currently set by SubClass and SubstititionClass, so it IS + * used, but the question is: Is there a better method for + * identifying this special deferral to the "parentClass" other + * than null SpellBaseStat? - thpr 11/9/06 + */ + if (isSubClass && ((aString == null) || (aString.length() == 0))) + { + aString = parentClass.getSpellBaseStat(); + } + + b.appendSpacer(); + b.appendI18nElement("in_clInfoBaseStat", aString); //$NON-NLS-1$ + } + + // Prereqs + aString = + PrerequisiteUtilities.preReqHTMLStringsForList(pc, null, aClass + .getPrerequisiteList(), false); + if (isSubClass && (aString.length() == 0)) + { + aString = + PrerequisiteUtilities.preReqHTMLStringsForList(pc, null, + parentClass.getPrerequisiteList(), false); + } + if (aString.length() > 0) + { + b.appendLineBreak(); + b.appendI18nElement("in_requirements", aString); //$NON-NLS-1$ + } + + // Source + aString = aClass.getDefaultSourceString(); + if (isSubClass && (aString.length() == 0)) + { + aString = parentClass.getDefaultSourceString(); + } + if (aString.length() > 0) + { + b.appendLineBreak(); + b.appendI18nElement("in_source", aString); //$NON-NLS-1$ + } + + return b.toString(); } - public String getHTMLInfo(SkillFacade skill) + /* (non-Javadoc) + * @see pcgen.core.facade.InfoFactory#getHTMLInfo(pcgen.core.facade.SkillFacade) + */ + public String getHTMLInfo(SkillFacade skillFacade) { - // TODO Auto-generated method stub - return ""; + if (!(skillFacade instanceof Skill) || skillFacade == null) + { + return ""; + } + Skill skill = (Skill) skillFacade; + + final HtmlInfoBuilder infoText = new HtmlInfoBuilder(); + + infoText.appendTitleElement(OutputNameFormatting.piString(skill, false)); + + infoText.appendLineBreak(); + infoText.appendI18nElement("in_igInfoLabelTextType", //$NON-NLS-1$ + StringUtil.join(skill.getTrueTypeList(true), ". ")); + + infoText.appendLineBreak(); + String aString = skill.getKeyStatFromStats(pc); + if (aString.length() != 0) + { + infoText.appendI18nElement("in_iskKEY_STAT", aString); //$NON-NLS-1$ + } + infoText.appendI18nElement("in_iskUntrained", //$NON-NLS-1$ + skill.getSafe(ObjectKey.USE_UNTRAINED) ? LanguageBundle + .getString("in_yes") : LanguageBundle.getString("in_no")); + infoText.appendI18nElement("in_iskEXCLUSIVE", //$NON-NLS-1$ + skill.getSafe(ObjectKey.EXCLUSIVE) ? LanguageBundle + .getString("in_yes") : LanguageBundle.getString("in_no")); + + String bString = + PrerequisiteUtilities.preReqHTMLStringsForList(pc, null, skill + .getPrerequisiteList(), false); + if (bString.length() > 0) + { + infoText.appendI18nFormattedElement("in_InfoRequirements", //$NON-NLS-1$ + bString); + } + + bString = skill.getDefaultSourceString(); + if (bString.length() > 0) + { + infoText.appendI18nElement("in_iskSource", bString); //$NON-NLS-1$ + } + + if (SettingsHandler.getShowSkillModifier()) + { + bString = SkillModifier.getModifierExplanation(skill, pc, false); + if (bString.length() != 0) + { + infoText.appendLineBreak(); + infoText.appendI18nElement("in_iskHtml_PcMod", //$NON-NLS-1$ + bString); + } + } + + if (SettingsHandler.getShowSkillRanks()) + { + bString = SkillRankControl.getRanksExplanation(pc, skill); + if (bString.length() != 0) + { + infoText.appendLineBreak(); + infoText.appendI18nElement("in_iskHtml_Ranks", //$NON-NLS-1$ + bString); + } + } + + return infoText.toString(); } - public String getHTMLInfo(AbilityFacade ability) + /* (non-Javadoc) + * @see pcgen.core.facade.InfoFactory#getHTMLInfo(pcgen.core.facade.AbilityFacade) + */ + public String getHTMLInfo(AbilityFacade abilityFacade) { - // TODO Auto-generated method stub - return ""; + if (!(abilityFacade instanceof Ability) || abilityFacade == null) + { + return ""; + } + Ability ability = (Ability) abilityFacade; + + final HtmlInfoBuilder infoText = new HtmlInfoBuilder(); + infoText.appendTitleElement(OutputNameFormatting.piString(ability, false)); + infoText.appendLineBreak(); + + infoText.appendI18nFormattedElement("Ability.Info.Type", //$NON-NLS-1$ + StringUtil.join(ability.getTrueTypeList(true), ". ")); //$NON-NLS-1$ + + BigDecimal costStr = ability.getSafe(ObjectKey.SELECTION_COST); + if (!costStr.equals(BigDecimal.ONE)) //$NON-NLS-1$ + { + infoText.appendI18nFormattedElement("Ability.Info.Cost", //$NON-NLS-1$ + COST_FMT.format(costStr)); + } + + if (ability.getSafe(ObjectKey.MULTIPLE_ALLOWED)) + { + infoText.appendSpacer(); + infoText.append(LanguageBundle.getString("Ability.Info.Multiple")); //$NON-NLS-1$ + } + + if (ability.getSafe(ObjectKey.STACKS)) + { + infoText.appendSpacer(); + infoText.append(LanguageBundle.getString("Ability.Info.Stacks")); //$NON-NLS-1$ + } + + final String cString = + PrerequisiteUtilities.preReqHTMLStringsForList(pc, null, + ability.getPrerequisiteList(), false); + if (cString.length() > 0) + { + infoText.appendI18nFormattedElement("in_InfoRequirements", //$NON-NLS-1$ + cString); + } + + infoText.appendLineBreak(); + infoText.appendI18nFormattedElement("in_InfoDescription", //$NON-NLS-1$ + DescriptionFormatting.piDescSubString(pc, ability)); + + if (ability.getSafeSizeOfMapFor(MapKey.ASPECT) > 0) + { + Set<AspectName> aspectKeys = ability.getKeysFor(MapKey.ASPECT); + StringBuffer buff = new StringBuffer(); + for (AspectName key : aspectKeys) + { + Aspect aspect = ability.get(MapKey.ASPECT, key); + if (buff.length() > 0) + { + buff.append(", "); + } + buff.append(aspect.getName()).append(": "); + buff.append(aspect.getAspectText(pc, ability)); + } + infoText.appendLineBreak(); + infoText.appendI18nFormattedElement("Ability.Info.Aspects", //$NON-NLS-1$ + buff.toString()); + } + + final String bene = BenefitFormatting.getBenefits(pc, ability); + if (bene != null && bene.length() > 0) + { + infoText.appendLineBreak(); + infoText.appendI18nFormattedElement("Ability.Info.Benefit", //$NON-NLS-1$ + BenefitFormatting.getBenefits(pc, ability)); + } + + infoText.appendLineBreak(); + infoText.appendI18nFormattedElement("in_InfoSource", //$NON-NLS-1$ + ability.getDefaultSourceString()); + + return infoText.toString(); } /* (non-Javadoc) Modified: sandbox/cdomui/code/src/java/pcgen/resources/lang/LanguageBundle.properties =================================================================== --- sandbox/cdomui/code/src/java/pcgen/resources/lang/LanguageBundle.properties 2011-02-13 03:17:53 UTC (rev 14565) +++ sandbox/cdomui/code/src/java/pcgen/resources/lang/LanguageBundle.properties 2011-02-13 05:18:30 UTC (rev 14566) @@ -1408,6 +1408,14 @@ in_iskHtml_UNTRAINED=\ <b>Untrained:</b> +in_iskKEY_STAT=Key Stat + +in_iskEXCLUSIVE=Exclusive + +in_iskPcMod=PC Modifier + +in_iskRanks=PC Ranks + in_iskInclude_Skills=Include Skills: in_iskInvalid_number=Invalid number\! This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jde...@us...> - 2011-02-13 05:28:00
|
Revision: 14567 http://pcgen.svn.sourceforge.net/pcgen/?rev=14567&view=rev Author: jdempsey Date: 2011-02-13 05:27:53 +0000 (Sun, 13 Feb 2011) Log Message: ----------- Merge isQualifiedFor implementations which can be merged. Modified Paths: -------------- sandbox/cdomui/code/src/java/pcgen/core/facade/CharacterFacade.java sandbox/cdomui/code/src/java/pcgen/gui2/facade/CharacterFacadeImpl.java Modified: sandbox/cdomui/code/src/java/pcgen/core/facade/CharacterFacade.java =================================================================== --- sandbox/cdomui/code/src/java/pcgen/core/facade/CharacterFacade.java 2011-02-13 05:18:30 UTC (rev 14566) +++ sandbox/cdomui/code/src/java/pcgen/core/facade/CharacterFacade.java 2011-02-13 05:27:53 UTC (rev 14567) @@ -476,26 +476,17 @@ public void refreshRollMethod(); /** - * Check if the character meets all requirements to be of the race. - * @param race The race to be checked. - * @return True if the character can be of the race, false if not. + * Check if the character meets all requirements to be of the onject. + * @param infoFacade The object to be checked. + * @return True if the character qualifies for the object, false if not. */ - public boolean isQualifiedFor(RaceFacade race); + public boolean isQualifiedFor(InfoFacade infoFacade); /** - * Check if the character meets all requirements to follow the deity. - * @param deity The deity to be checked. - * @return True if the character can follow the deity, false if not. - */ - public boolean isQualifiedFor(DeityFacade deity); - - /** * Check if the character meets all requirements to take the domain. * @param domain The domain to be checked. * @return True if the character can take the domain, false if not. */ public boolean isQualifiedFor(DomainFacade domain); - public boolean isQualifiedFor(TemplateFacade templateFacade); - } Modified: sandbox/cdomui/code/src/java/pcgen/gui2/facade/CharacterFacadeImpl.java =================================================================== --- sandbox/cdomui/code/src/java/pcgen/gui2/facade/CharacterFacadeImpl.java 2011-02-13 05:18:30 UTC (rev 14566) +++ sandbox/cdomui/code/src/java/pcgen/gui2/facade/CharacterFacadeImpl.java 2011-02-13 05:27:53 UTC (rev 14567) @@ -61,6 +61,7 @@ import pcgen.core.PCClass; import pcgen.core.PCStat; import pcgen.core.PCTemplate; +import pcgen.core.PObject; import pcgen.core.PlayerCharacter; import pcgen.core.QualifiedObject; import pcgen.core.Race; @@ -89,6 +90,7 @@ import pcgen.core.facade.EquipmentListFacade; import pcgen.core.facade.EquipmentSetFacade; import pcgen.core.facade.GenderFacade; +import pcgen.core.facade.InfoFacade; import pcgen.core.facade.InfoFactory; import pcgen.core.facade.LanguageChooserFacade; import pcgen.core.facade.LanguageFacade; @@ -1946,6 +1948,9 @@ theCharacter.setPlayersName(name); } + /* (non-Javadoc) + * @see pcgen.core.facade.CharacterFacade#isQualifiedFor(pcgen.core.facade.ClassFacade) + */ public boolean isQualifiedFor(ClassFacade c) { if (c instanceof PCClass) @@ -2656,17 +2661,17 @@ } /* (non-Javadoc) - * @see pcgen.core.facade.CharacterFacade#isQualifiedFor(pcgen.core.facade.RaceFacade) + * @see pcgen.core.facade.CharacterFacade#isQualifiedFor(pcgen.core.facade.InfoFacade) */ - public boolean isQualifiedFor(RaceFacade raceFacade) + public boolean isQualifiedFor(InfoFacade infoFacade) { - if (!(raceFacade instanceof Race)) + if (!(infoFacade instanceof PObject)) { return false; } - Race race = (Race) raceFacade; - if (!race.qualifies(theCharacter)) + PObject pObj = (PObject) infoFacade; + if (!pObj.qualifies(theCharacter)) { return false; } @@ -2674,24 +2679,6 @@ } /* (non-Javadoc) - * @see pcgen.core.facade.CharacterFacade#isQualifiedFor(pcgen.core.facade.DeityFacade) - */ - public boolean isQualifiedFor(DeityFacade deityFacade) - { - if (!(deityFacade instanceof Deity)) - { - return false; - } - - Deity deity = (Deity) deityFacade; - if (!deity.qualifies(theCharacter)) - { - return false; - } - return true; - } - - /* (non-Javadoc) * @see pcgen.core.facade.CharacterFacade#isQualifiedFor(pcgen.core.facade.DomainFacade) */ public boolean isQualifiedFor(DomainFacade domainFacade) @@ -2773,17 +2760,4 @@ return templates; } - /* (non-Javadoc) - * @see pcgen.core.facade.CharacterFacade#isQualifiedFor(pcgen.core.facade.TemplateFacade) - */ - public boolean isQualifiedFor(TemplateFacade templateFacade) - { - if (templateFacade == null || !(templateFacade instanceof PCTemplate)) - { - return false; - } - PCTemplate template = (PCTemplate) templateFacade; - return PrereqHandler.passesAll(template.getPrerequisiteList(), theCharacter, template); - } - } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jde...@us...> - 2011-02-15 07:19:13
|
Revision: 14576 http://pcgen.svn.sourceforge.net/pcgen/?rev=14576&view=rev Author: jdempsey Date: 2011-02-15 07:19:07 +0000 (Tue, 15 Feb 2011) Log Message: ----------- Implement EquipmentSet facade layer * Show preferred location in Loc column in equipment list Issue#: CODE-503 Modified Paths: -------------- sandbox/cdomui/code/src/java/pcgen/core/facade/EquipmentSetFacade.java sandbox/cdomui/code/src/java/pcgen/gui2/facade/EquipmentSetFacadeImpl.java sandbox/cdomui/code/src/java/pcgen/gui2/tabs/equip/EquipmentModels.java sandbox/cdomui/code/src/java/pcgen/gui2/tabs/equip/EquipmentTableModel.java Modified: sandbox/cdomui/code/src/java/pcgen/core/facade/EquipmentSetFacade.java =================================================================== --- sandbox/cdomui/code/src/java/pcgen/core/facade/EquipmentSetFacade.java 2011-02-14 21:53:21 UTC (rev 14575) +++ sandbox/cdomui/code/src/java/pcgen/core/facade/EquipmentSetFacade.java 2011-02-15 07:19:07 UTC (rev 14576) @@ -92,6 +92,13 @@ public void removeEquipmentTreeListener(EquipmentTreeListener listener); + /** + * Identify the preferred location to place the item + * @param equipment The item to be checked + * @return The name of the location + */ + public String getPreferredLoc(EquipmentFacade equipment); + public static interface EquipmentTreeListener extends EventListener { Modified: sandbox/cdomui/code/src/java/pcgen/gui2/facade/EquipmentSetFacadeImpl.java =================================================================== --- sandbox/cdomui/code/src/java/pcgen/gui2/facade/EquipmentSetFacadeImpl.java 2011-02-14 21:53:21 UTC (rev 14575) +++ sandbox/cdomui/code/src/java/pcgen/gui2/facade/EquipmentSetFacadeImpl.java 2011-02-15 07:19:07 UTC (rev 14576) @@ -32,7 +32,6 @@ import java.util.List; import java.util.Map; import java.util.Set; -import java.util.StringTokenizer; import pcgen.cdom.base.Constants; import pcgen.core.BodyStructure; @@ -453,8 +452,6 @@ int newQty = (int) (eSet.getQty()-quantity); Equipment eqI = eSet.getItem(); - StringTokenizer aTok = - new StringTokenizer(eSet.getIdPath(), ".", false); if (newQty <= 0) { @@ -763,6 +760,25 @@ } /* (non-Javadoc) + * @see pcgen.core.facade.EquipmentSetFacade#getPreferredLoc(pcgen.core.facade.EquipmentFacade) + */ + public String getPreferredLoc(EquipmentFacade equipment) + { + for (EquipNode node : equipSlotNodeMap.values()) + { + if (node.getNodeType()==NodeType.PHANTOM_SLOT) + { + if (canEquip(node, equipment)) + { + return node.toString(); + } + } + } + + return "Other"; + } + + /* (non-Javadoc) * @see pcgen.core.facade.EquipmentSetFacade#removeAllEquipment() */ public void removeAllEquipment() Modified: sandbox/cdomui/code/src/java/pcgen/gui2/tabs/equip/EquipmentModels.java =================================================================== --- sandbox/cdomui/code/src/java/pcgen/gui2/tabs/equip/EquipmentModels.java 2011-02-14 21:53:21 UTC (rev 14575) +++ sandbox/cdomui/code/src/java/pcgen/gui2/tabs/equip/EquipmentModels.java 2011-02-15 07:19:07 UTC (rev 14576) @@ -108,8 +108,10 @@ this.unequippedList = new UnequippedList(character); this.fullModel = new EquipmentTableModel(character); fullModel.setEquipmentList(character.getPurchasedEquipment()); + fullModel.setEquipmentSet(character.getEquipmentSetRef().getReference()); this.unequippedModel = new EquipmentTableModel(character); unequippedModel.setEquipmentList(unequippedList); + unequippedModel.setEquipmentSet(character.getEquipmentSetRef().getReference()); this.equippedModel = new EquippedTableModel(character); selectedModel = fullModel; @@ -196,11 +198,13 @@ ReferenceFacade<EquipmentSetFacade> ref = character.getEquipmentSetRef(); ref.addReferenceListener(this); setEquipmentList(ref.getReference().getEquippedItems()); + setEquipmentSet(ref.getReference()); } public void referenceChanged(ReferenceEvent<EquipmentSetFacade> e) { setEquipmentList(e.getNewReference().getEquippedItems()); + setEquipmentSet(e.getNewReference()); //fireTableDataChanged(); } Modified: sandbox/cdomui/code/src/java/pcgen/gui2/tabs/equip/EquipmentTableModel.java =================================================================== --- sandbox/cdomui/code/src/java/pcgen/gui2/tabs/equip/EquipmentTableModel.java 2011-02-14 21:53:21 UTC (rev 14575) +++ sandbox/cdomui/code/src/java/pcgen/gui2/tabs/equip/EquipmentTableModel.java 2011-02-15 07:19:07 UTC (rev 14576) @@ -23,6 +23,7 @@ import pcgen.core.facade.CharacterFacade; import pcgen.core.facade.EquipmentFacade; import pcgen.core.facade.EquipmentListFacade; +import pcgen.core.facade.EquipmentSetFacade; import pcgen.core.facade.EquipmentListFacade.EquipmentListEvent; import pcgen.core.facade.EquipmentListFacade.EquipmentListListener; import pcgen.gui2.filter2.FilteredListFacadeTableModel; @@ -31,6 +32,7 @@ { protected EquipmentListFacade equipmentList = null; + protected EquipmentSetFacade equipmentSet = null; public EquipmentTableModel(CharacterFacade character) { @@ -52,6 +54,11 @@ super.setDelegate(equipmentList); } + protected void setEquipmentSet(EquipmentSetFacade equipmentSet) + { + this.equipmentSet = equipmentSet; + } + public int getColumnCount() { return 5; @@ -103,7 +110,7 @@ case 1: return equipment.getTypes()[0]; case 2: - return ""; + return equipmentSet.getPreferredLoc(equipment); case 3: return equipmentList.getQuantity(equipment); case 4: This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cpm...@us...> - 2011-02-16 22:20:02
|
Revision: 14579 http://pcgen.svn.sourceforge.net/pcgen/?rev=14579&view=rev Author: cpmeister Date: 2011-02-16 22:19:56 +0000 (Wed, 16 Feb 2011) Log Message: ----------- Equipment Tab update -Equipment Icons are now shown -fixed misalignment bug between the equipment tree and table Issue#: CODE-498 Modified Paths: -------------- sandbox/cdomui/code/src/java/pcgen/core/facade/EquipmentFacade.java sandbox/cdomui/code/src/java/pcgen/gui2/tabs/EquipInfoTab.java sandbox/cdomui/code/src/java/pcgen/gui2/tabs/equip/EquipmentModel.java Modified: sandbox/cdomui/code/src/java/pcgen/core/facade/EquipmentFacade.java =================================================================== --- sandbox/cdomui/code/src/java/pcgen/core/facade/EquipmentFacade.java 2011-02-16 20:20:14 UTC (rev 14578) +++ sandbox/cdomui/code/src/java/pcgen/core/facade/EquipmentFacade.java 2011-02-16 22:19:56 UTC (rev 14579) @@ -18,7 +18,6 @@ * * Created on Apr 4, 2009, 6:07:39 PM */ - package pcgen.core.facade; import java.io.File; @@ -29,8 +28,9 @@ */ public interface EquipmentFacade extends InfoFacade { + String[] getTypes(); - + /** * Retrieve the icon for this ewuipment icon. This may be directly set for * the item, or it may be for one of the item's types. The types are @@ -39,4 +39,5 @@ * @return The icon for this equipment item, or null if none */ File getIcon(); + } Modified: sandbox/cdomui/code/src/java/pcgen/gui2/tabs/EquipInfoTab.java =================================================================== --- sandbox/cdomui/code/src/java/pcgen/gui2/tabs/EquipInfoTab.java 2011-02-16 20:20:14 UTC (rev 14578) +++ sandbox/cdomui/code/src/java/pcgen/gui2/tabs/EquipInfoTab.java 2011-02-16 22:19:56 UTC (rev 14579) @@ -158,7 +158,6 @@ equipmentTable.setColumnModel(createEquipmentColumnModel()); equipmentTable.setSortingPriority(Collections.singletonList(new SortingPriority(0, SortMode.ASCENDING))); equipmentTable.sortModel(); - equipmentTable.setFocusable(false); panel.add(new JScrollPane(equipmentTable), BorderLayout.CENTER); Box buttonsBox = Box.createHorizontalBox(); Modified: sandbox/cdomui/code/src/java/pcgen/gui2/tabs/equip/EquipmentModel.java =================================================================== --- sandbox/cdomui/code/src/java/pcgen/gui2/tabs/equip/EquipmentModel.java 2011-02-16 20:20:14 UTC (rev 14578) +++ sandbox/cdomui/code/src/java/pcgen/gui2/tabs/equip/EquipmentModel.java 2011-02-16 22:19:56 UTC (rev 14579) @@ -28,14 +28,13 @@ import java.util.Map; import javax.swing.BorderFactory; +import javax.swing.ImageIcon; import javax.swing.JTable; import javax.swing.JTree; import javax.swing.SwingUtilities; import javax.swing.UIManager; -import javax.swing.event.TreeExpansionEvent; -import javax.swing.event.TreeExpansionListener; -import javax.swing.event.TreeModelEvent; -import javax.swing.event.TreeModelListener; +import javax.swing.event.TableModelEvent; +import javax.swing.event.TableModelListener; import javax.swing.table.DefaultTableCellRenderer; import javax.swing.table.DefaultTableColumnModel; import javax.swing.table.TableColumn; @@ -60,7 +59,7 @@ * @author Connor Petty <cpm...@us...> */ public class EquipmentModel implements ListListener<EquipmentSetFacade>, ReferenceListener<EquipmentSetFacade>, - TreeExpansionListener, TreeModelListener + TableModelListener { private static Font largeFont = new Font("Verdana", Font.BOLD, 20); @@ -117,6 +116,11 @@ return column; } + public void tableChanged(TableModelEvent e) + { + realignRowHeights(); + } + private static class CellRenderer extends DefaultTableCellRenderer { @@ -148,26 +152,15 @@ treeTable.setTreeCellRenderer(treeRenderer); selectedModel = equipsetMap.get(character.getEquipmentSetRef().getReference()); treeTable.setTreeTableModel(selectedModel); - treeTable.getTree().addTreeExpansionListener(this); - selectedModel.addTreeModelListener(this); + treeTable.getModel().addTableModelListener(this); + realignRowHeights(); } public void uninstall() { - selectedModel.removeTreeModelListener(this); - treeTable.getTree().removeTreeExpansionListener(this); + treeTable.getModel().removeTableModelListener(this); } - public void treeExpanded(TreeExpansionEvent event) - { - realignRowHeights(); - } - - public void treeCollapsed(TreeExpansionEvent event) - { - realignRowHeights(); - } - private void realignRowHeights() { SwingUtilities.invokeLater(new Runnable() @@ -213,46 +206,25 @@ public void referenceChanged(ReferenceEvent<EquipmentSetFacade> e) { - selectedModel.removeTreeModelListener(this); + treeTable.getModel().removeTableModelListener(this); selectedModel = equipsetMap.get(e.getNewReference()); - selectedModel.addTreeModelListener(this); treeTable.setTreeTableModel(selectedModel); - } - - public void treeNodesChanged(TreeModelEvent e) - { - } - - public void treeNodesInserted(TreeModelEvent e) - { - if (treeTable.getTree().isExpanded(e.getTreePath())) - { - realignRowHeights(); - } - } - - public void treeNodesRemoved(TreeModelEvent e) - { - if (treeTable.getTree().isExpanded(e.getTreePath())) - { - realignRowHeights(); - } - } - - public void treeStructureChanged(TreeModelEvent e) - { + treeTable.getModel().addTableModelListener(this); realignRowHeights(); } private class TreeRenderer extends DefaultTreeCellRenderer { + private Map<String, ImageIcon> iconCache = new HashMap<String, ImageIcon>(); + @Override public Component getTreeCellRendererComponent(final JTree tree, Object value, boolean sel, boolean expanded, boolean leaf, final int row, boolean hasFocus) { String text = String.valueOf(value); boolean isEquipNode = value instanceof EquipNode; - boolean isPhantomSlot = isEquipNode && ((EquipNode) value).getNodeType()==NodeType.PHANTOM_SLOT; + boolean isPhantomSlot = isEquipNode && + ((EquipNode) value).getNodeType() == NodeType.PHANTOM_SLOT; if (isPhantomSlot) { text = "Empty slot"; @@ -275,36 +247,25 @@ setFont(normFont); EquipmentFacade equip = null; setForeground(UIPropertyContext.getQualifiedColor()); - if (isEquipNode && ((EquipNode) value).getNodeType()==NodeType.EQUIPMENT) + if (isEquipNode && ((EquipNode) value).getNodeType() == NodeType.EQUIPMENT) { equip = ((EquipNode) value).getEquipment(); + + String path = equip.getIcon().getAbsolutePath(); + ImageIcon icon = iconCache.get(path); + if (icon == null) + { + icon = new ImageIcon(path); + iconCache.put(path, icon); + } + setIcon(icon); + if (!character.isQualifiedFor(equip)) { setForeground(UIPropertyContext.getNotQualifiedColor()); } } } - - if (row != -1) - { - SwingUtilities.invokeLater(new Runnable() - { - - public void run() - { - Rectangle bounds = tree.getRowBounds(row); - if (treeTable != null && bounds != null) - { - if (treeTable.getRowHeight(row) != bounds.height) - { - treeTable.setRowHeight(row, bounds.height); - } - } - } - - }); - } - return this; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cpm...@us...> - 2011-02-23 06:16:15
|
Revision: 14593 http://pcgen.svn.sourceforge.net/pcgen/?rev=14593&view=rev Author: cpmeister Date: 2011-02-23 06:16:07 +0000 (Wed, 23 Feb 2011) Log Message: ----------- UI Update - CharacterSheetInfoTab completed - fixed NoSuchElementException occurence in export token EqToken - added new methods to GameModeFacade for accessing character sheet information - changed methods used to access TempBonuses in CharacterFacade (These need to be implemented) Modified Paths: -------------- sandbox/cdomui/code/src/java/pcgen/core/GameMode.java sandbox/cdomui/code/src/java/pcgen/core/facade/CharacterFacade.java sandbox/cdomui/code/src/java/pcgen/core/facade/GameModeFacade.java sandbox/cdomui/code/src/java/pcgen/core/facade/util/ListFacade.java sandbox/cdomui/code/src/java/pcgen/gui2/PCGenMenuBar.java sandbox/cdomui/code/src/java/pcgen/gui2/csheet/CharacterSheetFrame.java sandbox/cdomui/code/src/java/pcgen/gui2/csheet/CharacterSheetPanel.java sandbox/cdomui/code/src/java/pcgen/gui2/facade/CharacterFacadeImpl.java sandbox/cdomui/code/src/java/pcgen/gui2/filter2/FilteredListFacadeTableModel.java sandbox/cdomui/code/src/java/pcgen/gui2/tabs/CharacterSheetInfoTab.java sandbox/cdomui/code/src/java/pcgen/gui2/util/table/TableUtils.java sandbox/cdomui/code/src/java/pcgen/io/exporttoken/EqToken.java Modified: sandbox/cdomui/code/src/java/pcgen/core/GameMode.java =================================================================== --- sandbox/cdomui/code/src/java/pcgen/core/GameMode.java 2011-02-22 21:10:37 UTC (rev 14592) +++ sandbox/cdomui/code/src/java/pcgen/core/GameMode.java 2011-02-23 06:16:07 UTC (rev 14593) @@ -3134,4 +3134,15 @@ { return this.equipTypeIconMap.get(equipType.toUpperCase()); } + + public String getCharSheetDir() + { + return getPreviewDir(); + } + + public String getDefaultCharSheet() + { + return getDefaultPreviewSheet(); + } + } \ No newline at end of file Modified: sandbox/cdomui/code/src/java/pcgen/core/facade/CharacterFacade.java =================================================================== --- sandbox/cdomui/code/src/java/pcgen/core/facade/CharacterFacade.java 2011-02-22 21:10:37 UTC (rev 14592) +++ sandbox/cdomui/code/src/java/pcgen/core/facade/CharacterFacade.java 2011-02-23 06:16:07 UTC (rev 14593) @@ -224,13 +224,27 @@ * has applied as well as the ones that haven't been applied. * @return a list of bonuses than the character can apply */ - public ListFacade<TempBonusFacade> getTempBonuses(); + public ListFacade<TempBonusFacade> getAvailableTempBonuses(); - public void applyTempBonus(TempBonusFacade bonus, boolean apply); + /** + * adds a temp bonus to the character + * @param bonus the bonus to add + */ + public void addTempBonus(TempBonusFacade bonus); - public boolean isTempBonusApplied(TempBonusFacade bonus); + /** + * removes a bonus from the character + * @param bonus the bonus to remove + */ + public void removeTempBonus(TempBonusFacade bonus); /** + * + * @return a list of bonuses that have been added to the character + */ + public ListFacade<TempBonusFacade> getTempBonuses(); + + /** * This returns a DataSetFacade that contains all * of the sources that this character was loaded with. * The returned DataSetFacade can be used to browse all @@ -489,4 +503,15 @@ */ public boolean isQualifiedFor(DomainFacade domain); + public void addCharacterChangeListener(CharacterChangeListener listener); + + public void removeCharacterChangeListener(CharacterChangeListener listener); + + public static interface CharacterChangeListener + { + + public void characterChanged(); + + } + } Modified: sandbox/cdomui/code/src/java/pcgen/core/facade/GameModeFacade.java =================================================================== --- sandbox/cdomui/code/src/java/pcgen/core/facade/GameModeFacade.java 2011-02-22 21:10:37 UTC (rev 14592) +++ sandbox/cdomui/code/src/java/pcgen/core/facade/GameModeFacade.java 2011-02-23 06:16:07 UTC (rev 14593) @@ -35,4 +35,8 @@ public String getInfoSheet(); + public String getCharSheetDir(); + + public String getDefaultCharSheet(); + } Modified: sandbox/cdomui/code/src/java/pcgen/core/facade/util/ListFacade.java =================================================================== --- sandbox/cdomui/code/src/java/pcgen/core/facade/util/ListFacade.java 2011-02-22 21:10:37 UTC (rev 14592) +++ sandbox/cdomui/code/src/java/pcgen/core/facade/util/ListFacade.java 2011-02-23 06:16:07 UTC (rev 14593) @@ -29,7 +29,7 @@ public interface ListFacade<E> extends Iterable<E> { - void addListListener(ListListener<E> listener); + void addListListener(ListListener<? super E> listener); E getElementAt(int index); @@ -43,5 +43,5 @@ boolean containsElement(E element); - void removeListListener(ListListener<E> listener); + void removeListListener(ListListener<? super E> listener); } Modified: sandbox/cdomui/code/src/java/pcgen/gui2/PCGenMenuBar.java =================================================================== --- sandbox/cdomui/code/src/java/pcgen/gui2/PCGenMenuBar.java 2011-02-22 21:10:37 UTC (rev 14592) +++ sandbox/cdomui/code/src/java/pcgen/gui2/PCGenMenuBar.java 2011-02-23 06:16:07 UTC (rev 14593) @@ -190,7 +190,7 @@ { this.character = character; equipmentMenu.setListModel(character.getEquipmentSets()); - tempMenu.setListModel(character.getTempBonuses()); + tempMenu.setListModel(character.getAvailableTempBonuses()); } private class OpenRecentMenu extends AbstractListMenu<File> @@ -297,14 +297,21 @@ @Override protected JMenuItem createMenuItem(TempBonusFacade item) { - return new CheckBoxMenuItem(item, character.isTempBonusApplied(item), + return new CheckBoxMenuItem(item, character.getTempBonuses().containsElement(item), this); } public void itemStateChanged(ItemEvent e) { TempBonusFacade bonus = (TempBonusFacade) e.getItemSelectable().getSelectedObjects()[0]; - character.applyTempBonus(bonus, e.getStateChange() == ItemEvent.SELECTED); + if (e.getStateChange() == ItemEvent.SELECTED) + { + character.addTempBonus(bonus); + } + else + { + character.removeTempBonus(bonus); + } } } Modified: sandbox/cdomui/code/src/java/pcgen/gui2/csheet/CharacterSheetFrame.java =================================================================== --- sandbox/cdomui/code/src/java/pcgen/gui2/csheet/CharacterSheetFrame.java 2011-02-22 21:10:37 UTC (rev 14592) +++ sandbox/cdomui/code/src/java/pcgen/gui2/csheet/CharacterSheetFrame.java 2011-02-23 06:16:07 UTC (rev 14593) @@ -161,7 +161,7 @@ public TempBonusMenu() { super(new PCGenAction("mnuEditTempBonus")); - setListModel(character.getTempBonuses()); + setListModel(character.getAvailableTempBonuses()); } public void dispose() @@ -171,14 +171,21 @@ @Override protected JMenuItem createMenuItem(TempBonusFacade item) { - return new CheckBoxMenuItem(item, character.isTempBonusApplied(item), + return new CheckBoxMenuItem(item, character.getTempBonuses().containsElement(item), this); } public void itemStateChanged(ItemEvent e) { TempBonusFacade bonus = (TempBonusFacade) e.getItemSelectable().getSelectedObjects()[0]; - character.applyTempBonus(bonus, e.getStateChange() == ItemEvent.SELECTED); + if (e.getStateChange() == ItemEvent.SELECTED) + { + character.addTempBonus(bonus); + } + else + { + character.removeTempBonus(bonus); + } } } Modified: sandbox/cdomui/code/src/java/pcgen/gui2/csheet/CharacterSheetPanel.java =================================================================== --- sandbox/cdomui/code/src/java/pcgen/gui2/csheet/CharacterSheetPanel.java 2011-02-22 21:10:37 UTC (rev 14592) +++ sandbox/cdomui/code/src/java/pcgen/gui2/csheet/CharacterSheetPanel.java 2011-02-23 06:16:07 UTC (rev 14593) @@ -29,6 +29,13 @@ import java.io.StringWriter; import java.io.Writer; import java.net.URI; +import java.util.concurrent.Callable; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.FutureTask; +import java.util.concurrent.ThreadFactory; +import javax.swing.SwingUtilities; import org.lobobrowser.html.HtmlRendererContext; import org.lobobrowser.html.gui.HtmlPanel; import org.lobobrowser.html.parser.DocumentBuilderImpl; @@ -102,14 +109,26 @@ private final DocumentBuilderImpl theDocBuilder; private ExportHandler handler = null; private CharacterFacade character = null; - private Thread refreshThread = null; - private CssColor cssColor; + private ExecutorService refreshService = null; + private FutureTask refreshTask = null; + private CssColor cssColor = CssColor.BLUE; public CharacterSheetPanel() { theRendererContext = new SimpleHtmlRendererContext(this, new SimpleUserAgentContext()); theDocBuilder = new DocumentBuilderImpl(theRendererContext.getUserAgentContext(), theRendererContext); + refreshService = Executors.newSingleThreadExecutor(new ThreadFactory() + { + + public Thread newThread(Runnable r) + { + Thread thread = new Thread(r, "Charater-Sheet-Refresher-Thread"); + thread.setDaemon(true); + return thread; + } + + }); } public void setCharacter(CharacterFacade character) @@ -124,76 +143,91 @@ refresh(); } - private void refresh() + public void refresh() { if (handler == null || character == null) { return; } - if (refreshThread != null) + if (refreshTask != null && !refreshTask.isDone()) { - refreshThread.interrupt(); + refreshTask.cancel(true); } - refreshThread = new Thread(new PipedRefreshWorker()); - refreshThread.start(); + refreshTask = new RefreshTask(); + //SwingUtilities.invokeLater(refreshTask); + refreshService.execute(refreshTask); } - private class RefreshWorker extends SwingWorker<Document> + private class RefreshTask extends FutureTask<Document> { + public RefreshTask() + { + super(new DocumentConstructor()); + } + @Override - public Document construct() + protected void done() { + if (!isCancelled()) + { + SwingUtilities.invokeLater(new Runnable() + { + + public void run() + { + Document doc = null; + try + { + doc = get(); + } + catch (Throwable e) + { + // TODO Auto-generated catch block + final String errorMsg = "<html><body>Unable to process sheet<br>" + + e + "</body></html>"; + ByteArrayInputStream instream = new ByteArrayInputStream(errorMsg.getBytes()); + try + { + doc = theDocBuilder.parse(instream); + } + catch (Exception ex) + { + ex.printStackTrace(); + } + Logging.errorPrint("Unable to process sheet: ", e); + } + if (doc != null) + { + setDocument(doc, theRendererContext); + } + } + + }); + } + } + + } + + private class DocumentConstructor implements Callable<Document> + { + + public Document call() throws Exception + { StringWriter out = new StringWriter(); BufferedWriter buf = new BufferedWriter(out); character.export(handler, buf); - //handler.write(character, buf); - Thread t = Thread.currentThread(); - if (t.isInterrupted()) - { - return null; - } + String genText = out.toString().replace(COLOR_TAG, cssColor.getCssText()); ByteArrayInputStream instream = new ByteArrayInputStream(genText.getBytes()); Document doc = null; - try - { - final URI root = new URI("file", ConfigurationSettings.getPreviewDir().replaceAll("\\\\", "/"), null); - doc = theDocBuilder.parse(new InputSourceImpl(instream, - root.toString(), - "UTF-8")); - } - catch (Throwable e) - { - // TODO Auto-generated catch block - final String errorMsg = "<html><body>Unable to process sheet<br>" + - e + "</body></html>"; - instream = new ByteArrayInputStream(errorMsg.getBytes()); - try - { - doc = theDocBuilder.parse(instream); - } - catch (Exception ex) - { - ex.printStackTrace(); - } - Logging.errorPrint("Unable to process sheet: ", e); - } - finally - { - return doc; - } - } - @Override - public void finished() - { - Document doc = get(); - if (doc != null) - { - setDocument(doc, theRendererContext); - } + URI root = new URI("file", ConfigurationSettings.getPreviewDir().replaceAll("\\\\", "/"), null); + doc = theDocBuilder.parse(new InputSourceImpl(instream, + root.toString(), + "UTF-8")); + return doc; } } Modified: sandbox/cdomui/code/src/java/pcgen/gui2/facade/CharacterFacadeImpl.java =================================================================== --- sandbox/cdomui/code/src/java/pcgen/gui2/facade/CharacterFacadeImpl.java 2011-02-22 21:10:37 UTC (rev 14592) +++ sandbox/cdomui/code/src/java/pcgen/gui2/facade/CharacterFacadeImpl.java 2011-02-23 06:16:07 UTC (rev 14593) @@ -112,6 +112,7 @@ import pcgen.core.facade.event.ListListener; import pcgen.core.facade.util.DefaultListFacade; import pcgen.core.facade.util.ListFacade; +import pcgen.core.facade.util.ListFacades; import pcgen.core.pclevelinfo.PCLevelInfo; import pcgen.core.prereq.PrereqHandler; import pcgen.core.utils.CoreUtility; @@ -768,24 +769,26 @@ } /* (non-Javadoc) - * @see pcgen.core.facade.CharacterFacade#applyTempBonus(pcgen.core.facade.TempBonusFacade, boolean) + * @see pcgen.core.facade.CharacterFacade#getAvailableTempBonuses() */ - public void applyTempBonus(TempBonusFacade bonus, boolean apply) + public ListFacade<TempBonusFacade> getAvailableTempBonuses() { - if (apply) - { - appliedTempBonuses.addElement(bonus); - } - else - { - appliedTempBonuses.removeElement(bonus); - } + // TODO: this needs to be implemented + return ListFacades.emptyList(); + } + + public void addTempBonus(TempBonusFacade bonus) + { + appliedTempBonuses.addElement(bonus); refreshLanguageList(); } - /* (non-Javadoc) - * @see pcgen.core.facade.CharacterFacade#getTempBonuses() - */ + public void removeTempBonus(TempBonusFacade bonus) + { + appliedTempBonuses.removeElement(bonus); + refreshLanguageList(); + } + public ListFacade<TempBonusFacade> getTempBonuses() { return appliedTempBonuses; @@ -2759,4 +2762,14 @@ return templates; } + public void addCharacterChangeListener(CharacterChangeListener listener) + { + //TODO: implement this + } + + public void removeCharacterChangeListener(CharacterChangeListener listener) + { + //TODO: implement this + } + } Modified: sandbox/cdomui/code/src/java/pcgen/gui2/filter2/FilteredListFacadeTableModel.java =================================================================== --- sandbox/cdomui/code/src/java/pcgen/gui2/filter2/FilteredListFacadeTableModel.java 2011-02-22 21:10:37 UTC (rev 14592) +++ sandbox/cdomui/code/src/java/pcgen/gui2/filter2/FilteredListFacadeTableModel.java 2011-02-23 06:16:07 UTC (rev 14593) @@ -71,7 +71,7 @@ filteredList.setDelegate(delegate); } - public void setFilter(Filter<CharacterFacade, EquipmentFacade> filter) + public void setFilter(Filter<CharacterFacade, E> filter) { filteredList.setFilter(filter); } Modified: sandbox/cdomui/code/src/java/pcgen/gui2/tabs/CharacterSheetInfoTab.java =================================================================== --- sandbox/cdomui/code/src/java/pcgen/gui2/tabs/CharacterSheetInfoTab.java 2011-02-22 21:10:37 UTC (rev 14592) +++ sandbox/cdomui/code/src/java/pcgen/gui2/tabs/CharacterSheetInfoTab.java 2011-02-23 06:16:07 UTC (rev 14593) @@ -22,6 +22,41 @@ */ package pcgen.gui2.tabs; +import java.awt.BorderLayout; +import java.awt.Component; +import java.awt.Dimension; +import java.io.File; +import java.io.FileFilter; +import java.util.Hashtable; +import javax.swing.Box; +import javax.swing.ComboBoxModel; +import javax.swing.DefaultComboBoxModel; +import javax.swing.DefaultListCellRenderer; +import javax.swing.JComboBox; +import javax.swing.JLabel; +import javax.swing.JList; +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.JTable; +import javax.swing.event.ListDataEvent; +import pcgen.core.facade.CharacterFacade; +import pcgen.core.facade.EquipmentSetFacade; +import pcgen.core.facade.GameModeFacade; +import pcgen.core.facade.TempBonusFacade; +import pcgen.core.facade.event.ListEvent; +import pcgen.core.facade.event.ListListener; +import pcgen.core.facade.event.ReferenceEvent; +import pcgen.core.facade.event.ReferenceListener; +import pcgen.core.facade.util.ListFacades; +import pcgen.gui2.csheet.CharacterSheetPanel; +import pcgen.gui2.filter2.Filter; +import pcgen.gui2.filter2.FilteredListFacadeTableModel; +import pcgen.gui2.tools.FlippingSplitPane; +import pcgen.gui2.util.event.ListDataAdapter; +import pcgen.gui2.util.table.TableUtils; +import pcgen.system.ConfigurationSettings; +import pcgen.system.LanguageBundle; + /** * The Class <code>CharacterSheetInfoTab</code> is a placeholder for the character * sheet tab. @@ -33,12 +68,392 @@ * @author James Dempsey <jde...@us...> * @version $Revision$ */ -public class CharacterSheetInfoTab extends UnimplementedTab +public class CharacterSheetInfoTab extends FlippingSplitPane implements CharacterInfoTab { - @Override - String getTabName() + + private final TabTitle tabTitle = new TabTitle("Character Sheet"); + private final CharacterSheetPanel csheet; + private final JComboBox sheetBox; + private final JTable equipSetTable; + private final JTable tempBonusTable; + private final JTable tempBonusRowTable; + private final JTable equipSetRowTable; + + public CharacterSheetInfoTab() { - return "Character Sheet"; + this.csheet = new CharacterSheetPanel(); + this.sheetBox = new JComboBox(); + this.equipSetTable = TableUtils.createDefaultTable(); + this.equipSetRowTable = TableUtils.createDefaultTable(); + this.tempBonusTable = TableUtils.createDefaultTable(); + this.tempBonusRowTable = TableUtils.createDefaultTable(); + setOneTouchExpandable(true); + + setLeftComponent(csheet); + + JPanel panel = new JPanel(new BorderLayout()); + Box box = Box.createHorizontalBox(); + box.add(new JLabel(LanguageBundle.getString("in_character_sheet"))); + sheetBox.setRenderer(new DefaultListCellRenderer() + { + + @Override + public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) + { + if (value instanceof File) + { + value = ((File) value).getName(); + } + return super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); + } + + }); + box.add(sheetBox); + panel.add(box, BorderLayout.NORTH); + FlippingSplitPane subPane = new FlippingSplitPane(); + subPane.setOrientation(VERTICAL_SPLIT); + equipSetTable.getTableHeader().setReorderingAllowed(false); + JScrollPane pane = TableUtils.createRadioBoxSelectionPane(equipSetTable, equipSetRowTable); + pane.setPreferredSize(new Dimension(200, 100)); + subPane.setTopComponent(pane); + + tempBonusTable.getTableHeader().setReorderingAllowed(false); + pane = TableUtils.createCheckBoxSelectionPane(tempBonusTable, tempBonusRowTable); + pane.setPreferredSize(new Dimension(200, 100)); + subPane.setBottomComponent(pane); + panel.add(subPane, BorderLayout.CENTER); + setRightComponent(panel); } + public Hashtable<Object, Object> createModels(CharacterFacade character) + { + Hashtable<Object, Object> state = new Hashtable<Object, Object>(); + state.put(BoxHandler.class, new BoxHandler(character)); + state.put(CSheetHandler.class, new CSheetHandler(character)); + state.put(TempBonusTableModel.class, new TempBonusTableModel(character)); + state.put(EquipSetTableModel.class, new EquipSetTableModel(character)); + return state; + } + + public void restoreModels(Hashtable<?, ?> state) + { + ((CSheetHandler) state.get(CSheetHandler.class)).install(); + ((BoxHandler) state.get(BoxHandler.class)).install(); + equipSetTable.setModel((EquipSetTableModel) state.get(EquipSetTableModel.class)); + equipSetRowTable.setModel((EquipSetTableModel) state.get(EquipSetTableModel.class)); + tempBonusTable.setModel((TempBonusTableModel) state.get(TempBonusTableModel.class)); + tempBonusRowTable.setModel((TempBonusTableModel) state.get(TempBonusTableModel.class)); + } + + public void storeModels(Hashtable<Object, Object> state) + { + ((CSheetHandler) state.get(CSheetHandler.class)).uninstall(); + } + + public TabTitle getTabTitle() + { + return tabTitle; + } + + private class BoxHandler extends ListDataAdapter + { + + private CharacterFacade character; + private ComboBoxModel model; + + public BoxHandler(CharacterFacade character) + { + this.character = character; + GameModeFacade game = character.getDataSet().getGameMode(); + String previewDir = ConfigurationSettings.getPreviewDir(); + File sheetDir = new File(previewDir, game.getCharSheetDir()); + if (sheetDir.exists() && sheetDir.isDirectory()) + { + File[] files = sheetDir.listFiles(new FileFilter() + { + + public boolean accept(File pathname) + { + return pathname.isFile() && !pathname.isHidden(); + } + + }); + model = new DefaultComboBoxModel(files); + model.setSelectedItem(new File(sheetDir, game.getDefaultCharSheet())); + } + else + { + model = new DefaultComboBoxModel(); + } + model.addListDataListener(this); + } + + public void install() + { + sheetBox.setModel(model); + csheet.setCharacterSheet((File) model.getSelectedItem()); + } + + @Override + public void listDataChanged(ListDataEvent e) + { + if (e.getIndex0() == -1 && e.getIndex1() == -1) + { + csheet.setCharacterSheet((File) sheetBox.getSelectedItem()); + } + } + + } + + private class CSheetHandler implements ListListener<Object>, ReferenceListener<Object> + { + + private CharacterFacade character; + private String sheetDir; + + public CSheetHandler(CharacterFacade character) + { + this.character = character; + } + + public void install() + { + csheet.setCharacter(character); + + character.getAgeCategoryRef().addReferenceListener(this); + character.getAgeRef().addReferenceListener(this); + character.getAlignmentRef().addReferenceListener(this); + character.getCarriedWeightRef().addReferenceListener(this); + character.getDeityRef().addReferenceListener(this); + character.getGenderRef().addReferenceListener(this); + character.getHandedRef().addReferenceListener(this); + character.getLoadRef().addReferenceListener(this); + character.getNameRef().addReferenceListener(this); + character.getPlayersNameRef().addReferenceListener(this); + character.getRaceRef().addReferenceListener(this); + character.getStatTotalTextRef().addReferenceListener(this); + character.getTotalHPRef().addReferenceListener(this); + character.getXPRef().addReferenceListener(this); + + character.getDomains().addListListener(this); + character.getLanguages().addListListener(this); + character.getTempBonuses().addListListener(this); + character.getTemplates().addListListener(this); + } + + public void uninstall() + { + character.getAgeCategoryRef().removeReferenceListener(this); + character.getAgeRef().removeReferenceListener(this); + character.getAlignmentRef().removeReferenceListener(this); + character.getCarriedWeightRef().removeReferenceListener(this); + character.getDeityRef().removeReferenceListener(this); + character.getGenderRef().removeReferenceListener(this); + character.getHandedRef().removeReferenceListener(this); + character.getLoadRef().removeReferenceListener(this); + character.getNameRef().removeReferenceListener(this); + character.getPlayersNameRef().removeReferenceListener(this); + character.getRaceRef().removeReferenceListener(this); + character.getStatTotalTextRef().removeReferenceListener(this); + character.getTotalHPRef().removeReferenceListener(this); + character.getXPRef().removeReferenceListener(this); + + character.getDomains().removeListListener(this); + character.getLanguages().removeListListener(this); + character.getTempBonuses().removeListListener(this); + character.getTemplates().removeListListener(this); + } + + public void elementAdded(ListEvent<Object> e) + { + csheet.refresh(); + } + + public void elementRemoved(ListEvent<Object> e) + { + csheet.refresh(); + } + + public void elementsChanged(ListEvent<Object> e) + { + csheet.refresh(); + } + + public void referenceChanged(ReferenceEvent<Object> e) + { + csheet.refresh(); + } + + } + + private class TempBonusTableModel extends FilteredListFacadeTableModel<TempBonusFacade> + implements Filter<CharacterFacade, TempBonusFacade> + { + + private ListListener<TempBonusFacade> listener = new ListListener<TempBonusFacade>() + { + + public void elementAdded(ListEvent<TempBonusFacade> e) + { + int index = ListFacades.wrap(sortedList).indexOf(e.getElement()); + TempBonusTableModel.this.fireTableCellUpdated(index, -1); + } + + public void elementRemoved(ListEvent<TempBonusFacade> e) + { + int index = ListFacades.wrap(sortedList).indexOf(e.getElement()); + TempBonusTableModel.this.fireTableCellUpdated(index, -1); + } + + public void elementsChanged(ListEvent<TempBonusFacade> e) + { + TempBonusTableModel.this.fireTableRowsUpdated(0, sortedList.getSize() - 1); + } + + }; + + public TempBonusTableModel(CharacterFacade character) + { + super(character); + setDelegate(character.getAvailableTempBonuses()); + setFilter(this); + character.getTempBonuses().addListListener(listener); + } + + @Override + public Class<?> getColumnClass(int columnIndex) + { + if (columnIndex == -1) + { + return Boolean.class; + } + return super.getColumnClass(columnIndex); + } + + @Override + protected Object getValueAt(TempBonusFacade element, int column) + { + switch (column) + { + case -1: + return character.getTempBonuses().containsElement(element); + case 0: + return element; + default: + return null; + } + } + + public int getColumnCount() + { + return 1; + } + + @Override + public String getColumnName(int column) + { + if (column == 0) + { + return "Temporary Bonuses"; + } + return null; + } + + @Override + public boolean isCellEditable(int rowIndex, int columnIndex) + { + if (columnIndex >= 0) + { + return false; + } + return true; + } + + public boolean accept(CharacterFacade context, TempBonusFacade element) + { + return true; + } + + } + + private class EquipSetTableModel extends FilteredListFacadeTableModel<EquipmentSetFacade> + implements ReferenceListener<EquipmentSetFacade>, Filter<CharacterFacade, EquipmentSetFacade> + { + + public EquipSetTableModel(CharacterFacade character) + { + super(character); + character.getEquipmentSetRef().addReferenceListener(this); + setDelegate(character.getEquipmentSets()); + setFilter(this); + } + + @Override + public Class<?> getColumnClass(int columnIndex) + { + if (columnIndex == -1) + { + return Boolean.class; + } + return super.getColumnClass(columnIndex); + } + + @Override + protected Object getValueAt(EquipmentSetFacade element, int column) + { + switch (column) + { + case -1: + return character.getEquipmentSetRef().getReference() == element; + case 0: + return element; + default: + return null; + } + } + + public int getColumnCount() + { + return 1; + } + + @Override + public String getColumnName(int column) + { + if (column == 0) + { + return "Equipment Sets"; + } + return null; + } + + @Override + public boolean isCellEditable(int rowIndex, int columnIndex) + { + if (columnIndex >= 0) + { + return false; + } + return true; + } + + @Override + public void setValueAt(Object aValue, int rowIndex, int columnIndex) + { + EquipmentSetFacade eqset = sortedList.getElementAt(rowIndex); + character.setEquipmentSet(eqset); + } + + public void referenceChanged(ReferenceEvent<EquipmentSetFacade> e) + { + fireTableRowsUpdated(0, character.getEquipmentSets().getSize() - 1); + } + + public boolean accept(CharacterFacade context, EquipmentSetFacade element) + { + return true; + } + + } + } Modified: sandbox/cdomui/code/src/java/pcgen/gui2/util/table/TableUtils.java =================================================================== --- sandbox/cdomui/code/src/java/pcgen/gui2/util/table/TableUtils.java 2011-02-22 21:10:37 UTC (rev 14592) +++ sandbox/cdomui/code/src/java/pcgen/gui2/util/table/TableUtils.java 2011-02-23 06:16:07 UTC (rev 14593) @@ -23,8 +23,10 @@ import java.awt.Container; import java.awt.Dimension; import javax.swing.JCheckBox; +import javax.swing.JRadioButton; import javax.swing.JScrollPane; import javax.swing.JTable; +import javax.swing.JToggleButton; import javax.swing.JViewport; import javax.swing.table.TableColumn; @@ -70,6 +72,17 @@ */ public static JScrollPane createCheckBoxSelectionPane(JTable table, JTable rowheaderTable) { + return createToggleButtonSelectionPane(table, rowheaderTable, new JCheckBox()); + } + + public static JScrollPane createRadioBoxSelectionPane(JTable table, JTable rowheaderTable) + { + rowheaderTable.setDefaultEditor(Boolean.class, new TableCellUtilities.RadioButtonEditor()); + return createToggleButtonSelectionPane(table, rowheaderTable, new JRadioButton()); + } + + private static JScrollPane createToggleButtonSelectionPane(JTable table, JTable rowheaderTable, JToggleButton button) + { rowheaderTable.setAutoCreateColumnsFromModel(false); // force the tables to share models rowheaderTable.setModel(table.getModel()); @@ -81,7 +94,7 @@ TableColumn column = new TableColumn(-1); column.setHeaderValue(new Object()); - column.setCellRenderer(new TableCellUtilities.ToggleButtonRenderer(new JCheckBox())); + column.setCellRenderer(new TableCellUtilities.ToggleButtonRenderer(button)); rowheaderTable.addColumn(column); rowheaderTable.setPreferredScrollableViewportSize(new Dimension(20, 0)); Modified: sandbox/cdomui/code/src/java/pcgen/io/exporttoken/EqToken.java =================================================================== --- sandbox/cdomui/code/src/java/pcgen/io/exporttoken/EqToken.java 2011-02-22 21:10:37 UTC (rev 14592) +++ sandbox/cdomui/code/src/java/pcgen/io/exporttoken/EqToken.java 2011-02-23 06:16:07 UTC (rev 14593) @@ -231,58 +231,61 @@ } // Now that we have the list, get the token for the appropriate element - String tempString = aTok.nextToken(); + String retString = ""; - - if ((temp >= 0) && (temp < eqList.size())) + if (aTok.hasMoreTokens()) { - Equipment eq = eqList.get(temp); - retString = getEqToken(pc, eq, tempString, aTok); + String tempString = aTok.nextToken(); - // Starting EQ.%.NAME.MAGIC,befTrue,aftTrue,befFalse,aftFalse treatment - if (!"".equals(bFilter)) + if ((temp >= 0) && (temp < eqList.size())) { - aTok = new StringTokenizer(bFilter, "."); + Equipment eq = eqList.get(temp); + retString = getEqToken(pc, eq, tempString, aTok); - boolean result = false; - boolean and_operation = false; - - while (aTok.hasMoreTokens()) + // Starting EQ.%.NAME.MAGIC,befTrue,aftTrue,befFalse,aftFalse treatment + if (!"".equals(bFilter)) { - String bString = aTok.nextToken(); + aTok = new StringTokenizer(bFilter, "."); - if ("AND".equals(bString)) + boolean result = false; + boolean and_operation = false; + + while (aTok.hasMoreTokens()) { - and_operation = true; - } - else if ("OR".equals(bString)) - { - and_operation = false; - } - else - { - if (and_operation) + String bString = aTok.nextToken(); + + if ("AND".equals(bString)) { - result = (result && eq.isType(bString)); + and_operation = true; } + else if ("OR".equals(bString)) + { + and_operation = false; + } else { - result = (result || eq.isType(bString)); + if (and_operation) + { + result = (result && eq.isType(bString)); + } + else + { + result = (result || eq.isType(bString)); + } } } - } - if (result) - { - retString = befTrue + retString + aftTrue; + if (result) + { + retString = befTrue + retString + aftTrue; + } + else + { + retString = befFalse + retString + aftFalse; + } } - else - { - retString = befFalse + retString + aftFalse; - } } } - return retString; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cpm...@us...> - 2011-02-25 22:43:12
|
Revision: 14613 http://pcgen.svn.sourceforge.net/pcgen/?rev=14613&view=rev Author: cpmeister Date: 2011-02-25 22:43:05 +0000 (Fri, 25 Feb 2011) Log Message: ----------- UI update -removed some references to pcgen.gui package -added custom thread factories to CharacterSheetPanel and PluginClassLoader Modified Paths: -------------- sandbox/cdomui/code/src/java/pcgen/gui2/csheet/CharacterSheetPanel.java sandbox/cdomui/code/src/java/pcgen/gui2/dialog/TipOfTheDay.java sandbox/cdomui/code/src/java/pcgen/gui2/tabs/InventoryInfoTab.java sandbox/cdomui/code/src/java/pcgen/gui2/tools/Utility.java sandbox/cdomui/code/src/java/pcgen/system/PluginClassLoader.java Added Paths: ----------- sandbox/cdomui/code/src/java/pcgen/gui2/tools/Hyperactive.java Modified: sandbox/cdomui/code/src/java/pcgen/gui2/csheet/CharacterSheetPanel.java =================================================================== --- sandbox/cdomui/code/src/java/pcgen/gui2/csheet/CharacterSheetPanel.java 2011-02-25 22:18:55 UTC (rev 14612) +++ sandbox/cdomui/code/src/java/pcgen/gui2/csheet/CharacterSheetPanel.java 2011-02-25 22:43:05 UTC (rev 14613) @@ -125,6 +125,7 @@ { Thread thread = new Thread(r, "Charater-Sheet-Refresher-Thread"); thread.setDaemon(true); + thread.setPriority(Thread.NORM_PRIORITY); return thread; } Modified: sandbox/cdomui/code/src/java/pcgen/gui2/dialog/TipOfTheDay.java =================================================================== --- sandbox/cdomui/code/src/java/pcgen/gui2/dialog/TipOfTheDay.java 2011-02-25 22:18:55 UTC (rev 14612) +++ sandbox/cdomui/code/src/java/pcgen/gui2/dialog/TipOfTheDay.java 2011-02-25 22:43:05 UTC (rev 14613) @@ -53,9 +53,9 @@ import javax.swing.JPanel; import javax.swing.JScrollPane; import pcgen.core.SettingsHandler; -import pcgen.gui.utils.Hyperactive; import pcgen.gui2.PCGenFrame; import pcgen.gui2.UIPropertyContext; +import pcgen.gui2.tools.Hyperactive; import pcgen.gui2.tools.Icons; import pcgen.gui2.util.JLabelPane; import pcgen.system.ConfigurationSettings; Modified: sandbox/cdomui/code/src/java/pcgen/gui2/tabs/InventoryInfoTab.java =================================================================== --- sandbox/cdomui/code/src/java/pcgen/gui2/tabs/InventoryInfoTab.java 2011-02-25 22:18:55 UTC (rev 14612) +++ sandbox/cdomui/code/src/java/pcgen/gui2/tabs/InventoryInfoTab.java 2011-02-25 22:43:05 UTC (rev 14613) @@ -23,9 +23,8 @@ package pcgen.gui2.tabs; import java.util.Hashtable; +import javax.swing.JTabbedPane; import pcgen.core.facade.CharacterFacade; -import pcgen.gui.panes.TabbedPane; -import pcgen.gui2.tools.FlippingSplitPane; /** * The Class <code>InventoryInfoTab</code> is a placeholder for the yet @@ -37,7 +36,7 @@ * @author James Dempsey <jde...@us...> * @version $Revision$ */ -public class InventoryInfoTab extends TabbedPane implements CharacterInfoTab +public class InventoryInfoTab extends JTabbedPane implements CharacterInfoTab { private final TabTitle tabTitle = new TabTitle("Inventory"); Added: sandbox/cdomui/code/src/java/pcgen/gui2/tools/Hyperactive.java =================================================================== --- sandbox/cdomui/code/src/java/pcgen/gui2/tools/Hyperactive.java (rev 0) +++ sandbox/cdomui/code/src/java/pcgen/gui2/tools/Hyperactive.java 2011-02-25 22:43:05 UTC (rev 14613) @@ -0,0 +1,71 @@ +/* + * Hyperactive.java + * Copyright 2003 (C) Greg Bingleman <by...@ho...> + * + * 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 January 23, 2003, 10:03 PM + * + * $Id: Hyperactive.java 1817 2006-12-27 23:54:53Z jdempsey $ + */ +package pcgen.gui2.tools; + +import java.io.IOException; +import pcgen.util.Logging; + +import javax.swing.JEditorPane; +import javax.swing.JOptionPane; +import javax.swing.event.HyperlinkEvent; +import javax.swing.event.HyperlinkListener; + +/** + * This makes URLs load in a browser when clicked. + * + * @author Greg Bingleman <by...@ho...> + * @version $Revision: 1817 $ + */ +public final class Hyperactive implements HyperlinkListener +{ + + public void hyperlinkUpdate(HyperlinkEvent e) + { + if (e.getEventType() == HyperlinkEvent.EventType.ACTIVATED) + { + final JEditorPane pane = (JEditorPane) e.getSource(); + +// if (e instanceof HTMLFrameHyperlinkEvent) +// { +// final HTMLFrameHyperlinkEvent evt = (HTMLFrameHyperlinkEvent) e; +// final HTMLDocument doc = (HTMLDocument) pane.getDocument(); +// doc.processHTMLFrameHyperlinkEvent(evt); +// } +// else +// { + try + { + Utility.viewInBrowser(e.getURL().toString()); + } + catch (IOException t) + { + JOptionPane.showMessageDialog(pane, "<html>An error occured while opening your browser.<br>" + + "Please check PCGen's browser settings.</html>", "Could not open browser", JOptionPane.ERROR_MESSAGE); + Logging.errorPrint( + "Exception in Hyperactive::hyperlinkUpdate", t); + } +// } + } + } + +} Modified: sandbox/cdomui/code/src/java/pcgen/gui2/tools/Utility.java =================================================================== --- sandbox/cdomui/code/src/java/pcgen/gui2/tools/Utility.java 2011-02-25 22:18:55 UTC (rev 14612) +++ sandbox/cdomui/code/src/java/pcgen/gui2/tools/Utility.java 2011-02-25 22:43:05 UTC (rev 14613) @@ -29,11 +29,13 @@ import java.awt.Rectangle; import java.io.File; +import java.io.IOException; import javax.swing.JDialog; import javax.swing.JFileChooser; import javax.swing.JFrame; -import pcgen.core.SettingsHandler; +import pcgen.system.PCGenSettings; +import pcgen.util.Logging; /** * Convenience methods from various sources. @@ -55,7 +57,7 @@ * @param wy weight of y, same as weight for cols, just specify a non-zero value for one cell in each row. */ public static void buildConstraints(GridBagConstraints gbc, int gx, int gy, - int gw, int gh, double wx, double wy) + int gw, int gh, double wx, double wy) { gbc.gridx = gx; gbc.gridy = gy; @@ -78,7 +80,7 @@ * @param anchor Where should the component be placed if smaller than the space. */ public static void buildConstraints(GridBagConstraints gbc, int gx, int gy, - int gw, int gh, double wx, double wy, int fill, int anchor) + int gw, int gh, double wx, double wy, int fill, int anchor) { buildConstraints(gbc, gx, gy, gw, gh, wx, wy); gbc.fill = fill; @@ -98,10 +100,10 @@ * @param anchor Where should the component be placed if smaller than the space. */ public static void buildRelativeConstraints(GridBagConstraints gbc, - int gw, int gh, double wx, double wy, int fill, int anchor) + int gw, int gh, double wx, double wy, int fill, int anchor) { buildConstraints(gbc, GridBagConstraints.RELATIVE, - GridBagConstraints.RELATIVE, gw, gh, wx, wy); + GridBagConstraints.RELATIVE, gw, gh, wx, wy); gbc.fill = fill; gbc.anchor = anchor; } @@ -117,10 +119,10 @@ * @param wy weight of y, same as weight for cols, just specify a non-zero value for one cell in each row. */ public static void buildRelativeConstraints(GridBagConstraints gbc, - int gw, int gh, double wx, double wy) + int gw, int gh, double wx, double wy) { buildConstraints(gbc, GridBagConstraints.RELATIVE, - GridBagConstraints.RELATIVE, gw, gh, wx, wy); + GridBagConstraints.RELATIVE, gw, gh, wx, wy); } /** @@ -150,7 +152,7 @@ } dialog.setLocation(screenSize.x + (screenSize.width - dialogSize.width) / 2, - screenSize.y + (screenSize.height - dialogSize.height) / 2); + screenSize.y + (screenSize.height - dialogSize.height) / 2); } /** @@ -165,7 +167,7 @@ // of Java 5 (it returns double the screen size under xinerama), this method is // encapsulated to accomodate this with a hack. // TODO: remove the hack, once Java fixed this. - // final Dimension screenSize = getScreenSize(Toolkit.getDefaultToolkit()); + // final Dimension screenSize = getScreenSize(Toolkit.getDefaultToolkit()); final Rectangle screenSize = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().getDefaultConfiguration().getBounds(); if (isPopup) @@ -186,7 +188,7 @@ } frame.setLocation(screenSize.x + (screenSize.width - frameSize.width) / 2, - screenSize.y + (screenSize.height - frameSize.height) / 2); + screenSize.y + (screenSize.height - frameSize.height) / 2); } /** @@ -201,18 +203,17 @@ if (System.getProperty("os.name").startsWith("Mac OS")) { // On MacOS X, do not traverse file bundles - fc - .putClientProperty("JFileChooser.appBundleIsTraversable", - "never"); + fc.putClientProperty("JFileChooser.appBundleIsTraversable", + "never"); } - if (SettingsHandler.getBrowserPath() == null) + if (PCGenSettings.getBrowserPath() == null) { //No action, as we have no idea what a good default would be... } else { - fc.setCurrentDirectory(new File(SettingsHandler.getBrowserPath())); + fc.setCurrentDirectory(new File(PCGenSettings.getBrowserPath())); } final int returnVal = fc.showOpenDialog(parent); @@ -220,8 +221,35 @@ if (returnVal == JFileChooser.APPROVE_OPTION) { final File file = fc.getSelectedFile(); - SettingsHandler.setBrowserPath(file.getAbsolutePath()); + PCGenSettings.OPTIONS_CONTEXT.setProperty(PCGenSettings.BROWSER_PATH, file.getAbsolutePath()); } } + /** + * View a URL in a browser. Uses BrowserLauncher class. + * + * @param url URL to display in browser. + * @throws IOException + * @see pcgen.gui2.tools.BrowserLauncher + */ + public static void viewInBrowser(String url) throws IOException + { + final String osName = System.getProperty("os.name"); + + // Windows tends to lock up or not actually + // display anything unless we've specified a + // default browser, so at least make the user + // aware that (s)he needs one. If they don't + // pick one and it doesn't work, at least they + // might know enough to try selecting one the + // next time. + if (osName.startsWith("Windows ") && (PCGenSettings.getBrowserPath() == null)) + { + Utility.selectDefaultBrowser(null); + } + + BrowserLauncher.openURL(url); + + } + } Modified: sandbox/cdomui/code/src/java/pcgen/system/PluginClassLoader.java =================================================================== --- sandbox/cdomui/code/src/java/pcgen/system/PluginClassLoader.java 2011-02-25 22:18:55 UTC (rev 14612) +++ sandbox/cdomui/code/src/java/pcgen/system/PluginClassLoader.java 2011-02-25 22:43:05 UTC (rev 14613) @@ -35,7 +35,9 @@ import java.util.Map; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; +import java.util.concurrent.ThreadFactory; import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicInteger; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; import org.apache.commons.lang.StringUtils; @@ -65,7 +67,18 @@ }; private final File pluginDir; private final MapToList<Class<?>, PluginLoader> loaderMap; - private ExecutorService dispatcher = Executors.newSingleThreadExecutor(); + private ExecutorService dispatcher = Executors.newSingleThreadExecutor(new ThreadFactory() + { + + public Thread newThread(Runnable r) + { + Thread thread = new Thread(r, "Plugin-loading-thread"); + thread.setDaemon(true); + thread.setPriority(Thread.NORM_PRIORITY); + return thread; + } + + }); private LinkedList<File> jarFiles = new LinkedList<File>(); private int progress = 0; @@ -99,29 +112,35 @@ { ZipEntry entry = entries.nextElement(); String name = entry.getName(); - if (name.endsWith(".class")) + if (!name.endsWith(".class")) { - name = StringUtils.removeEnd(name, ".class").replace('/', '.'); - int size = (int) entry.getSize(); - byte[] buffer = new byte[size]; + continue; + } + name = StringUtils.removeEnd(name, ".class").replace('/', '.'); + int size = (int) entry.getSize(); + byte[] buffer = new byte[size]; - InputStream in = file.getInputStream(entry); - int rb = 0; - int chunk = 0; - while ((size - rb) > 0) + InputStream in = file.getInputStream(entry); + int rb = 0; + int chunk = 0; + while ((size - rb) > 0) + { + chunk = in.read(buffer, rb, size - rb); + if (chunk == -1) { - chunk = in.read(buffer, rb, size - rb); - if (chunk == -1) - { - break; - } - rb += chunk; + break; } - in.close(); - loader.storeClassDef(name, buffer); - classList.add(name); + rb += chunk; } + in.close(); + loader.storeClassDef(name, buffer); + classList.add(name); } + /* + * Loading files and loading classes can both be lengthy processes. This splits the tasks + * so that class loading occurs in another thread thus allowing both processes to + * operate at the same time. + */ dispatcher.execute(new Runnable() { @@ -136,7 +155,8 @@ } catch (ClassNotFoundException ex) { - Logging.errorPrint("Error occured while loading plugin: " + pluginJar.getName(), ex); + Logging.errorPrint("Error occured while loading plugin: " + + pluginJar.getName(), ex); } } if (!pluginFound) @@ -154,30 +174,33 @@ private boolean processClass(Class<?> clazz) { int modifiers = clazz.getModifiers(); + if (Modifier.isInterface(modifiers) || Modifier.isAbstract(modifiers)) + { + return false; + } + boolean loaded = false; - if (!Modifier.isInterface(modifiers) && !Modifier.isAbstract(modifiers)) + for (Class<?> key : loaderMap.getKeySet()) { - for (Class<?> key : loaderMap.getKeySet()) + if (key != null && !key.isAssignableFrom(clazz)) { - if (key != null && !key.isAssignableFrom(clazz)) + continue; + } + for (PluginLoader loader : loaderMap.getListFor(key)) + { + try { - continue; + loader.loadPlugin(clazz); } - for (PluginLoader loader : loaderMap.getListFor(key)) + catch (Exception ex) { - try - { - loader.loadPlugin(clazz); - } - catch (Exception ex) - { - Logging.errorPrint("Error occured while loading plugin class: " + clazz.getName(), ex); - } - finally - { - loaded = true; - } + Logging.errorPrint("Error occured while loading plugin class: " + + clazz.getName(), ex); } + finally + { + loaded = true; + } } } return loaded; @@ -225,7 +248,7 @@ private void loadClasses() { - while(!jarFiles.isEmpty()) + while (!jarFiles.isEmpty()) { File file = jarFiles.poll(); try @@ -234,7 +257,7 @@ } catch (IOException ex) { - Logging.errorPrint("Could not load classes from file: "+file.getAbsolutePath(), ex); + Logging.errorPrint("Could not load classes from file: " + file.getAbsolutePath(), ex); } } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |