// 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.itm;
import java.awt.BorderLayout;
import java.awt.Font;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.awt.Insets;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JPanel;
import org.infinity.datatype.EffectType;
import org.infinity.datatype.Flag;
import org.infinity.datatype.ResourceRef;
import org.infinity.gui.ViewerUtil;
import org.infinity.resource.AbstractAbility;
import org.infinity.resource.Effect;
import org.infinity.resource.StructEntry;
final class ViewerAbility extends JPanel
{
ViewerAbility(Ability ability)
{
JPanel fieldPanel = makeFieldPanel(ability);
JPanel effectsPanel = ViewerUtil.makeListPanel("Effects", ability, Effect.class, EffectType.EFFECT_TYPE);
JComponent iconPanel = ViewerUtil.makeBamPanel((ResourceRef)ability.getAttribute(AbstractAbility.ABILITY_ICON), 0);
JComponent boxPanel1 = ViewerUtil.makeCheckLabel(ability.getAttribute(Ability.ITM_ABIL_IDENTIFY_TO_USE), "Yes (1)");
JPanel flagPanel = ViewerUtil.makeCheckPanel((Flag)ability.getAttribute(Ability.ITM_ABIL_FLAGS), 1);
JPanel boxPanel2 = new JPanel(new GridLayout(0, 1, 0, 3));
// boxPanel.add(ViewerUtil.makeCheckLabel(ability.getAttribute("Identify to use?"), "Yes (1)"));
// boxPanel.add(ViewerUtil.makeCheckLabel(ability.getAttribute("Allow strength bonus?"), "Yes (1)"));
boxPanel2.add(ViewerUtil.makeCheckLabel(ability.getAttribute(Ability.ITM_ABIL_IS_ARROW), "Yes (1)"));
boxPanel2.add(ViewerUtil.makeCheckLabel(ability.getAttribute(Ability.ITM_ABIL_IS_BOLT), "Yes (1)"));
boxPanel2.add(ViewerUtil.makeCheckLabel(ability.getAttribute(Ability.ITM_ABIL_IS_BULLET), "Yes (1)"));
JPanel boxPanel = new JPanel(new BorderLayout(0, 6));
boxPanel.add(boxPanel1, BorderLayout.NORTH);
boxPanel.add(flagPanel, BorderLayout.CENTER);
boxPanel.add(boxPanel2, BorderLayout.SOUTH);
JPanel leftPanel = new JPanel(new BorderLayout(0, 6));
leftPanel.add(iconPanel, BorderLayout.NORTH);
leftPanel.add(boxPanel, BorderLayout.CENTER);
JPanel mainPanel = new JPanel(new GridLayout(1, 3, 6, 6));
mainPanel.add(leftPanel);
mainPanel.add(fieldPanel);
mainPanel.add(effectsPanel);
GridBagLayout gbl = new GridBagLayout();
GridBagConstraints gbc = new GridBagConstraints();
setLayout(gbl);
gbc.weightx = 0.0;
gbc.weighty = 0.0;
gbc.fill = GridBagConstraints.NONE;
gbc.anchor = GridBagConstraints.CENTER;
gbl.setConstraints(mainPanel, gbc);
add(mainPanel);
}
private JPanel makeFieldPanel(Ability ability)
{
GridBagLayout gbl = new GridBagLayout();
GridBagConstraints gbc = new GridBagConstraints();
JPanel fieldPanel = new JPanel(gbl);
gbc.insets = new Insets(3, 3, 3, 3);
ViewerUtil.addLabelFieldPair(fieldPanel, ability.getAttribute(AbstractAbility.ABILITY_TYPE), gbl, gbc, true);
ViewerUtil.addLabelFieldPair(fieldPanel, ability.getAttribute(AbstractAbility.ABILITY_TARGET), gbl, gbc, true);
ViewerUtil.addLabelFieldPair(fieldPanel, ability.getAttribute(AbstractAbility.ABILITY_RANGE), gbl, gbc, true);
ViewerUtil.addLabelFieldPair(fieldPanel, ability.getAttribute(Ability.ITM_ABIL_SPEED), gbl, gbc, true);
ViewerUtil.addLabelFieldPair(fieldPanel, ability.getAttribute(AbstractAbility.ABILITY_HIT_BONUS), gbl, gbc, true);
StructEntry s1 = ability.getAttribute(AbstractAbility.ABILITY_DICE_SIZE);
StructEntry s2 = ability.getAttribute(AbstractAbility.ABILITY_DICE_COUNT);
StructEntry s3 = ability.getAttribute(AbstractAbility.ABILITY_DAMAGE_BONUS);
gbc.weightx = 0.0;
gbc.fill = GridBagConstraints.NONE;
gbc.gridwidth = 1;
JLabel dlabel = new JLabel("Damage");
gbl.setConstraints(dlabel, gbc);
fieldPanel.add(dlabel);
gbc.weightx = 1.0;
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.gridwidth = GridBagConstraints.REMAINDER;
JLabel tf1 = new JLabel(s2.toString() + 'd' + s1.toString() + '+' + s3.toString());
tf1.setFont(tf1.getFont().deriveFont(Font.PLAIN));
gbl.setConstraints(tf1, gbc);
fieldPanel.add(tf1);
ViewerUtil.addLabelFieldPair(fieldPanel, ability.getAttribute(AbstractAbility.ABILITY_DAMAGE_TYPE), gbl, gbc, true);
ViewerUtil.addLabelFieldPair(fieldPanel, ability.getAttribute(AbstractAbility.ABILITY_NUM_CHARGES), gbl, gbc, true);
return fieldPanel;
}
}