// Near Infinity - An Infinity Engine Browser and Editor
// Copyright (C) 2001 - 2005 Jon Olav Hauglid
// See LICENSE.txt for license information
package org.infinity.resource.cre;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Font;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.awt.Insets;
import javax.swing.BorderFactory;
import javax.swing.DefaultListCellRenderer;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import org.infinity.datatype.EffectType;
import org.infinity.datatype.Flag;
import org.infinity.datatype.IsNumeric;
import org.infinity.datatype.ResourceRef;
import org.infinity.gui.ViewerUtil;
import org.infinity.resource.AbstractStruct;
import org.infinity.resource.Effect;
import org.infinity.resource.Effect2;
import org.infinity.resource.ResourceFactory;
import org.infinity.resource.StructEntry;
public final class Viewer extends JPanel
{
private static JPanel makeMiscPanel(CreResource cre)
{
GridBagLayout gbl = new GridBagLayout();
GridBagConstraints gbc = new GridBagConstraints();
JPanel panel = new JPanel(gbl);
gbc.insets = new Insets(2, 6, 3, 0);
ViewerUtil.addLabelFieldPair(panel, cre.getAttribute(CreResource.CRE_ALLEGIANCE), gbl, gbc, true);
ViewerUtil.addLabelFieldPair(panel, cre.getAttribute(CreResource.CRE_ALIGNMENT), gbl, gbc, true);
ViewerUtil.addLabelFieldPair(panel, cre.getAttribute(CreResource.CRE_GENERAL), gbl, gbc, true);
ViewerUtil.addLabelFieldPair(panel, cre.getAttribute(CreResource.CRE_RACE), gbl, gbc, true);
ViewerUtil.addLabelFieldPair(panel, cre.getAttribute(CreResource.CRE_CLASS), gbl, gbc, true);
ViewerUtil.addLabelFieldPair(panel, cre.getAttribute(CreResource.CRE_GENDER), gbl, gbc, true);
if (ResourceFactory.resourceExists("KIT.IDS")) {
ViewerUtil.addLabelFieldPair(panel, cre.getAttribute(CreResource.CRE_KIT), gbl, gbc, true);
} else {
ViewerUtil.addLabelFieldPair(panel, cre.getAttribute(CreResource.CRE_MAGE_TYPE), gbl, gbc, true);
}
ViewerUtil.addLabelFieldPair(panel, cre.getAttribute(CreResource.CRE_RACIAL_ENEMY), gbl, gbc, true);
ViewerUtil.addLabelFieldPair(panel, cre.getAttribute(CreResource.CRE_ANIMATION), gbl, gbc, true);
ViewerUtil.addLabelFieldPair(panel, cre.getAttribute(CreResource.CRE_MORALE), gbl, gbc, true);
ViewerUtil.addLabelFieldPair(panel, cre.getAttribute(CreResource.CRE_MORALE_BREAK), gbl, gbc, true);
ViewerUtil.addLabelFieldPair(panel, cre.getAttribute(CreResource.CRE_MORALE_RECOVERY), gbl, gbc, true);
ViewerUtil.addLabelFieldPair(panel, cre.getAttribute(CreResource.CRE_SAVE_DEATH), gbl, gbc, true);
ViewerUtil.addLabelFieldPair(panel, cre.getAttribute(CreResource.CRE_SAVE_WAND), gbl, gbc, true);
ViewerUtil.addLabelFieldPair(panel, cre.getAttribute(CreResource.CRE_SAVE_POLYMORPH), gbl, gbc, true);
ViewerUtil.addLabelFieldPair(panel, cre.getAttribute(CreResource.CRE_SAVE_BREATH), gbl, gbc, true);
ViewerUtil.addLabelFieldPair(panel, cre.getAttribute(CreResource.CRE_SAVE_SPELL), gbl, gbc, true);
ViewerUtil.addLabelFieldPair(panel, cre.getAttribute(CreResource.CRE_RESISTANCE_FIRE), gbl, gbc, true);
ViewerUtil.addLabelFieldPair(panel, cre.getAttribute(CreResource.CRE_RESISTANCE_COLD), gbl, gbc, true);
ViewerUtil.addLabelFieldPair(panel, cre.getAttribute(CreResource.CRE_RESISTANCE_ELECTRICITY), gbl, gbc, true);
ViewerUtil.addLabelFieldPair(panel, cre.getAttribute(CreResource.CRE_RESISTANCE_ACID), gbl, gbc, true);
ViewerUtil.addLabelFieldPair(panel, cre.getAttribute(CreResource.CRE_RESISTANCE_MAGIC), gbl, gbc, true);
ViewerUtil.addLabelFieldPair(panel, cre.getAttribute(CreResource.CRE_RESISTANCE_MAGIC_FIRE), gbl, gbc, true);
ViewerUtil.addLabelFieldPair(panel, cre.getAttribute(CreResource.CRE_RESISTANCE_MAGIC_COLD), gbl, gbc, true);
ViewerUtil.addLabelFieldPair(panel, cre.getAttribute(CreResource.CRE_RESISTANCE_SLASHING), gbl, gbc, true);
ViewerUtil.addLabelFieldPair(panel, cre.getAttribute(CreResource.CRE_RESISTANCE_CRUSHING), gbl, gbc, true);
ViewerUtil.addLabelFieldPair(panel, cre.getAttribute(CreResource.CRE_RESISTANCE_PIERCING), gbl, gbc, true);
ViewerUtil.addLabelFieldPair(panel, cre.getAttribute(CreResource.CRE_RESISTANCE_MISSILE), gbl, gbc, true);
return panel;
}
private static JPanel makeMiscPanelIWD2(CreResource cre)
{
GridBagLayout gbl = new GridBagLayout();
GridBagConstraints gbc = new GridBagConstraints();
JPanel panel = new JPanel(gbl);
gbc.insets = new Insets(2, 6, 3, 0);
// 22
ViewerUtil.addLabelFieldPair(panel, cre.getAttribute(CreResource.CRE_ALLEGIANCE), gbl, gbc, true);
ViewerUtil.addLabelFieldPair(panel, cre.getAttribute(CreResource.CRE_GENERAL), gbl, gbc, true);
ViewerUtil.addLabelFieldPair(panel, cre.getAttribute(CreResource.CRE_RACE), gbl, gbc, true);
ViewerUtil.addLabelFieldPair(panel, cre.getAttribute(CreResource.CRE_CLASS), gbl, gbc, true);
// ViewerUtil.addLabelFieldPair(panel, cre.getAttribute("Specific"), gbl, gbc, true);
ViewerUtil.addLabelFieldPair(panel, cre.getAttribute(CreResource.CRE_GENDER), gbl, gbc, true);
ViewerUtil.addLabelFieldPair(panel, cre.getAttribute(CreResource.CRE_ALIGNMENT), gbl, gbc, true);
ViewerUtil.addLabelFieldPair(panel, cre.getAttribute(CreResource.CRE_KIT), gbl, gbc, true);
ViewerUtil.addLabelFieldPair(panel, cre.getAttribute(CreResource.CRE_CHALLENGE_RATING), gbl, gbc, true);
ViewerUtil.addLabelFieldPair(panel, cre.getAttribute(CreResource.CRE_SAVE_FORTITUDE), gbl, gbc, true);
ViewerUtil.addLabelFieldPair(panel, cre.getAttribute(CreResource.CRE_SAVE_REFLEX), gbl, gbc, true);
ViewerUtil.addLabelFieldPair(panel, cre.getAttribute(CreResource.CRE_SAVE_WILL), gbl, gbc, true);
ViewerUtil.addLabelFieldPair(panel, cre.getAttribute(CreResource.CRE_NUM_ITEMS), gbl, gbc, true);
ViewerUtil.addLabelFieldPair(panel, cre.getAttribute(CreResource.CRE_ATTACKS_PER_ROUND), gbl, gbc, true);
ViewerUtil.addLabelFieldPair(panel, cre.getAttribute(CreResource.CRE_SCRIPT_NAME), gbl, gbc, true);
// gbc.insets = new Insets(4, 3, 4, 0);
ViewerUtil.addLabelFieldPair(panel, cre.getAttribute(CreResource.CRE_SCRIPT_OVERRIDE), gbl, gbc, true);
ViewerUtil.addLabelFieldPair(panel, cre.getAttribute(CreResource.CRE_SCRIPT_SPECIAL_1), gbl, gbc, true);
ViewerUtil.addLabelFieldPair(panel, cre.getAttribute(CreResource.CRE_SCRIPT_TEAM), gbl, gbc, true);
ViewerUtil.addLabelFieldPair(panel, cre.getAttribute(CreResource.CRE_SCRIPT_SPECIAL_2), gbl, gbc, true);
ViewerUtil.addLabelFieldPair(panel, cre.getAttribute(CreResource.CRE_SCRIPT_COMBAT), gbl, gbc, true);
ViewerUtil.addLabelFieldPair(panel, cre.getAttribute(CreResource.CRE_SCRIPT_SPECIAL_3), gbl, gbc, true);
ViewerUtil.addLabelFieldPair(panel, cre.getAttribute(CreResource.CRE_SCRIPT_MOVEMENT), gbl, gbc, true);
ViewerUtil.addLabelFieldPair(panel, cre.getAttribute(CreResource.CRE_DIALOG), gbl, gbc, true);
return panel;
}
public Viewer(CreResource cre)
{
JTabbedPane tabs = new JTabbedPane();
JScrollPane scroll = new JScrollPane(makeMainPanel(cre));
scroll.setBorder(BorderFactory.createEmptyBorder());
tabs.addTab("Stats", scroll);
StructEntry version = cre.getAttribute(AbstractStruct.COMMON_VERSION);
if (version.toString().equalsIgnoreCase("V2.2")) {
tabs.addTab("Feats/Skills", makeFeatsPanel(cre));
tabs.addTab("Items/Spells", makeItemSpellsPanelIWD2(cre));
}
else if (version != null)
tabs.addTab("Items/Spells", makeItemSpellsPanel(cre));
setLayout(new BorderLayout());
add(tabs, BorderLayout.CENTER);
}
private JPanel makeFeatsPanel(CreResource cre)
{
JPanel p = new JPanel(new BorderLayout());
p.add(ViewerUtil.makeCheckPanel((Flag)cre.getAttribute(CreResource.CRE_FEATS_3), 1), BorderLayout.NORTH);
p.add(makeSkillPanelIWD2(cre), BorderLayout.CENTER);
JPanel panel = new JPanel(new GridLayout(1, 6, 6, 0));
panel.add(ViewerUtil.makeCheckPanel((Flag)cre.getAttribute(CreResource.CRE_FEATS_1), 1));
panel.add(ViewerUtil.makeCheckPanel((Flag)cre.getAttribute(CreResource.CRE_FEATS_2), 1));
panel.add(p);
panel.setBorder(BorderFactory.createEmptyBorder(3, 3, 3, 3));
return panel;
}
private JPanel makeItemSpellsPanel(CreResource cre)
{
JPanel rightPanel = new JPanel(new GridLayout(2, 1, 0, 6));
rightPanel.add(
ViewerUtil.makeListPanel("Known spells", cre, KnownSpells.class, KnownSpells.CRE_KNOWN_RESREF));
rightPanel.add(new ViewerSpells(cre));
JPanel panel = new JPanel(new GridLayout(1, 2, 6, 0));
panel.add(new ViewerItems(cre));
panel.add(rightPanel);
panel.setBorder(BorderFactory.createEmptyBorder(3, 3, 3, 3));
return panel;
}
private JPanel makeItemSpellsPanelIWD2(CreResource cre)
{
JPanel panel = new JPanel(new GridLayout(1, 2, 6, 0));
panel.add(new ViewerItems(cre));
panel.add(ViewerUtil.makeListPanel("Spells/abilities (# known)", cre, Iwd2Struct.class, null,
new SpellListRendererIWD2()));
panel.setBorder(BorderFactory.createEmptyBorder(3, 3, 3, 3));
return panel;
}
private JPanel makeMainPanel(CreResource cre)
{
JPanel effectPanel;
IsNumeric effectVersion = (IsNumeric)cre.getAttribute(CreResource.CRE_EFFECT_VERSION);
if (effectVersion == null) {
return new JPanel();
} else if (effectVersion.getValue() == 1) {
effectPanel = ViewerUtil.makeListPanel("Effects", cre, Effect2.class, EffectType.EFFECT_TYPE);
} else {
effectPanel = ViewerUtil.makeListPanel("Effects", cre, Effect.class, EffectType.EFFECT_TYPE);
}
ResourceRef imageRef = (ResourceRef)cre.getAttribute(CreResource.CRE_PORTRAIT_LARGE);
JComponent imagePanel;
// if (imageRef.getResourceName().endsWith(".BAM"))
// imagePanel = ViewerUtil.makeBamPanel(imageRef, 0);
if (imageRef.getResourceName().endsWith(".BMP") &&
ResourceFactory.resourceExists(imageRef.getResourceName())) {
imagePanel = ViewerUtil.makeImagePanel(imageRef);
} else {
imagePanel = ViewerUtil.makeImagePanel((ResourceRef)cre.getAttribute(CreResource.CRE_PORTRAIT_SMALL));
}
GridBagLayout gbl = new GridBagLayout();
GridBagConstraints gbc = new GridBagConstraints();
JPanel leftPanel = new JPanel(gbl);
gbc.fill = GridBagConstraints.BOTH;
gbc.insets = new Insets(3, 0, 3, 0);
gbc.weightx = 1.0;
gbc.weighty = 0.0;
gbc.gridwidth = GridBagConstraints.REMAINDER;
gbl.setConstraints(imagePanel, gbc);
leftPanel.add(imagePanel);
gbc.weighty = 1.0;
gbl.setConstraints(effectPanel, gbc);
leftPanel.add(effectPanel);
JPanel panel = new JPanel(new GridLayout(1, 3));
panel.add(leftPanel);
String version = cre.getAttribute(AbstractStruct.COMMON_VERSION).toString();
if (version.equalsIgnoreCase("V2.2")) {
panel.add(makeStatsPanelIWD2(cre));
panel.add(makeMiscPanelIWD2(cre));
}
else {
panel.add(makeStatsPanel(cre));
panel.add(makeMiscPanel(cre));
}
panel.setBorder(BorderFactory.createEmptyBorder(3, 3, 3, 3));
return panel;
}
private JPanel makeSkillPanelIWD2(CreResource cre)
{
GridBagLayout gbl = new GridBagLayout();
GridBagConstraints gbc = new GridBagConstraints();
JPanel panel = new JPanel(gbl);
gbc.insets = new Insets(1, 6, 2, 0);
gbc.anchor = GridBagConstraints.FIRST_LINE_START;
ViewerUtil.addLabelFieldPair(panel, cre.getAttribute(CreResource.CRE_ALCHEMY), gbl, gbc, true);
ViewerUtil.addLabelFieldPair(panel, cre.getAttribute(CreResource.CRE_ANIMAL_EMPATHY), gbl, gbc, true);
ViewerUtil.addLabelFieldPair(panel, cre.getAttribute(CreResource.CRE_BLUFF), gbl, gbc, true);
ViewerUtil.addLabelFieldPair(panel, cre.getAttribute(CreResource.CRE_CONCENTRATION), gbl, gbc, true);
ViewerUtil.addLabelFieldPair(panel, cre.getAttribute(CreResource.CRE_DIPLOMACY), gbl, gbc, true);
ViewerUtil.addLabelFieldPair(panel, cre.getAttribute(CreResource.CRE_DISABLE_DEVICE), gbl, gbc, true);
ViewerUtil.addLabelFieldPair(panel, cre.getAttribute(CreResource.CRE_HIDE), gbl, gbc, true);
ViewerUtil.addLabelFieldPair(panel, cre.getAttribute(CreResource.CRE_INTIMIDATE), gbl, gbc, true);
ViewerUtil.addLabelFieldPair(panel, cre.getAttribute(CreResource.CRE_KNOWLEDGE_ARCANA), gbl, gbc, true);
ViewerUtil.addLabelFieldPair(panel, cre.getAttribute(CreResource.CRE_MOVE_SILENTLY), gbl, gbc, true);
ViewerUtil.addLabelFieldPair(panel, cre.getAttribute(CreResource.CRE_OPEN_LOCKS), gbl, gbc, true);
ViewerUtil.addLabelFieldPair(panel, cre.getAttribute(CreResource.CRE_PICK_POCKETS), gbl, gbc, true);
ViewerUtil.addLabelFieldPair(panel, cre.getAttribute(CreResource.CRE_SEARCH), gbl, gbc, true);
ViewerUtil.addLabelFieldPair(panel, cre.getAttribute(CreResource.CRE_SPELLCRAFT), gbl, gbc, true);
ViewerUtil.addLabelFieldPair(panel, cre.getAttribute(CreResource.CRE_USE_MAGIC_DEVICE), gbl, gbc, true);
ViewerUtil.addLabelFieldPair(panel, cre.getAttribute(CreResource.CRE_WILDERNESS_LORE), gbl, gbc, true);
panel.setBorder(BorderFactory.createTitledBorder("Skills"));
return panel;
}
private JPanel makeStatsPanel(CreResource cre)
{
GridBagLayout gbl = new GridBagLayout();
GridBagConstraints gbc = new GridBagConstraints();
JPanel panel = new JPanel(gbl);
gbc.insets = new Insets(2, 6, 3, 0);
ViewerUtil.addLabelFieldPair(panel, cre.getAttribute(CreResource.CRE_NAME), gbl, gbc, true);
ViewerUtil.addLabelFieldPair(panel, cre.getAttribute(CreResource.CRE_XP), gbl, gbc, true);
ViewerUtil.addLabelFieldPair(panel, cre.getAttribute(CreResource.CRE_XP_VALUE), gbl, gbc, true);
ViewerUtil.addLabelFieldPair(panel, cre.getAttribute(CreResource.CRE_GOLD), gbl, gbc, true);
StructEntry s1 = cre.getAttribute(CreResource.CRE_LEVEL_FIRST_CLASS);
StructEntry s2 = cre.getAttribute(CreResource.CRE_LEVEL_SECOND_CLASS);
StructEntry s3 = cre.getAttribute(CreResource.CRE_LEVEL_THIRD_CLASS);
gbc.weightx = 0.0;
gbc.fill = GridBagConstraints.NONE;
gbc.gridwidth = 1;
JLabel dlabel = new JLabel("Level");
gbl.setConstraints(dlabel, gbc);
panel.add(dlabel);
gbc.weightx = 1.0;
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.gridwidth = GridBagConstraints.REMAINDER;
JLabel tf1 = new JLabel(s1.toString() + '/' + s2.toString() + '/' + s3.toString());
tf1.setFont(tf1.getFont().deriveFont(Font.PLAIN));
gbl.setConstraints(tf1, gbc);
panel.add(tf1);
ViewerUtil.addLabelFieldPair(panel, cre.getAttribute(CreResource.CRE_AC_EFFECTIVE), gbl, gbc, true);
s1 = cre.getAttribute(CreResource.CRE_HP_CURRENT);
s2 = cre.getAttribute(CreResource.CRE_HP_MAX);
gbc.weightx = 0.0;
gbc.fill = GridBagConstraints.NONE;
gbc.gridwidth = 1;
JLabel dlabel1 = new JLabel("Hit points");
gbl.setConstraints(dlabel1, gbc);
panel.add(dlabel1);
gbc.weightx = 1.0;
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.gridwidth = GridBagConstraints.REMAINDER;
JLabel tf2 = new JLabel(s1.toString() + '/' + s2.toString());
tf2.setFont(tf1.getFont());
gbl.setConstraints(tf2, gbc);
panel.add(tf2);
s1 = cre.getAttribute(CreResource.CRE_STRENGTH);
s2 = cre.getAttribute(CreResource.CRE_STRENGTH_BONUS);
gbc.weightx = 0.0;
gbc.fill = GridBagConstraints.NONE;
gbc.gridwidth = 1;
JLabel dlabel2 = new JLabel("Strength");
gbl.setConstraints(dlabel2, gbc);
panel.add(dlabel2);
gbc.weightx = 1.0;
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.gridwidth = GridBagConstraints.REMAINDER;
JLabel tf3 = new JLabel(s1.toString() + '/' + s2.toString());
tf3.setFont(tf2.getFont());
gbl.setConstraints(tf3, gbc);
panel.add(tf3);
ViewerUtil.addLabelFieldPair(panel, cre.getAttribute(CreResource.CRE_DEXTERITY), gbl, gbc, true);
ViewerUtil.addLabelFieldPair(panel, cre.getAttribute(CreResource.CRE_CONSTITUTION), gbl, gbc, true);
ViewerUtil.addLabelFieldPair(panel, cre.getAttribute(CreResource.CRE_INTELLIGENCE), gbl, gbc, true);
ViewerUtil.addLabelFieldPair(panel, cre.getAttribute(CreResource.CRE_WISDOM), gbl, gbc, true);
ViewerUtil.addLabelFieldPair(panel, cre.getAttribute(CreResource.CRE_CHARISMA), gbl, gbc, true);
ViewerUtil.addLabelFieldPair(panel, cre.getAttribute(CreResource.CRE_THAC0), gbl, gbc, true);
ViewerUtil.addLabelFieldPair(panel, cre.getAttribute(CreResource.CRE_ATTACKS_PER_ROUND), gbl, gbc, true);
ViewerUtil.addLabelFieldPair(panel, cre.getAttribute(CreResource.CRE_HIDE_IN_SHADOWS), gbl, gbc, true);
ViewerUtil.addLabelFieldPair(panel, cre.getAttribute(CreResource.CRE_DETECT_ILLUSION), gbl, gbc, true);
ViewerUtil.addLabelFieldPair(panel, cre.getAttribute(CreResource.CRE_SET_TRAPS), gbl, gbc, true);
ViewerUtil.addLabelFieldPair(panel, cre.getAttribute(CreResource.CRE_LORE), gbl, gbc, true);
ViewerUtil.addLabelFieldPair(panel, cre.getAttribute(CreResource.CRE_OPEN_LOCKS), gbl, gbc, true);
ViewerUtil.addLabelFieldPair(panel, cre.getAttribute(CreResource.CRE_MOVE_SILENTLY), gbl, gbc, true);
ViewerUtil.addLabelFieldPair(panel, cre.getAttribute(CreResource.CRE_FIND_TRAPS), gbl, gbc, true);
ViewerUtil.addLabelFieldPair(panel, cre.getAttribute(CreResource.CRE_PICK_POCKETS), gbl, gbc, true);
// ViewerUtil.addLabelFieldPair(panel, cre.getAttribute("Tracking"), gbl, gbc, true);
ViewerUtil.addLabelFieldPair(panel, cre.getAttribute(CreResource.CRE_SCRIPT_NAME), gbl, gbc, true);
ViewerUtil.addLabelFieldPair(panel, cre.getAttribute(CreResource.CRE_SCRIPT_OVERRIDE), gbl, gbc, true);
ViewerUtil.addLabelFieldPair(panel, cre.getAttribute(CreResource.CRE_SCRIPT_CLASS), gbl, gbc, true);
ViewerUtil.addLabelFieldPair(panel, cre.getAttribute(CreResource.CRE_SCRIPT_RACE), gbl, gbc, true);
ViewerUtil.addLabelFieldPair(panel, cre.getAttribute(CreResource.CRE_SCRIPT_GENERAL), gbl, gbc, true);
ViewerUtil.addLabelFieldPair(panel, cre.getAttribute(CreResource.CRE_SCRIPT_DEFAULT), gbl, gbc, true);
ViewerUtil.addLabelFieldPair(panel, cre.getAttribute(CreResource.CRE_DIALOG), gbl, gbc, true);
return panel;
}
private JPanel makeStatsPanelIWD2(CreResource cre)
{
GridBagLayout gbl = new GridBagLayout();
GridBagConstraints gbc = new GridBagConstraints();
JPanel panel = new JPanel(gbl);
gbc.insets = new Insets(2, 6, 3, 0);
ViewerUtil.addLabelFieldPair(panel, cre.getAttribute(CreResource.CRE_NAME), gbl, gbc, true);
ViewerUtil.addLabelFieldPair(panel, cre.getAttribute(CreResource.CRE_XP), gbl, gbc, true);
ViewerUtil.addLabelFieldPair(panel, cre.getAttribute(CreResource.CRE_XP_VALUE), gbl, gbc, true);
ViewerUtil.addLabelFieldPair(panel, cre.getAttribute(CreResource.CRE_LEVELS_TOTAL), gbl, gbc, true);
ViewerUtil.addLabelFieldPair(panel, cre.getAttribute(CreResource.CRE_ARMOR_CLASS), gbl, gbc, true);
StructEntry s1 = cre.getAttribute(CreResource.CRE_HP_CURRENT);
StructEntry s2 = cre.getAttribute(CreResource.CRE_HP_MAX);
gbc.weightx = 0.0;
gbc.fill = GridBagConstraints.NONE;
gbc.gridwidth = 1;
JLabel dlabel = new JLabel("Hit points");
gbl.setConstraints(dlabel, gbc);
panel.add(dlabel);
gbc.weightx = 1.0;
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.gridwidth = GridBagConstraints.REMAINDER;
JLabel tf1 = new JLabel(s1.toString() + '/' + s2.toString());
tf1.setFont(tf1.getFont().deriveFont(Font.PLAIN));
gbl.setConstraints(tf1, gbc);
panel.add(tf1);
ViewerUtil.addLabelFieldPair(panel, cre.getAttribute(CreResource.CRE_STRENGTH), gbl, gbc, true);
ViewerUtil.addLabelFieldPair(panel, cre.getAttribute(CreResource.CRE_DEXTERITY), gbl, gbc, true);
ViewerUtil.addLabelFieldPair(panel, cre.getAttribute(CreResource.CRE_CONSTITUTION), gbl, gbc, true);
ViewerUtil.addLabelFieldPair(panel, cre.getAttribute(CreResource.CRE_INTELLIGENCE), gbl, gbc, true);
ViewerUtil.addLabelFieldPair(panel, cre.getAttribute(CreResource.CRE_WISDOM), gbl, gbc, true);
ViewerUtil.addLabelFieldPair(panel, cre.getAttribute(CreResource.CRE_CHARISMA), gbl, gbc, true);
ViewerUtil.addLabelFieldPair(panel, cre.getAttribute(CreResource.CRE_LEVEL_BARBARIAN), gbl, gbc, true);
ViewerUtil.addLabelFieldPair(panel, cre.getAttribute(CreResource.CRE_LEVEL_BARD), gbl, gbc, true);
ViewerUtil.addLabelFieldPair(panel, cre.getAttribute(CreResource.CRE_LEVEL_CLERIC), gbl, gbc, true);
ViewerUtil.addLabelFieldPair(panel, cre.getAttribute(CreResource.CRE_LEVEL_DRUID), gbl, gbc, true);
ViewerUtil.addLabelFieldPair(panel, cre.getAttribute(CreResource.CRE_LEVEL_FIGHTER), gbl, gbc, true);
ViewerUtil.addLabelFieldPair(panel, cre.getAttribute(CreResource.CRE_LEVEL_MONK), gbl, gbc, true);
ViewerUtil.addLabelFieldPair(panel, cre.getAttribute(CreResource.CRE_LEVEL_PALADIN), gbl, gbc, true);
ViewerUtil.addLabelFieldPair(panel, cre.getAttribute(CreResource.CRE_LEVEL_RANGER), gbl, gbc, true);
ViewerUtil.addLabelFieldPair(panel, cre.getAttribute(CreResource.CRE_LEVEL_ROGUE), gbl, gbc, true);
ViewerUtil.addLabelFieldPair(panel, cre.getAttribute(CreResource.CRE_LEVEL_SORCERER), gbl, gbc, true);
ViewerUtil.addLabelFieldPair(panel, cre.getAttribute(CreResource.CRE_LEVEL_WIZARD), gbl, gbc, true);
return panel;
}
// -------------------------- INNER CLASSES --------------------------
private static final class SpellListRendererIWD2 extends DefaultListCellRenderer
{
private SpellListRendererIWD2()
{
}
@Override
public Component getListCellRendererComponent(JList<?> list, Object value, int index, boolean isSelected,
boolean cellHasFocus)
{
JLabel label = (JLabel)super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
AbstractStruct struct = (AbstractStruct)value;
label.setText(struct.getName() + " (" + (struct.getFieldCount() - 2) + ')');
return label;
}
}
}