From: <dar...@us...> - 2007-08-23 01:07:27
|
Revision: 3861 http://pcgen.svn.sourceforge.net/pcgen/?rev=3861&view=rev Author: darkstorm999 Date: 2007-08-22 18:07:22 -0700 (Wed, 22 Aug 2007) Log Message: ----------- [ 1777073 ] Encounter tab race selection lost after clicking Add [ 1777078 ] Encounter tab encounter list not cleared when sources change [ 1777337 ] Encounter Tab NullPointerException with encounter gen These three issues are related or in the same area of code. Code was added to maintain selected races after clicking add and clear them if the races are updated. Code was added clear the encounter list when sources are changed. Code was added to disable the generate encounter button when no races are loaded and to check for an empty random encounter list. Issue#: 1777073 Modified Paths: -------------- Trunk/pcgen/code/src/java/plugin/encounter/EncounterPlugin.java Modified: Trunk/pcgen/code/src/java/plugin/encounter/EncounterPlugin.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/encounter/EncounterPlugin.java 2007-08-23 00:57:08 UTC (rev 3860) +++ Trunk/pcgen/code/src/java/plugin/encounter/EncounterPlugin.java 2007-08-23 01:07:22 UTC (rev 3861) @@ -519,10 +519,42 @@ sel = 0; } + // Get any currently selected items in the Races list + ArrayList<Object> selected = new ArrayList<Object>(); + + for( int index : theView.getLibraryCreatures().getSelectedIndices() ) + { + selected.add(theRaces.elementAt(index)); + } + theRaces.update(); theEnvironments.update(); + + // We need to check that the items in the encounter model still exist in the + // Races list - this might be a problem if the loaded sources are changed + // IF it is not in the races model then remove it from the encounter model + // TODO: This is only a quick fix to clear the encounter list if the + // the sources are changed - it will only remove the items when focus is + // returned to this control, + for( Object obj : theModel.toArray() ) + { + if( !theRaces.contains(obj)) + theModel.removeElement(obj); + } + theView.getEnvironment().setSelectedIndex(sel); theView.setTotalEncounterLevel(Integer.toString(theModel.getCR())); + + // If there are no races in the the races model, make sure we cannot accidentally + // generate an encounter + if( theRaces.getSize() > 1) + { + theView.getGenerateEncounter().setEnabled(true); + } + else + { + theView.getGenerateEncounter().setEnabled(false); + } if (theModel.getSize() < 1) { @@ -532,6 +564,31 @@ { theView.getTransferToTracker().setEnabled(true); } + + // re-select the selected creatures only if they still exist in + // the Races list - may not if sources have been changed + ArrayList<Integer> stillSelected = new ArrayList<Integer>(); + + for( Object obj : selected ) + { + if( theRaces.contains(obj) ) + { + stillSelected.add(theRaces.indexOf(obj)); + } + } + + // convert the ArrayList to an integer array - needed + // to select multiple indices + if( stillSelected.size() > 0 ) + { + int[] ints=new int[stillSelected.size()]; + for(int i =0; i<ints.length; i++) + { + ints[i]=((Integer)stillSelected.get(i)).intValue(); + } + + theView.getLibraryCreatures().setSelectedIndices(ints); + } } /** @@ -733,6 +790,15 @@ return; } + // If we don't find anything just return. + if( critters.size() < 1 ) + { + // TODO: Maybe we need a message here to inform the user that nothing was found + // in the currently selected environment that matches the EL criteria + Logging.debugPrint("EncounterPlugin - generateXfromY found no matches"); + return; + } + for (int x = 0; x < ((Integer) critters.firstElement()).intValue(); x++) { theModel.addElement(critters.lastElement().toString()); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |