AbilityBox.java 3.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. package org.leumasjaffe.charsheet.view.summary;
  2. import static org.leumasjaffe.charsheet.entity.AbilityScores.modifer;
  3. import javax.swing.JFormattedTextField;
  4. import javax.swing.JPanel;
  5. import javax.swing.JTextField;
  6. import java.awt.Dimension;
  7. import java.awt.Color;
  8. import java.awt.GridBagLayout;
  9. import java.awt.GridBagConstraints;
  10. import java.awt.Insets;
  11. import javax.swing.border.LineBorder;
  12. import org.leumasjaffe.charsheet.entity.viewable.IntValue;
  13. import org.leumasjaffe.charsheet.observer.ObservableController;
  14. import org.leumasjaffe.charsheet.observer.ObservableListener;
  15. import org.leumasjaffe.charsheet.observer.helper.IntValueHelper;
  16. import org.leumasjaffe.charsheet.observer.helper.IntValueStringify;
  17. import org.leumasjaffe.charsheet.view.StringHelper;
  18. import org.leumasjaffe.graphics.NumberTextField;
  19. import lombok.AccessLevel;
  20. import lombok.experimental.FieldDefaults;
  21. import javax.swing.SwingConstants;
  22. @FieldDefaults(level=AccessLevel.PRIVATE, makeFinal=true)
  23. public class AbilityBox extends JPanel {
  24. /**
  25. *
  26. */
  27. private static final long serialVersionUID = 1L;
  28. ObservableListener<IntValue> valueListener;
  29. ObservableListener<IntValue> modListener;
  30. public AbilityBox(final String name, final String heading) {
  31. setOpaque(false);
  32. setMaximumSize(new Dimension(80, 26));
  33. setMinimumSize(new Dimension(80, 26));
  34. setPreferredSize(new Dimension(80, 26));
  35. GridBagLayout gridBagLayout = new GridBagLayout();
  36. gridBagLayout.columnWidths = new int[]{0, 0, 0};
  37. gridBagLayout.rowHeights = new int[]{25, 0};
  38. gridBagLayout.columnWeights = new double[]{1.0, 1.0, Double.MIN_VALUE};
  39. gridBagLayout.rowWeights = new double[]{0.0, Double.MIN_VALUE};
  40. setLayout(gridBagLayout);
  41. JFormattedTextField value = new NumberTextField();
  42. value.setToolTipText(heading + " Score (" + name + ")");
  43. value.setHorizontalAlignment(SwingConstants.CENTER);
  44. value.setMinimumSize(new Dimension(30, 20));
  45. value.setMaximumSize(new Dimension(30, 20));
  46. value.setPreferredSize(new Dimension(30, 20));
  47. value.setBorder(new LineBorder(Color.BLACK));
  48. GridBagConstraints gbc_value = new GridBagConstraints();
  49. gbc_value.insets = new Insets(0, 5, 0, 5);
  50. gbc_value.fill = GridBagConstraints.HORIZONTAL;
  51. gbc_value.gridx = 0;
  52. gbc_value.gridy = 0;
  53. add(value, gbc_value);
  54. value.setColumns(3);
  55. JTextField modifier = new JTextField();
  56. modifier.setToolTipText(heading + " Modifier (" + name + ")");
  57. modifier.setHorizontalAlignment(SwingConstants.CENTER);
  58. modifier.setEditable(false);
  59. modifier.setMinimumSize(new Dimension(30, 20));
  60. modifier.setMaximumSize(new Dimension(30, 20));
  61. modifier.setPreferredSize(new Dimension(30, 20));
  62. modifier.setBorder(new LineBorder(Color.BLACK));
  63. GridBagConstraints gbc_modifier = new GridBagConstraints();
  64. gbc_modifier.insets = new Insets(0, 0, 0, 5);
  65. gbc_modifier.fill = GridBagConstraints.HORIZONTAL;
  66. gbc_modifier.gridx = 1;
  67. gbc_modifier.gridy = 0;
  68. add(modifier, gbc_modifier);
  69. modifier.setColumns(3);
  70. valueListener = new ObservableController<>(value,
  71. new IntValueHelper(), IntValueStringify.withDefault(-1),
  72. (v) -> {
  73. v.value(-1);
  74. modifier.setText("");
  75. });
  76. modListener = new ObservableListener<>(modifier,
  77. (v) -> v.value() <= 0 ? "" :
  78. StringHelper.toString(modifer(v.value())));
  79. }
  80. public void setModel(IntValue scores) {
  81. valueListener.setObserved(scores);
  82. modListener.setObserved(scores);
  83. }
  84. }