From e8f9c0822f816b33f0484a16d8290b3f3d5ebbc1 Mon Sep 17 00:00:00 2001 From: LevelX2 Date: Wed, 10 Sep 2014 17:13:26 +0200 Subject: [PATCH] * Chat / game log - Switched to html output. So mana symbols and html tags are correctly shown. Colors have to be adjusted still a bit. --- .../main/java/mage/client/chat/ChatPanel.java | 73 +++++++++++-------- .../mage/client/components/ColorPane.java | 50 ++++++++----- Mage/src/mage/game/match/MatchImpl.java | 10 +-- 3 files changed, 76 insertions(+), 57 deletions(-) diff --git a/Mage.Client/src/main/java/mage/client/chat/ChatPanel.java b/Mage.Client/src/main/java/mage/client/chat/ChatPanel.java index 8e076e44116..f22550b11fe 100644 --- a/Mage.Client/src/main/java/mage/client/chat/ChatPanel.java +++ b/Mage.Client/src/main/java/mage/client/chat/ChatPanel.java @@ -37,14 +37,11 @@ import java.awt.Color; import java.awt.event.KeyEvent; import java.util.ArrayList; import java.util.Collection; -import java.util.EnumMap; import java.util.List; -import java.util.Map; import java.util.UUID; import javax.swing.JTextField; import javax.swing.table.AbstractTableModel; import javax.swing.table.JTableHeader; -import javax.swing.table.TableColumn; import javax.swing.table.TableColumnModel; import javax.swing.table.TableRowSorter; import mage.client.MageFrame; @@ -54,6 +51,7 @@ import mage.view.ChatMessage.MessageColor; import mage.view.ChatMessage.MessageType; import mage.view.RoomUsersView; import mage.view.UsersView; +import org.mage.card.arcane.ManaSymbols; /** * @@ -63,32 +61,32 @@ public class ChatPanel extends javax.swing.JPanel { private UUID chatId; private Session session; - private final List players = new ArrayList(); + private final List players = new ArrayList<>(); private final TableModel tableModel; /** * Chat message color for opponents. */ - private static final Color OPPONENT_COLOR = new Color(238, 230, 133); + private static final String OPPONENT_COLOR = "#FF7F50"; /** * Chat message color for client player. */ - private static final Color MY_COLOR = new Color(0, 230, 64); + private static final String MY_COLOR = "#7FFFD4"; /** * Chat message color for timestamps. */ - private static final Color TIMESTAMP_COLOR = new Color(255, 255, 0, 120); + private static final String TIMESTAMP_COLOR = "#87CEFA"; /** * Chat message color for messages. */ - private static final Color MESSAGE_COLOR = Color.white; + private static final String MESSAGE_COLOR = "White"; /** * Chat message color for personal infos. */ - private static final Color USER_INFO_COLOR = Color.YELLOW; + private static final String USER_INFO_COLOR = "Yellow"; /** * Chat message color for status infos. */ - private static final Color STATUS_COLOR = Color.CYAN; + private static final String STATUS_COLOR = "#CD853F"; /** * This will be a chat that will be connected to {this} and will handle * redirected messages; Mostly used to redirect user messages to another @@ -120,19 +118,19 @@ public class ChatPanel extends javax.swing.JPanel { DEFAULT, GAME, TABLES, TOURNAMENT } private boolean startMessageDone = false; - /** - * Maps message colors to {@link Color}. - */ - private static final Map colorMap = new EnumMap<>(MessageColor.class); - - static { - colorMap.put(MessageColor.BLACK, Color.black); - colorMap.put(MessageColor.GREEN, Color.green); - colorMap.put(MessageColor.ORANGE, Color.orange); - colorMap.put(MessageColor.BLUE, Color.blue); - colorMap.put(MessageColor.RED, Color.red); - colorMap.put(MessageColor.YELLOW, Color.YELLOW); - } +// /** +// * Maps message colors to {@link Color}. +// */ +// private static final Map colorMap = new EnumMap<>(MessageColor.class); +// +// static { +// colorMap.put(MessageColor.BLACK, Color.black); +// colorMap.put(MessageColor.GREEN, Color.green); +// colorMap.put(MessageColor.ORANGE, Color.orange); +// colorMap.put(MessageColor.BLUE, Color.blue); +// colorMap.put(MessageColor.RED, Color.red); +// colorMap.put(MessageColor.YELLOW, Color.YELLOW); +// } /** * Creates new form ChatPanel @@ -210,11 +208,13 @@ public class ChatPanel extends javax.swing.JPanel { * @param color Preferred color. Not used. */ public void receiveMessage(String username, String message, String time, MessageType messageType, MessageColor color) { + StringBuilder text = new StringBuilder(); if (time != null) { - this.txtConversation.append(TIMESTAMP_COLOR, time + " "); + text.append(getColoredText(TIMESTAMP_COLOR, time + ": ")); + //this.txtConversation.append(TIMESTAMP_COLOR, time + " "); } - Color userColor; - Color textColor; + String userColor; + String textColor; String userSeparator = " "; switch (messageType) { case STATUS: // a message to all chat user @@ -235,18 +235,27 @@ public class ChatPanel extends javax.swing.JPanel { userSeparator = ": "; } if (color.equals(MessageColor.ORANGE)) { - textColor = Color.ORANGE; + textColor = "Orange"; } if (color.equals(MessageColor.YELLOW)) { - textColor = Color.YELLOW; + textColor = "Yellow"; } if (username != null && !username.isEmpty()) { - this.txtConversation.append(userColor, username); - this.txtConversation.append(userColor, userSeparator); - } - this.txtConversation.append(textColor, message + "\n"); + text.append(getColoredText(userColor, username + userSeparator)); + } + text.append(getColoredText(textColor, ManaSymbols.replaceSymbolsWithHTML(message, ManaSymbols.Type.PAY) + "\n")); + this.txtConversation.append(text.toString()); } + private String getColoredText(String color, String text) { + StringBuilder sb = new StringBuilder(); + sb.append(""); + sb.append(text); + sb.append(""); + return sb.toString(); + } public String getText() { return txtConversation.getText(); } 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 b493c2b9ac0..e684dbb5479 100644 --- a/Mage.Client/src/main/java/mage/client/components/ColorPane.java +++ b/Mage.Client/src/main/java/mage/client/components/ColorPane.java @@ -1,11 +1,9 @@ package mage.client.components; import javax.swing.*; -import javax.swing.text.AttributeSet; -import javax.swing.text.SimpleAttributeSet; -import javax.swing.text.StyleConstants; -import javax.swing.text.StyleContext; import java.awt.*; +import javax.swing.text.html.HTMLDocument; +import javax.swing.text.html.HTMLEditorKit; /** * Enhanced {@link JTextPane} with text highlighting support. @@ -14,6 +12,13 @@ import java.awt.*; */ public class ColorPane extends JTextPane { + HTMLEditorKit kit = new HTMLEditorKit(); + HTMLDocument doc = new HTMLDocument(); + + public ColorPane() { + this.setEditorKit(kit); + this.setDocument(doc); + } /** * This method solves the known issue with Nimbus LAF background transparency and background color. * @param color @@ -26,24 +31,27 @@ public class ColorPane extends JTextPane { add(jPanel); } - public void append(Color color, String s) { - if (color == null) { - return; - } + @Override + public void setText(String string) { + super.setText(string); //To change body of generated methods, choose Tools | Templates. + } + public void append(String s) { try { - setEditable(true); - - StyleContext sc = StyleContext.getDefaultStyleContext(); - AttributeSet aset = sc.addAttribute(SimpleAttributeSet.EMPTY, StyleConstants.Foreground, color); - - int len = getDocument().getLength(); - - setCaretPosition(len); - setCharacterAttributes(aset, false); - replaceSelection(s); - - setEditable(false); + kit.insertHTML(doc, doc.getLength(), s, 0, 0, null); + +// setEditable(true); +// +// StyleContext sc = StyleContext.getDefaultStyleContext(); +// AttributeSet aset = sc.addAttribute(SimpleAttributeSet.EMPTY, StyleConstants.Foreground, color); +// +// int len = getDocument().getLength(); +// +// setCaretPosition(len); +// setCharacterAttributes(aset, false); +// replaceSelection(s); +// +// setEditable(false); } catch (Exception e) { e.printStackTrace(); } @@ -54,6 +62,7 @@ public class ColorPane extends JTextPane { * * @param g */ + @Override public void paintChildren(Graphics g) { super.paintComponent(g); } @@ -63,6 +72,7 @@ public class ColorPane extends JTextPane { * * @param g */ + @Override public void paintComponent(Graphics g) { super.paintChildren(g); } diff --git a/Mage/src/mage/game/match/MatchImpl.java b/Mage/src/mage/game/match/MatchImpl.java index bcb734db820..c8715cfc827 100644 --- a/Mage/src/mage/game/match/MatchImpl.java +++ b/Mage/src/mage/game/match/MatchImpl.java @@ -334,20 +334,20 @@ public abstract class MatchImpl implements Match { protected String createGameStartMessage() { StringBuilder sb = new StringBuilder(); - sb.append("\nMatch score:\n"); + sb.append("
Match score:
"); for (MatchPlayer mp :this.getPlayers()) { sb.append(" ").append(mp.getName()); sb.append(" - ").append(mp.getWins()).append(mp.getWins()==1?" win":" wins"); if (mp.hasQuit()) { sb.append(" QUITTED"); } - sb.append("\n"); + sb.append("
"); } if (getDraws() > 0) { - sb.append(" Draws: ").append(getDraws()).append("\n"); + sb.append(" Draws: ").append(getDraws()).append("
"); } - sb.append("\n").append("You have to win ").append(this.getWinsNeeded()).append(this.getWinsNeeded() == 1 ? " game":" games").append(" to win the complete match\n"); - sb.append("\nGame has started\n"); + sb.append("
").append("You have to win ").append(this.getWinsNeeded()).append(this.getWinsNeeded() == 1 ? " game":" games").append(" to win the complete match
"); + sb.append("
Game has started

"); return sb.toString(); }