MWChoosePanel.java :  » Game » magicwars » mw » client » gui » plaf » Java Open Source

Java Open Source » Game » magicwars 
magicwars » mw » client » gui » plaf » MWChoosePanel.java
/*
 * 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;
}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.