Parcourir la source

Adding header to skill tab for Max Ranks, Total Skill Points.

Sam Jaffe il y a 8 ans
Parent
commit
c467704cad

+ 4 - 0
src/org/leumasjaffe/charsheet/model/DDCharacter.java

@@ -84,4 +84,8 @@ public class DDCharacter {
 	public boolean isClassSkill(final String skillName) {
 		return classes.stream().anyMatch( cc -> cc.isClassSkill(skillName) );
 	}
+
+	public int getLevel() {
+		return classes.stream().mapToInt(DDCharacterClass::getLevel).sum();
+	}
 }

+ 1 - 1
src/org/leumasjaffe/charsheet/model/skill/DDSkill.java

@@ -15,7 +15,7 @@ public class DDSkill {
 	final @Getter(AccessLevel.NONE) @Delegate DDSkillPrototype name;
 
 //	boolean isClassSkill = false;
-	@Setter(value=AccessLevel.PRIVATE) float ranks = 0.0f; // realistically, int + .0/.5
+	@Setter(value=AccessLevel.PRIVATE) int ranks = 0; // CC skills are 2/1 point, you cannot have half-ranks
 	// This would be 2x ranks if cross-class, 1x if class.
 	// Unless you gain it as a class skill later, in which case it might be in-between
 	@Setter(value=AccessLevel.PRIVATE) int pointsSpent = 0;

+ 93 - 3
src/org/leumasjaffe/charsheet/view/SkillTab.java

@@ -12,6 +12,11 @@ import org.leumasjaffe.charsheet.view.skills.SkillLine;
 import lombok.AccessLevel;
 import lombok.experimental.FieldDefaults;
 import java.awt.Dimension;
+import java.awt.Insets;
+import javax.swing.JLabel;
+import javax.swing.JTextField;
+import java.awt.Component;
+import javax.swing.Box;
 
 @FieldDefaults(level=AccessLevel.PRIVATE, makeFinal=true)
 public class SkillTab extends JPanel {
@@ -20,21 +25,98 @@ public class SkillTab extends JPanel {
 	 */
 	private static final long serialVersionUID = 1L;
 	JPanel skillPanel;
+	JTextField txtTotalSkillPoints;
+	JTextField txtClassSkills;
+	JTextField txtCrossClass;
 
 	public SkillTab() {
 		setPreferredSize(new Dimension(600, 300));
 		GridBagLayout gridBagLayout = new GridBagLayout();
 		gridBagLayout.columnWidths = new int[]{0, 0};
-		gridBagLayout.rowHeights = new int[]{0, 0};
+		gridBagLayout.rowHeights = new int[]{0, 0, 0};
 		gridBagLayout.columnWeights = new double[]{1.0, Double.MIN_VALUE};
-		gridBagLayout.rowWeights = new double[]{1.0, Double.MIN_VALUE};
+		gridBagLayout.rowWeights = new double[]{0.0, 1.0, Double.MIN_VALUE};
 		setLayout(gridBagLayout);
 		
+		JPanel panel = new JPanel();
+		GridBagConstraints gbc_panel = new GridBagConstraints();
+		gbc_panel.insets = new Insets(0, 0, 5, 0);
+		gbc_panel.fill = GridBagConstraints.BOTH;
+		gbc_panel.gridx = 0;
+		gbc_panel.gridy = 0;
+		add(panel, gbc_panel);
+		GridBagLayout gbl_panel = new GridBagLayout();
+		gbl_panel.columnWidths = new int[]{0, 0, 0, 0, 0, 0, 0, 0};
+		gbl_panel.rowHeights = new int[]{0, 0};
+		gbl_panel.columnWeights = new double[]{0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 1.0, Double.MIN_VALUE};
+		gbl_panel.rowWeights = new double[]{0.0, Double.MIN_VALUE};
+		panel.setLayout(gbl_panel);
+		
+		JLabel lblTotalSkillPoints = new JLabel("Total Skill Points:");
+		GridBagConstraints gbc_lblTotalSkillPoints = new GridBagConstraints();
+		gbc_lblTotalSkillPoints.insets = new Insets(0, 0, 0, 5);
+		gbc_lblTotalSkillPoints.anchor = GridBagConstraints.EAST;
+		gbc_lblTotalSkillPoints.gridx = 0;
+		gbc_lblTotalSkillPoints.gridy = 0;
+		panel.add(lblTotalSkillPoints, gbc_lblTotalSkillPoints);
+		
+		txtTotalSkillPoints = new JTextField();
+		txtTotalSkillPoints.setEditable(false);
+		GridBagConstraints gbc_txtTotalSkillPoints = new GridBagConstraints();
+		gbc_txtTotalSkillPoints.insets = new Insets(0, 0, 0, 5);
+		gbc_txtTotalSkillPoints.fill = GridBagConstraints.HORIZONTAL;
+		gbc_txtTotalSkillPoints.gridx = 1;
+		gbc_txtTotalSkillPoints.gridy = 0;
+		panel.add(txtTotalSkillPoints, gbc_txtTotalSkillPoints);
+		txtTotalSkillPoints.setColumns(10);
+		
+		Component horizontalStrut = Box.createHorizontalStrut(20);
+		GridBagConstraints gbc_horizontalStrut = new GridBagConstraints();
+		gbc_horizontalStrut.insets = new Insets(0, 0, 0, 5);
+		gbc_horizontalStrut.gridx = 2;
+		gbc_horizontalStrut.gridy = 0;
+		panel.add(horizontalStrut, gbc_horizontalStrut);
+		
+		JLabel lblMaxRanksClasscross = new JLabel("Max Ranks Class/Cross Class:");
+		GridBagConstraints gbc_lblMaxRanksClasscross = new GridBagConstraints();
+		gbc_lblMaxRanksClasscross.insets = new Insets(0, 0, 0, 5);
+		gbc_lblMaxRanksClasscross.anchor = GridBagConstraints.EAST;
+		gbc_lblMaxRanksClasscross.gridx = 3;
+		gbc_lblMaxRanksClasscross.gridy = 0;
+		panel.add(lblMaxRanksClasscross, gbc_lblMaxRanksClasscross);
+		
+		txtClassSkills = new JTextField();
+		txtClassSkills.setEditable(false);
+		GridBagConstraints gbc_txtClassSkills = new GridBagConstraints();
+		gbc_txtClassSkills.insets = new Insets(0, 0, 0, 5);
+		gbc_txtClassSkills.fill = GridBagConstraints.HORIZONTAL;
+		gbc_txtClassSkills.gridx = 4;
+		gbc_txtClassSkills.gridy = 0;
+		panel.add(txtClassSkills, gbc_txtClassSkills);
+		txtClassSkills.setColumns(10);
+		
+		JLabel label = new JLabel("/");
+		GridBagConstraints gbc_label = new GridBagConstraints();
+		gbc_label.insets = new Insets(0, 0, 0, 5);
+		gbc_label.anchor = GridBagConstraints.EAST;
+		gbc_label.gridx = 5;
+		gbc_label.gridy = 0;
+		panel.add(label, gbc_label);
+		
+		txtCrossClass = new JTextField();
+		txtCrossClass.setEditable(false);
+		GridBagConstraints gbc_txtCrossClass = new GridBagConstraints();
+		gbc_txtCrossClass.fill = GridBagConstraints.HORIZONTAL;
+		gbc_txtCrossClass.gridx = 6;
+		gbc_txtCrossClass.gridy = 0;
+		panel.add(txtCrossClass, gbc_txtCrossClass);
+		txtCrossClass.setColumns(10);
+		
 		JScrollPane scrollPane = new JScrollPane();
 		GridBagConstraints gbc_scrollPane = new GridBagConstraints();
 		gbc_scrollPane.fill = GridBagConstraints.BOTH;
 		gbc_scrollPane.gridx = 0;
-		gbc_scrollPane.gridy = 0;
+		gbc_scrollPane.gridy = 1;
 		add(scrollPane, gbc_scrollPane);
 		
 		skillPanel = new JPanel();
@@ -43,11 +125,19 @@ public class SkillTab extends JPanel {
 	}
 	
 	public void setModel(final DDCharacter model) {
+		// TODO (sjaffe): Observables
 		skillPanel.removeAll();
+		int[] totalPoints = new int[1];
+		totalPoints[0] = 0;
 		final DDSkills skills = model.getSkills();
 		skills.getSkills().stream().forEach( skill -> {
 			skillPanel.add(new SkillLine(model, skill));
+			totalPoints[0] += skill.getPointsSpent();
 		});
+		txtTotalSkillPoints.setText(Integer.toString(totalPoints[0]));
+		int classSkill = model.getLevel() + 3;
+		txtClassSkills.setText(Integer.toString(classSkill));
+		txtCrossClass.setText(Integer.toString(classSkill / 2));
 	}
 	
 }