SkillLevelUpDialog.java 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. package org.leumasjaffe.charsheet.view.skills;
  2. import javax.swing.JPanel;
  3. import lombok.AccessLevel;
  4. import lombok.experimental.FieldDefaults;
  5. import java.awt.GridBagLayout;
  6. import javax.swing.JScrollPane;
  7. import javax.swing.JTextField;
  8. import org.jdesktop.swingx.VerticalLayout;
  9. import org.leumasjaffe.charsheet.model.Ability;
  10. import org.leumasjaffe.charsheet.model.DDCharacter;
  11. import org.leumasjaffe.charsheet.model.DDCharacterClass;
  12. import org.leumasjaffe.charsheet.model.observable.IntValue;
  13. import org.leumasjaffe.charsheet.model.skill.DDSkills;
  14. import org.leumasjaffe.observer.ObservableListener;
  15. import org.leumasjaffe.observer.ObserverDispatch;
  16. import java.awt.GridBagConstraints;
  17. import java.awt.Insets;
  18. import java.util.ArrayList;
  19. import java.util.List;
  20. import javax.swing.JLabel;
  21. import javax.swing.JButton;
  22. import javax.swing.JDialog;
  23. import java.awt.Dimension;
  24. @FieldDefaults(level=AccessLevel.PRIVATE, makeFinal=true)
  25. public class SkillLevelUpDialog extends JPanel {
  26. /**
  27. *
  28. */
  29. private static final long serialVersionUID = 1L;
  30. private ObservableListener<JTextField, IntValue> purchaseListener;
  31. public SkillLevelUpDialog(final DDCharacter chara, final DDCharacterClass cclass) {
  32. final IntValue pointsAvaliable = new IntValue(Math.max(1, cclass.getSkillPoints() +
  33. Ability.modifier(chara.getAbilities().getInt().baseModifier())));
  34. GridBagLayout gridBagLayout = new GridBagLayout();
  35. gridBagLayout.columnWidths = new int[]{0, 0};
  36. gridBagLayout.rowHeights = new int[]{0, 0, 0};
  37. gridBagLayout.columnWeights = new double[]{1.0, Double.MIN_VALUE};
  38. gridBagLayout.rowWeights = new double[]{0.0, 1.0, Double.MIN_VALUE};
  39. setLayout(gridBagLayout);
  40. JPanel panel = new JPanel();
  41. GridBagConstraints gbc_panel = new GridBagConstraints();
  42. gbc_panel.insets = new Insets(0, 0, 5, 0);
  43. gbc_panel.fill = GridBagConstraints.HORIZONTAL;
  44. gbc_panel.gridx = 0;
  45. gbc_panel.gridy = 0;
  46. add(panel, gbc_panel);
  47. GridBagLayout gbl_panel = new GridBagLayout();
  48. gbl_panel.columnWidths = new int[]{0, 0, 0, 0};
  49. gbl_panel.rowHeights = new int[]{0, 0};
  50. gbl_panel.columnWeights = new double[]{0.0, 1.0, 0.0, Double.MIN_VALUE};
  51. gbl_panel.rowWeights = new double[]{0.0, Double.MIN_VALUE};
  52. panel.setLayout(gbl_panel);
  53. JLabel lblPointsRemaining = new JLabel("Points Remaining:");
  54. GridBagConstraints gbc_lblPointsRemaining = new GridBagConstraints();
  55. gbc_lblPointsRemaining.insets = new Insets(0, 0, 0, 5);
  56. gbc_lblPointsRemaining.anchor = GridBagConstraints.EAST;
  57. gbc_lblPointsRemaining.gridx = 0;
  58. gbc_lblPointsRemaining.gridy = 0;
  59. panel.add(lblPointsRemaining, gbc_lblPointsRemaining);
  60. JTextField pointsRemaining = new JTextField();
  61. pointsRemaining.setEditable(false);
  62. GridBagConstraints gbc_pointsRemaining = new GridBagConstraints();
  63. gbc_pointsRemaining.insets = new Insets(0, 0, 0, 5);
  64. gbc_pointsRemaining.fill = GridBagConstraints.HORIZONTAL;
  65. gbc_pointsRemaining.gridx = 1;
  66. gbc_pointsRemaining.gridy = 0;
  67. panel.add(pointsRemaining, gbc_pointsRemaining);
  68. pointsRemaining.setColumns(10);
  69. JScrollPane scrollPane = new JScrollPane();
  70. GridBagConstraints gbc_scrollPane = new GridBagConstraints();
  71. gbc_scrollPane.fill = GridBagConstraints.BOTH;
  72. gbc_scrollPane.gridx = 0;
  73. gbc_scrollPane.gridy = 1;
  74. add(scrollPane, gbc_scrollPane);
  75. JPanel skillPanel = new JPanel();
  76. skillPanel.setMinimumSize(new Dimension(300, 200));
  77. scrollPane.setViewportView(skillPanel);
  78. skillPanel.setLayout(new VerticalLayout());
  79. JButton btnSubmitSkillChange = new JButton("Submit Skill Change");
  80. btnSubmitSkillChange.setEnabled(false);
  81. GridBagConstraints gbc_btnSubmitSkillChange = new GridBagConstraints();
  82. gbc_btnSubmitSkillChange.gridx = 2;
  83. gbc_btnSubmitSkillChange.gridy = 0;
  84. panel.add(btnSubmitSkillChange, gbc_btnSubmitSkillChange);
  85. final List<SkillLevelUpLine> lines = new ArrayList<>();
  86. final DDSkills skills = chara.getSkills();
  87. skills.getSkills().stream().forEach( skill -> {
  88. SkillLevelUpLine line = new SkillLevelUpLine(chara, cclass, skill, pointsAvaliable);
  89. skillPanel.add(line);
  90. lines.add(line);
  91. });
  92. purchaseListener = new ObservableListener<>(pointsRemaining, (c, v) -> {
  93. btnSubmitSkillChange.setEnabled(v.value() == 0);
  94. c.setText(Integer.toString(v.value()));
  95. });
  96. purchaseListener.setObserved(pointsAvaliable);
  97. btnSubmitSkillChange.addActionListener(e -> {
  98. ((JDialog) this.getParent().getParent().getParent()).dispose();
  99. lines.stream().forEach(l -> {
  100. l.applyChange();
  101. });
  102. });
  103. }
  104. @Override
  105. public void removeNotify() {
  106. super.removeNotify();
  107. ObserverDispatch.unsubscribeAll(purchaseListener);
  108. }
  109. }