| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251 |
- package org.leumasjaffe.charsheet.view.summary;
- import javax.swing.JPanel;
- import java.awt.GridBagLayout;
- import javax.swing.JLabel;
- import java.awt.GridBagConstraints;
- import java.awt.Color;
- import javax.swing.border.LineBorder;
- import org.leumasjaffe.charsheet.model.Ability;
- import org.leumasjaffe.charsheet.model.DDCharacter;
- import org.leumasjaffe.charsheet.observer.helper.AbilModStringify;
- import org.leumasjaffe.format.StringHelper;
- import org.leumasjaffe.graphics.NumberTextField;
- import org.leumasjaffe.observer.IndirectObservableListener;
- import org.leumasjaffe.observer.ObservableListener;
- import org.leumasjaffe.observer.ObserverDispatch;
- import lombok.AccessLevel;
- import lombok.experimental.FieldDefaults;
- import java.awt.Font;
- import javax.swing.SwingConstants;
- import java.awt.Dimension;
- import javax.swing.JTextField;
- import java.awt.Insets;
- import java.util.function.Function;
- import javax.swing.JFormattedTextField;
- @FieldDefaults(level=AccessLevel.PRIVATE, makeFinal=true)
- public class ResistanceLine extends JPanel {
- /**
- *
- */
- private static final long serialVersionUID = 1L;
- Function<Ability, Ability.Scores> access;
-
- IndirectObservableListener<JTextField, DDCharacter> totalObserver;
- IndirectObservableListener<JTextField, DDCharacter> baseObserver;
- ObservableListener<JTextField, Ability.Scores> abilObserver;
-
- public ResistanceLine(final String name, Function<DDCharacter, Integer> save,
- Function<Ability, Ability.Scores> func) {
- this.access = func;
-
- setMinimumSize(new Dimension(400, 25));
- setMaximumSize(new Dimension(400, 25));
- setPreferredSize(new Dimension(400, 25));
- setOpaque(false);
- GridBagLayout gridBagLayout = new GridBagLayout();
- gridBagLayout.columnWidths = new int[]{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
- gridBagLayout.rowHeights = new int[]{0, 0};
- gridBagLayout.columnWeights = new double[]{0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, Double.MIN_VALUE};
- gridBagLayout.rowWeights = new double[]{0.0, Double.MIN_VALUE};
- setLayout(gridBagLayout);
-
- JLabel label = new JLabel(name.toUpperCase());
- label.setPreferredSize(new Dimension(120, 25));
- label.setOpaque(true);
- label.setMinimumSize(new Dimension(120, 25));
- label.setMaximumSize(new Dimension(120, 25));
- label.setHorizontalAlignment(SwingConstants.CENTER);
- label.setForeground(Color.WHITE);
- label.setFont(new Font("Tahoma", Font.BOLD, 18));
- label.setBorder(new LineBorder(Color.WHITE));
- label.setBackground(Color.BLACK);
- GridBagConstraints gbc_label = new GridBagConstraints();
- gbc_label.fill = GridBagConstraints.HORIZONTAL;
- gbc_label.insets = new Insets(0, 0, 0, 3);
- gbc_label.gridx = 0;
- gbc_label.gridy = 0;
- add(label, gbc_label);
-
- 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();
- gbc_total.insets = new Insets(0, 0, 0, 3);
- gbc_total.fill = GridBagConstraints.HORIZONTAL;
- gbc_total.gridx = 1;
- gbc_total.gridy = 0;
- add(totalField, gbc_total);
-
- JLabel label_1 = new JLabel("=");
- GridBagConstraints gbc_label_1 = new GridBagConstraints();
- gbc_label_1.anchor = GridBagConstraints.EAST;
- gbc_label_1.insets = new Insets(0, 0, 0, 3);
- gbc_label_1.gridx = 2;
- gbc_label_1.gridy = 0;
- add(label_1, gbc_label_1);
-
- 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();
- gbc_baseSave.insets = new Insets(0, 0, 0, 3);
- gbc_baseSave.fill = GridBagConstraints.HORIZONTAL;
- gbc_baseSave.gridx = 3;
- gbc_baseSave.gridy = 0;
- add(baseSaveField, gbc_baseSave);
-
- JLabel label_2 = new JLabel("+");
- GridBagConstraints gbc_label_2 = new GridBagConstraints();
- gbc_label_2.insets = new Insets(0, 0, 0, 3);
- gbc_label_2.anchor = GridBagConstraints.EAST;
- gbc_label_2.gridx = 4;
- gbc_label_2.gridy = 0;
- add(label_2, gbc_label_2);
-
- 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();
- gbc_ability.insets = new Insets(0, 0, 0, 3);
- gbc_ability.fill = GridBagConstraints.HORIZONTAL;
- gbc_ability.gridx = 5;
- gbc_ability.gridy = 0;
- add(abilityField, gbc_ability);
-
- JLabel label_3 = new JLabel("+");
- GridBagConstraints gbc_label_3 = new GridBagConstraints();
- gbc_label_3.anchor = GridBagConstraints.EAST;
- gbc_label_3.insets = new Insets(0, 0, 0, 3);
- gbc_label_3.gridx = 6;
- gbc_label_3.gridy = 0;
- add(label_3, gbc_label_3);
-
- 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, 3);
- gbc_magic.fill = GridBagConstraints.HORIZONTAL;
- gbc_magic.gridx = 7;
- gbc_magic.gridy = 0;
- add(magicField, gbc_magic);
-
- JLabel label_4 = new JLabel("+");
- GridBagConstraints gbc_label_4 = new GridBagConstraints();
- gbc_label_4.anchor = GridBagConstraints.EAST;
- gbc_label_4.insets = new Insets(0, 0, 0, 3);
- gbc_label_4.gridx = 8;
- gbc_label_4.gridy = 0;
- add(label_4, gbc_label_4);
-
- 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, 3);
- gbc_misc.fill = GridBagConstraints.HORIZONTAL;
- gbc_misc.gridx = 9;
- gbc_misc.gridy = 0;
- add(miscField, gbc_misc);
-
- JLabel label_5 = new JLabel("+");
- GridBagConstraints gbc_label_5 = new GridBagConstraints();
- gbc_label_5.insets = new Insets(0, 0, 0, 3);
- gbc_label_5.anchor = GridBagConstraints.EAST;
- gbc_label_5.gridx = 10;
- gbc_label_5.gridy = 0;
- add(label_5, gbc_label_5);
-
- JPanel panel = new JPanel();
- panel.setBackground(Color.LIGHT_GRAY);
- panel.setPreferredSize(new Dimension(45, 25));
- GridBagConstraints gbc_panel = new GridBagConstraints();
- gbc_panel.fill = GridBagConstraints.BOTH;
- gbc_panel.gridx = 11;
- gbc_panel.gridy = 0;
- add(panel, gbc_panel);
- GridBagLayout gbl_panel = new GridBagLayout();
- gbl_panel.columnWidths = new int[]{0, 0};
- gbl_panel.rowHeights = new int[]{0, 0};
- gbl_panel.columnWeights = new double[]{0.0, Double.MIN_VALUE};
- gbl_panel.rowWeights = new double[]{0.0, Double.MIN_VALUE};
- panel.setLayout(gbl_panel);
-
- 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();
- gbc_temp.insets = new Insets(3, 3, 0, 3);
- gbc_temp.gridx = 0;
- gbc_temp.gridy = 0;
- panel.add(tempField, gbc_temp);
-
- totalObserver = new IndirectObservableListener<>(totalField,
- (c, v) -> {
- final int base = save.apply(v);
- final int abil = access.apply(v.getAbilities()).modifier();
- final int magic = 0;
- final int misc = 0;
- final int temp = 0;
- c.setText(StringHelper.toString(base + abil + magic + misc + temp));
- });
- baseObserver = new IndirectObservableListener<>(baseSaveField,
- (c, v) -> c.setText(StringHelper.toString(save.apply(v))));
- abilObserver = new ObservableListener<>(abilityField,
- new AbilModStringify());
- }
-
- public void setModel(DDCharacter model) {
- final Ability.Scores abil = access.apply(model.getAbilities());
- totalObserver.setObserved(model, model, abil);
- baseObserver.setObserved(model, model, abil);
- abilObserver.setObserved(abil);
- }
- @Override
- public void removeNotify() {
- super.removeNotify();
- ObserverDispatch.unsubscribeAll(totalObserver);
- ObserverDispatch.unsubscribeAll(baseObserver);
- ObserverDispatch.unsubscribeAll(abilObserver);
- }
- }
|