From: <cpm...@us...> - 2011-09-10 02:50:13
|
Revision: 15360 http://pcgen.svn.sourceforge.net/pcgen/?rev=15360&view=rev Author: cpmeister Date: 2011-09-10 02:50:06 +0000 (Sat, 10 Sep 2011) Log Message: ----------- UI update: - fixed NPE bug in ThumbnailPane - partial update of BiographyInfoPane Modified Paths: -------------- sandbox/uisync/code/src/java/pcgen/gui2/tabs/bio/BiographyInfoPane.java sandbox/uisync/code/src/java/pcgen/gui2/tabs/bio/PortraitPane.java sandbox/uisync/code/src/java/pcgen/gui2/tabs/bio/ThumbnailPane.java Modified: sandbox/uisync/code/src/java/pcgen/gui2/tabs/bio/BiographyInfoPane.java =================================================================== --- sandbox/uisync/code/src/java/pcgen/gui2/tabs/bio/BiographyInfoPane.java 2011-09-09 16:43:54 UTC (rev 15359) +++ sandbox/uisync/code/src/java/pcgen/gui2/tabs/bio/BiographyInfoPane.java 2011-09-10 02:50:06 UTC (rev 15360) @@ -20,11 +20,37 @@ */ package pcgen.gui2.tabs.bio; +import java.awt.Dimension; +import java.awt.GridBagConstraints; +import java.awt.GridBagLayout; +import java.awt.Insets; +import java.util.ArrayList; import java.util.Hashtable; +import java.util.List; +import javax.swing.Box; +import javax.swing.JButton; +import javax.swing.JCheckBox; +import javax.swing.JComboBox; +import javax.swing.JLabel; import javax.swing.JPanel; +import javax.swing.JTextField; +import javax.swing.SwingConstants; +import javax.swing.event.DocumentEvent; +import javax.swing.event.DocumentListener; +import pcgen.core.facade.AlignmentFacade; import pcgen.core.facade.CharacterFacade; +import pcgen.core.facade.DataSetFacade; +import pcgen.core.facade.DeityFacade; +import pcgen.core.facade.GenderFacade; +import pcgen.core.facade.RaceFacade; +import pcgen.core.facade.ReferenceFacade; +import pcgen.core.facade.SimpleFacade; +import pcgen.core.facade.event.ReferenceEvent; +import pcgen.core.facade.event.ReferenceListener; +import pcgen.core.facade.util.DefaultListFacade; import pcgen.gui2.tabs.CharacterInfoTab; import pcgen.gui2.tabs.TabTitle; +import pcgen.gui2.tools.CharacterComboBoxModel; /** * @@ -34,10 +60,68 @@ { private final TabTitle title = new TabTitle("Biography"); + private final JCheckBox allBox = new JCheckBox(); + private final JCheckBox noneBox = new JCheckBox(); - public Hashtable<Object, Object> createModels(CharacterFacade character) + public BiographyInfoPane() { + initComponents(); + allBox.setText("All"); + allBox.setBorderPaintedFlat(true); + noneBox.setText("None"); + } + + private void initComponents() + { + setLayout(new GridBagLayout()); + Box vbox = Box.createVerticalBox(); + + Box hbox = Box.createHorizontalBox(); + hbox.add(new JLabel("Check an item to include on your Character Sheet")); + hbox.add(allBox); + hbox.add(noneBox); + vbox.add(hbox); + JPanel panel = new JPanel(new GridBagLayout()); +// new TextItem("Name:").addComponents(panel); +// new TextItem("Player:").addComponents(panel); +// new ComboItem("Gender:").addComponents(panel); +// new ComboItem("Handed:").addComponents(panel); +// new ComboItem("Alignment:").addComponents(panel); +// new ComboItem("Deity:").addComponents(panel); +// new ComboTextItem("Age:").addComponents(panel); +// new TextItem("Skin Tone:").addComponents(panel); +// new TextItem("Hair Color:").addComponents(panel); +// new TextItem("Height:").addComponents(panel); +// new TextItem("Weight:").addComponents(panel); + + vbox.add(Box.createVerticalStrut(10)); + vbox.add(panel); + vbox.add(Box.createVerticalStrut(10)); + + hbox = Box.createHorizontalBox(); + hbox.add(Box.createHorizontalGlue()); + hbox.add(new JButton("Add custom Biography item")); + hbox.add(Box.createHorizontalGlue()); + vbox.add(hbox); + + GridBagConstraints gbc = new GridBagConstraints(); + gbc.anchor = GridBagConstraints.NORTHWEST; + gbc.weightx = 1; + gbc.weighty = 1; + add(vbox, gbc); + } + + public Hashtable<Object, Object> createModels(final CharacterFacade character) + { Hashtable<Object, Object> state = new Hashtable<Object, Object>(); + List<BioItem> items = new ArrayList<BioItem>(); + + + + + + +// items.add(new BioItem("Gender:", )) return state; } @@ -54,4 +138,206 @@ return title; } + private class ItemHandler + { + + private List<BioItem> bioItems = new ArrayList<BioItem>(); + private CharacterFacade character; + + public ItemHandler(final CharacterFacade character) + { + this.character = character; + DataSetFacade dataset = character.getDataSet(); + final CharacterComboBoxModel genderModel = new CharacterComboBoxModel<GenderFacade>() + { + + public void setSelectedItem(Object anItem) + { + character.setGender((GenderFacade) anItem); + } + + }; + final CharacterComboBoxModel handsModel = new CharacterComboBoxModel<SimpleFacade>() + { + + public void setSelectedItem(Object anItem) + { + character.setHanded((SimpleFacade) anItem); + } + + }; + final CharacterComboBoxModel alignmentModel = new CharacterComboBoxModel<AlignmentFacade>() + { + + public void setSelectedItem(Object anItem) + { + character.setAlignment((AlignmentFacade) anItem); + } + + }; + final CharacterComboBoxModel deityModel = new CharacterComboBoxModel<DeityFacade>() + { + + public void setSelectedItem(Object anItem) + { + character.setDeity((DeityFacade) anItem); + } + + }; + genderModel.setReference(character.getGenderRef()); + handsModel.setReference(character.getHandedRef()); + + alignmentModel.setListFacade(dataset.getAlignments()); + alignmentModel.setReference(character.getAlignmentRef()); + + deityModel.setListFacade(dataset.getDeities()); + deityModel.setReference(character.getDeityRef()); + + + + bioItems.add(new BioItem("Name:", null, character.getNameRef()) + { + + @Override + public void textChanged(String text) + { + character.setName(text); + } + + }); + bioItems.add(new BioItem("Player:", null, character.getPlayersNameRef()) + { + + @Override + public void textChanged(String text) + { + character.setPlayersName(text); + } + + }); + bioItems.add(new BioItem("Gender:", genderModel, null)); + bioItems.add(new BioItem("Handed:", handsModel, null)); + bioItems.add(new BioItem("Alignment:", alignmentModel, null)); + bioItems.add(new BioItem("Deity:", deityModel, null)); + + //bioItems.add(new BioItem("Skin Tone:", null,)) + + ReferenceFacade<RaceFacade> raceRef = character.getRaceRef(); + ReferenceListener<Object> raceListener = new ReferenceListener<Object>() + { + + public void referenceChanged(ReferenceEvent<Object> e) + { + RaceFacade race = character.getRaceRef().getReference(); + if (race != null) + { + genderModel.setListFacade(race.getGenders()); + handsModel.setListFacade(race.getHands()); + resetDisplayedBioItems(); + } + else + { + genderModel.setListFacade(new DefaultListFacade<GenderFacade>()); + handsModel.setListFacade(new DefaultListFacade<SimpleFacade>()); + } + } + + }; + raceListener.referenceChanged(null); + raceRef.addReferenceListener(raceListener); + } + + private void resetDisplayedBioItems() + { + } + + } + + private static class BioItem implements ReferenceListener<String>, DocumentListener + { + + private JCheckBox checkbox = new JCheckBox(); + private JLabel label = new JLabel(); + private JComboBox combobox = new JComboBox(); + private JTextField textField = new JTextField(); + private ReferenceFacade<String> ref; + private CharacterComboBoxModel model; + + public BioItem(String text, CharacterComboBoxModel model, ReferenceFacade<String> ref) + { + this.model = model; + this.ref = ref; + + label.setText(text); + label.setHorizontalAlignment(SwingConstants.RIGHT); + + combobox.setPreferredSize(new Dimension(10, 19)); + if (model != null) + { + combobox.setModel(model); + } + + if (ref != null) + { + textField.setText(ref.getReference()); + textField.getDocument().addDocumentListener(this); + } + } + + public void addComponents(JPanel panel) + { + GridBagConstraints gbc = new GridBagConstraints(); + gbc.gridwidth = 1; + gbc.fill = GridBagConstraints.BOTH; + panel.add(checkbox, gbc); + gbc.insets = new Insets(1, 2, 1, 2); + panel.add(label, gbc); + if (ref != null && model != null) + { + gbc.weightx = .5; + } + if (model != null) + { + panel.add(combobox, gbc); + } + gbc.gridwidth = GridBagConstraints.REMAINDER; + if (ref != null) + { + panel.add(textField, gbc); + } + else + { + panel.add(Box.createHorizontalGlue(), gbc); + } + } + + public void referenceChanged(ReferenceEvent<String> e) + { + if (!textField.getText().equals(e.getNewReference())) + { + textField.setText(e.getNewReference()); + } + } + + public void insertUpdate(DocumentEvent e) + { + textChanged(textField.getText()); + } + + public void removeUpdate(DocumentEvent e) + { + textChanged(textField.getText()); + } + + public void changedUpdate(DocumentEvent e) + { + textChanged(textField.getText()); + } + + public void textChanged(String text) + { + } + + } + } Modified: sandbox/uisync/code/src/java/pcgen/gui2/tabs/bio/PortraitPane.java =================================================================== --- sandbox/uisync/code/src/java/pcgen/gui2/tabs/bio/PortraitPane.java 2011-09-09 16:43:54 UTC (rev 15359) +++ sandbox/uisync/code/src/java/pcgen/gui2/tabs/bio/PortraitPane.java 2011-09-10 02:50:06 UTC (rev 15360) @@ -73,7 +73,10 @@ g.drawImage(portrait, insets.left, insets.top, this); g.setColor(Color.BLACK); g.setXORMode(Color.WHITE); - g.drawRect(cropRect.x + insets.left, cropRect.y + insets.top, cropRect.width, cropRect.height); + if (cropRect != null) + { + g.drawRect(cropRect.x + insets.left, cropRect.y + insets.top, cropRect.width, cropRect.height); + } } @Override @@ -114,9 +117,9 @@ int x = e.getX() - cropOffset.x; int y = e.getY() - cropOffset.y; x = Math.max(x, 0); - x = Math.min(x, portrait.getWidth() - cropRect.width-1); + x = Math.min(x, portrait.getWidth() - cropRect.width - 1); y = Math.max(y, 0); - y = Math.min(y, portrait.getHeight() - cropRect.height-1); + y = Math.min(y, portrait.getHeight() - cropRect.height - 1); cropRect.setLocation(x, y); repaint(); thumbnailPane.setCropRectangle(cropRect); Modified: sandbox/uisync/code/src/java/pcgen/gui2/tabs/bio/ThumbnailPane.java =================================================================== --- sandbox/uisync/code/src/java/pcgen/gui2/tabs/bio/ThumbnailPane.java 2011-09-09 16:43:54 UTC (rev 15359) +++ sandbox/uisync/code/src/java/pcgen/gui2/tabs/bio/ThumbnailPane.java 2011-09-10 02:50:06 UTC (rev 15360) @@ -102,6 +102,10 @@ @Override protected void paintComponent(Graphics g) { + if (portrait == null || cropRect == null) + { + return; + } Insets insets = getInsets(); g.drawImage(portrait.getSubimage(cropRect.x, cropRect.y, cropRect.width, cropRect.height), insets.left, insets.top, this); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |