Переглянути джерело

Making DDSkill{,s} Observable

Sam Jaffe 8 роки тому
батько
коміт
9c7d291381

+ 4 - 3
src/main/lombok/org/leumasjaffe/charsheet/model/skill/DDSkill.java

@@ -1,19 +1,20 @@
 package org.leumasjaffe.charsheet.model.skill;
 
 import org.leumasjaffe.charsheet.model.observable.IntValue;
+import org.leumasjaffe.observer.Observable;
 
 import lombok.AccessLevel;
 import lombok.AllArgsConstructor;
 import lombok.Data;
+import lombok.EqualsAndHashCode;
 import lombok.Getter;
 import lombok.experimental.Delegate;
 import lombok.Setter;
 import lombok.experimental.FieldDefaults;
 
-@AllArgsConstructor
-@Data
+@AllArgsConstructor @Data @EqualsAndHashCode(callSuper=false)
 @FieldDefaults(level=AccessLevel.PRIVATE)
-public class DDSkill {
+public class DDSkill extends Observable.Instance {
 	final @Getter(AccessLevel.NONE) @Delegate DDSkillPrototype name;
 
 //	boolean isClassSkill = false;

+ 8 - 1
src/main/lombok/org/leumasjaffe/charsheet/model/skill/DDSkills.java

@@ -3,9 +3,12 @@ package org.leumasjaffe.charsheet.model.skill;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.Map;
+import java.util.Optional;
 import java.util.TreeMap;
 import java.util.stream.Collectors;
 
+import org.leumasjaffe.observer.Observable;
+
 import com.fasterxml.jackson.annotation.JsonCreator;
 import com.fasterxml.jackson.annotation.JsonValue;
 
@@ -13,7 +16,7 @@ import lombok.AccessLevel;
 import lombok.experimental.FieldDefaults;
 
 @FieldDefaults(level=AccessLevel.PRIVATE, makeFinal=true)
-public class DDSkills {
+public class DDSkills extends Observable.Instance {
 	Map<String, DDSkill> skills = new TreeMap<>();
 	
 	@JsonCreator
@@ -30,4 +33,8 @@ public class DDSkills {
 	public Collection<DDSkill> getSkills() {
 		return Collections.unmodifiableCollection(skills.values());
 	}
+
+	public Optional<DDSkill> getSkill(String name) {
+		return Optional.ofNullable(skills.get(name));
+	}
 }

+ 9 - 9
src/main/lombok/org/leumasjaffe/charsheet/view/skills/SkillLevelUpLine.java

@@ -13,6 +13,7 @@ import org.leumasjaffe.observer.IndirectObservableListener;
 import org.leumasjaffe.observer.ObserverDispatch;
 
 import lombok.AccessLevel;
+import lombok.Getter;
 import lombok.Value;
 import lombok.experimental.FieldDefaults;
 
@@ -40,7 +41,7 @@ class SkillLevelUpLine extends JPanel {
 	 */
 	private static final long serialVersionUID = 1L;
 	boolean isClassSkill;
-	DDSkill skill;
+	@Getter DDSkill skill;
 	IntValue current;
 	IndirectObservableListener<JTextField, TotalPacket> totalListener;
 	
@@ -216,13 +217,12 @@ class SkillLevelUpLine extends JPanel {
 			if (current.value() > 0) { lambda.apply(-1); }
 		});
 
-		totalListener = new IndirectObservableListener<>(total,
-				(c, p) -> {
-					final int skillRanks = p.skill.getRanks().value();
-					final int mod = p.ability.map(v -> v.baseModifier()).orElse(0);
-					c.setText(StringHelper.toString(skillRanks + mod + p.points.value()));
-				});
-		
+		totalListener = new IndirectObservableListener<>(total, (c, p) -> {
+			final int skillRanks = p.skill.getRanks().value();
+			final int mod = p.ability.map(v -> v.baseModifier()).orElse(0);
+			c.setText(StringHelper.toString(skillRanks + mod + p.points.value()));
+		});
+
 		Component horizontalStrut_1 = Box.createHorizontalStrut(5);
 		GridBagConstraints gbc_horizontalStrut_1 = new GridBagConstraints();
 		gbc_horizontalStrut_1.gridx = 12;
@@ -230,7 +230,7 @@ class SkillLevelUpLine extends JPanel {
 		add(horizontalStrut_1, gbc_horizontalStrut_1);
 		final Optional<Ability.Scores> ability = getAbility(chara, skill);
 		ability.ifPresent(v -> modifier.setText(StringHelper.toString(v.baseModifier())));
-		totalListener.setObserved(new TotalPacket(ability, skill, current), current);
+		totalListener.setObserved(new TotalPacket(ability, skill, current), current, skill);
 	}
 
 	private Optional<Ability.Scores> getAbility(final DDCharacter chara, final DDSkill skill) {