Ver código fonte

Moved some files to more sensible locations/renamed a package.
Refactored ObservableListener and IndirectObservableListener to not depend on JTextComponents

Sam Jaffe 9 anos atrás
pai
commit
56d5c2f419
33 arquivos alterados com 107 adições e 113 exclusões
  1. 1 1
      src/org/leumasjaffe/charsheet/model/DDCharacter.java
  2. 1 1
      src/org/leumasjaffe/charsheet/model/DDCharacterClass.java
  3. 1 1
      src/org/leumasjaffe/charsheet/model/equip/DDArmor.java
  4. 1 1
      src/org/leumasjaffe/charsheet/model/equip/DDInventory.java
  5. 1 2
      src/org/leumasjaffe/charsheet/model/equip/DDItem.java
  6. 1 1
      src/org/leumasjaffe/charsheet/model/equip/DDWeapon.java
  7. 1 1
      src/org/leumasjaffe/charsheet/model/equip/EquipmentSlot.java
  8. 1 1
      src/org/leumasjaffe/charsheet/model/Money.java
  9. 1 1
      src/org/leumasjaffe/charsheet/model/equip/Range.java
  10. 1 1
      src/org/leumasjaffe/charsheet/model/DDActionType.java
  11. 0 2
      src/org/leumasjaffe/charsheet/model/magic/DDSpell.java
  12. 1 1
      src/org/leumasjaffe/charsheet/model/magic/Range.java
  13. 8 6
      src/org/leumasjaffe/charsheet/observer/helper/AbilModStringify.java
  14. 8 6
      src/org/leumasjaffe/charsheet/observer/helper/IntValueStringify.java
  15. 1 1
      src/org/leumasjaffe/charsheet/view/StringHelper.java
  16. 1 0
      src/org/leumasjaffe/charsheet/view/ClassTab.java
  17. 3 3
      src/org/leumasjaffe/charsheet/view/inventory/ArmorPanel.java
  18. 1 1
      src/org/leumasjaffe/charsheet/view/inventory/EquipmentInfoMenu.java
  19. 3 3
      src/org/leumasjaffe/charsheet/view/inventory/EquipmentPanel.java
  20. 5 5
      src/org/leumasjaffe/charsheet/view/inventory/InventoryPanel.java
  21. 2 2
      src/org/leumasjaffe/charsheet/view/inventory/ItemInfoMenu.java
  22. 1 1
      src/org/leumasjaffe/charsheet/view/inventory/ItemPanel.java
  23. 3 3
      src/org/leumasjaffe/charsheet/view/inventory/ShieldPanel.java
  24. 3 3
      src/org/leumasjaffe/charsheet/view/inventory/WeaponPanel.java
  25. 5 5
      src/org/leumasjaffe/charsheet/view/summary/AbilityBox.java
  26. 8 12
      src/org/leumasjaffe/charsheet/view/summary/AttackLine.java
  27. 1 1
      src/org/leumasjaffe/charsheet/view/summary/DescriptionPanel.java
  28. 9 9
      src/org/leumasjaffe/charsheet/view/summary/HealthLine.java
  29. 6 6
      src/org/leumasjaffe/charsheet/view/summary/InitiativeLine.java
  30. 7 7
      src/org/leumasjaffe/charsheet/view/summary/ResistanceLine.java
  31. 5 7
      src/org/leumasjaffe/observer/IndirectObservableListener.java
  32. 11 11
      src/org/leumasjaffe/observer/ObservableController.java
  33. 5 7
      src/org/leumasjaffe/observer/ObservableListener.java

+ 1 - 1
src/org/leumasjaffe/charsheet/model/DDCharacter.java

@@ -5,7 +5,7 @@ import java.util.HashSet;
 import java.util.Iterator;
 import java.util.Set;
 
-import org.leumasjaffe.charsheet.model.equip.DDInventory;
+import org.leumasjaffe.charsheet.model.inventory.DDInventory;
 import org.leumasjaffe.charsheet.model.observable.ObjectValue;
 
 import com.fasterxml.jackson.annotation.JsonIgnoreProperties;

+ 1 - 1
src/org/leumasjaffe/charsheet/model/DDCharacterClass.java

@@ -18,7 +18,7 @@ public class DDCharacterClass {
 		DDClass base;
 		
 		public boolean equals(Object o) {
-			return base.equals(o);
+			return this == o || base.equals(o);
 		}
 
 		public String getName() {

+ 1 - 1
src/org/leumasjaffe/charsheet/model/equip/DDArmor.java

@@ -1,4 +1,4 @@
-package org.leumasjaffe.charsheet.model.equip;
+package org.leumasjaffe.charsheet.model.inventory;
 
 import lombok.AccessLevel;
 import lombok.Data;

+ 1 - 1
src/org/leumasjaffe/charsheet/model/equip/DDInventory.java

@@ -1,4 +1,4 @@
-package org.leumasjaffe.charsheet.model.equip;
+package org.leumasjaffe.charsheet.model.inventory;
 
 import java.util.ArrayList;
 import java.util.Collections;

+ 1 - 2
src/org/leumasjaffe/charsheet/model/equip/DDItem.java

@@ -1,10 +1,9 @@
-package org.leumasjaffe.charsheet.model.equip;
+package org.leumasjaffe.charsheet.model.inventory;
 
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.Map;
 
-import org.leumasjaffe.charsheet.model.Money;
 import org.leumasjaffe.charsheet.model.observable.IntValue;
 import org.leumasjaffe.charsheet.model.observable.StringValue;
 

+ 1 - 1
src/org/leumasjaffe/charsheet/model/equip/DDWeapon.java

@@ -1,4 +1,4 @@
-package org.leumasjaffe.charsheet.model.equip;
+package org.leumasjaffe.charsheet.model.inventory;
 
 import lombok.AccessLevel;
 import lombok.Data;

+ 1 - 1
src/org/leumasjaffe/charsheet/model/equip/EquipmentSlot.java

@@ -1,4 +1,4 @@
-package org.leumasjaffe.charsheet.model.equip;
+package org.leumasjaffe.charsheet.model.inventory;
 
 public enum EquipmentSlot {
 	HEAD,

+ 1 - 1
src/org/leumasjaffe/charsheet/model/Money.java

@@ -1,4 +1,4 @@
-package org.leumasjaffe.charsheet.model;
+package org.leumasjaffe.charsheet.model.inventory;
 
 import lombok.AccessLevel;
 import lombok.AllArgsConstructor;

+ 1 - 1
src/org/leumasjaffe/charsheet/model/equip/Range.java

@@ -1,4 +1,4 @@
-package org.leumasjaffe.charsheet.model.equip;
+package org.leumasjaffe.charsheet.model.inventory;
 
 import com.fasterxml.jackson.annotation.JsonCreator;
 

+ 1 - 1
src/org/leumasjaffe/charsheet/model/DDActionType.java

@@ -1,4 +1,4 @@
-package org.leumasjaffe.charsheet.model;
+package org.leumasjaffe.charsheet.model.magic;
 
 import lombok.NonNull;
 import lombok.RequiredArgsConstructor;

+ 0 - 2
src/org/leumasjaffe/charsheet/model/magic/DDSpell.java

@@ -4,8 +4,6 @@ import java.util.EnumSet;
 import java.util.List;
 import java.util.Set;
 
-import org.leumasjaffe.charsheet.model.DDActionType;
-
 import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
 
 import lombok.AccessLevel;

+ 1 - 1
src/org/leumasjaffe/charsheet/model/magic/Range.java

@@ -60,7 +60,7 @@ public interface Range {
 		
 		public String toString() {
 			final StringBuilder str = new StringBuilder(name);
-			str.append(" (").append(range).append(" ft.").append(")");
+			str.append(" (").append(range).append(" ft.)");
 			return str.toString();
 		}
 	}

+ 8 - 6
src/org/leumasjaffe/charsheet/observer/helper/AbilModStringify.java

@@ -1,16 +1,18 @@
 package org.leumasjaffe.charsheet.observer.helper;
 
-import java.util.function.Function;
+import java.util.function.BiConsumer;
+
+import javax.swing.text.JTextComponent;
 
 import org.leumasjaffe.charsheet.model.AbilityScores;
 import org.leumasjaffe.charsheet.model.observable.IntValue;
-import org.leumasjaffe.charsheet.view.StringHelper;
+import org.leumasjaffe.charsheet.util.StringHelper;
+
+public class AbilModStringify implements BiConsumer<JTextComponent, IntValue> {
 
-public class AbilModStringify implements Function<IntValue, String> {
-	
 	@Override
-	public String apply(IntValue t) {
-		return StringHelper.toString(AbilityScores.modifier(t.value()));
+	public void accept(JTextComponent c, IntValue v) {
+		c.setText(StringHelper.toString(AbilityScores.modifier(v.value())));
 	}
 
 }

+ 8 - 6
src/org/leumasjaffe/charsheet/observer/helper/IntValueStringify.java

@@ -1,21 +1,23 @@
 package org.leumasjaffe.charsheet.observer.helper;
 
-import java.util.function.Function;
+import java.util.function.BiConsumer;
+
+import javax.swing.text.JTextComponent;
 
 import org.leumasjaffe.charsheet.model.observable.IntValue;
-import org.leumasjaffe.charsheet.view.StringHelper;
+import org.leumasjaffe.charsheet.util.StringHelper;
 
 import lombok.experimental.UtilityClass;
 
 @UtilityClass
 public class IntValueStringify {
 	
-	public Function<IntValue, String> instance() {
-		return (v) -> StringHelper.toString(v.value());
+	public BiConsumer<JTextComponent, IntValue> instance() {
+		return (c, v) -> c.setText(StringHelper.toString(v.value()));
 	}
 	
-	public Function<IntValue, String> withDefault(final int def) {
-		return (v) -> StringHelper.toString(v.value(), def);
+	public BiConsumer<JTextComponent, IntValue> withDefault(final int def) {
+		return (c, v) -> c.setText(StringHelper.toString(v.value(), def));
 	}
 
 }

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

@@ -1,4 +1,4 @@
-package org.leumasjaffe.charsheet.view;
+package org.leumasjaffe.charsheet.util;
 
 import lombok.experimental.UtilityClass;
 

+ 1 - 0
src/org/leumasjaffe/charsheet/view/ClassTab.java

@@ -8,6 +8,7 @@ import java.awt.GridBagLayout;
 import javax.swing.JTextField;
 
 import org.leumasjaffe.charsheet.model.DDCharacterClass;
+import org.leumasjaffe.charsheet.util.StringHelper;
 
 import java.awt.GridBagConstraints;
 import java.awt.Insets;

+ 3 - 3
src/org/leumasjaffe/charsheet/view/inventory/ArmorPanel.java

@@ -12,9 +12,9 @@ import java.awt.Font;
 import java.awt.Color;
 import javax.swing.SwingConstants;
 
-import org.leumasjaffe.charsheet.model.equip.DDArmor;
-import org.leumasjaffe.charsheet.model.equip.DDItem;
-import org.leumasjaffe.charsheet.view.StringHelper;
+import org.leumasjaffe.charsheet.model.inventory.DDArmor;
+import org.leumasjaffe.charsheet.model.inventory.DDItem;
+import org.leumasjaffe.charsheet.util.StringHelper;
 
 import java.awt.Component;
 import javax.swing.Box;

+ 1 - 1
src/org/leumasjaffe/charsheet/view/inventory/EquipmentInfoMenu.java

@@ -2,7 +2,7 @@ package org.leumasjaffe.charsheet.view.inventory;
 
 import javax.swing.JPopupMenu;
 
-import org.leumasjaffe.charsheet.model.equip.DDItem;
+import org.leumasjaffe.charsheet.model.inventory.DDItem;
 import org.leumasjaffe.function.VoidVoidFunction;
 
 import java.util.function.Consumer;

+ 3 - 3
src/org/leumasjaffe/charsheet/view/inventory/EquipmentPanel.java

@@ -9,9 +9,9 @@ import javax.swing.border.MatteBorder;
 import org.jdesktop.swingx.VerticalLayout;
 import org.leumasjaffe.charsheet.controller.inventory.PopClickListener;
 import org.leumasjaffe.charsheet.model.DDCharacter;
-import org.leumasjaffe.charsheet.model.equip.DDInventory;
-import org.leumasjaffe.charsheet.model.equip.DDItem;
-import org.leumasjaffe.charsheet.model.equip.EquipmentSlot;
+import org.leumasjaffe.charsheet.model.inventory.DDInventory;
+import org.leumasjaffe.charsheet.model.inventory.DDItem;
+import org.leumasjaffe.charsheet.model.inventory.EquipmentSlot;
 
 import lombok.AccessLevel;
 import lombok.experimental.FieldDefaults;

+ 5 - 5
src/org/leumasjaffe/charsheet/view/inventory/InventoryPanel.java

@@ -11,20 +11,20 @@ import javax.swing.border.MatteBorder;
 import org.jdesktop.swingx.VerticalLayout;
 import org.leumasjaffe.charsheet.controller.inventory.PopClickListener;
 import org.leumasjaffe.charsheet.model.DDCharacter;
-import org.leumasjaffe.charsheet.model.equip.DDInventory;
-import org.leumasjaffe.charsheet.model.equip.DDItem;
-import org.leumasjaffe.charsheet.model.equip.EquipmentSlot;
+import org.leumasjaffe.charsheet.model.inventory.DDInventory;
+import org.leumasjaffe.charsheet.model.inventory.DDItem;
+import org.leumasjaffe.charsheet.model.inventory.EquipmentSlot;
 
 import lombok.AccessLevel;
 import lombok.experimental.FieldDefaults;
 
+import static org.leumasjaffe.charsheet.model.inventory.EquipmentSlot.*;
+
 import java.awt.Color;
 import java.awt.Font;
 import java.awt.GridBagConstraints;
 import java.awt.GridBagLayout;
 
-import static org.leumasjaffe.charsheet.model.equip.EquipmentSlot.*;
-
 @FieldDefaults(level=AccessLevel.PRIVATE, makeFinal=true)
 public class InventoryPanel extends JPanel {
 	/**

+ 2 - 2
src/org/leumasjaffe/charsheet/view/inventory/ItemInfoMenu.java

@@ -2,8 +2,8 @@ package org.leumasjaffe.charsheet.view.inventory;
 
 import javax.swing.JPopupMenu;
 
-import org.leumasjaffe.charsheet.model.equip.DDItem;
-import org.leumasjaffe.charsheet.model.equip.EquipmentSlot;
+import org.leumasjaffe.charsheet.model.inventory.DDItem;
+import org.leumasjaffe.charsheet.model.inventory.EquipmentSlot;
 
 import javax.swing.JMenuItem;
 

+ 1 - 1
src/org/leumasjaffe/charsheet/view/inventory/ItemPanel.java

@@ -12,7 +12,7 @@ import java.awt.Font;
 import java.awt.Color;
 import javax.swing.SwingConstants;
 
-import org.leumasjaffe.charsheet.model.equip.DDItem;
+import org.leumasjaffe.charsheet.model.inventory.DDItem;
 
 import java.awt.Component;
 import javax.swing.Box;

+ 3 - 3
src/org/leumasjaffe/charsheet/view/inventory/ShieldPanel.java

@@ -12,9 +12,9 @@ import java.awt.Font;
 import java.awt.Color;
 import javax.swing.SwingConstants;
 
-import org.leumasjaffe.charsheet.model.equip.DDArmor;
-import org.leumasjaffe.charsheet.model.equip.DDItem;
-import org.leumasjaffe.charsheet.view.StringHelper;
+import org.leumasjaffe.charsheet.model.inventory.DDArmor;
+import org.leumasjaffe.charsheet.model.inventory.DDItem;
+import org.leumasjaffe.charsheet.util.StringHelper;
 
 import java.awt.Component;
 import javax.swing.Box;

+ 3 - 3
src/org/leumasjaffe/charsheet/view/inventory/WeaponPanel.java

@@ -12,9 +12,9 @@ import java.awt.Font;
 import java.awt.Color;
 import javax.swing.SwingConstants;
 
-import org.leumasjaffe.charsheet.model.equip.DDItem;
-import org.leumasjaffe.charsheet.model.equip.DDWeapon;
-import org.leumasjaffe.charsheet.view.StringHelper;
+import org.leumasjaffe.charsheet.model.inventory.DDItem;
+import org.leumasjaffe.charsheet.model.inventory.DDWeapon;
+import org.leumasjaffe.charsheet.util.StringHelper;
 
 import java.awt.Component;
 import javax.swing.Box;

+ 5 - 5
src/org/leumasjaffe/charsheet/view/summary/AbilityBox.java

@@ -17,7 +17,7 @@ import javax.swing.border.LineBorder;
 import org.leumasjaffe.charsheet.model.observable.IntValue;
 import org.leumasjaffe.charsheet.observer.helper.IntValueHelper;
 import org.leumasjaffe.charsheet.observer.helper.IntValueStringify;
-import org.leumasjaffe.charsheet.view.StringHelper;
+import org.leumasjaffe.charsheet.util.StringHelper;
 import org.leumasjaffe.graphics.NumberTextField;
 import org.leumasjaffe.observer.ObservableController;
 import org.leumasjaffe.observer.ObservableListener;
@@ -33,8 +33,8 @@ public class AbilityBox extends JPanel {
 	 * 
 	 */
 	private static final long serialVersionUID = 1L;
-	ObservableListener<IntValue> valueListener;
-	ObservableListener<IntValue> modListener;
+	ObservableListener<JTextField, IntValue> valueListener;
+	ObservableListener<JTextField, IntValue> modListener;
 	
 	public AbilityBox(final String name, final String heading) {
 
@@ -87,8 +87,8 @@ public class AbilityBox extends JPanel {
 					modifier.setText("");
 				});
 		modListener = new ObservableListener<>(modifier,
-				(v) -> v.value() <= 0 ? "" : 
-					StringHelper.toString(modifier(v.value())));
+				(c, v) -> c.setText(v.value() <= 0 ? "" : 
+					StringHelper.toString(modifier(v.value()))));
 	}
 
 	public void setModel(IntValue scores) {

+ 8 - 12
src/org/leumasjaffe/charsheet/view/summary/AttackLine.java

@@ -11,7 +11,7 @@ import org.leumasjaffe.charsheet.model.AbilityScores;
 import org.leumasjaffe.charsheet.model.DDCharacter;
 import org.leumasjaffe.charsheet.model.observable.IntValue;
 import org.leumasjaffe.charsheet.observer.helper.AbilModStringify;
-import org.leumasjaffe.charsheet.view.StringHelper;
+import org.leumasjaffe.charsheet.util.StringHelper;
 import org.leumasjaffe.observer.IndirectObservableListener;
 import org.leumasjaffe.observer.ObservableListener;
 
@@ -34,16 +34,12 @@ public class AttackLine extends JPanel {
 	 */
 	private static final long serialVersionUID = 1L;
 	@NonFinal DDCharacter model;
-	
-	JTextField grappleTtl;
-	JTextField grappleBab;
 	JTextField grappleMisc;
 	JTextField grappleSize;
 	JTextField baseAttack;
-	JTextField grappleStrength;
 	
-	IndirectObservableListener<DDCharacter> gTtlObserver;
-	ObservableListener<IntValue> gStrObserver;
+	IndirectObservableListener<JTextField, DDCharacter> gTtlObserver;
+	ObservableListener<JTextField, IntValue> gStrObserver;
 
 	public AttackLine() {
 		setPreferredSize(new Dimension(600, 25));
@@ -115,7 +111,7 @@ public class AttackLine extends JPanel {
 		gbc_lblGrapple.gridy = 0;
 		add(lblGrapple, gbc_lblGrapple);
 		
-		grappleTtl = new JTextField();
+		JTextField grappleTtl = new JTextField();
 		grappleTtl.setToolTipText("Total Grapple");
 		grappleTtl.setPreferredSize(new Dimension(30, 20));
 		grappleTtl.setMinimumSize(new Dimension(30, 20));
@@ -139,7 +135,7 @@ public class AttackLine extends JPanel {
 		gbc_label.gridy = 0;
 		add(label, gbc_label);
 		
-		grappleBab = new JTextField();
+		JTextField grappleBab = new JTextField();
 		grappleBab.setDocument(baseAttack.getDocument());
 		grappleBab.setToolTipText("Base Attack Bonus");
 		grappleBab.setPreferredSize(new Dimension(30, 20));
@@ -164,7 +160,7 @@ public class AttackLine extends JPanel {
 		gbc_label_1.gridy = 0;
 		add(label_1, gbc_label_1);
 		
-		grappleStrength = new JTextField();
+		JTextField grappleStrength = new JTextField();
 		grappleStrength.setToolTipText("Strength Modifier");
 		grappleStrength.setPreferredSize(new Dimension(30, 20));
 		grappleStrength.setMinimumSize(new Dimension(30, 20));
@@ -228,12 +224,12 @@ public class AttackLine extends JPanel {
 		add(grappleMisc, gbc_grappleMisc);
 		
 		gTtlObserver = new IndirectObservableListener<>(grappleTtl,
-				(v) -> {
+				(c, v) -> {
 					final int bab = v.getBaseAttack();
 					final int str = AbilityScores.modifier(this.model.getAbilities().getBase().getStr().value());
 					final int size = v.getSize().value().modifier;
 					final int misc = 0;
-					return StringHelper.toString(bab + str + size + misc);
+					c.setText(StringHelper.toString(bab + str + size + misc));
 				});
 		gStrObserver = new ObservableListener<>(grappleStrength, 
 				new AbilModStringify());

+ 1 - 1
src/org/leumasjaffe/charsheet/view/summary/DescriptionPanel.java

@@ -8,7 +8,7 @@ import javax.swing.JTextField;
 import javax.swing.border.TitledBorder;
 
 import org.leumasjaffe.charsheet.model.DDCharacter;
-import org.leumasjaffe.charsheet.view.StringHelper;
+import org.leumasjaffe.charsheet.util.StringHelper;
 
 import lombok.AccessLevel;
 import lombok.experimental.FieldDefaults;

+ 9 - 9
src/org/leumasjaffe/charsheet/view/summary/HealthLine.java

@@ -16,7 +16,7 @@ import java.awt.Insets;
 import org.leumasjaffe.charsheet.model.HitPoints;
 import org.leumasjaffe.charsheet.model.observable.IntValue;
 import org.leumasjaffe.charsheet.observer.helper.IntValueHelper;
-import org.leumasjaffe.charsheet.view.StringHelper;
+import org.leumasjaffe.charsheet.observer.helper.IntValueStringify;
 import org.leumasjaffe.graphics.NumberTextField;
 import org.leumasjaffe.observer.ObservableController;
 import org.leumasjaffe.observer.ObservableListener;
@@ -33,10 +33,10 @@ public class HealthLine extends JPanel {
 	 * 
 	 */
 	private static final long serialVersionUID = 1L;
-	ObservableListener<IntValue> ttlObserver;
-	ObservableListener<IntValue> currObserver;
-	ObservableListener<IntValue> nlObserver;
-	ObservableListener<IntValue> tempObserver;
+	ObservableListener<JTextField, IntValue> ttlObserver;
+	ObservableListener<JTextField, IntValue> currObserver;
+	ObservableListener<JTextField, IntValue> nlObserver;
+	ObservableListener<JTextField, IntValue> tempObserver;
 
 	public HealthLine() {
 		setOpaque(false);
@@ -150,16 +150,16 @@ public class HealthLine extends JPanel {
 		
 		ttlObserver = new ObservableController<>(maxHealth,
 				new IntValueHelper(),
-				(v) -> StringHelper.toString(v.value(), 0));
+				IntValueStringify.withDefault(0));
 		currObserver = new ObservableController<>(currentHealth,
 				new IntValueHelper(),
-				(v) -> StringHelper.toString(v.value()));
+				IntValueStringify.instance());
 		tempObserver = new ObservableController<>(temporary,
 				new IntValueHelper(),
-				(v) -> StringHelper.toString(v.value(), 0));
+				IntValueStringify.withDefault(0));
 		nlObserver = new ObservableController<>(nonlethal,
 				new IntValueHelper(),
-				(v) -> StringHelper.toString(v.value(), 0));
+				IntValueStringify.withDefault(0));
 	}
 
 	public void setModel(HitPoints health) {

+ 6 - 6
src/org/leumasjaffe/charsheet/view/summary/InitiativeLine.java

@@ -13,7 +13,7 @@ import javax.swing.border.LineBorder;
 import org.leumasjaffe.charsheet.model.DDCharacter;
 import org.leumasjaffe.charsheet.model.observable.IntValue;
 import org.leumasjaffe.charsheet.observer.helper.AbilModStringify;
-import org.leumasjaffe.charsheet.view.StringHelper;
+import org.leumasjaffe.charsheet.util.StringHelper;
 import org.leumasjaffe.observer.IndirectObservableListener;
 import org.leumasjaffe.observer.ObservableListener;
 
@@ -32,8 +32,8 @@ public class InitiativeLine extends JPanel {
 	 * 
 	 */
 	private static final long serialVersionUID = 1L;
-	IndirectObservableListener<DDCharacter> ttlObserver;
-	ObservableListener<IntValue> dexObserver;
+	IndirectObservableListener<JTextField, DDCharacter> ttlObserver;
+	ObservableListener<JTextField, IntValue> dexObserver;
 
 	public InitiativeLine() {
 		setOpaque(false);
@@ -126,9 +126,9 @@ public class InitiativeLine extends JPanel {
 		add(misc, gbc_misc);
 		
 		ttlObserver = new IndirectObservableListener<>(total, 
-				(c) -> {
-					final int adex = c.getAbilities().getBase().getDex().value();
-					return StringHelper.toString( modifier(adex) );
+				(c, v) -> {
+					final int adex = v.getAbilities().getBase().getDex().value();
+					c.setText(StringHelper.toString( modifier(adex) ));
 				});
 		dexObserver = new ObservableListener<>(dex, 
 				new AbilModStringify());

+ 7 - 7
src/org/leumasjaffe/charsheet/view/summary/ResistanceLine.java

@@ -11,7 +11,7 @@ import org.leumasjaffe.charsheet.model.AbilityScores;
 import org.leumasjaffe.charsheet.model.DDCharacter;
 import org.leumasjaffe.charsheet.model.observable.IntValue;
 import org.leumasjaffe.charsheet.observer.helper.AbilModStringify;
-import org.leumasjaffe.charsheet.view.StringHelper;
+import org.leumasjaffe.charsheet.util.StringHelper;
 import org.leumasjaffe.graphics.NumberTextField;
 import org.leumasjaffe.observer.IndirectObservableListener;
 import org.leumasjaffe.observer.ObservableListener;
@@ -36,9 +36,9 @@ public class ResistanceLine extends JPanel {
 	private static final long serialVersionUID = 1L;
 	Function<AbilityScores.Scores, IntValue> access;
 	
-	IndirectObservableListener<DDCharacter> totalObserver;
-	IndirectObservableListener<DDCharacter> baseObserver;
-	ObservableListener<IntValue> abilObserver;
+	IndirectObservableListener<JTextField, DDCharacter> totalObserver;
+	IndirectObservableListener<JTextField, DDCharacter> baseObserver;
+	ObservableListener<JTextField, IntValue> abilObserver;
 	
 	public ResistanceLine(final String name, Function<DDCharacter, Integer> save, 
 			Function<AbilityScores.Scores, IntValue> func) {
@@ -220,16 +220,16 @@ public class ResistanceLine extends JPanel {
 		panel.add(tempField, gbc_temp);
 		
 		totalObserver = new IndirectObservableListener<>(totalField,
-				(v) -> {
+				(c, v) -> {
 					final int base = save.apply(v);
 					final int abil = AbilityScores.modifier(access.apply(v.getAbilities().getBase()).value());
 					final int magic = 0;
 					final int misc = 0;
 					final int temp = 0;
-					return StringHelper.toString(base + abil + magic + misc + temp);
+					c.setText(StringHelper.toString(base + abil + magic + misc + temp));
 				});
 		baseObserver = new IndirectObservableListener<>(baseSaveField,
-				(v) -> StringHelper.toString(save.apply(v)));
+				(c, v) -> c.setText(StringHelper.toString(save.apply(v))));
 		abilObserver = new ObservableListener<>(abilityField,
 				new AbilModStringify());
 	}

+ 5 - 7
src/org/leumasjaffe/observer/IndirectObservableListener.java

@@ -1,9 +1,7 @@
 package org.leumasjaffe.observer;
 
 import java.util.Objects;
-import java.util.function.Function;
-
-import javax.swing.text.JTextComponent;
+import java.util.function.BiConsumer;
 
 import lombok.experimental.FieldDefaults;
 import lombok.experimental.NonFinal;
@@ -14,9 +12,9 @@ import lombok.RequiredArgsConstructor;
 @FieldDefaults(level=AccessLevel.PRIVATE, makeFinal=true)
 @Getter(value=AccessLevel.PACKAGE)
 @RequiredArgsConstructor
-public class IndirectObservableListener<T> {
-	JTextComponent text;
-	Function<? super T, String> stringify;
+public class IndirectObservableListener<C, T> {
+	C component;
+	BiConsumer<? super C, ? super T> update;
 
 	@NonFinal T model = null;
 	
@@ -32,6 +30,6 @@ public class IndirectObservableListener<T> {
 	}
 
 	private void updateComponent() {
-		text.setText( stringify.apply( model ) );
+		update.accept(component, model);
 	}
 }

+ 11 - 11
src/org/leumasjaffe/observer/ObservableController.java

@@ -1,8 +1,8 @@
 package org.leumasjaffe.observer;
 
 import java.util.Objects;
+import java.util.function.BiConsumer;
 import java.util.function.Consumer;
-import java.util.function.Function;
 
 import javax.swing.text.JTextComponent;
 
@@ -13,27 +13,27 @@ import lombok.experimental.FieldDefaults;
 import lombok.AccessLevel;
 
 @FieldDefaults(level=AccessLevel.PRIVATE, makeFinal=true)
-public class ObservableController<T extends Observable> extends ObservableListener<T> {
+public class ObservableController<S extends JTextComponent, T extends Observable> extends ObservableListener<S, T> {
 	Helper<T> func;
 
-	public ObservableController(final JTextComponent text, final Helper<T> func,
-			final Function<? super T, String> stringify) {
-		super(text, stringify);
+	public ObservableController(final S comp, final Helper<T> func,
+			final BiConsumer<? super S, ? super T> update) {
+		super(comp, update);
 		this.func = func;
-		AnyActionDocumentListener.skipEmpty(text, evt -> accept( ) );
+		AnyActionDocumentListener.skipEmpty(comp, evt -> accept( ) );
 	}
 	
-	public ObservableController(final JTextComponent text, final Helper<T> func,
-			final Function<? super T, String> stringify, final Consumer<T> onEmpty) {
-		super(text, stringify);
+	public ObservableController(final S comp, final Helper<T> func,
+			final BiConsumer<? super S, ? super T> update, final Consumer<T> onEmpty) {
+		super(comp, update);
 		this.func = func;
-		AnyActionDocumentListener.emptyOrText( text, 
+		AnyActionDocumentListener.emptyOrText( comp, 
 				e -> onEmpty.accept( impl.getModel() ), 
 				evt -> accept( ) );
 	}
 
 	private boolean update() {
-		return func.apply( impl.getText().getText( ), impl.getModel() );
+		return func.apply( impl.getComponent().getText( ), impl.getModel() );
 	}
 
 	private void accept() {

+ 5 - 7
src/org/leumasjaffe/observer/ObservableListener.java

@@ -1,18 +1,16 @@
 package org.leumasjaffe.observer;
 
-import java.util.function.Function;
-
-import javax.swing.text.JTextComponent;
+import java.util.function.BiConsumer;
 
 import lombok.AccessLevel;
 import lombok.experimental.FieldDefaults;
 
 @FieldDefaults(level=AccessLevel.PROTECTED, makeFinal=true)
-public class ObservableListener<T extends Observable> {
-	IndirectObservableListener<T> impl;
+public class ObservableListener<C, T extends Observable> {
+	IndirectObservableListener<C, T> impl;
 	
-	public ObservableListener(final JTextComponent text, final Function<? super T, String> stringify) {
-		impl = new IndirectObservableListener<>(text, stringify);
+	public ObservableListener(final C comp, final BiConsumer<? super C, ? super T> func) {
+		impl = new IndirectObservableListener<>(comp, func);
 	}
 	
 	public void setObserved( T obs ) {