/*
* WaypointEditPanel.java
*
* Created on April 2, 2006, 1:18 AM
*/
package mw.client.gui.plaf;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseWheelEvent;
import java.awt.event.MouseWheelListener;
import java.awt.image.BufferedImage;
import java.util.ArrayList;
import java.util.StringTokenizer;
import javax.swing.BorderFactory;
import javax.swing.DefaultListCellRenderer;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.ListSelectionModel;
import javax.swing.ScrollPaneConstants;
import javax.swing.SwingConstants;
import mw.client.managers.DialogManager;
import mw.client.managers.GameManager;
import mw.client.managers.ImageManager;
import mw.client.managers.WindowManager;
import mw.client.utils.dialogs.DialogContainer;
import mw.mtgforge.Constant;
import mw.server.model.bean.CardBean;
import mw.server.model.cost.ManaCost;
import org.jdesktop.animation.timing.Animator;
import org.jdesktop.animation.timing.TimingTarget;
import org.jdesktop.layout.GroupLayout;
import org.jdesktop.layout.LayoutStyle;
import org.jdesktop.swingx.JXPanel;
/**
* Deck panel for choosing decks
*
* @author nantuko
*
*/
public class MWChoosePanel extends JXPanel implements MouseWheelListener {
private ArrayList<Object> objectList;
private String mainTitle = "Choose spell or ability to play (double-click)";
private Image MonoColorImages[] = new Image[5];
private Image TwoColorImages[] = new Image[10];
private Image ColorlessColorImages[] = new Image[5];
private Image NumberImages[] = new Image[13];
private int manaSymbolWidth[] = new int[5];
private int manaSymbolHeight[] = new int[5];
private int manaSymbolWidth2[] = new int[10];
private int manaSymbolHeight2[] = new int[10];
private int numSymbolWidth[] = new int[13];
private int numSymbolHeight[] = new int[13];
private static Color yellowColor = new Color(64,147,208);
//private ManaCost manaCost;
Image rightImage;
Image rightImageHovered;
public MWChoosePanel(ArrayList<Object> objectList, String title) {
this.objectList = objectList;
if (title != null) {
mainTitle = title + " (double-click)";
}
//manaCost = new ManaCost("W U B R G");
loadImages();
initComponents();
jScrollPane2.setOpaque(false);
jScrollPane2.getViewport().setOpaque(false);
jScrollPane2.getHorizontalScrollBar().setUI(new MWScrollbarUI());
jScrollPane2.getVerticalScrollBar().setUI(new MWScrollbarUI());
//addMouseWheelListener(this);
}
protected void loadImages() {
MonoColorImages[0] = ImageManager.getBlueManaSymbolImage();
MonoColorImages[1] = ImageManager.getBlackManaSymbolImage();
MonoColorImages[2] = ImageManager.getRedManaSymbolImage();
MonoColorImages[3] = ImageManager.getGreenManaSymbolImage();
MonoColorImages[4] = ImageManager.getWhiteManaSymbolImage();
ColorlessColorImages[0] = ImageManager.get2BlackManaSymbolImage();
ColorlessColorImages[1] = ImageManager.get2BlueManaSymbolImage();
ColorlessColorImages[2] = ImageManager.get2GreenManaSymbolImage();
ColorlessColorImages[3] = ImageManager.get2RedManaSymbolImage();
ColorlessColorImages[4] = ImageManager.get2WhiteManaSymbolImage();
TwoColorImages[0] = ImageManager.getBlackGreenManaSymbolImage();
TwoColorImages[1] = ImageManager.getBlackRedManaSymbolImage();
TwoColorImages[2] = ImageManager.getGreenBlueManaSymbolImage();
TwoColorImages[3] = ImageManager.getGreenWhiteManaSymbolImage();
TwoColorImages[4] = ImageManager.getBlueRedManaSymbolImage();
TwoColorImages[5] = ImageManager.getBlueBlackManaSymbolImage();
TwoColorImages[6] = ImageManager.getRedWhiteManaSymbolImage();
TwoColorImages[7] = ImageManager.getRedGreenManaSymbolImage();
TwoColorImages[8] = ImageManager.getWhiteBlueManaSymbolImage();
TwoColorImages[9] = ImageManager.getWhiteBlackManaSymbolImage();
for (int i = 0; i < 13; i++) {
NumberImages[i] = ImageManager.getNumberManaSymbolImage(String.valueOf(i));
numSymbolWidth[i] = NumberImages[i].getWidth(null);
numSymbolHeight[i] = NumberImages[i].getHeight(null);
}
for (int i = 0; i < 5; i++) {
manaSymbolWidth[i] = MonoColorImages[i].getWidth(null);
manaSymbolHeight[i] = MonoColorImages[i].getHeight(null);
}
for (int i = 0; i < 10; i++) {
manaSymbolWidth2[i] = TwoColorImages[i].getWidth(null);
manaSymbolHeight2[i] = TwoColorImages[i].getHeight(null);
}
}
private void initComponents() {
JLabel jLabel1;
JLabel jLabel3;
Color textColor = Color.white;
mwPanelPainter = new MWPanelPainter();
//mwPanelPainter.setBGColor(new Color(30,0,30));
//mwPanelPainter.setBGColor(new Color(255,255,255));
jLabel1 = new JLabel();
jLabel3 = new JLabel();
selectedObjectLabel = new JLabel();
title = new JTextField();
jScrollPane2 = new JScrollPane();
setBackground(textColor);
setBackgroundPainter(mwPanelPainter);
jLabel1.setFont(new Font("Times New Roman", 1, 18));
jLabel1.setForeground(textColor);
jLabel1.setText(mainTitle);
jLabel3.setForeground(textColor);
jLabel3.setHorizontalAlignment(SwingConstants.TRAILING);
jLabel3.setText("Selected:");
selectedObjectLabel.setForeground(textColor);
selectedObjectLabel.setText("none");
title.setFont(new Font("Tahoma", 1, 11));
title.setBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2));
jScrollPane2.setBorder(null);
jScrollPane2.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
jScrollPane2.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED);
rightImage = ImageManager.getRightArrowImage();
rightImageHovered = ImageManager.getRightArrowImageHovered();
/*
rightImage = new BufferedImage(15, 18, BufferedImage.TYPE_INT_ARGB);
Graphics2D graphics2D = rightImage.createGraphics();
AffineTransform xform = AffineTransform.getScaleInstance((double) 15 / image.getWidth(), (double) 18 / image.getHeight());
graphics2D.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC);
graphics2D.drawImage(image, xform, null);
graphics2D.dispose();
*/
BufferedImage[] images = new BufferedImage[objectList.size()];
/*for (int i = 0; i < objectList.size(); i++) {
String colors = deckList.get(i).getColors();
int length = colors.length() / 2 + 1;
manaCost = new ManaCost(colors);
BufferedImage manaCostImage = new BufferedImage(10+15*length, 13, BufferedImage.TYPE_INT_ARGB);
Graphics2D g2D = (Graphics2D) manaCostImage.getGraphics();
drawManaCost(g2D, 10, 0, 2, manaCost, 0);
g2D.dispose();
images[i] = manaCostImage;
}*/
objects = new JList(images);
objects.setBackground(textColor);
objects.setCellRenderer(new ImageRenderer());
objects.ensureIndexIsVisible(objects.getModel().getSize());
objects.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
objects.setLayoutOrientation(JList.VERTICAL);
objects.setMaximumSize(new Dimension(32767, 32767));
objects.setMinimumSize(new Dimension(67, 16));
objects.setOpaque(false);
objects.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent evt) {
if (evt.getButton() == MouseEvent.BUTTON1 && evt.getClickCount() > 1) {
objectMouseClicked(evt);
}
}
});
objects.setSelectedIndex(0);
selectedObjectLabel.setText(objectList.get(0).toString());
objects.setFont(new Font("Times New Roman", 1, 17));
objects.addMouseWheelListener(this);
jScrollPane2.setViewportView(objects);
GroupLayout layout = new GroupLayout(this);
this.setLayout(layout);
layout.setHorizontalGroup(layout.createParallelGroup(GroupLayout.LEADING).add(
GroupLayout.TRAILING,
layout.createSequentialGroup().addContainerGap().add(
layout.createParallelGroup(GroupLayout.TRAILING).add(GroupLayout.LEADING, jScrollPane2, GroupLayout.DEFAULT_SIZE, 422, Short.MAX_VALUE).add(GroupLayout.LEADING,
layout.createSequentialGroup().add(jLabel1).addPreferredGap(LayoutStyle.RELATED, 175, Short.MAX_VALUE).add(1, 1, 1)).add(
GroupLayout.LEADING,
layout.createSequentialGroup().add(layout.createParallelGroup(GroupLayout.LEADING)
//.add(jLabel3)
)
.addPreferredGap(LayoutStyle.RELATED)
.add(
layout.createParallelGroup(GroupLayout.TRAILING)
//.add(GroupLayout.LEADING, selectedObjectLabel, GroupLayout.PREFERRED_SIZE, 231, GroupLayout.PREFERRED_SIZE)
.add(
GroupLayout.LEADING, layout.createParallelGroup(GroupLayout.LEADING))))).add(10, 10, 10)));
layout.setVerticalGroup(layout.createParallelGroup(GroupLayout.LEADING).add(
layout.createSequentialGroup().add(
layout.createParallelGroup(GroupLayout.LEADING).add(
layout.createSequentialGroup().add(jLabel1, GroupLayout.PREFERRED_SIZE, 36, GroupLayout.PREFERRED_SIZE)
.add(5, 5, 5)
.add(
layout.createParallelGroup(GroupLayout.BASELINE)
//.add(jLabel3)
//.add(selectedObjectLabel)
)
//.add(10, 10, 10)
).add(layout.createSequentialGroup().add(8, 8, 8)))
.addPreferredGap(LayoutStyle.RELATED).add(layout.createParallelGroup(GroupLayout.BASELINE)).addPreferredGap(LayoutStyle.RELATED).add(
layout.createParallelGroup(GroupLayout.BASELINE)).addPreferredGap(LayoutStyle.RELATED).add(layout.createParallelGroup(GroupLayout.LEADING)).addPreferredGap(
LayoutStyle.RELATED).add(jScrollPane2, GroupLayout.PREFERRED_SIZE, 180, GroupLayout.PREFERRED_SIZE).addContainerGap(23, Short.MAX_VALUE)));
}
private void objectMouseClicked(MouseEvent evt) {
GameManager.getManager().setChosenObject(objectList.get(objects.getSelectedIndex()));
Animator fadeOut = AnimationUtil.createFadeOutAnimation(this);
fadeOut.addTarget(new TimingTarget() {
public void begin() {
}
public void end() {
DialogManager.getManager().fadeOut((DialogContainer) getParent());
}
public void timingEvent(float f) {
}
public void repeat() {
}
});
fadeOut.start();
}
protected int drawManaCost(Graphics2D g, int dx, int dy, int ascent, ManaCost manaCost, int textWidth) {
int totalWidth = 0;
String str = manaCost.toString();
StringTokenizer tok = new StringTokenizer(str);
dy -= (ascent);
while (tok.hasMoreTokens()) {
str = tok.nextToken();
if (str.length() == 1) {
if (Character.isDigit(str.charAt(0))) {
Integer num = Integer.parseInt(str);
if (num >= 0 && num < 13) {
g.drawImage(NumberImages[num], dx + totalWidth, dy + 2, numSymbolWidth[num], numSymbolHeight[num], this);
totalWidth += numSymbolWidth[num] + 2;
} else {
g.setColor(Color.lightGray);
g.drawString(str, dx + totalWidth, dy + ascent);
totalWidth += textWidth + 2;
}
}
for (int i = 0; i < Constant.Color.MonoColorCount - 1; i++) {
if (str.equals(Constant.Color.MonoColors[i])) {
g.drawImage(MonoColorImages[i], dx + totalWidth, dy + 2, manaSymbolWidth[i], manaSymbolHeight[i], this);
totalWidth += manaSymbolWidth[i] + 2;
break;
}
}
} else if (str.length() == 3) {
if (!Character.isDigit(str.charAt(0))) {
for (int i = 0; i < Constant.Color.TwoColorCount; i++) {
if (str.equals(Constant.Color.TwoColors[i])) {
g.drawImage(TwoColorImages[i], dx + totalWidth, dy + 2, manaSymbolWidth2[i], manaSymbolHeight2[i], this);
totalWidth += manaSymbolWidth2[i] + 2;
break;
}
}
} else if (str.charAt(0) == '2') {
for (int i = 0; i < Constant.Color.MonoColorCount - 1; i++) {
if (str.equals("2\\" + Constant.Color.MonoColors[i])) {
// TODO: move to array
g.drawImage(ColorlessColorImages[i], dx + totalWidth, dy + 2, ColorlessColorImages[i].getWidth(null), ColorlessColorImages[i].getHeight(null), this);
totalWidth += ColorlessColorImages[i].getWidth(null) + 2;
break;
}
}
}
}
}
return totalWidth;
}
private MWPanelPainter mwPanelPainter;
private JLabel selectedObjectLabel;
private JScrollPane jScrollPane2;
private JList objects;
private JTextField title;
class ImageRenderer extends DefaultListCellRenderer {
public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
// for default cell renderer behavior
Component c = super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
JLabel deck = ((JLabel) c);
deck.setOpaque(false);
deck.setForeground(Color.white);
if (objectList.size() <= index) return deck;
Object object = objectList.get(index);
String name = objectList.get(index).toString();
deck.setText(name);
if (isSelected) {
deck.setIcon(new ImageIcon(rightImageHovered));
deck.setForeground(yellowColor);
deck.setBorder(BorderFactory.createLineBorder(new Color(0,0,0,50)));
selectedObjectLabel.setText(name);
if (object instanceof CardBean) {
CardBean card = (CardBean)object;
WindowManager.getDisplayWindow().showCard(card);
}
} else {
deck.setIcon(new ImageIcon(rightImage));
}
return deck;
}
private static final long serialVersionUID = 7689696087189956997L;
}
public void mouseWheelMoved(MouseWheelEvent e) {
int notches = e.getWheelRotation();
int index = objects.getSelectedIndex();
System.out.println("out:"+index);
if (notches < 0) {
if (index > 0) {
System.out.println("inc");
objects.setSelectedIndex(index-1);
objects.repaint();
}
} else {
if (index < objectList.size() - 1) {
System.out.println("dec");
objects.setSelectedIndex(index+1);
objects.repaint();
}
}
}
private static final long serialVersionUID = 4787264697806162528L;
}
|