SkillLine.java 7.1 KB

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