|
|
@@ -5,31 +5,37 @@ 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.DDSkill;
|
|
|
+import org.leumasjaffe.charsheet.model.skill.DDSkills;
|
|
|
import org.leumasjaffe.charsheet.util.AbilityHelper;
|
|
|
+import org.leumasjaffe.observer.ObserverDispatch;
|
|
|
|
|
|
import lombok.AccessLevel;
|
|
|
-import lombok.Getter;
|
|
|
import lombok.Value;
|
|
|
import lombok.experimental.FieldDefaults;
|
|
|
|
|
|
import java.awt.GridBagLayout;
|
|
|
+
|
|
|
+import javax.swing.Box;
|
|
|
+import javax.swing.JButton;
|
|
|
import javax.swing.JCheckBox;
|
|
|
import java.awt.GridBagConstraints;
|
|
|
import javax.swing.JLabel;
|
|
|
import java.awt.Insets;
|
|
|
import java.util.Optional;
|
|
|
import java.awt.Dimension;
|
|
|
+import java.awt.Font;
|
|
|
+
|
|
|
import javax.swing.JTextField;
|
|
|
import java.awt.Color;
|
|
|
+import java.awt.Component;
|
|
|
+
|
|
|
import javax.swing.border.MatteBorder;
|
|
|
import javax.swing.SwingConstants;
|
|
|
import javax.swing.JPanel;
|
|
|
|
|
|
@SuppressWarnings("serial")
|
|
|
@FieldDefaults(level=AccessLevel.PRIVATE, makeFinal=true)
|
|
|
-class WildcardSkillLevelUpLine extends SkillLevelUpLine {
|
|
|
- @Getter DDSkill skill;
|
|
|
-
|
|
|
+class WildcardSkillLevelUpLine extends SkillLevelUpLine {
|
|
|
@Value
|
|
|
private static final class TotalPacket {
|
|
|
Optional<Ability.Scores> ability;
|
|
|
@@ -38,15 +44,14 @@ class WildcardSkillLevelUpLine extends SkillLevelUpLine {
|
|
|
}
|
|
|
|
|
|
public WildcardSkillLevelUpLine(final DDCharacter chara, final DDCharacterClass cclass,
|
|
|
- final DDSkill skill) {
|
|
|
- this.skill = skill;
|
|
|
+ final DDSkills skillList, final DDSkill skill) {
|
|
|
|
|
|
setBorder(new MatteBorder(0, 0, 1, 0, (Color) new Color(0, 0, 0)));
|
|
|
setPreferredSize(new Dimension(480, 22));
|
|
|
GridBagLayout gridBagLayout = new GridBagLayout();
|
|
|
- gridBagLayout.columnWidths = new int[]{0, 0, 0, 0, 0, 0, 0, 0, 0};
|
|
|
+ gridBagLayout.columnWidths = new int[]{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
|
|
|
gridBagLayout.rowHeights = new int[]{0, 0};
|
|
|
- gridBagLayout.columnWeights = new double[]{0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, Double.MIN_VALUE};
|
|
|
+ gridBagLayout.columnWeights = new double[]{0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, Double.MIN_VALUE};
|
|
|
gridBagLayout.rowWeights = new double[]{1.0, Double.MIN_VALUE};
|
|
|
setLayout(gridBagLayout);
|
|
|
|
|
|
@@ -77,7 +82,8 @@ class WildcardSkillLevelUpLine extends SkillLevelUpLine {
|
|
|
gbl_panel.rowWeights = new double[]{0.0, Double.MIN_VALUE};
|
|
|
panel.setLayout(gbl_panel);
|
|
|
|
|
|
- JLabel lblName = new JLabel(skill.getName().replaceAll("\\(.*", "("));
|
|
|
+ final String skillLead = skill.getName().replaceAll("\\(.*", "(");
|
|
|
+ JLabel lblName = new JLabel(skillLead);
|
|
|
GridBagConstraints gbc_lblName = new GridBagConstraints();
|
|
|
gbc_lblName.anchor = GridBagConstraints.EAST;
|
|
|
gbc_lblName.gridx = 0;
|
|
|
@@ -166,12 +172,39 @@ class WildcardSkillLevelUpLine extends SkillLevelUpLine {
|
|
|
ranks.setMaximumSize(new Dimension(30, 20));
|
|
|
ranks.setPreferredSize(new Dimension(30, 20));
|
|
|
GridBagConstraints gbc_ranks = new GridBagConstraints();
|
|
|
- gbc_ranks.insets = new Insets(1, 0, 0, 0);
|
|
|
+ gbc_ranks.insets = new Insets(1, 0, 0, 5);
|
|
|
gbc_ranks.fill = GridBagConstraints.HORIZONTAL;
|
|
|
gbc_ranks.gridx = 7;
|
|
|
gbc_ranks.gridy = 0;
|
|
|
add(ranks, gbc_ranks);
|
|
|
- ranks.setColumns(10);
|
|
|
+ ranks.setColumns(10);
|
|
|
+
|
|
|
+ Component horizontalStrut = Box.createHorizontalStrut(10);
|
|
|
+ GridBagConstraints gbc_horizontalStrut = new GridBagConstraints();
|
|
|
+ gbc_horizontalStrut.gridx = 8;
|
|
|
+ gbc_horizontalStrut.gridy = 0;
|
|
|
+ add(horizontalStrut, gbc_horizontalStrut);
|
|
|
+
|
|
|
+ JButton addSkill = new JButton("Add Skill");
|
|
|
+ addSkill.setMargin(new Insets(2, 2, 2, 2));
|
|
|
+ addSkill.setFont(new Font("Tahoma", Font.PLAIN, 8));
|
|
|
+ addSkill.setPreferredSize(new Dimension(55, 19));
|
|
|
+ addSkill.setMinimumSize(new Dimension(55, 19));
|
|
|
+ GridBagConstraints gbc_plus = new GridBagConstraints();
|
|
|
+ gbc_plus.insets = new Insets(1, 0, 0, 5);
|
|
|
+ gbc_plus.gridx = 9;
|
|
|
+ gbc_plus.gridy = 0;
|
|
|
+ add(addSkill, gbc_plus);
|
|
|
+
|
|
|
+ addSkill.addActionListener(e -> {
|
|
|
+ final String input = textField.getText();
|
|
|
+ if (input.isEmpty()) { return; }
|
|
|
+ textField.setText("");
|
|
|
+ DDSkill newSkill = skillList.getSkill(skillLead + input + ")");
|
|
|
+ if (newSkill.getPointsSpent() == 0) { // Don't notify if I typed a skill I already know
|
|
|
+ ObserverDispatch.notifySubscribers(skillList);
|
|
|
+ }
|
|
|
+ });
|
|
|
}
|
|
|
|
|
|
private Optional<Ability.Scores> getAbility(final DDCharacter chara, final DDSkill skill) {
|