浏览代码

Fixing typo 's/modifer/modifier/'
Adding an IndirectObservableListener<T>, which slackens the requirements of ObservableListener for cases where we want to 'observe' a container or similar.

Samuel Jaffe 9 年之前
父节点
当前提交
2bde0dafc3

+ 1 - 1
src/org/leumasjaffe/charsheet/entity/AbilityScores.java

@@ -45,7 +45,7 @@ public class AbilityScores {
 		this.temp = new Scores();
 	}
 	
-	public static int modifer(int val) {
+	public static int modifier(int val) {
 		return val / 2 - 5;
 	}
 }

+ 35 - 0
src/org/leumasjaffe/charsheet/observer/IndirectObservableListener.java

@@ -0,0 +1,35 @@
+package org.leumasjaffe.charsheet.observer;
+
+import java.util.Objects;
+import java.util.function.Function;
+
+import javax.swing.text.JTextComponent;
+
+import lombok.experimental.FieldDefaults;
+import lombok.experimental.NonFinal;
+import lombok.AccessLevel;
+import lombok.RequiredArgsConstructor;
+
+@FieldDefaults(level=AccessLevel.PROTECTED, makeFinal=true)
+@RequiredArgsConstructor
+public class IndirectObservableListener<T> {
+	JTextComponent text;
+	Function<? super T, String> stringify;
+
+	@NonFinal T model = null;
+	
+	public void setObserved( T obs, Observable... extra ) {
+		Objects.requireNonNull( obs );
+		if ( obs == model ) return;
+		ObserverDispatch.unsubscribeAll( this );
+		model = obs;
+		updateComponent( );
+		for ( int i = 0; i < extra.length; ++i ) {
+			ObserverDispatch.subscribe( extra[i], this, () -> updateComponent( ) );
+		}
+	}
+
+	private void updateComponent() {
+		text.setText( stringify.apply( model ) );
+	}
+}

+ 4 - 4
src/org/leumasjaffe/charsheet/observer/ObservableController.java

@@ -28,18 +28,18 @@ public class ObservableController<T extends Observable> extends ObservableListen
 		super(text, stringify);
 		this.func = func;
 		AnyActionDocumentListener.emptyOrText( text, 
-				e -> onEmpty.accept( observed ), 
+				e -> onEmpty.accept( model ), 
 				evt -> accept( ) );
 	}
 
 	private boolean update() {
-		return func.apply( text.getText( ), observed );
+		return func.apply( text.getText( ), model );
 	}
 
 	private void accept() {
-		Objects.requireNonNull( observed );
+		Objects.requireNonNull( model );
 		if ( update( ) ) {
-			ObserverDispatch.notifySubscribers( observed, this );
+			ObserverDispatch.notifySubscribers( model, this );
 		}
 	}
 }

+ 6 - 33
src/org/leumasjaffe/charsheet/observer/ObservableListener.java

@@ -1,42 +1,15 @@
 package org.leumasjaffe.charsheet.observer;
 
-import java.util.Objects;
 import java.util.function.Function;
 
 import javax.swing.text.JTextComponent;
 
-import lombok.experimental.FieldDefaults;
-import lombok.experimental.NonFinal;
-import lombok.AccessLevel;
-import lombok.RequiredArgsConstructor;
-
-@FieldDefaults(level=AccessLevel.PROTECTED, makeFinal=true)
-@RequiredArgsConstructor
-public class ObservableListener<T extends Observable> {
-	JTextComponent text;
-	Function<? super T, String> stringify;
-
-	@NonFinal T observed = null;
-
-	public void setObserved( T obs, Observable... extra ) {
-		Objects.requireNonNull( obs );
-		if ( obs == observed ) return;
-		ObserverDispatch.unsubscribeAll( this );
-		observed = obs;
-		updateComponent( );
-		ObserverDispatch.subscribe( observed, this, () -> updateComponent( ) );
-		for ( int i = 0; i < extra.length; ++i ) {
-			ObserverDispatch.subscribe( extra[i], this, () -> updateComponent( ) );
-		}
+public class ObservableListener<T extends Observable> extends IndirectObservableListener<T> {
+	public ObservableListener(final JTextComponent text, final Function<? super T, String> stringify) {
+		super(text, stringify);
 	}
-
-	private void updateComponent() {
-		text.setText( stringify.apply( observed ) );
-	}
-
-	public static class ToString implements Function<Object, String> {
-		public String apply(Object t) {
-			return t.toString();
-		}
+	
+	public void setObserved( T obs ) {
+		super.setObserved(obs, obs);
 	}
 }

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

@@ -10,7 +10,7 @@ public class AbilModStringify implements Function<IntValue, String> {
 	
 	@Override
 	public String apply(IntValue t) {
-		return StringHelper.toString(AbilityScores.modifer(t.value()));
+		return StringHelper.toString(AbilityScores.modifier(t.value()));
 	}
 
 }

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

@@ -1,6 +1,6 @@
 package org.leumasjaffe.charsheet.view.summary;
 
-import static org.leumasjaffe.charsheet.entity.AbilityScores.modifer;
+import static org.leumasjaffe.charsheet.entity.AbilityScores.modifier;
 
 import javax.swing.JFormattedTextField;
 import javax.swing.JPanel;
@@ -87,7 +87,7 @@ public class AbilityBox extends JPanel {
 				});
 		modListener = new ObservableListener<>(modifier,
 				(v) -> v.value() <= 0 ? "" : 
-					StringHelper.toString(modifer(v.value())));
+					StringHelper.toString(modifier(v.value())));
 	}
 
 	public void setModel(IntValue scores) {

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

@@ -242,7 +242,7 @@ public class AttackLine extends JPanel {
 	
 	public void updateModel() {
 		final int bab = this.model.getBaseAttack();
-		final int str = AbilityScores.modifer(this.model.getAbilities().getBase().getStr().value());
+		final int str = AbilityScores.modifier(this.model.getAbilities().getBase().getStr().value());
 		final int size = this.model.getSize().value().modifier;
 		final int misc = 0;
 		this.grappleTtl.setText(StringHelper.toString(bab + str + size + misc));

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

@@ -5,21 +5,20 @@ import java.awt.GridBagLayout;
 import javax.swing.JLabel;
 import java.awt.GridBagConstraints;
 
-import static org.leumasjaffe.charsheet.entity.AbilityScores.modifer;
+import static org.leumasjaffe.charsheet.entity.AbilityScores.modifier;
 
 import java.awt.Color;
 import javax.swing.border.LineBorder;
 
-import org.leumasjaffe.charsheet.entity.AbilityScores;
 import org.leumasjaffe.charsheet.entity.DDCharacter;
 import org.leumasjaffe.charsheet.entity.viewable.IntValue;
+import org.leumasjaffe.charsheet.observer.IndirectObservableListener;
 import org.leumasjaffe.charsheet.observer.ObservableListener;
 import org.leumasjaffe.charsheet.observer.helper.AbilModStringify;
 import org.leumasjaffe.charsheet.view.StringHelper;
 
 import lombok.AccessLevel;
 import lombok.experimental.FieldDefaults;
-import lombok.experimental.NonFinal;
 
 import java.awt.Font;
 import javax.swing.SwingConstants;
@@ -33,9 +32,7 @@ public class InitiativeLine extends JPanel {
 	 * 
 	 */
 	private static final long serialVersionUID = 1L;
-	JTextField misc;
-	@NonFinal AbilityScores model;
-	ObservableListener<IntValue> ttlObserver;
+	IndirectObservableListener<DDCharacter> ttlObserver;
 	ObservableListener<IntValue> dexObserver;
 
 	public InitiativeLine() {
@@ -113,7 +110,7 @@ public class InitiativeLine extends JPanel {
 		gbc_label_1.gridy = 0;
 		add(label_1, gbc_label_1);
 		
-		misc = new JTextField();
+		JTextField misc = new JTextField();
 		misc.setToolTipText("Miscellaneous Modifier");
 		misc.setPreferredSize(new Dimension(30, 20));
 		misc.setMinimumSize(new Dimension(30, 20));
@@ -128,15 +125,19 @@ public class InitiativeLine extends JPanel {
 		gbc_misc.gridy = 0;
 		add(misc, gbc_misc);
 		
-		ttlObserver = new ObservableListener<>(total, 
-				new AbilModStringify());
+		ttlObserver = new IndirectObservableListener<>(total, 
+				(c) -> {
+					final int adex = c.getAbilities().getBase().getDex().value();
+					return StringHelper.toString( modifier(adex) );
+				});
 		dexObserver = new ObservableListener<>(dex, 
 				new AbilModStringify());
 	}
 
 	public void setModel(DDCharacter model) {
-		ttlObserver.setObserved(model.getAbilities().getBase().getDex());
-		dexObserver.setObserved(model.getAbilities().getBase().getDex());
+		final IntValue dex = model.getAbilities().getBase().getDex();
+		ttlObserver.setObserved(model, dex);
+		dexObserver.setObserved(dex);
 	}
 
 }

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

@@ -237,7 +237,7 @@ public class ResistanceLine extends JPanel {
 	
 	public void updateModel() {
 		final int save = this.save.apply(this.model);
-		final int abil = AbilityScores.modifer(this.access.apply(this.model.getAbilities().getBase()).value());
+		final int abil = AbilityScores.modifier(this.access.apply(this.model.getAbilities().getBase()).value());
 		final int magic = 0;
 		final int misc = 0;
 		final int temp = 0;