diff --git a/Mage.Client/src/main/java/mage/client/components/ColorPane.java b/Mage.Client/src/main/java/mage/client/components/ColorPane.java index 370459a2664..aa6d5be1aac 100644 --- a/Mage.Client/src/main/java/mage/client/components/ColorPane.java +++ b/Mage.Client/src/main/java/mage/client/components/ColorPane.java @@ -2,13 +2,28 @@ package mage.client.components; import java.awt.BorderLayout; import java.awt.Color; +import java.awt.Component; import java.awt.Graphics; +import java.awt.Point; + import javax.swing.JEditorPane; import javax.swing.JPanel; import javax.swing.JTextPane; +import javax.swing.SwingUtilities; +import javax.swing.event.HyperlinkEvent; +import javax.swing.event.HyperlinkEvent.EventType; +import javax.swing.event.HyperlinkListener; import javax.swing.text.html.HTMLDocument; import javax.swing.text.html.HTMLEditorKit; +import mage.cards.repository.CardInfo; +import mage.cards.repository.CardRepository; +import mage.client.MageFrame; +import mage.client.dialog.PreferencesDialog; +import mage.client.util.gui.GuiDisplayUtil; +import mage.components.CardInfoPane; +import mage.view.CardView; + /** * Enhanced {@link JTextPane} with text highlighting support. * @@ -18,10 +33,52 @@ public class ColorPane extends JEditorPane { HTMLEditorKit kit = new HTMLEditorKit(); HTMLDocument doc = new HTMLDocument(); + private int tooltipDelay; public ColorPane() { this.setEditorKit(kit); this.setDocument(doc); + addHyperlinkListener(new HyperlinkListener() { + + @Override + public void hyperlinkUpdate(final HyperlinkEvent e) { + tooltipDelay = PreferencesDialog.getCachedValue(PreferencesDialog.KEY_SHOW_TOOLTIPS_DELAY, 300); + if (tooltipDelay == 0) { + return; + } + String name = e.getDescription().substring(1); + CardInfo card = CardRepository.instance.findCard(name); + try { + final Component container = MageFrame.getUI().getComponent(MageComponents.POPUP_CONTAINER); + if (e.getEventType() == EventType.EXITED) { + setPopupVisibility(container, false); + } else { + CardInfoPane cardInfoPane = (CardInfoPane) MageFrame.getUI().getComponent(MageComponents.CARD_INFO_PANE); + cardInfoPane.setCard(new CardView(card.getMockCard()), container); + Point location = new Point(getLocationOnScreen().x - container.getWidth(), (int) MageFrame.getDesktop() + .getMousePosition().getY()); + Component parentComponent = MageFrame.getInstance(); + location = GuiDisplayUtil.keepComponentInsideParent(location, parentComponent.getLocationOnScreen(), container, + parentComponent); + container.setLocation(location); + setPopupVisibility(container, true); + } + } catch (InterruptedException e1) { + e1.printStackTrace(); + } + } + + private void setPopupVisibility(final Component container, final boolean show) throws InterruptedException { + final Component c = MageFrame.getUI().getComponent(MageComponents.DESKTOP_PANE); + SwingUtilities.invokeLater(new Runnable() { + @Override + public void run() { + container.setVisible(show); + c.repaint(); + } + }); + } + }); } /** @@ -45,6 +102,7 @@ public class ColorPane extends JEditorPane { public void append(String text) { try { + text = text.replaceAll("(]*>([^<]*)) (\\[[0-9a-fA-F]*\\])", "$1 $3"); setEditable(true); kit.insertHTML(doc, doc.getLength(), text, 0, 0, null); setEditable(false);