| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- package org.leumasjaffe.charsheet.view.magic;
- import javax.swing.JPanel;
- import javax.swing.JSeparator;
- import javax.swing.SwingConstants;
- import java.awt.GridBagLayout;
- import java.awt.Component;
- import javax.swing.Box;
- import java.awt.GridBagConstraints;
- import java.awt.Insets;
- import java.util.Collection;
- import java.util.function.BiFunction;
- import org.jdesktop.swingx.VerticalLayout;
- import org.leumasjaffe.charsheet.model.Ability;
- import org.leumasjaffe.charsheet.model.DDCharacter;
- import org.leumasjaffe.charsheet.model.DDCharacterClass;
- import org.leumasjaffe.charsheet.model.magic.DDSpell;
- import org.leumasjaffe.charsheet.model.magic.DDSpellbook;
- import org.leumasjaffe.observer.IndirectObservableListener;
- import org.leumasjaffe.observer.Observable;
- import org.leumasjaffe.observer.ObserverDispatch;
- import lombok.AccessLevel;
- import lombok.experimental.FieldDefaults;
- @FieldDefaults(level=AccessLevel.PRIVATE, makeFinal=true)
- class SpellLevelPanel extends JPanel {
- /**
- *
- */
- private static final long serialVersionUID = 1L;
-
- IndirectObservableListener<JPanel, DDCharacterClass> listener;
- protected SpellLevelPanel(JPanel header, DDCharacter chara, DDCharacterClass dclass, int level,
- BiFunction<DDSpellbook, Integer, Collection<DDSpell>> getSpells) {
- // final Map<DDSpellbook, Collection<DDSpell>> spells = new HashMap<>();
- // dclass.getSpellBook().forEach(sb -> spells.put(sb, getSpells.apply(sb, level)));
- GridBagLayout gridBagLayout = new GridBagLayout();
- gridBagLayout.columnWidths = new int[]{0, 0, 0};
- gridBagLayout.rowHeights = new int[]{0, 0, 0, 0};
- gridBagLayout.columnWeights = new double[]{0.0, 0.0, Double.MIN_VALUE};
- gridBagLayout.rowWeights = new double[]{0.0, 1.0, 0.0, Double.MIN_VALUE};
- setLayout(gridBagLayout);
-
- GridBagConstraints gbc_panel_1 = new GridBagConstraints();
- gbc_panel_1.gridwidth = 2;
- gbc_panel_1.insets = new Insets(0, 0, 5, 0);
- gbc_panel_1.fill = GridBagConstraints.BOTH;
- gbc_panel_1.gridx = 0;
- gbc_panel_1.gridy = 0;
- add(header, gbc_panel_1);
-
- JPanel panel = new JPanel(new VerticalLayout());
- GridBagConstraints gbc_panel = new GridBagConstraints();
- gbc_panel.insets = new Insets(0, 0, 5, 0);
- gbc_panel.fill = GridBagConstraints.BOTH;
- gbc_panel.gridx = 1;
- gbc_panel.gridy = 1;
- add(panel, gbc_panel);
-
- Component horizontalStrut = Box.createHorizontalStrut(20);
- GridBagConstraints gbc_horizontalStrut = new GridBagConstraints();
- gbc_horizontalStrut.insets = new Insets(0, 0, 0, 5);
- gbc_horizontalStrut.gridx = 0;
- gbc_horizontalStrut.gridy = 2;
- add(horizontalStrut, gbc_horizontalStrut);
-
- listener = new IndirectObservableListener<>(panel, (c, v) -> {
- c.removeAll();
- for (int i = 0; i < dclass.getSpellBook().size(); ++i) {
- final DDSpellbook sb = dclass.getSpellBook().get(i);
- final Collection<DDSpell> spells = getSpells.apply(sb, level);
- if (spells.isEmpty()) continue;
- if (i != 0) c.add(new JSeparator(SwingConstants.HORIZONTAL));
- spells.forEach(spell -> c.add(new SpellLine(chara, v, sb, spell, isCastableFromHere())));
- }
- c.repaint();
- });
- listener.setObserved(dclass, dclass.getSpellBook().toArray(new Observable[0]));
- }
-
- public SpellLevelPanel(DDCharacter chara, DDCharacterClass dclass, int level, Ability.Scores ability) {
- // TODO figure out what to do about that get(0)
- this(new SpellsKnownHeader(level, dclass.getSpellBook().get(0), ability),
- chara, dclass, level, DDSpellbook::spellsKnownAtLevel);
- }
-
- public boolean isCastableFromHere() { return false; }
- @Override
- public void removeNotify() {
- super.removeNotify();
- ObserverDispatch.unsubscribeAll(listener);
- }
- }
|