| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163 |
- 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.config.Constants;
- 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.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;
- @FieldDefaults(level=AccessLevel.PRIVATE, makeFinal=true)
- public class InitiativeLine extends JPanel {
- /**
- *
- */
- private static final long serialVersionUID = 1L;
- IndirectObservableListener<JTextField, DDCharacter> ttlObserver;
- ObservableListener<JTextField, Ability.Scores> dexObserver;
- ObservableListener<JTextField, DDCharacter> tempObserver;
- public InitiativeLine() {
- setOpaque(false);
- GridBagLayout gridBagLayout = new GridBagLayout();
- gridBagLayout.columnWidths = new int[]{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, Double.MIN_VALUE};
- gridBagLayout.rowWeights = new double[]{0.0, Double.MIN_VALUE};
- setLayout(gridBagLayout);
-
- JLabel lblInitiative = new JLabel("INITIATIVE");
- lblInitiative.setToolTipText("");
- lblInitiative.setPreferredSize(new Dimension(120, 25));
- lblInitiative.setOpaque(true);
- lblInitiative.setMinimumSize(new Dimension(50, 25));
- lblInitiative.setMaximumSize(new Dimension(50, 25));
- lblInitiative.setHorizontalAlignment(SwingConstants.CENTER);
- lblInitiative.setForeground(Color.WHITE);
- lblInitiative.setFont(new Font("Tahoma", Font.BOLD, 18));
- lblInitiative.setBorder(new LineBorder(Color.WHITE));
- lblInitiative.setBackground(Color.BLACK);
- GridBagConstraints gbc_lblInitiative = new GridBagConstraints();
- gbc_lblInitiative.insets = new Insets(0, 0, 0, 5);
- gbc_lblInitiative.anchor = GridBagConstraints.EAST;
- gbc_lblInitiative.gridx = 0;
- gbc_lblInitiative.gridy = 0;
- add(lblInitiative, gbc_lblInitiative);
-
- JTextField total = new JTextField();
- total.setToolTipText("Total Initiative");
- 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));
- GridBagConstraints gbc_total = new GridBagConstraints();
- gbc_total.insets = new Insets(0, 0, 0, 5);
- gbc_total.fill = GridBagConstraints.HORIZONTAL;
- gbc_total.gridx = 1;
- gbc_total.gridy = 0;
- add(total, gbc_total);
-
- JLabel label = new JLabel("=");
- GridBagConstraints gbc_label = new GridBagConstraints();
- gbc_label.insets = new Insets(0, 0, 0, 5);
- gbc_label.anchor = GridBagConstraints.EAST;
- gbc_label.gridx = 2;
- gbc_label.gridy = 0;
- add(label, gbc_label);
-
- JTextField dex = new JTextField();
- dex.setToolTipText("Dexterity Modifier");
- dex.setPreferredSize(new Dimension(30, 20));
- dex.setMinimumSize(new Dimension(30, 20));
- dex.setMaximumSize(new Dimension(30, 20));
- dex.setHorizontalAlignment(SwingConstants.CENTER);
- dex.setEditable(false);
- dex.setColumns(3);
- dex.setBorder(new LineBorder(Color.BLACK));
- GridBagConstraints gbc_dex = new GridBagConstraints();
- gbc_dex.insets = new Insets(0, 0, 0, 5);
- gbc_dex.fill = GridBagConstraints.HORIZONTAL;
- gbc_dex.gridx = 3;
- gbc_dex.gridy = 0;
- add(dex, gbc_dex);
-
- JLabel label_1 = new JLabel("+");
- GridBagConstraints gbc_label_1 = new GridBagConstraints();
- gbc_label_1.insets = new Insets(0, 0, 0, 5);
- gbc_label_1.anchor = GridBagConstraints.EAST;
- gbc_label_1.gridx = 4;
- gbc_label_1.gridy = 0;
- add(label_1, gbc_label_1);
-
- JTextField misc = new JTextField();
- 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.setEditable(false);
- misc.setColumns(3);
- misc.setBorder(new LineBorder(Color.BLACK));
- GridBagConstraints gbc_misc = new GridBagConstraints();
- gbc_misc.fill = GridBagConstraints.HORIZONTAL;
- gbc_misc.gridx = 5;
- gbc_misc.gridy = 0;
- add(misc, gbc_misc);
-
- ttlObserver = new IndirectObservableListener<>(total,
- (c, v) -> {
- final int adex = v.getAbilities().getDex().modifier();
- final int miscValue = getInitiativeBonuses(v);
- c.setText(StringHelper.toString( adex + miscValue ));
- });
- dexObserver = new ObservableListener<>(dex,
- new AbilModStringify());
- tempObserver = new ObservableListener<>(misc, (c, v) -> {
- final int miscValue = getInitiativeBonuses(v);
- c.setText(StringHelper.toString(miscValue));
- });
- }
- private int getInitiativeBonuses(DDCharacter v) {
- // FIXME
- return v.getFeatureBonuses(Constants.INITIATIVE).stream()
- .mapToInt(f -> (Integer) f.value()).sum();
- }
- public void setModel(DDCharacter model) {
- final Ability.Scores dex = model.getAbilities().getDex();
- ttlObserver.setObserved(model, model, dex);
- dexObserver.setObserved(dex);
- tempObserver.setObserved(model);
- }
- @Override
- public void removeNotify() {
- super.removeNotify();
- ObserverDispatch.unsubscribeAll(ttlObserver);
- ObserverDispatch.unsubscribeAll(dexObserver);
- ObserverDispatch.unsubscribeAll(tempObserver);
- }
- }
|