/*
* JavaXYQ Source Code
* by kylixs
* at 2009-11-27
* please visit http://javaxyq.googlecode.com
* or mail to kylixs@qq.com
*/
package ui;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.util.Timer;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import com.javaxyq.core.SpriteFactory;
import com.javaxyq.data.ItemInstance;
import com.javaxyq.event.ActionEvent;
import com.javaxyq.event.PanelEvent;
import com.javaxyq.event.PanelHandler;
import com.javaxyq.ui.ItemDetailLabel;
import com.javaxyq.ui.ItemLabel;
import com.javaxyq.ui.Label;
import com.javaxyq.ui.TextField;
import com.javaxyq.ui.UIHelper;
/**
* ����Ի���ű�
* @author dewitt
* @date 2009-11-27 create
*/
public class buy extends PanelHandler implements MouseListener,MouseMotionListener,DocumentListener{
private int amount = 0;
private long price = 0;
private long totalCost = 0;
private Timer timer;
private Label selectedBorder;
private Label selectingBorder;
private ItemDetailLabel detailLabel = new ItemDetailLabel();
private TextField fieldAmount;
private ItemInstance selectedItem;
@Override
public void initial(PanelEvent evt) {
super.initial(evt);
selectedBorder = new Label(SpriteFactory.loadAnimation("wzife/button/itemselected.tcp"));
selectingBorder = new Label(SpriteFactory.loadAnimation("wzife/button/itemselecting.tcp"));
//��ʼ����Ʒ
String[] items = {"��Ҷ��","��Ҷ��","����ذ�","�ݹ�","�����","ˮ����","�ϵ���","����","������","��ɫ��",
"��Ҷ","�����","��֬","�����ͷ","���в�","��٢��","ɽҩ","�˽���Ҷ","�˲�","�¼���"};
int x0 = 8, y0 = 36;
int rows = 4, cols = 5;
for(int y =0;y<rows;y++) {
for(int x=0;x<cols;x++) {
ItemLabel label = new ItemLabel(dataManager.createItem(items[y*cols+x]));
label.setName("item-"+items[y*cols+x]);
label.setSize(50,50);
label.setLocation(x0+x*51,y0+y*51);
panel.add(label);
UIHelper.removeAllMouseListeners(label);
label.addMouseListener(this);
label.addMouseMotionListener(this);
}
}
fieldAmount = (TextField) panel.findCompByName("field_amount");
fieldAmount.getDocument().addDocumentListener(this);
setAutoUpdate(true);
}
public void update(PanelEvent evt) {
this.totalCost = amount * price;
Label lblPrice = (Label) panel.findCompByName("lbl_price");
lblPrice.setText(String.valueOf(price));
Label lblCost = (Label) panel.findCompByName("lbl_cost");
lblCost.setText(String.valueOf(totalCost));
Label lblCash = (Label) panel.findCompByName("lbl_cash");
lblCash.setText(String.valueOf(context.getPlayer().getData().getMoney()));
}
public void confirm_buy(ActionEvent evt) {
update(null);
int money = context.getPlayer().getData().getMoney();
if(money < totalCost) {
doTalk(context.getTalker(),"�ܹ���Ҫ#R"+totalCost+"#n��������ֽ�ѽ����");
}else {
money -= totalCost;
context.getPlayer().getData().money = money;
ItemInstance item = new ItemInstance(selectedItem.getItem(),amount);
dataManager.addItemToPlayerBag(context.getPlayer(),item);
doTalk(context.getTalker(),"�㹺����"+amount+"��"+selectedItem.getName()+"���ܹ�������#R"+totalCost+"#n����#32");
System.out.println( "buy "+selectedItem.getName()+"*"+amount+", cost "+totalCost);
}
}
private void setSelectedItem(ItemInstance item) {
this.selectedItem = item;
ItemLabel label = (ItemLabel) panel.findCompByName("item-"+item.getName());
selectedBorder.setLocation(label.getX()-1, label.getY()-1);
panel.add(selectedBorder,0);
this.price = item.getPrice();
this.amount = 1;
update(null);
fieldAmount.setText(String.valueOf(amount));
}
@Override
public void mouseClicked(MouseEvent e) {
ItemLabel label = (ItemLabel) e.getSource();
ItemInstance item = label.getItem();
if(this.selectedItem == item) {
int n = e.isShiftDown()?10:1;
this.amount += e.getButton()==MouseEvent.BUTTON1? n:-n;
if(this.amount > 99) {
this.amount = 99;
}
if(this.amount < 1) {
this.amount = 1;
}
update(null);
fieldAmount.setText(String.valueOf(amount));
}else {
setSelectedItem(item);
}
}
@Override
public void mouseEntered(MouseEvent e) {
}
@Override
public void mouseExited(MouseEvent e) {
panel.remove(selectingBorder);
helper.hideToolTip(detailLabel);
}
@Override
public void mousePressed(MouseEvent e) {
}
@Override
public void mouseReleased(MouseEvent e) {
}
@Override
public void mouseDragged(MouseEvent e) {
}
@Override
public void mouseMoved(MouseEvent e) {
ItemLabel label = (ItemLabel) e.getSource();
selectingBorder.setLocation(label.getX()-1, label.getY()-1);
panel.add(selectingBorder,0);
detailLabel.setItem(label.getItem());
helper.showToolTip(detailLabel, label, e);
}
private void syncAmount() {
try {
this.amount = Integer.parseInt(fieldAmount.getText());
}catch(Exception ex) {
//fieldAmount.setText(this.amount);
}
}
@Override
public void changedUpdate(DocumentEvent e) {
syncAmount();
}
@Override
public void insertUpdate(DocumentEvent e) {
syncAmount();
}
@Override
public void removeUpdate(DocumentEvent e) {
syncAmount();
}
}