|
@@ -10,6 +10,7 @@ import javax.swing.border.LineBorder;
|
|
|
import org.leumasjaffe.charsheet.entity.AbilityScores;
|
|
import org.leumasjaffe.charsheet.entity.AbilityScores;
|
|
|
import org.leumasjaffe.charsheet.entity.DDCharacter;
|
|
import org.leumasjaffe.charsheet.entity.DDCharacter;
|
|
|
import org.leumasjaffe.charsheet.entity.viewable.IntValue;
|
|
import org.leumasjaffe.charsheet.entity.viewable.IntValue;
|
|
|
|
|
+import org.leumasjaffe.charsheet.observer.IndirectObservableListener;
|
|
|
import org.leumasjaffe.charsheet.observer.ObservableListener;
|
|
import org.leumasjaffe.charsheet.observer.ObservableListener;
|
|
|
import org.leumasjaffe.charsheet.observer.helper.AbilModStringify;
|
|
import org.leumasjaffe.charsheet.observer.helper.AbilModStringify;
|
|
|
import org.leumasjaffe.charsheet.view.StringHelper;
|
|
import org.leumasjaffe.charsheet.view.StringHelper;
|
|
@@ -17,7 +18,6 @@ import org.leumasjaffe.graphics.NumberTextField;
|
|
|
|
|
|
|
|
import lombok.AccessLevel;
|
|
import lombok.AccessLevel;
|
|
|
import lombok.experimental.FieldDefaults;
|
|
import lombok.experimental.FieldDefaults;
|
|
|
-import lombok.experimental.NonFinal;
|
|
|
|
|
|
|
|
|
|
import java.awt.Font;
|
|
import java.awt.Font;
|
|
|
import javax.swing.SwingConstants;
|
|
import javax.swing.SwingConstants;
|
|
@@ -34,21 +34,14 @@ public class ResistanceLine extends JPanel {
|
|
|
*
|
|
*
|
|
|
*/
|
|
*/
|
|
|
private static final long serialVersionUID = 1L;
|
|
private static final long serialVersionUID = 1L;
|
|
|
- Function<DDCharacter, Integer> save;
|
|
|
|
|
Function<AbilityScores.Scores, IntValue> access;
|
|
Function<AbilityScores.Scores, IntValue> access;
|
|
|
- @NonFinal DDCharacter model;
|
|
|
|
|
|
|
|
|
|
- JTextField total;
|
|
|
|
|
- JTextField ability;
|
|
|
|
|
- NumberTextField temp;
|
|
|
|
|
- JFormattedTextField baseSave;
|
|
|
|
|
- JFormattedTextField magic;
|
|
|
|
|
- JFormattedTextField misc;
|
|
|
|
|
- private ObservableListener<IntValue> abilObserver;
|
|
|
|
|
|
|
+ IndirectObservableListener<DDCharacter> totalObserver;
|
|
|
|
|
+ IndirectObservableListener<DDCharacter> baseObserver;
|
|
|
|
|
+ ObservableListener<IntValue> abilObserver;
|
|
|
|
|
|
|
|
public ResistanceLine(final String name, Function<DDCharacter, Integer> save,
|
|
public ResistanceLine(final String name, Function<DDCharacter, Integer> save,
|
|
|
Function<AbilityScores.Scores, IntValue> func) {
|
|
Function<AbilityScores.Scores, IntValue> func) {
|
|
|
- this.save = save;
|
|
|
|
|
this.access = func;
|
|
this.access = func;
|
|
|
|
|
|
|
|
setMinimumSize(new Dimension(400, 25));
|
|
setMinimumSize(new Dimension(400, 25));
|
|
@@ -79,21 +72,21 @@ public class ResistanceLine extends JPanel {
|
|
|
gbc_label.gridy = 0;
|
|
gbc_label.gridy = 0;
|
|
|
add(label, gbc_label);
|
|
add(label, gbc_label);
|
|
|
|
|
|
|
|
- total = new JTextField();
|
|
|
|
|
- total.setToolTipText("Saving Throw");
|
|
|
|
|
- total.setPreferredSize(new Dimension(30, 20));
|
|
|
|
|
- total.setMinimumSize(new Dimension(30, 20));
|
|
|
|
|
- total.setMaximumSize(new Dimension(30, 20));
|
|
|
|
|
- total.setHorizontalAlignment(SwingConstants.CENTER);
|
|
|
|
|
- total.setEditable(false);
|
|
|
|
|
- total.setColumns(3);
|
|
|
|
|
- total.setBorder(new LineBorder(Color.BLACK));
|
|
|
|
|
|
|
+ JTextField totalField = new JTextField();
|
|
|
|
|
+ totalField.setToolTipText("Saving Throw");
|
|
|
|
|
+ totalField.setPreferredSize(new Dimension(30, 20));
|
|
|
|
|
+ totalField.setMinimumSize(new Dimension(30, 20));
|
|
|
|
|
+ totalField.setMaximumSize(new Dimension(30, 20));
|
|
|
|
|
+ totalField.setHorizontalAlignment(SwingConstants.CENTER);
|
|
|
|
|
+ totalField.setEditable(false);
|
|
|
|
|
+ totalField.setColumns(3);
|
|
|
|
|
+ totalField.setBorder(new LineBorder(Color.BLACK));
|
|
|
GridBagConstraints gbc_total = new GridBagConstraints();
|
|
GridBagConstraints gbc_total = new GridBagConstraints();
|
|
|
gbc_total.insets = new Insets(0, 0, 0, 5);
|
|
gbc_total.insets = new Insets(0, 0, 0, 5);
|
|
|
gbc_total.fill = GridBagConstraints.HORIZONTAL;
|
|
gbc_total.fill = GridBagConstraints.HORIZONTAL;
|
|
|
gbc_total.gridx = 1;
|
|
gbc_total.gridx = 1;
|
|
|
gbc_total.gridy = 0;
|
|
gbc_total.gridy = 0;
|
|
|
- add(total, gbc_total);
|
|
|
|
|
|
|
+ add(totalField, gbc_total);
|
|
|
|
|
|
|
|
JLabel label_1 = new JLabel("=");
|
|
JLabel label_1 = new JLabel("=");
|
|
|
GridBagConstraints gbc_label_1 = new GridBagConstraints();
|
|
GridBagConstraints gbc_label_1 = new GridBagConstraints();
|
|
@@ -103,21 +96,21 @@ public class ResistanceLine extends JPanel {
|
|
|
gbc_label_1.gridy = 0;
|
|
gbc_label_1.gridy = 0;
|
|
|
add(label_1, gbc_label_1);
|
|
add(label_1, gbc_label_1);
|
|
|
|
|
|
|
|
- baseSave = new NumberTextField();
|
|
|
|
|
- baseSave.setEditable(false);
|
|
|
|
|
- baseSave.setToolTipText("Base Save");
|
|
|
|
|
- baseSave.setPreferredSize(new Dimension(30, 20));
|
|
|
|
|
- baseSave.setMinimumSize(new Dimension(30, 20));
|
|
|
|
|
- baseSave.setMaximumSize(new Dimension(30, 20));
|
|
|
|
|
- baseSave.setHorizontalAlignment(SwingConstants.CENTER);
|
|
|
|
|
- baseSave.setColumns(3);
|
|
|
|
|
- baseSave.setBorder(new LineBorder(Color.BLACK));
|
|
|
|
|
|
|
+ JFormattedTextField baseSaveField = new NumberTextField();
|
|
|
|
|
+ baseSaveField.setEditable(false);
|
|
|
|
|
+ baseSaveField.setToolTipText("Base Save");
|
|
|
|
|
+ baseSaveField.setPreferredSize(new Dimension(30, 20));
|
|
|
|
|
+ baseSaveField.setMinimumSize(new Dimension(30, 20));
|
|
|
|
|
+ baseSaveField.setMaximumSize(new Dimension(30, 20));
|
|
|
|
|
+ baseSaveField.setHorizontalAlignment(SwingConstants.CENTER);
|
|
|
|
|
+ baseSaveField.setColumns(3);
|
|
|
|
|
+ baseSaveField.setBorder(new LineBorder(Color.BLACK));
|
|
|
GridBagConstraints gbc_baseSave = new GridBagConstraints();
|
|
GridBagConstraints gbc_baseSave = new GridBagConstraints();
|
|
|
gbc_baseSave.insets = new Insets(0, 0, 0, 5);
|
|
gbc_baseSave.insets = new Insets(0, 0, 0, 5);
|
|
|
gbc_baseSave.fill = GridBagConstraints.HORIZONTAL;
|
|
gbc_baseSave.fill = GridBagConstraints.HORIZONTAL;
|
|
|
gbc_baseSave.gridx = 3;
|
|
gbc_baseSave.gridx = 3;
|
|
|
gbc_baseSave.gridy = 0;
|
|
gbc_baseSave.gridy = 0;
|
|
|
- add(baseSave, gbc_baseSave);
|
|
|
|
|
|
|
+ add(baseSaveField, gbc_baseSave);
|
|
|
|
|
|
|
|
JLabel label_2 = new JLabel("+");
|
|
JLabel label_2 = new JLabel("+");
|
|
|
GridBagConstraints gbc_label_2 = new GridBagConstraints();
|
|
GridBagConstraints gbc_label_2 = new GridBagConstraints();
|
|
@@ -127,21 +120,21 @@ public class ResistanceLine extends JPanel {
|
|
|
gbc_label_2.gridy = 0;
|
|
gbc_label_2.gridy = 0;
|
|
|
add(label_2, gbc_label_2);
|
|
add(label_2, gbc_label_2);
|
|
|
|
|
|
|
|
- ability = new JTextField();
|
|
|
|
|
- ability.setToolTipText("Ability Modifier");
|
|
|
|
|
- ability.setPreferredSize(new Dimension(30, 20));
|
|
|
|
|
- ability.setMinimumSize(new Dimension(30, 20));
|
|
|
|
|
- ability.setMaximumSize(new Dimension(30, 20));
|
|
|
|
|
- ability.setHorizontalAlignment(SwingConstants.CENTER);
|
|
|
|
|
- ability.setEditable(false);
|
|
|
|
|
- ability.setColumns(3);
|
|
|
|
|
- ability.setBorder(new LineBorder(Color.BLACK));
|
|
|
|
|
|
|
+ JTextField abilityField = new JTextField();
|
|
|
|
|
+ abilityField.setToolTipText("Ability Modifier");
|
|
|
|
|
+ abilityField.setPreferredSize(new Dimension(30, 20));
|
|
|
|
|
+ abilityField.setMinimumSize(new Dimension(30, 20));
|
|
|
|
|
+ abilityField.setMaximumSize(new Dimension(30, 20));
|
|
|
|
|
+ abilityField.setHorizontalAlignment(SwingConstants.CENTER);
|
|
|
|
|
+ abilityField.setEditable(false);
|
|
|
|
|
+ abilityField.setColumns(3);
|
|
|
|
|
+ abilityField.setBorder(new LineBorder(Color.BLACK));
|
|
|
GridBagConstraints gbc_ability = new GridBagConstraints();
|
|
GridBagConstraints gbc_ability = new GridBagConstraints();
|
|
|
gbc_ability.insets = new Insets(0, 0, 0, 5);
|
|
gbc_ability.insets = new Insets(0, 0, 0, 5);
|
|
|
gbc_ability.fill = GridBagConstraints.HORIZONTAL;
|
|
gbc_ability.fill = GridBagConstraints.HORIZONTAL;
|
|
|
gbc_ability.gridx = 5;
|
|
gbc_ability.gridx = 5;
|
|
|
gbc_ability.gridy = 0;
|
|
gbc_ability.gridy = 0;
|
|
|
- add(ability, gbc_ability);
|
|
|
|
|
|
|
+ add(abilityField, gbc_ability);
|
|
|
|
|
|
|
|
JLabel label_3 = new JLabel("+");
|
|
JLabel label_3 = new JLabel("+");
|
|
|
GridBagConstraints gbc_label_3 = new GridBagConstraints();
|
|
GridBagConstraints gbc_label_3 = new GridBagConstraints();
|
|
@@ -151,20 +144,20 @@ public class ResistanceLine extends JPanel {
|
|
|
gbc_label_3.gridy = 0;
|
|
gbc_label_3.gridy = 0;
|
|
|
add(label_3, gbc_label_3);
|
|
add(label_3, gbc_label_3);
|
|
|
|
|
|
|
|
- magic = new NumberTextField();
|
|
|
|
|
- magic.setToolTipText("Magic Modifier");
|
|
|
|
|
- magic.setPreferredSize(new Dimension(30, 20));
|
|
|
|
|
- magic.setMinimumSize(new Dimension(30, 20));
|
|
|
|
|
- magic.setMaximumSize(new Dimension(30, 20));
|
|
|
|
|
- magic.setHorizontalAlignment(SwingConstants.CENTER);
|
|
|
|
|
- magic.setColumns(3);
|
|
|
|
|
- magic.setBorder(new LineBorder(Color.BLACK));
|
|
|
|
|
- GridBagConstraints gbc_magic_1 = new GridBagConstraints();
|
|
|
|
|
- gbc_magic_1.insets = new Insets(0, 0, 0, 5);
|
|
|
|
|
- gbc_magic_1.fill = GridBagConstraints.HORIZONTAL;
|
|
|
|
|
- gbc_magic_1.gridx = 7;
|
|
|
|
|
- gbc_magic_1.gridy = 0;
|
|
|
|
|
- add(magic, gbc_magic_1);
|
|
|
|
|
|
|
+ JFormattedTextField magicField = new NumberTextField();
|
|
|
|
|
+ magicField.setToolTipText("Magic Modifier");
|
|
|
|
|
+ magicField.setPreferredSize(new Dimension(30, 20));
|
|
|
|
|
+ magicField.setMinimumSize(new Dimension(30, 20));
|
|
|
|
|
+ magicField.setMaximumSize(new Dimension(30, 20));
|
|
|
|
|
+ magicField.setHorizontalAlignment(SwingConstants.CENTER);
|
|
|
|
|
+ magicField.setColumns(3);
|
|
|
|
|
+ magicField.setBorder(new LineBorder(Color.BLACK));
|
|
|
|
|
+ GridBagConstraints gbc_magic = new GridBagConstraints();
|
|
|
|
|
+ gbc_magic.insets = new Insets(0, 0, 0, 5);
|
|
|
|
|
+ gbc_magic.fill = GridBagConstraints.HORIZONTAL;
|
|
|
|
|
+ gbc_magic.gridx = 7;
|
|
|
|
|
+ gbc_magic.gridy = 0;
|
|
|
|
|
+ add(magicField, gbc_magic);
|
|
|
|
|
|
|
|
JLabel label_4 = new JLabel("+");
|
|
JLabel label_4 = new JLabel("+");
|
|
|
GridBagConstraints gbc_label_4 = new GridBagConstraints();
|
|
GridBagConstraints gbc_label_4 = new GridBagConstraints();
|
|
@@ -174,20 +167,20 @@ public class ResistanceLine extends JPanel {
|
|
|
gbc_label_4.gridy = 0;
|
|
gbc_label_4.gridy = 0;
|
|
|
add(label_4, gbc_label_4);
|
|
add(label_4, gbc_label_4);
|
|
|
|
|
|
|
|
- misc = new NumberTextField();
|
|
|
|
|
- misc.setToolTipText("Miscellaneous Modifier");
|
|
|
|
|
- misc.setPreferredSize(new Dimension(30, 20));
|
|
|
|
|
- misc.setMinimumSize(new Dimension(30, 20));
|
|
|
|
|
- misc.setMaximumSize(new Dimension(30, 20));
|
|
|
|
|
- misc.setHorizontalAlignment(SwingConstants.CENTER);
|
|
|
|
|
- misc.setColumns(3);
|
|
|
|
|
- misc.setBorder(new LineBorder(Color.BLACK));
|
|
|
|
|
- GridBagConstraints gbc_misc_1 = new GridBagConstraints();
|
|
|
|
|
- gbc_misc_1.insets = new Insets(0, 0, 0, 5);
|
|
|
|
|
- gbc_misc_1.fill = GridBagConstraints.HORIZONTAL;
|
|
|
|
|
- gbc_misc_1.gridx = 9;
|
|
|
|
|
- gbc_misc_1.gridy = 0;
|
|
|
|
|
- add(misc, gbc_misc_1);
|
|
|
|
|
|
|
+ JFormattedTextField miscField = new NumberTextField();
|
|
|
|
|
+ miscField.setToolTipText("Miscellaneous Modifier");
|
|
|
|
|
+ miscField.setPreferredSize(new Dimension(30, 20));
|
|
|
|
|
+ miscField.setMinimumSize(new Dimension(30, 20));
|
|
|
|
|
+ miscField.setMaximumSize(new Dimension(30, 20));
|
|
|
|
|
+ miscField.setHorizontalAlignment(SwingConstants.CENTER);
|
|
|
|
|
+ miscField.setColumns(3);
|
|
|
|
|
+ miscField.setBorder(new LineBorder(Color.BLACK));
|
|
|
|
|
+ GridBagConstraints gbc_misc = new GridBagConstraints();
|
|
|
|
|
+ gbc_misc.insets = new Insets(0, 0, 0, 5);
|
|
|
|
|
+ gbc_misc.fill = GridBagConstraints.HORIZONTAL;
|
|
|
|
|
+ gbc_misc.gridx = 9;
|
|
|
|
|
+ gbc_misc.gridy = 0;
|
|
|
|
|
+ add(miscField, gbc_misc);
|
|
|
|
|
|
|
|
JLabel label_5 = new JLabel("+");
|
|
JLabel label_5 = new JLabel("+");
|
|
|
GridBagConstraints gbc_label_5 = new GridBagConstraints();
|
|
GridBagConstraints gbc_label_5 = new GridBagConstraints();
|
|
@@ -212,40 +205,40 @@ public class ResistanceLine extends JPanel {
|
|
|
gbl_panel.rowWeights = new double[]{0.0, Double.MIN_VALUE};
|
|
gbl_panel.rowWeights = new double[]{0.0, Double.MIN_VALUE};
|
|
|
panel.setLayout(gbl_panel);
|
|
panel.setLayout(gbl_panel);
|
|
|
|
|
|
|
|
- temp = new NumberTextField();
|
|
|
|
|
- temp.setToolTipText("Temporary Modifier");
|
|
|
|
|
- temp.setPreferredSize(new Dimension(30, 20));
|
|
|
|
|
- temp.setMinimumSize(new Dimension(30, 20));
|
|
|
|
|
- temp.setMaximumSize(new Dimension(30, 20));
|
|
|
|
|
- temp.setHorizontalAlignment(SwingConstants.CENTER);
|
|
|
|
|
- temp.setColumns(3);
|
|
|
|
|
- temp.setBorder(new LineBorder(Color.BLACK));
|
|
|
|
|
|
|
+ NumberTextField tempField = new NumberTextField();
|
|
|
|
|
+ tempField.setToolTipText("Temporary Modifier");
|
|
|
|
|
+ tempField.setPreferredSize(new Dimension(30, 20));
|
|
|
|
|
+ tempField.setMinimumSize(new Dimension(30, 20));
|
|
|
|
|
+ tempField.setMaximumSize(new Dimension(30, 20));
|
|
|
|
|
+ tempField.setHorizontalAlignment(SwingConstants.CENTER);
|
|
|
|
|
+ tempField.setColumns(3);
|
|
|
|
|
+ tempField.setBorder(new LineBorder(Color.BLACK));
|
|
|
GridBagConstraints gbc_temp = new GridBagConstraints();
|
|
GridBagConstraints gbc_temp = new GridBagConstraints();
|
|
|
gbc_temp.insets = new Insets(3, 5, 0, 5);
|
|
gbc_temp.insets = new Insets(3, 5, 0, 5);
|
|
|
gbc_temp.gridx = 0;
|
|
gbc_temp.gridx = 0;
|
|
|
gbc_temp.gridy = 0;
|
|
gbc_temp.gridy = 0;
|
|
|
- panel.add(temp, gbc_temp);
|
|
|
|
|
|
|
+ panel.add(tempField, gbc_temp);
|
|
|
|
|
|
|
|
- abilObserver = new ObservableListener<>(ability,
|
|
|
|
|
|
|
+ totalObserver = new IndirectObservableListener<>(totalField,
|
|
|
|
|
+ (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);
|
|
|
|
|
+ });
|
|
|
|
|
+ baseObserver = new IndirectObservableListener<>(baseSaveField,
|
|
|
|
|
+ (v) -> StringHelper.toString(save.apply(v)));
|
|
|
|
|
+ abilObserver = new ObservableListener<>(abilityField,
|
|
|
new AbilModStringify());
|
|
new AbilModStringify());
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
public void setModel(DDCharacter model) {
|
|
public void setModel(DDCharacter model) {
|
|
|
- this.model = model;
|
|
|
|
|
- abilObserver.setObserved(access.apply(model.getAbilities().getBase()));
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- public void updateModel() {
|
|
|
|
|
- final int save = this.save.apply(this.model);
|
|
|
|
|
- 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;
|
|
|
|
|
- this.total.setText(StringHelper.toString(save + abil + magic + misc + temp));
|
|
|
|
|
- this.baseSave.setText(StringHelper.toString(save));
|
|
|
|
|
- this.magic.setText(StringHelper.toString(magic));
|
|
|
|
|
- this.misc.setText(StringHelper.toString(misc));
|
|
|
|
|
- this.temp.setText(StringHelper.toString(temp, 0));
|
|
|
|
|
|
|
+ final IntValue abil = access.apply(model.getAbilities().getBase());
|
|
|
|
|
+ totalObserver.setObserved(model, abil);
|
|
|
|
|
+ baseObserver.setObserved(model, abil);
|
|
|
|
|
+ abilObserver.setObserved(abil);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
}
|
|
}
|