SkillLine.java 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199
  1. package org.leumasjaffe.charsheet.view.skills;
  2. import javax.swing.JPanel;
  3. import org.leumasjaffe.charsheet.model.Ability;
  4. import org.leumasjaffe.charsheet.model.DDCharacter;
  5. import org.leumasjaffe.charsheet.model.observable.IntValue;
  6. import org.leumasjaffe.charsheet.model.skill.DDSkill;
  7. import org.leumasjaffe.charsheet.util.AbilityHelper;
  8. import org.leumasjaffe.format.StringHelper;
  9. import org.leumasjaffe.observer.IndirectObservableListener;
  10. import org.leumasjaffe.observer.ObservableListener;
  11. import org.leumasjaffe.observer.ObserverDispatch;
  12. import lombok.AccessLevel;
  13. import lombok.experimental.FieldDefaults;
  14. import java.awt.GridBagLayout;
  15. import javax.swing.JCheckBox;
  16. import java.awt.GridBagConstraints;
  17. import javax.swing.JLabel;
  18. import java.awt.Insets;
  19. import java.awt.Dimension;
  20. import javax.swing.JTextField;
  21. import java.awt.Color;
  22. import javax.swing.border.MatteBorder;
  23. import javax.swing.SwingConstants;
  24. @FieldDefaults(level=AccessLevel.PRIVATE, makeFinal=true)
  25. public class SkillLine extends JPanel {
  26. /**
  27. *
  28. */
  29. private static final long serialVersionUID = 1L;
  30. ObservableListener<JTextField, Ability.Scores> modifierListener;
  31. ObservableListener<JTextField, IntValue> skillListener;
  32. IndirectObservableListener<JTextField, DDCharacter> totalListener;
  33. public SkillLine(final DDCharacter chara, final DDSkill skill) {
  34. setBorder(new MatteBorder(0, 0, 1, 0, (Color) new Color(0, 0, 0)));
  35. setPreferredSize(new Dimension(550, 22));
  36. GridBagLayout gridBagLayout = new GridBagLayout();
  37. gridBagLayout.columnWidths = new int[]{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
  38. gridBagLayout.rowHeights = new int[]{0, 0};
  39. gridBagLayout.columnWeights = new double[]{0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, Double.MIN_VALUE};
  40. gridBagLayout.rowWeights = new double[]{0.0, Double.MIN_VALUE};
  41. setLayout(gridBagLayout);
  42. JCheckBox checkBoxIsClassSkill = new JCheckBox("");
  43. checkBoxIsClassSkill.setToolTipText("Class Skill?");
  44. checkBoxIsClassSkill.setSelected(chara.isClassSkill(skill.getName()));
  45. checkBoxIsClassSkill.setEnabled(false);
  46. GridBagConstraints gbc_checkBoxIsClassSkill = new GridBagConstraints();
  47. gbc_checkBoxIsClassSkill.insets = new Insets(1, 0, 0, 0);
  48. gbc_checkBoxIsClassSkill.gridx = 0;
  49. gbc_checkBoxIsClassSkill.gridy = 0;
  50. add(checkBoxIsClassSkill, gbc_checkBoxIsClassSkill);
  51. JLabel lblName = new JLabel(skill.getName());
  52. lblName.setMaximumSize(new Dimension(150, 14));
  53. lblName.setMinimumSize(new Dimension(150, 14));
  54. lblName.setPreferredSize(new Dimension(150, 14));
  55. GridBagConstraints gbc_lblName = new GridBagConstraints();
  56. gbc_lblName.fill = GridBagConstraints.HORIZONTAL;
  57. gbc_lblName.insets = new Insets(1, 0, 0, 0);
  58. gbc_lblName.gridx = 1;
  59. gbc_lblName.gridy = 0;
  60. add(lblName, gbc_lblName);
  61. JLabel lblAbil = new JLabel(skill.getAbility());
  62. lblAbil.setMaximumSize(new Dimension(30, 14));
  63. lblAbil.setMinimumSize(new Dimension(30, 14));
  64. lblAbil.setPreferredSize(new Dimension(30, 14));
  65. GridBagConstraints gbc_lblAbil = new GridBagConstraints();
  66. gbc_lblAbil.insets = new Insets(1, 0, 0, 0);
  67. gbc_lblAbil.anchor = GridBagConstraints.EAST;
  68. gbc_lblAbil.gridx = 2;
  69. gbc_lblAbil.gridy = 0;
  70. add(lblAbil, gbc_lblAbil);
  71. JTextField total = new JTextField();
  72. total.setToolTipText("Skill Modifier");
  73. total.setHorizontalAlignment(SwingConstants.CENTER);
  74. total.setEditable(false);
  75. total.setMinimumSize(new Dimension(30, 20));
  76. total.setMaximumSize(new Dimension(30, 20));
  77. total.setPreferredSize(new Dimension(30, 20));
  78. GridBagConstraints gbc_total = new GridBagConstraints();
  79. gbc_total.insets = new Insets(1, 0, 0, 0);
  80. gbc_total.fill = GridBagConstraints.HORIZONTAL;
  81. gbc_total.gridx = 3;
  82. gbc_total.gridy = 0;
  83. add(total, gbc_total);
  84. total.setColumns(10);
  85. JLabel label = new JLabel("=");
  86. GridBagConstraints gbc_label = new GridBagConstraints();
  87. gbc_label.anchor = GridBagConstraints.EAST;
  88. gbc_label.insets = new Insets(1, 0, 0, 1);
  89. gbc_label.gridx = 4;
  90. gbc_label.gridy = 0;
  91. add(label, gbc_label);
  92. JTextField modifier = new JTextField();
  93. modifier.setToolTipText("Ability Modifier");
  94. modifier.setHorizontalAlignment(SwingConstants.CENTER);
  95. modifier.setEditable(false);
  96. modifier.setMinimumSize(new Dimension(30, 20));
  97. modifier.setMaximumSize(new Dimension(30, 20));
  98. modifier.setPreferredSize(new Dimension(30, 20));
  99. GridBagConstraints gbc_modifier = new GridBagConstraints();
  100. gbc_modifier.insets = new Insets(1, 0, 0, 0);
  101. gbc_modifier.fill = GridBagConstraints.HORIZONTAL;
  102. gbc_modifier.gridx = 5;
  103. gbc_modifier.gridy = 0;
  104. add(modifier, gbc_modifier);
  105. modifier.setColumns(10);
  106. JLabel label_1 = new JLabel("+");
  107. GridBagConstraints gbc_label_1 = new GridBagConstraints();
  108. gbc_label_1.anchor = GridBagConstraints.EAST;
  109. gbc_label_1.insets = new Insets(1, 0, 0, 1);
  110. gbc_label_1.gridx = 6;
  111. gbc_label_1.gridy = 0;
  112. add(label_1, gbc_label_1);
  113. JTextField ranks = new JTextField(StringHelper.toString(skill.getRanks()));
  114. ranks.setToolTipText("Ranks");
  115. ranks.setHorizontalAlignment(SwingConstants.CENTER);
  116. ranks.setEditable(false);
  117. ranks.setMinimumSize(new Dimension(30, 20));
  118. ranks.setMaximumSize(new Dimension(30, 20));
  119. ranks.setPreferredSize(new Dimension(30, 20));
  120. GridBagConstraints gbc_ranks = new GridBagConstraints();
  121. gbc_ranks.insets = new Insets(1, 0, 0, 0);
  122. gbc_ranks.fill = GridBagConstraints.HORIZONTAL;
  123. gbc_ranks.gridx = 7;
  124. gbc_ranks.gridy = 0;
  125. add(ranks, gbc_ranks);
  126. ranks.setColumns(10);
  127. JLabel label_2 = new JLabel("+");
  128. GridBagConstraints gbc_label_2 = new GridBagConstraints();
  129. gbc_label_2.insets = new Insets(1, 0, 0, 1);
  130. gbc_label_2.anchor = GridBagConstraints.EAST;
  131. gbc_label_2.gridx = 8;
  132. gbc_label_2.gridy = 0;
  133. add(label_2, gbc_label_2);
  134. JTextField misc = new JTextField();
  135. misc.setToolTipText("Miscellaneous Modifier");
  136. misc.setHorizontalAlignment(SwingConstants.CENTER);
  137. misc.setMinimumSize(new Dimension(30, 20));
  138. misc.setMaximumSize(new Dimension(30, 20));
  139. misc.setPreferredSize(new Dimension(30, 20));
  140. GridBagConstraints gbc_misc = new GridBagConstraints();
  141. gbc_misc.insets = new Insets(1, 0, 0, 0);
  142. gbc_misc.fill = GridBagConstraints.HORIZONTAL;
  143. gbc_misc.gridx = 9;
  144. gbc_misc.gridy = 0;
  145. add(misc, gbc_misc);
  146. misc.setColumns(10);
  147. if ( skill.getAbility().isEmpty() ) {
  148. totalListener = new IndirectObservableListener<>(total,
  149. (c, v) -> {
  150. c.setText(StringHelper.toString(skill.getRanks()));
  151. });
  152. modifierListener = null;
  153. totalListener.setObserved(chara, skill.getRanks());
  154. } else {
  155. totalListener = new IndirectObservableListener<>(total,
  156. (c, v) -> {
  157. final float skillRanks = skill.getRanks().value();
  158. final int mod = AbilityHelper.get(chara, skill).modifier();
  159. c.setText(StringHelper.toString(skillRanks + mod));
  160. });
  161. modifierListener = new ObservableListener<>(modifier,
  162. ( c, v ) -> c.setText(StringHelper.toString(v.modifier())));
  163. final Ability.Scores abilScore = AbilityHelper.get(chara, skill);
  164. totalListener.setObserved(chara, skill.getRanks(), abilScore);
  165. modifierListener.setObserved(abilScore);
  166. }
  167. skillListener = new ObservableListener<>(ranks, (c, v) -> {
  168. c.setText(StringHelper.toString(v));
  169. });
  170. skillListener.setObserved(skill.getRanks());
  171. }
  172. @Override
  173. public void removeNotify() {
  174. super.removeNotify();
  175. ObserverDispatch.unsubscribeAll(totalListener);
  176. ObserverDispatch.unsubscribeAll(modifierListener);
  177. ObserverDispatch.unsubscribeAll(skillListener);
  178. }
  179. }