From: <cpm...@us...> - 2010-03-24 06:49:18
|
Revision: 11533 http://pcgen.svn.sourceforge.net/pcgen/?rev=11533&view=rev Author: cpmeister Date: 2010-03-24 06:49:11 +0000 (Wed, 24 Mar 2010) Log Message: ----------- SummaryInfoTab update Modified Paths: -------------- sandbox/cdomui/code/src/java/pcgen/core/facade/CharacterFacade.java sandbox/cdomui/code/src/java/pcgen/core/facade/DataSetFacade.java sandbox/cdomui/code/src/java/pcgen/gui2/mock/CharacterMock.java sandbox/cdomui/code/src/java/pcgen/gui2/mock/DataSetMock.java sandbox/cdomui/code/src/java/pcgen/gui2/tabs/SummaryInfoTab.java Added Paths: ----------- sandbox/cdomui/code/src/java/pcgen/core/facade/DeityFacade.java sandbox/cdomui/code/src/java/pcgen/gui2/util/AbstractGenericListModel.java sandbox/cdomui/code/src/java/pcgen/gui2/util/DelegatingGenericComboBoxModel.java Modified: sandbox/cdomui/code/src/java/pcgen/core/facade/CharacterFacade.java =================================================================== --- sandbox/cdomui/code/src/java/pcgen/core/facade/CharacterFacade.java 2010-03-24 00:30:59 UTC (rev 11532) +++ sandbox/cdomui/code/src/java/pcgen/core/facade/CharacterFacade.java 2010-03-24 06:49:11 UTC (rev 11533) @@ -79,8 +79,7 @@ * @param category * @return a List of Abilities the character posseses in the specified category */ - public GenericListModel<AbilityFacade> getAbilities( - AbilityCategoryFacade category); + public GenericListModel<AbilityFacade> getAbilities(AbilityCategoryFacade category); public GenericListModel<CharacterLevelFacade> getLevels(); @@ -135,4 +134,12 @@ public void removeNameChangeListener(ChangeListener listener); + public DeityFacade getDeity(); + + public void setDeity(DeityFacade deity); + + public void addDeityChangeListener(ChangeListener listener); + + public void removeDeityChangeListener(ChangeListener listener); + } Modified: sandbox/cdomui/code/src/java/pcgen/core/facade/DataSetFacade.java =================================================================== --- sandbox/cdomui/code/src/java/pcgen/core/facade/DataSetFacade.java 2010-03-24 00:30:59 UTC (rev 11532) +++ sandbox/cdomui/code/src/java/pcgen/core/facade/DataSetFacade.java 2010-03-24 06:49:11 UTC (rev 11533) @@ -52,6 +52,8 @@ public ClassFacade getClass(String className); + public GenericListModel<DeityFacade> getDeitys(); + public GenericListModel<TempBonusFacade> getTempBonuses(); public GenericListModel<TemplateFacade> getTemplates(); Added: sandbox/cdomui/code/src/java/pcgen/core/facade/DeityFacade.java =================================================================== --- sandbox/cdomui/code/src/java/pcgen/core/facade/DeityFacade.java (rev 0) +++ sandbox/cdomui/code/src/java/pcgen/core/facade/DeityFacade.java 2010-03-24 06:49:11 UTC (rev 11533) @@ -0,0 +1,30 @@ +/* + * DeityFacade.java + * Copyright 2010 (C) Connor + * + * 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 Mar 23, 2010, 11:20:18 PM + */ + +package pcgen.core.facade; + +/** + * + * @author Connor + */ +public interface DeityFacade { + +} Modified: sandbox/cdomui/code/src/java/pcgen/gui2/mock/CharacterMock.java =================================================================== --- sandbox/cdomui/code/src/java/pcgen/gui2/mock/CharacterMock.java 2010-03-24 00:30:59 UTC (rev 11532) +++ sandbox/cdomui/code/src/java/pcgen/gui2/mock/CharacterMock.java 2010-03-24 06:49:11 UTC (rev 11533) @@ -43,6 +43,7 @@ import pcgen.core.facade.CharacterLevelFacade; import pcgen.core.facade.ClassFacade; import pcgen.core.facade.DataSetFacade; +import pcgen.core.facade.DeityFacade; import pcgen.core.facade.EquipmentSetFacade; import pcgen.core.facade.RaceFacade; import pcgen.core.facade.SkillFacade; @@ -556,4 +557,24 @@ nameListeners.remove(listener); } + public DeityFacade getDeity() + { + throw new UnsupportedOperationException("Not supported yet."); + } + + public void setDeity(DeityFacade deity) + { + throw new UnsupportedOperationException("Not supported yet."); + } + + public void addDeityChangeListener(ChangeListener listener) + { + throw new UnsupportedOperationException("Not supported yet."); + } + + public void removeDeityChangeListener(ChangeListener listener) + { + throw new UnsupportedOperationException("Not supported yet."); + } + } Modified: sandbox/cdomui/code/src/java/pcgen/gui2/mock/DataSetMock.java =================================================================== --- sandbox/cdomui/code/src/java/pcgen/gui2/mock/DataSetMock.java 2010-03-24 00:30:59 UTC (rev 11532) +++ sandbox/cdomui/code/src/java/pcgen/gui2/mock/DataSetMock.java 2010-03-24 06:49:11 UTC (rev 11533) @@ -46,6 +46,7 @@ import pcgen.core.facade.AbilityFacade; import pcgen.core.facade.ClassFacade; import pcgen.core.facade.DataSetFacade; +import pcgen.core.facade.DeityFacade; import pcgen.core.facade.GameModeFacade; import pcgen.core.facade.RaceFacade; import pcgen.core.facade.SkillFacade; @@ -425,4 +426,9 @@ return templates; } + public GenericListModel<DeityFacade> getDeitys() + { + throw new UnsupportedOperationException("Not supported yet."); + } + } Modified: sandbox/cdomui/code/src/java/pcgen/gui2/tabs/SummaryInfoTab.java =================================================================== --- sandbox/cdomui/code/src/java/pcgen/gui2/tabs/SummaryInfoTab.java 2010-03-24 00:30:59 UTC (rev 11532) +++ sandbox/cdomui/code/src/java/pcgen/gui2/tabs/SummaryInfoTab.java 2010-03-24 06:49:11 UTC (rev 11533) @@ -24,17 +24,22 @@ import java.awt.GridBagConstraints; import java.awt.Insets; import java.util.Hashtable; -import javax.swing.ComboBoxModel; -import javax.swing.DefaultComboBoxModel; import javax.swing.JButton; import javax.swing.JComboBox; import javax.swing.JComponent; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JTextField; -import pcgen.cdom.enumeration.Gender; +import javax.swing.event.ChangeEvent; +import javax.swing.event.ChangeListener; +import pcgen.core.facade.AlignmentFacade; import pcgen.core.facade.CharacterFacade; +import pcgen.core.facade.DeityFacade; +import pcgen.core.facade.RaceFacade; +import pcgen.core.facade.SimpleFacade; import pcgen.gui2.tools.CharacterStateEditable; +import pcgen.gui2.util.DelegatingGenericComboBoxModel; +import pcgen.gui2.util.GenericComboBoxModel; /** * @@ -142,13 +147,104 @@ public static class BasicsSelectionModel { - private ComboBoxModel genderModel; - private ComboBoxModel handsModel; + + private DelegatingGenericComboBoxModel<SimpleFacade> genderModel; + private DelegatingGenericComboBoxModel<SimpleFacade> handsModel; + private DelegatingGenericComboBoxModel<AlignmentFacade> alignmentModel; + private DelegatingGenericComboBoxModel<DeityFacade> deityModel; + private CharacterFacade character; + public BasicsSelectionModel(CharacterFacade character) { - this.genderModel = new DefaultComboBoxModel(Gender.values()); - //character.getDataSet(). + this.character = character; + this.genderModel = new DelegatingGenericComboBoxModel<SimpleFacade>(); + this.handsModel = new DelegatingGenericComboBoxModel<SimpleFacade>(); + raceChanged();//this intializes the gender and hands models + character.addRaceChangeListener(new ChangeListener() + { + + public void stateChanged(ChangeEvent e) + { + raceChanged(); + } + + }); + character.addGenderChangeListener(new ChangeListener() + { + + public void stateChanged(ChangeEvent e) + { + genderChanged(); + } + + }); + this.alignmentModel = new DelegatingGenericComboBoxModel<AlignmentFacade>(); + alignmentModel.setDelegateModel(character.getDataSet().getGameMode().getAlignments()); + alignmentChanged(); + character.addAlignmentChangeListener(new ChangeListener() + { + + public void stateChanged(ChangeEvent e) + { + alignmentChanged(); + } + + }); + this.deityModel = new DelegatingGenericComboBoxModel<DeityFacade>(); + deityModel.setDelegateModel(character.getDataSet().getDeitys()); + deityChanged(); + character.addDeityChangeListener(new ChangeListener() + { + + public void stateChanged(ChangeEvent e) + { + deityChanged(); + } + + }); } + private void genderChanged() + { + genderModel.setSelectedItem(character.getGender()); + } + + private void alignmentChanged() + { + alignmentModel.setSelectedItem(character.getAlignment()); + } + + private void deityChanged() + { + deityModel.setSelectedItem(character.getDeity()); + } + + private void raceChanged() + { + RaceFacade race = character.getRace(); + genderModel.setDelegateModel(race.getGenders()); + handsModel.setDelegateModel(race.getHands()); + } + + public GenericComboBoxModel<SimpleFacade> getGenderModel() + { + return genderModel; + } + + public GenericComboBoxModel<SimpleFacade> getHandsModel() + { + return handsModel; + } + + public GenericComboBoxModel<AlignmentFacade> getAlignmentModel() + { + return alignmentModel; + } + + public GenericComboBoxModel<DeityFacade> getDeityModel() + { + return deityModel; + } + } } Added: sandbox/cdomui/code/src/java/pcgen/gui2/util/AbstractGenericListModel.java =================================================================== --- sandbox/cdomui/code/src/java/pcgen/gui2/util/AbstractGenericListModel.java (rev 0) +++ sandbox/cdomui/code/src/java/pcgen/gui2/util/AbstractGenericListModel.java 2010-03-24 06:49:11 UTC (rev 11533) @@ -0,0 +1,215 @@ +/* + * AbstractGenericListModel.java + * Copyright 2010 (C) Connor + * + * 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 Mar 23, 2010, 10:30:50 PM + */ +package pcgen.gui2.util; + +import java.util.Collection; +import javax.swing.event.EventListenerList; +import javax.swing.event.ListDataEvent; +import javax.swing.event.ListDataListener; +import pcgen.gui2.util.event.GenericListDataEvent; +import pcgen.gui2.util.event.GenericListDataListener; + +/** + * + * @author Connor + */ +public abstract class AbstractGenericListModel<E> implements GenericListModel<E> +{ + + protected EventListenerList listenerList = new EventListenerList(); + + /** + * Adds a listener to the list that's notified each time a change + * to the data model occurs. + * + * @param l the <code>ListDataListener</code> to be added + */ + public void addListDataListener(ListDataListener l) + { + listenerList.add(ListDataListener.class, l); + } + + /** + * Adds a listener to the list that's notified each time a change + * to the data model occurs. + * + * @param l the <code>GenericListDataListener</code> to be added + */ + public void addGenericListDataListener(GenericListDataListener<? super E> l) + { + listenerList.add(GenericListDataListener.class, l); + } + + /** + * Removes a listener from the list that's notified each time a + * change to the data model occurs. + * + * @param l the <code>ListDataListener</code> to be removed + */ + public void removeListDataListener(ListDataListener l) + { + listenerList.remove(ListDataListener.class, l); + } + + /** + * Removes a listener from the list that's notified each time a + * change to the data model occurs. + * + * @param l the <code>GenericListDataListener</code> to be removed + */ + public void removeGenericListDataListener(GenericListDataListener<?> l) + { + listenerList.remove(GenericListDataListener.class, l); + } + + /** + * <code>AbstractListModel</code> subclasses must call this method + * <b>after</b> + * one or more elements of the list change. The changed elements + * are specified by the closed interval index0, index1 -- the endpoints + * are included. Note that + * index0 need not be less than or equal to index1. + * + * @param source the <code>ListModel</code> that changed, typically "this" + * @param index0 one end of the new interval + * @param index1 the other end of the new interval + * @see EventListenerList + * @see DefaultListModel + */ + @SuppressWarnings("unchecked") + protected void fireContentsChanged(Object source, + Collection<? extends E> data, + boolean adjusting, int index0, + int index1) + { + Object[] listeners = listenerList.getListenerList(); + GenericListDataEvent<E> e = null; + + for (int i = listeners.length - 2; i >= 0; i -= 2) + { + Object listener = listeners[i]; + if (e == null && (listener == ListDataListener.class || + listener == GenericListDataListener.class)) + { + e = new GenericListDataEvent<E>(source, data, adjusting, + ListDataEvent.CONTENTS_CHANGED, + index0, index1); + } + if (listener == ListDataListener.class) + { + ((ListDataListener) listeners[i + 1]).contentsChanged(e); + } + else if (listener == GenericListDataListener.class) + { + ((GenericListDataListener) listeners[i + 1]).contentsChanged(e); + } + } + } + + /** + * <code>AbstractListModel</code> subclasses must call this method + * <b>after</b> + * one or more elements are added to the model. The new elements + * are specified by a closed interval index0, index1 -- the enpoints + * are included. Note that + * index0 need not be less than or equal to index1. + * + * @param source the <code>ListModel</code> that changed, typically "this" + * @param index0 one end of the new interval + * @param index1 the other end of the new interval + * @see EventListenerList + * @see DefaultListModel + */ + @SuppressWarnings("unchecked") + protected void fireIntervalAdded(Object source, + Collection<? extends E> data, + boolean adjusting, int index0, int index1) + { + Object[] listeners = listenerList.getListenerList(); + GenericListDataEvent<E> e = null; + + for (int i = listeners.length - 2; i >= 0; i -= 2) + { + Object listener = listeners[i]; + if (e == null && (listener == ListDataListener.class || + listener == GenericListDataListener.class)) + { + e = new GenericListDataEvent<E>(source, data, adjusting, + ListDataEvent.INTERVAL_ADDED, + index0, index1); + } + if (listener == ListDataListener.class) + { + ((ListDataListener) listeners[i + 1]).intervalAdded(e); + } + else if (listener == GenericListDataListener.class) + { + ((GenericListDataListener) listeners[i + 1]).intervalAdded(e); + } + } + } + + /** + * <code>AbstractListModel</code> subclasses must call this method + * <b>after</b> one or more elements are removed from the model. + * <code>index0</code> and <code>index1</code> are the end points + * of the interval that's been removed. Note that <code>index0</code> + * need not be less than or equal to <code>index1</code>. + * + * @param source the <code>ListModel</code> that changed, typically "this" + * @param index0 one end of the removed interval, + * including <code>index0</code> + * @param index1 the other end of the removed interval, + * including <code>index1</code> + * @see EventListenerList + * @see DefaultListModel + */ + @SuppressWarnings("unchecked") + protected void fireIntervalRemoved(Object source, + Collection<? extends E> data, + boolean adjusting, int index0, + int index1) + { + Object[] listeners = listenerList.getListenerList(); + GenericListDataEvent<E> e = null; + + for (int i = listeners.length - 2; i >= 0; i -= 2) + { + Object listener = listeners[i]; + if (e == null && (listener == ListDataListener.class || + listener == GenericListDataListener.class)) + { + e = new GenericListDataEvent<E>(source, data, adjusting, + ListDataEvent.INTERVAL_REMOVED, + index0, index1); + } + if (listener == ListDataListener.class) + { + ((ListDataListener) listeners[i + 1]).intervalRemoved(e); + } + else if (listener == GenericListDataListener.class) + { + ((GenericListDataListener) listeners[i + 1]).intervalRemoved(e); + } + } + } + +} Added: sandbox/cdomui/code/src/java/pcgen/gui2/util/DelegatingGenericComboBoxModel.java =================================================================== --- sandbox/cdomui/code/src/java/pcgen/gui2/util/DelegatingGenericComboBoxModel.java (rev 0) +++ sandbox/cdomui/code/src/java/pcgen/gui2/util/DelegatingGenericComboBoxModel.java 2010-03-24 06:49:11 UTC (rev 11533) @@ -0,0 +1,132 @@ +/* + * DelegatingGenericComboBoxModel.java + * Copyright 2010 (C) Connor + * + * 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 Mar 23, 2010, 6:29:27 PM + */ +package pcgen.gui2.util; + +import java.util.Collection; +import javax.swing.event.ListDataListener; +import pcgen.gui2.util.event.GenericListDataListener; + +/** + * + * @author Connor + */ +public class DelegatingGenericComboBoxModel<E> extends AbstractGenericListModel<E> implements GenericComboBoxModel<E> +{ + + private GenericListModel<E> delegate = null; + private Object selectedObject = null; + + public DelegatingGenericComboBoxModel() + { + } + + public DelegatingGenericComboBoxModel(GenericListModel<E> model) + { + this.delegate = model; + } + + public E getElementAt(int index) + { + return delegate.getElementAt(index); + } + + @SuppressWarnings("unchecked") + public void setDelegateModel(GenericListModel<E> model) + { + for (GenericListDataListener<E> genericListDataListener : listenerList.getListeners(GenericListDataListener.class)) + { + if (delegate != null) + { + delegate.removeGenericListDataListener(genericListDataListener); + } + model.addGenericListDataListener(genericListDataListener); + } + for (ListDataListener listDataListener : listenerList.getListeners(ListDataListener.class)) + { + if (delegate != null) + { + delegate.removeListDataListener(listDataListener); + } + model.addListDataListener(listDataListener); + } + GenericListModel<E> oldDelegate = delegate; + this.delegate = model; + if (oldDelegate != null) + { + fireIntervalRemoved(this, new GenericListModelWrapper<E>(oldDelegate), false, 0, oldDelegate.getSize() - 1); + } + Collection<E> newList = new GenericListModelWrapper<E>(model); + fireIntervalAdded(this, newList, false, 0, model.getSize() - 1); + if(!newList.contains(selectedObject)) + { + setSelectedItem(null); + } + } + + @Override + public void addGenericListDataListener(GenericListDataListener<? super E> l) + { + delegate.addGenericListDataListener(l); + listenerList.add(GenericListDataListener.class, l); + } + + @Override + public void removeGenericListDataListener(GenericListDataListener<?> l) + { + delegate.removeGenericListDataListener(l); + listenerList.remove(GenericListDataListener.class, l); + } + + public int getSize() + { + return delegate.getSize(); + } + + @Override + public void addListDataListener(ListDataListener l) + { + delegate.addListDataListener(l); + listenerList.add(ListDataListener.class, l); + } + + @Override + public void removeListDataListener(ListDataListener l) + { + delegate.removeListDataListener(l); + listenerList.remove(ListDataListener.class, l); + } + + public void setSelectedItem(Object anObject) + { + if ((selectedObject != null && !selectedObject.equals(anObject)) || + selectedObject == null && anObject != null) + { + selectedObject = anObject; + fireContentsChanged(this, null, false, -1, -1); + } + } + + public Object getSelectedItem() + { + return selectedObject; + } + +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |