package mage.client.components.ext.dlg.impl;
import mage.cards.MageCard;
import mage.client.cards.BigCard;
import mage.client.components.HoverButton;
import mage.client.components.ext.ShadowLabel;
import mage.client.components.ext.dlg.DialogContainer;
import mage.client.components.ext.dlg.DialogManager;
import mage.client.components.ext.dlg.DlgParams;
import mage.client.components.ext.dlg.IDialogPanel;
import mage.client.plugins.impl.Plugins;
import mage.client.util.audio.AudioManager;
import mage.client.util.Command;
import mage.client.util.SettingsManager;
import mage.view.CardView;
import mage.view.CardsView;
import org.mage.plugins.card.utils.impl.ImageManagerImpl;
import javax.swing.*;
import java.awt.*;
import java.util.ArrayList;
import java.util.UUID;
import org.mage.card.arcane.CardPanel;
/**
* @author mw, noxx
*/
public class ChoiceDialog extends IDialogPanel {
private static final long serialVersionUID = 1L;
private ShadowLabel jTitle = null;
private HoverButton jButtonOK = null;
private HoverButton jButtonPrevPage = null;
private HoverButton jButtonNextPage = null;
private HoverButton jButtonCancel = null;
private JButton jButtonSort = null;
private final CardsView cards;
private final UUID gameId;
private int page = 1;
private int maxPages;
private int in_a_row = 4;
private int rows = 2;
private boolean isOptional = false;
private boolean isChooseAbility = false;
private boolean isCancelStopsPlaying = true;
private final DlgParams params;
private final String title;
/**
* This is the default constructor
* @param params
* @param title
*/
public ChoiceDialog(DlgParams params, String title) {
super(params);
this.params = params;
this.gameId = params.gameId;
this.title = title;
cards = params.getCards();
isOptional = params.isOptional();
isCancelStopsPlaying = params.isCancelStopsPlaying();
isChooseAbility = params.isChooseAbility();
in_a_row = 5;
rows = 2;
/**
* Calculate max pages
*/
maxPages = cards.size() / (in_a_row * rows);
if (cards.size() % (in_a_row * rows) != 0) {
maxPages++;
}
/**
* Init
*/
initialize();
}
/**
* This method initializes this
*
* @return void
*/
private void initialize() {
jTitle = new ShadowLabel(title, 14);
jTitle.setBounds(new Rectangle(5, 4, 500, 16));
jTitle.setFont(new Font("Dialog", Font.BOLD, 14));
this.setLayout(null);
/**
* Components
*/
this.add(jTitle, null);
this.add(getJButtonOK(), null);
this.add(getJButtonPrevPage(), null);
this.add(getJButtonNextPage(), null);
this.add(getJButtonSort(), null);
this.add(getJButtonCancel(), null);
makeTransparent();
/**
* Manage cards
*/
///GameManager.getManager().resetChosenCards();
displayCards(params.getCards(), params.gameId, params.bigCard);
}
public void cleanUp() {
for (Component comp : this.getComponents()) {
if (comp instanceof CardPanel) {
((CardPanel) comp).cleanUp();
this.remove(comp);
}
}
}
private void displayCards(CardsView cards, UUID gameId, BigCard bigCard) {
if (cards.size() == 0) {
return;
}
java.util.List<Component> toRemove = new ArrayList<Component>();
for (int i = getComponentCount() - 1; i > 0; i--) {
Component o = getComponent(i);
if (o instanceof MageCard) {
toRemove.add(o);
}
}
for (int i = 0; i < toRemove.size(); i++) {
remove(toRemove.get(i));
}
java.util.List<CardView> cardList = new ArrayList<CardView>();
cardList.addAll(cards.values());
int width = SettingsManager.getInstance().getCardSize().width;
int height = SettingsManager.getInstance().getCardSize().height;
int dx = 0;
int dy = 30;
int startIndex = (page - 1) * (in_a_row * rows);
int countPerPage = (in_a_row * rows);
int j = 0;
for (int i = startIndex; i < cards.size() && i < startIndex + countPerPage; i++) {
if (i > startIndex && i % in_a_row == 0) { // next row
j++;
dx = 0;
}
CardView card = cardList.get(i);
MageCard cardImg = Plugins.getInstance().getMageCard(card, bigCard, getCardDimension(), gameId, true);
cardImg.setLocation(dx, dy + j*(height + 30));
add(cardImg);
dx += (width + 20);
}
repaint();
}
private HoverButton getJButtonOK() {
if (jButtonOK == null) {
jButtonOK = new HoverButton("", ImageManagerImpl.getInstance().getDlgAcceptButtonImage(),
ImageManagerImpl.getInstance().getDlgActiveAcceptButtonImage(),
ImageManagerImpl.getInstance().getDlgAcceptButtonImage(),
new Rectangle(60, 60));
int w = getDlgParams().rect.width - 75;
int h = getDlgParams().rect.height - 90;
jButtonOK.setBounds(new Rectangle(w / 2 - 40, h - 50, 60, 60));
jButtonOK.setToolTipText("Ok");
jButtonOK.setObserver(new Command() {
public void execute() {
DialogManager.getManager(gameId).fadeOut((DialogContainer) getParent());
}
});
}
return jButtonOK;
}
private HoverButton getJButtonPrevPage() {
if (jButtonPrevPage == null) {
jButtonPrevPage = new HoverButton("", ImageManagerImpl.getInstance().getDlgPrevButtonImage(),
ImageManagerImpl.getInstance().getDlgActivePrevButtonImage(),
ImageManagerImpl.getInstance().getDlgPrevButtonImage(),
new Rectangle(60, 60));
int w = getDlgParams().rect.width - 75;
int h = getDlgParams().rect.height - 90;
jButtonPrevPage.setBounds(new Rectangle(w / 2 - 125, h - 50, 60, 60));
jButtonPrevPage.setVisible(false);
jButtonPrevPage.setObserver(new Command() {
public void execute() {
if (page == 1) {
return;
}
AudioManager.playPrevPage();
page--;
getJButtonPrevPage().setVisible(false);
getJButtonOK().setVisible(false);
getJButtonNextPage().setVisible(false);
revalidate();
displayCards(params.getCards(), params.gameId, params.bigCard);
if (page != 1) {
getJButtonPrevPage().setVisible(true);
}
getJButtonOK().setVisible(true);
getJButtonNextPage().setVisible(true);
}
});
}
return jButtonPrevPage;
}
/**
* This method initializes jButtonNextPage
*
* @return javax.swing.JButton
*/
private HoverButton getJButtonNextPage() {
if (jButtonNextPage == null) {
jButtonNextPage = new HoverButton("", ImageManagerImpl.getInstance().getDlgNextButtonImage(),
ImageManagerImpl.getInstance().getDlgActiveNextButtonImage(),
ImageManagerImpl.getInstance().getDlgNextButtonImage(),
new Rectangle(60, 60));
int w = getDlgParams().rect.width - 75;
int h = getDlgParams().rect.height - 90;
jButtonNextPage.setBounds(new Rectangle(w / 2 + 45, h - 50, 60, 60));
if (maxPages > 1) {
jButtonNextPage.setVisible(true);
} else {
jButtonNextPage.setVisible(false);
}
jButtonNextPage.setObserver(new Command() {
private static final long serialVersionUID = -3174360416099554104L;
public void execute() {
if (page == maxPages) {
return;
}
AudioManager.playNextPage();
page++;
getJButtonPrevPage().setVisible(false);
getJButtonOK().setVisible(false);
getJButtonNextPage().setVisible(false);
revalidate();
displayCards(params.getCards(), params.gameId, params.bigCard);
getJButtonPrevPage().setVisible(true);
getJButtonOK().setVisible(true);
if (page != maxPages) {
getJButtonNextPage().setVisible(true);
}
}
});
}
return jButtonNextPage;
}
/**
* This method initializes jButtonSort
*
* @return javax.swing.JButton
*/
private JButton getJButtonSort() {
if (jButtonSort == null) {
jButtonSort = new JButton();
int w = getDlgParams().rect.width - 75;
int h = getDlgParams().rect.height - 75;
jButtonSort.setBounds(new Rectangle(w / 2 + 150, h - 30, 78, 22));
jButtonSort.setText("Sort");
jButtonSort.setVisible(false);
if (maxPages == 1) {
jButtonSort.setVisible(false);
}
/*
jButtonSort.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
cards.sort(new Comparator<CardBean>() {
public int compare(CardBean c1, CardBean c2) {
return c1.toString().compareTo(c2.toString());
}
});
GameManager.getManager().resetChosenCards();
jButtonSort.setVisible(false);
if (page > 1) {
page = 2;
displayCards();
}
page = 1;
displayCards();
}
});
*/
}
return jButtonSort;
}
/**
* This method initializes jButtonCancel
*
* @return javax.swing.JButton
*/
private HoverButton getJButtonCancel() {
if (jButtonCancel == null) {
jButtonCancel = new HoverButton("", ImageManagerImpl.getInstance().getDlgCancelButtonImage(),
ImageManagerImpl.getInstance().getDlgActiveCancelButtonImage(),
ImageManagerImpl.getInstance().getDlgCancelButtonImage(),
new Rectangle(60, 60));
int w = getDlgParams().rect.width - 75;
int h = getDlgParams().rect.height - 90;
jButtonCancel.setBounds(new Rectangle(w / 2 + 150, h - 50, 60, 60));
jButtonCancel.setToolTipText("Cancel");
jButtonCancel.setVisible(isOptional);
if (!isCancelStopsPlaying) {
jButtonCancel.setToolTipText("Done (enough)");
jButtonCancel.setBounds(new Rectangle(w / 2 + 150, h - 50, 60, 60));
}
jButtonCancel.setObserver(new Command() {
private static final long serialVersionUID = -567322540616089486L;
public void execute() {
DialogManager.getManager(gameId).fadeOut((DialogContainer) getParent());
/*
try {
ConnectionManager.sendAddChosenCard(null);
} catch (RemoteException re) {
re.printStackTrace();
}
*/
}
});
}
return jButtonCancel;
}
/*
public void turnCardBorderOff(CardBean card) {
for (int i = 0; i < getComponentCount(); i++) {
Object o = getComponent(i);
if (o instanceof MWCardImpl) {
CardBean c = ((MWCardImpl) o).getCard();
if (c.equals(card)) {
((MWCardImpl) o).setBordered(false);
return;
}
}
}
}*/
public void changeTitle(String cardName) {
jTitle.setText("Choose a card (by double-click), chosen card: " + cardName);
}
}