Bläddra i källkod

Adding info to the header of each prepare spell panel section, a new class that combines spells known and spells per day information.
Fixing width of PrepareSpellsDialog.

Sam Jaffe 8 år sedan
förälder
incheckning
bae8eb0cb9

+ 1 - 1
src/org/leumasjaffe/charsheet/view/D20Sheet.java

@@ -125,7 +125,7 @@ public class D20Sheet extends JFrame {
 			for (DDCharacterClass dclass : model.getClasses()) {
 				dclass.getSpellBook().ifPresent(sb -> {
 					if (sb.preparesSpells()) {
-						DialogBuilder.createPrepareSpellsDialog(dclass);
+						DialogBuilder.createPrepareSpellsDialog(model, dclass);
 					} else {
 						for (int i = 0; i < dclass.getHighestSpellLevel(); ++i) {
 							sb.prepareSpells(i, null);

+ 2 - 2
src/org/leumasjaffe/charsheet/view/builders/DialogBuilder.java

@@ -27,7 +27,7 @@ public class DialogBuilder {
 		createDialogue("Level Up - Skill Allocation", 510, 600, new SkillLevelUpDialog(chara, dclass));
 	}
 	
-	public void createPrepareSpellsDialog(DDCharacterClass dclass) {
-		createDialogue("Prepare Spells - " + dclass.getName(), 400, 600, new PrepareSpellsDialog(dclass));
+	public void createPrepareSpellsDialog(DDCharacter chara, DDCharacterClass dclass) {
+		createDialogue("Prepare Spells - " + dclass.getName(), 540, 600, new PrepareSpellsDialog(chara, dclass));
 	}
 }

+ 105 - 0
src/org/leumasjaffe/charsheet/view/magic/ChooseSpellsPerDayHeader.java

@@ -0,0 +1,105 @@
+package org.leumasjaffe.charsheet.view.magic;
+
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.Insets;
+
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JTextField;
+
+import org.leumasjaffe.charsheet.model.Ability;
+import org.leumasjaffe.charsheet.model.magic.DDSpellbook;
+import org.leumasjaffe.charsheet.model.observable.IntValue;
+import org.leumasjaffe.charsheet.util.StringHelper;
+
+import java.awt.Dimension;
+
+class ChooseSpellsPerDayHeader extends JPanel {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	private JTextField textFieldKnown;
+
+	public ChooseSpellsPerDayHeader(int level, DDSpellbook model, IntValue ability) {
+		setPreferredSize(new Dimension(450, 20));
+		GridBagLayout gridBagLayout = new GridBagLayout();
+		gridBagLayout.columnWidths = new int[]{0, 30, 0, 30, 0, 30, 0, 0, 0, 0};
+		gridBagLayout.rowHeights = new int[]{0, 0};
+		gridBagLayout.columnWeights = new double[]{0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 1.0, Double.MIN_VALUE};
+		gridBagLayout.rowWeights = new double[]{0.0, Double.MIN_VALUE};
+		setLayout(gridBagLayout);
+		
+		JLabel lblSpellLevel = new JLabel("Spell Level:");
+		GridBagConstraints gbc_lblSpellLevel = new GridBagConstraints();
+		gbc_lblSpellLevel.insets = new Insets(0, 0, 0, 5);
+		gbc_lblSpellLevel.anchor = GridBagConstraints.EAST;
+		gbc_lblSpellLevel.gridx = 0;
+		gbc_lblSpellLevel.gridy = 0;
+		add(lblSpellLevel, gbc_lblSpellLevel);
+		
+		JTextField textFieldLevel = new JTextField(Integer.toString(level));
+		textFieldLevel.setEditable(false);
+		GridBagConstraints gbc_textFieldLevel = new GridBagConstraints();
+		gbc_textFieldLevel.fill = GridBagConstraints.HORIZONTAL;
+		gbc_textFieldLevel.insets = new Insets(0, 0, 0, 5);
+		gbc_textFieldLevel.gridx = 1;
+		gbc_textFieldLevel.gridy = 0;
+		add(textFieldLevel, gbc_textFieldLevel);
+		textFieldLevel.setColumns(10);
+		
+		JLabel lblSaveDc = new JLabel("Save DC:");
+		GridBagConstraints gbc_lblSaveDc = new GridBagConstraints();
+		gbc_lblSaveDc.anchor = GridBagConstraints.EAST;
+		gbc_lblSaveDc.insets = new Insets(0, 0, 0, 5);
+		gbc_lblSaveDc.gridx = 2;
+		gbc_lblSaveDc.gridy = 0;
+		add(lblSaveDc, gbc_lblSaveDc);
+		
+		JTextField textFieldSpellSave = new JTextField(Integer.toString(10 + level + Ability.modifier(ability.value())));
+		textFieldSpellSave.setEditable(false);
+		textFieldSpellSave.setColumns(10);
+		GridBagConstraints gbc_textFieldSpellSave = new GridBagConstraints();
+		gbc_textFieldSpellSave.fill = GridBagConstraints.HORIZONTAL;
+		gbc_textFieldSpellSave.insets = new Insets(0, 0, 0, 5);
+		gbc_textFieldSpellSave.gridx = 3;
+		gbc_textFieldSpellSave.gridy = 0;
+		add(textFieldSpellSave, gbc_textFieldSpellSave);
+		
+		JLabel lblSpellsPerDay = new JLabel("Spells Per Day:");
+		GridBagConstraints gbc_lblSpellsPerDay = new GridBagConstraints();
+		gbc_lblSpellsPerDay.insets = new Insets(0, 0, 0, 5);
+		gbc_lblSpellsPerDay.gridx = 4;
+		gbc_lblSpellsPerDay.gridy = 0;
+		add(lblSpellsPerDay, gbc_lblSpellsPerDay);
+		
+		JTextField textFieldOutOf = new JTextField(Integer.toString(model.numSpellsPerDayAtLevel(level)));
+		GridBagConstraints gbc_textFieldOutOf = new GridBagConstraints();
+		gbc_textFieldOutOf.insets = new Insets(0, 0, 0, 5);
+		gbc_textFieldOutOf.fill = GridBagConstraints.HORIZONTAL;
+		gbc_textFieldOutOf.gridx = 5;
+		gbc_textFieldOutOf.gridy = 0;
+		add(textFieldOutOf, gbc_textFieldOutOf);
+		textFieldOutOf.setEditable(false);
+		textFieldOutOf.setColumns(10);
+		
+		JLabel lblSpellsKnown = new JLabel("Spells Known:");
+		GridBagConstraints gbc_lblSpellsKnown = new GridBagConstraints();
+		gbc_lblSpellsKnown.anchor = GridBagConstraints.EAST;
+		gbc_lblSpellsKnown.insets = new Insets(0, 0, 0, 5);
+		gbc_lblSpellsKnown.gridx = 6;
+		gbc_lblSpellsKnown.gridy = 0;
+		add(lblSpellsKnown, gbc_lblSpellsKnown);
+		
+		textFieldKnown = new JTextField(StringHelper.toString(model.numSpellsKnownAtLevel(level), -1, "--"));
+		textFieldKnown.setEditable(false);
+		textFieldKnown.setColumns(10);
+		GridBagConstraints gbc_textFieldKnown = new GridBagConstraints();
+		gbc_textFieldKnown.insets = new Insets(0, 0, 0, 5);
+		gbc_textFieldKnown.fill = GridBagConstraints.HORIZONTAL;
+		gbc_textFieldKnown.gridx = 7;
+		gbc_textFieldKnown.gridy = 0;
+		add(textFieldKnown, gbc_textFieldKnown);
+	}
+}

+ 8 - 2
src/org/leumasjaffe/charsheet/view/magic/PrepareSpellsDialog.java

@@ -3,14 +3,18 @@ package org.leumasjaffe.charsheet.view.magic;
 import javax.swing.JPanel;
 
 import org.jdesktop.swingx.VerticalLayout;
+import org.leumasjaffe.charsheet.model.Ability;
+import org.leumasjaffe.charsheet.model.DDCharacter;
 import org.leumasjaffe.charsheet.model.DDCharacterClass;
 import org.leumasjaffe.charsheet.model.magic.impl.Prepared;
+import org.leumasjaffe.charsheet.model.observable.IntValue;
 
 import lombok.AccessLevel;
 import lombok.experimental.FieldDefaults;
 
 import java.awt.GridBagLayout;
 import javax.swing.JScrollPane;
+
 import java.awt.GridBagConstraints;
 import java.awt.Insets;
 import java.util.ArrayList;
@@ -30,7 +34,7 @@ public class PrepareSpellsDialog extends JPanel {
 	int[] ready = {0};
 	int highestSpellLevel;
 
-	public PrepareSpellsDialog(DDCharacterClass dclass) {
+	public PrepareSpellsDialog(DDCharacter chara, DDCharacterClass dclass) {
 		highestSpellLevel = dclass.getHighestSpellLevel();
 		ready[0] = highestSpellLevel;
 		
@@ -71,10 +75,12 @@ public class PrepareSpellsDialog extends JPanel {
 		JPanel panel = new JPanel(new VerticalLayout(5));
 		scrollPane.setViewportView(panel);
 		
+		final IntValue value = Ability.fields.get(dclass.getProto().getSpells().get().getAbility()).apply(chara.getAbilities().getBase());
+
 		final Prepared spellBook = (Prepared) dclass.getSpellBook().get();
 		List<SelectPreparedSpellsPanel> panels = new ArrayList<>();
 		for (int i = 0; i < highestSpellLevel; ++i) {
-			SelectPreparedSpellsPanel lvl = new SelectPreparedSpellsPanel(spellBook.getSpellsPreparedPreviouslyForLevel(i), spellBook.spellsKnownAtLevel(i));
+			SelectPreparedSpellsPanel lvl = new SelectPreparedSpellsPanel(i, dclass, value);
 			panels.add(lvl);
 			lvl.addPropertyChangeListener(SelectPreparedSpellsPanel.READY, e -> {
 				if ((Boolean) e.getNewValue()) ++ready[0];

+ 12 - 6
src/org/leumasjaffe/charsheet/view/magic/SelectPreparedSpellsPanel.java

@@ -9,7 +9,10 @@ import javax.swing.JPanel;
 import javax.swing.JTable;
 import javax.swing.ListSelectionModel;
 
+import org.leumasjaffe.charsheet.model.DDCharacterClass;
 import org.leumasjaffe.charsheet.model.magic.DDSpell;
+import org.leumasjaffe.charsheet.model.magic.impl.Prepared;
+import org.leumasjaffe.charsheet.model.observable.IntValue;
 import org.leumasjaffe.charsheet.util.StringHelper;
 
 import lombok.AccessLevel;
@@ -73,10 +76,11 @@ class SelectPreparedSpellsPanel extends JPanel {
 	
 	SelectSpellModel modelPrepared, modelKnown;
 
-	public SelectPreparedSpellsPanel(List<DDSpell> prepared,
-			Collection<DDSpell> known) {
+	public SelectPreparedSpellsPanel(int level, DDCharacterClass dclass, IntValue ability) {
 		putClientProperty(READY, true);
-		this.prepared = new ArrayList<>(prepared);
+		final Prepared spellBook = (Prepared) dclass.getSpellBook().get();
+		this.prepared = new ArrayList<>(spellBook.getSpellsPreparedPreviouslyForLevel(level));
+		final Collection<DDSpell> known = spellBook.spellsKnownAtLevel(level);
 		this.modelPrepared = new SelectSpellModel(prepared.stream().map(DDSpell::getName).toArray());
 		this.modelKnown = new SelectSpellModel(known.stream().map(DDSpell::getName).toArray());
 		
@@ -87,7 +91,7 @@ class SelectPreparedSpellsPanel extends JPanel {
 		gridBagLayout.rowWeights = new double[]{0.0, 1.0, Double.MIN_VALUE};
 		setLayout(gridBagLayout);
 		
-		JPanel panel = new JPanel();
+		JPanel panel = new ChooseSpellsPerDayHeader(level, spellBook, ability);
 		GridBagConstraints gbc_panel = new GridBagConstraints();
 		gbc_panel.gridwidth = 3;
 		gbc_panel.insets = new Insets(0, 0, 5, 5);
@@ -97,7 +101,7 @@ class SelectPreparedSpellsPanel extends JPanel {
 		add(panel, gbc_panel);
 		
 		JScrollPane scrollPane_1 = new JScrollPane();
-		scrollPane_1.setPreferredSize(new Dimension(150, 200));
+		scrollPane_1.setPreferredSize(new Dimension(175, 200));
 		scrollPane_1.setViewportBorder(new SoftBevelBorder(BevelBorder.LOWERED, null, null, null, null));
 		GridBagConstraints gbc_scrollPane_1 = new GridBagConstraints();
 		gbc_scrollPane_1.insets = new Insets(0, 0, 0, 5);
@@ -126,9 +130,10 @@ class SelectPreparedSpellsPanel extends JPanel {
 		panelDivider.setLayout(gbl_panelDivider);		
 		
 		JScrollPane scrollPane = new JScrollPane();
-		scrollPane.setPreferredSize(new Dimension(150, 200));
+		scrollPane.setPreferredSize(new Dimension(175, 200));
 		scrollPane.setViewportBorder(new SoftBevelBorder(BevelBorder.LOWERED, null, null, null, null));
 		GridBagConstraints gbc_scrollPane = new GridBagConstraints();
+		gbc_scrollPane.insets = new Insets(0, 0, 0, 5);
 		gbc_scrollPane.fill = GridBagConstraints.BOTH;
 		gbc_scrollPane.gridx = 2;
 		gbc_scrollPane.gridy = 1;
@@ -165,6 +170,7 @@ class SelectPreparedSpellsPanel extends JPanel {
 		gbc_button_1.gridx = 0;
 		gbc_button_1.gridy = 2;
 		panelDivider.add(button_1, gbc_button_1);
+		
 		button_1.addActionListener(e -> {
 			final int[] rows = tableKnown.getSelectedRows();
 			final int[] orows = tablePrepared.getSelectedRows();