UpdateClassWithLevelPanel.java 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. package org.leumasjaffe.charsheet.view.level;
  2. import java.util.function.Consumer;
  3. import java.util.stream.IntStream;
  4. import javax.swing.JPanel;
  5. import org.jdesktop.swingx.VerticalLayout;
  6. import org.leumasjaffe.charsheet.view.skills.SkillLevelUpPanel;
  7. import org.leumasjaffe.function.VoidVoidFunction;
  8. import org.leumasjaffe.observer.Observable;
  9. import org.leumasjaffe.observer.ObservableListener;
  10. import org.leumasjaffe.observer.ObserverDispatch;
  11. import lombok.AccessLevel;
  12. import lombok.experimental.FieldDefaults;
  13. import java.awt.GridBagLayout;
  14. import javax.swing.JTabbedPane;
  15. import java.awt.GridBagConstraints;
  16. import java.awt.Insets;
  17. import java.awt.Component;
  18. import javax.swing.Box;
  19. import javax.swing.JButton;
  20. import javax.swing.JLabel;
  21. @SuppressWarnings("serial")
  22. @FieldDefaults(level=AccessLevel.PRIVATE, makeFinal=true)
  23. class UpdateClassWithLevelPanel extends JPanel {
  24. @FieldDefaults(level=AccessLevel.PUBLIC, makeFinal=true)
  25. public class BoolArray extends Observable {
  26. boolean data[] = new boolean[] {false};
  27. }
  28. BoolArray readyCount = new BoolArray();
  29. ObservableListener<Consumer<Boolean>, BoolArray> listener;
  30. public UpdateClassWithLevelPanel(LevelUpClassInfo info, VoidVoidFunction back,
  31. Consumer<Boolean> setReady) {
  32. GridBagLayout gridBagLayout = new GridBagLayout();
  33. gridBagLayout.columnWidths = new int[]{0, 0};
  34. gridBagLayout.rowHeights = new int[]{0, 0, 0};
  35. gridBagLayout.columnWeights = new double[]{1.0, Double.MIN_VALUE};
  36. gridBagLayout.rowWeights = new double[]{1.0, 0.0, Double.MIN_VALUE};
  37. setLayout(gridBagLayout);
  38. JTabbedPane tabbedPane = new JTabbedPane(JTabbedPane.TOP);
  39. GridBagConstraints gbc_tabbedPane = new GridBagConstraints();
  40. gbc_tabbedPane.insets = new Insets(0, 0, 5, 0);
  41. gbc_tabbedPane.fill = GridBagConstraints.BOTH;
  42. gbc_tabbedPane.gridx = 0;
  43. gbc_tabbedPane.gridy = 0;
  44. add(tabbedPane, gbc_tabbedPane);
  45. JPanel features = new JPanel(new VerticalLayout(2));
  46. info.ddClass.getBase().getFeatures(info.toLevel).forEach(prop -> {
  47. features.add(new JLabel(prop.getName()));
  48. });
  49. tabbedPane.addTab("Features", null, features, null);
  50. JPanel skills = new SkillLevelUpPanel(info.ddCharacter, info.ddClass) {
  51. @Override public void setIsReady(boolean b) {
  52. readyCount.data[0] = b;
  53. ObserverDispatch.notifySubscribers(readyCount, null);
  54. }
  55. };
  56. tabbedPane.addTab("Skills", null, skills, null);
  57. JPanel panel = new JPanel();
  58. GridBagConstraints gbc_panel = new GridBagConstraints();
  59. gbc_panel.fill = GridBagConstraints.BOTH;
  60. gbc_panel.gridx = 0;
  61. gbc_panel.gridy = 1;
  62. add(panel, gbc_panel);
  63. GridBagLayout gbl_panel = new GridBagLayout();
  64. gbl_panel.columnWidths = new int[]{0, 0, 0};
  65. gbl_panel.rowHeights = new int[]{0, 0};
  66. gbl_panel.columnWeights = new double[]{0.0, 1.0, Double.MIN_VALUE};
  67. gbl_panel.rowWeights = new double[]{0.0, Double.MIN_VALUE};
  68. panel.setLayout(gbl_panel);
  69. JButton btnBack = new JButton("Back");
  70. GridBagConstraints gbc_btnBack = new GridBagConstraints();
  71. gbc_btnBack.insets = new Insets(0, 0, 0, 5);
  72. gbc_btnBack.gridx = 0;
  73. gbc_btnBack.gridy = 0;
  74. panel.add(btnBack, gbc_btnBack);
  75. btnBack.addActionListener(e -> back.apply());
  76. Component horizontalGlue = Box.createHorizontalGlue();
  77. GridBagConstraints gbc_horizontalGlue = new GridBagConstraints();
  78. gbc_horizontalGlue.gridx = 1;
  79. gbc_horizontalGlue.gridy = 0;
  80. panel.add(horizontalGlue, gbc_horizontalGlue);
  81. listener = new ObservableListener<>(setReady, (c, v) -> {
  82. c.accept(IntStream.range(0, v.data.length)
  83. .mapToObj(i -> v.data[i]).allMatch(b -> b));
  84. });
  85. listener.setObserved(readyCount);
  86. }
  87. }