| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 |
- package org.leumasjaffe.charsheet.view.skills;
- import java.awt.Dimension;
- import java.awt.GridBagConstraints;
- import java.awt.GridBagLayout;
- import java.awt.Insets;
- import java.util.ArrayList;
- import java.util.List;
- import javax.swing.JLabel;
- import javax.swing.JPanel;
- import javax.swing.JScrollPane;
- import javax.swing.JTextField;
- import org.jdesktop.swingx.VerticalLayout;
- import org.leumasjaffe.charsheet.model.DDCharacter;
- import org.leumasjaffe.charsheet.model.DDCharacterClass;
- import org.leumasjaffe.charsheet.model.observable.IntValue;
- import org.leumasjaffe.charsheet.model.skill.DDSkills;
- import org.leumasjaffe.observer.ObservableListener;
- import org.leumasjaffe.observer.ObserverDispatch;
- import lombok.AccessLevel;
- import lombok.Getter;
- import lombok.experimental.FieldDefaults;
- import javax.swing.ScrollPaneConstants;
- @SuppressWarnings("serial")
- @FieldDefaults(level=AccessLevel.PRIVATE, makeFinal=true)
- public abstract class SkillLevelUpPanel extends JPanel {
- ObservableListener<JTextField, IntValue> purchaseListener;
- @Getter(AccessLevel.PROTECTED) JPanel panel;
- List<SkillLevelUpLine> lines;
- public SkillLevelUpPanel(final DDCharacter chara, final DDCharacterClass cclass) {
- final IntValue pointsAvaliable = new IntValue(Math.max(1, cclass.getSkillPoints() +
- chara.getAbilities().getInt().baseModifier()));
-
- GridBagLayout gridBagLayout = new GridBagLayout();
- gridBagLayout.columnWidths = new int[]{0, 0};
- gridBagLayout.rowHeights = new int[]{0, 0, 0};
- gridBagLayout.columnWeights = new double[]{1.0, Double.MIN_VALUE};
- gridBagLayout.rowWeights = new double[]{0.0, 1.0, Double.MIN_VALUE};
- setLayout(gridBagLayout);
-
- panel = new JPanel();
- GridBagConstraints gbc_panel = new GridBagConstraints();
- gbc_panel.insets = new Insets(0, 0, 5, 0);
- gbc_panel.fill = GridBagConstraints.HORIZONTAL;
- gbc_panel.gridx = 0;
- gbc_panel.gridy = 0;
- add(panel, gbc_panel);
- GridBagLayout gbl_panel = new GridBagLayout();
- gbl_panel.columnWidths = new int[]{0, 0, 0, 0};
- gbl_panel.rowHeights = new int[]{0, 0};
- gbl_panel.columnWeights = new double[]{0.0, 1.0, 0.0, Double.MIN_VALUE};
- gbl_panel.rowWeights = new double[]{0.0, Double.MIN_VALUE};
- panel.setLayout(gbl_panel);
-
- JLabel lblPointsRemaining = new JLabel("Points Remaining:");
- GridBagConstraints gbc_lblPointsRemaining = new GridBagConstraints();
- gbc_lblPointsRemaining.insets = new Insets(0, 0, 0, 5);
- gbc_lblPointsRemaining.anchor = GridBagConstraints.EAST;
- gbc_lblPointsRemaining.gridx = 0;
- gbc_lblPointsRemaining.gridy = 0;
- panel.add(lblPointsRemaining, gbc_lblPointsRemaining);
-
- JTextField pointsRemaining = new JTextField();
- pointsRemaining.setEditable(false);
- GridBagConstraints gbc_pointsRemaining = new GridBagConstraints();
- gbc_pointsRemaining.insets = new Insets(0, 0, 0, 5);
- gbc_pointsRemaining.fill = GridBagConstraints.HORIZONTAL;
- gbc_pointsRemaining.gridx = 1;
- gbc_pointsRemaining.gridy = 0;
- panel.add(pointsRemaining, gbc_pointsRemaining);
- pointsRemaining.setColumns(10);
-
- JScrollPane scrollPane = new JScrollPane();
- scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
- GridBagConstraints gbc_scrollPane = new GridBagConstraints();
- gbc_scrollPane.fill = GridBagConstraints.BOTH;
- gbc_scrollPane.gridx = 0;
- gbc_scrollPane.gridy = 1;
- add(scrollPane, gbc_scrollPane);
-
- JPanel skillPanel = new JPanel();
- scrollPane.setPreferredSize(new Dimension(480, 300));
- scrollPane.setViewportView(skillPanel);
- skillPanel.setLayout(new VerticalLayout());
-
- lines = new ArrayList<>();
- final DDSkills skills = chara.getSkills();
- skills.getSkills().stream().forEach(skill -> {
- SkillLevelUpLine line = new NormalSkillLevelUpLine(chara, cclass, skill, pointsAvaliable);
- skillPanel.add(line);
- lines.add(line);
- });
-
- purchaseListener = new ObservableListener<>(pointsRemaining, (c, v) -> {
- setIsReady(v.value() == 0);
- c.setText(Integer.toString(v.value()));
- });
- purchaseListener.setObserved(pointsAvaliable);
- }
-
- protected abstract void setIsReady(boolean b);
-
- public void commitAllChanges() {
- lines.forEach(SkillLevelUpLine::applyChange);
- }
-
- @Override
- public void removeNotify() {
- super.removeNotify();
- ObserverDispatch.unsubscribeAll(purchaseListener);
- }
- }
|