package org.mage.plugins.card.info;
import java.awt.Color;
import java.awt.Component;
import javax.swing.JEditorPane;
import javax.swing.SwingUtilities;
import mage.client.util.GUISizeHelper;
import mage.client.util.gui.GuiDisplayUtil;
import mage.client.util.gui.GuiDisplayUtil.TextLines;
import mage.components.CardInfoPane;
import mage.view.CardView;
import org.mage.card.arcane.UI;
/**
* Card info pane for displaying card rules. Supports drawing mana symbols.
*
* @author nantuko
*/
public class CardInfoPaneImpl extends JEditorPane implements CardInfoPane {
public static final int TOOLTIP_WIDTH_MIN = 160;
public static final int TOOLTIP_HEIGHT_MIN = 120;
public static final int TOOLTIP_HEIGHT_MAX = 300;
public static final int TOOLTIP_BORDER_WIDTH = 80;
private CardView currentCard;
private int type;
private int addWidth;
private int addHeight;
private boolean setSize = false;
public CardInfoPaneImpl() {
UI.setHTMLEditorKit(this);
setEditable(false);
setBackground(Color.white);
setGUISize();
}
public void changeGUISize() {
setGUISize();
this.revalidate();
this.repaint();
}
private void setGUISize() {
addWidth = 20 * GUISizeHelper.cardTooltipFontSize - 50;
addHeight = 12 * GUISizeHelper.cardTooltipFontSize - 20;
setSize = true;
}
@Override
public void setCard(final CardView card, final Component container) {
if (card == null || isCurrentCard(card)) {
return;
}
currentCard = card;
try {
if (!card.equals(currentCard)) {
return;
}
SwingUtilities.invokeLater(() -> {
if (!card.equals(currentCard)) {
return;
}
TextLines textLines = GuiDisplayUtil.getTextLinesfromCardView(card);
StringBuilder buffer = GuiDisplayUtil.getRulefromCardView(card, textLines);
resizeTooltipIfNeeded(container, textLines.basicTextLength, textLines.lines.size());
setText(buffer.toString());
setCaretPosition(0);
});
} catch (Exception e) {
e.printStackTrace();
}
}
private void resizeTooltipIfNeeded(Component container, int ruleLength, int rules) {
if (container == null) {
return;
}
boolean makeBig = (rules > 5 || ruleLength > 350);
if (setSize) {
if (makeBig) {
type = 0;
} else {
type = 1;
}
}
if (makeBig && type == 0) {
type = 1;
container.setSize(
addWidth + TOOLTIP_WIDTH_MIN + TOOLTIP_BORDER_WIDTH,
addHeight + TOOLTIP_HEIGHT_MAX + TOOLTIP_BORDER_WIDTH
);
this.setSize(addWidth + TOOLTIP_WIDTH_MIN,
addHeight + TOOLTIP_HEIGHT_MAX);
} else if (!makeBig && type == 1) {
type = 0;
container.setSize(
addWidth + TOOLTIP_WIDTH_MIN + TOOLTIP_BORDER_WIDTH,
addHeight + TOOLTIP_HEIGHT_MIN + TOOLTIP_BORDER_WIDTH
);
this.setSize(addWidth + TOOLTIP_WIDTH_MIN,
addHeight + TOOLTIP_HEIGHT_MIN);
}
}
@Override
public boolean isCurrentCard(CardView card) {
return currentCard != null && card.equals(currentCard);
}
}