package org.pokenet.client.ui.frames; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import mdes.slick.sui.Button; import mdes.slick.sui.Container; import mdes.slick.sui.Frame; import mdes.slick.sui.Label; import mdes.slick.sui.event.ActionEvent; import mdes.slick.sui.event.ActionListener; import org.newdawn.slick.Color; import org.newdawn.slick.gui.GUIContext; import org.pokenet.client.GameClient; import org.pokenet.client.backend.Translator; /** * Request dialog * @author ZombieBear * */ public class RequestDialog extends Frame{ private HashMap<String, Button> m_offers = new HashMap<String, Button>(); private Label m_noOffers = new Label("There are no offers"); private List<Container> m_containers = new ArrayList<Container>(); private List<String> m_offerUser = new ArrayList<String>(); private boolean m_update = false; /** * Default Constructor */ public RequestDialog(){ initGUI(); } /** * Initializes the user interface */ public void initGUI(){ getContentPane().setX(getContentPane().getX() - 1); getContentPane().setY(getContentPane().getY() + 1); List<String> translated = Translator.translate("_GUI"); getTitleBar().getCloseButton().setVisible(false); setTitle(translated.get(33)); setBackground(new Color(0, 0, 0, 85)); setForeground(new Color(255, 255, 255)); setHeight(getTitleBar().getHeight() + 25); m_noOffers.setFont(GameClient.getFontSmall()); m_noOffers.setForeground(Color.white); m_noOffers.pack(); m_noOffers.setY((float)10 - m_noOffers.getTextHeight() / 2); getContentPane().add(m_noOffers); setResizable(false); } /** * Adds a request * @param username * @param request */ public void addRequest(final String username, String request) { if(request.equalsIgnoreCase("trade")) { //TRADE if (!m_offerUser.contains(username)){ m_offerUser.add(username); m_offers.put(username, new Button("Trade")); m_update = true; } GameClient.getInstance().getUi().getChat().addSystemMessage("*" + username + " sent you a trade request."); } else if(request.equalsIgnoreCase("battle")) { if (!m_offerUser.contains(username)){ m_offerUser.add(username); m_offers.put(username, new Button("Battle")); m_update = true; } GameClient.getInstance().getUi().getChat().addSystemMessage("*" + username + " would like to battle!"); } } @Override public void update(GUIContext container, int delta) { super.update(container, delta); if (isVisible()) { if (m_update){ m_update = false; for (int i = 0; i < m_containers.size(); i++) { m_containers.get(i).removeAll(); try{ getContentPane().remove(m_containers.get(i)); } catch (Exception e) {} } if (m_offerUser.size() == 0){ setHeight(getTitleBar().getHeight() + 25); m_containers.clear(); getContentPane().add(m_noOffers); } else { int y = 0; if (getContentPane().containsChild(m_noOffers)){ getContentPane().remove(m_noOffers); } setHeight(getTitleBar().getHeight() + 25 * m_offers.size()); m_containers.clear(); for (int i = 0; i < m_offers.size(); i++) { final int j = i; final Label m_label = new Label(m_offerUser.get(i)); final Button m_offerBtn = m_offers.get(m_offerUser.get(i)); final Button m_cancel = new Button("Cancel"); m_cancel.setHeight(25); m_cancel.setWidth(45); m_cancel.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e) { declineOffer(j); } }); m_label.setFont(GameClient.getFontSmall()); m_label.setForeground(Color.white); m_label.pack(); m_label.setY((float)10 - m_label.getTextHeight() / 2); m_offerBtn.setHeight(25); m_offerBtn.setX(getWidth() - 92); m_offerBtn.setWidth(45); m_offerBtn.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e) { acceptOffer(j); } }); m_containers.add(new Container()); m_containers.get(i).setSize(getWidth(), 25); m_containers.get(i).setLocation(0, y); m_containers.get(i).add(m_label); m_containers.get(i).add(m_offerBtn); m_containers.get(i).add(m_cancel); m_cancel.setX(getWidth() - 47); getContentPane().add(m_containers.get(i)); y += 25; } } } } } /** * An offer was accepted * @param userIndex */ public void acceptOffer(int userIndex) { if(m_offerUser != null && m_offerUser.size() > 0) { GameClient.getInstance().getPacketGenerator().writeTcpMessage("ra" + m_offerUser.get(userIndex)); m_offers.remove(m_offerUser.get(userIndex)); m_offerUser.remove(userIndex); m_update = true; } } /** * And offer was declined * @param userIndex */ public void declineOffer(int userIndex) { GameClient.getInstance().getPacketGenerator().writeTcpMessage("rc" + m_offerUser.get(userIndex)); m_offers.remove(m_offerUser.get(userIndex)); m_offerUser.remove(userIndex); m_update = true; } /** * Removes an offer * @param username */ public void removeOffer(String username) { if (m_offerUser.contains(username)){ m_offers.remove(username); m_offerUser.remove(username); m_update = true; } } /** * Clears all offers */ public void clearOffers(){ for (String name : m_offerUser) { GameClient.getInstance().getPacketGenerator().writeTcpMessage("rc" + name); m_offers.remove(name); m_offerUser.remove(name); m_update = true; } } }