Crossfire JXClient, Trunk
MessageBufferUpdater.java
Go to the documentation of this file.
1 /*
2  * This file is part of JXClient, the Fullscreen Java Crossfire Client.
3  *
4  * JXClient is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License as published by
6  * the Free Software Foundation; either version 2 of the License, or
7  * (at your option) any later version.
8  *
9  * JXClient is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with JXClient; if not, write to the Free Software
16  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
17  *
18  * Copyright (C) 2005-2008 Yann Chachkoff
19  * Copyright (C) 2006-2017,2019-2023 Andreas Kirschbaum
20  * Copyright (C) 2010-2012,2014-2018,2020-2023 Nicolas Weeger
21  */
22 
23 package com.realtime.crossfire.jxclient.gui.log;
24 
31 import java.awt.Color;
32 import org.jetbrains.annotations.NotNull;
33 
38 public class MessageBufferUpdater {
39 
43  public static final int NUM_COLORS = 13;
44 
48  @NotNull
49  private final Color @NotNull [] colors = { //
50  new Color(0x000000), // black
51  new Color(0xB000D5), // white
52  new Color(0x362589), // navy blue
53  new Color(0xD80C1B), // red
54  new Color(0x92440A), // orange
55  new Color(0xBF580B), // dodger blue
56  new Color(0x914F1E), // dark orange
57  new Color(0x275A0F), // sea green
58  new Color(0x346B1A), // dark sea green
59  new Color(0x353535), // grey
60  new Color(0x775716), // brown sienna
61  new Color(0x999B26), // gold
62  new Color(0x6C6E20), // khaki
63  };
64 
68  @NotNull
69  private static final String @NotNull [] COLOR_NAMES = { //
70  "black", //
71  "white", //
72  "navy blue", //
73  "red", //
74  "orange", //
75  "dodger blue", //
76  "dark orange", //
77  "sea green", //
78  "dark sea green", //
79  "grey", //
80  "brown sienna", //
81  "gold", //
82  "khaki", //
83  };
84 
88  @NotNull
90 
94  @NotNull
95  private final Parser parser;
96 
100  @NotNull
101  private final Color defaultColor;
102 
106  @NotNull
107  private final Buffer buffer;
108 
112  @NotNull
113  @SuppressWarnings("ZeroLengthArrayAllocation")
114  private MessageTypes types = new MessageTypes(false, new int[0]);
115 
119  private boolean printMessageTypes;
120 
124  @NotNull
126 
127  @Override
128  public void commandQueryReceived(@NotNull final String prompt, final int queryType) {
131  }
132  }
133 
134  };
135 
140  @NotNull
142 
143  @Override
144  public void commandDrawextinfoReceived(final int color, final int type, final int subtype, @NotNull final String message) {
145  if (types.isTypeShown(type, subtype)) {
146  final CharSequence messageWithPrefix = addMessageTypePrefix(type, subtype, color, message);
147  if (type == MessageType.MSG_TYPE_COMMUNICATION) {
148  //noinspection ConstantValueVariableUse
149  parser.parseWithoutMediaTags(messageWithPrefix, type, subtype, findColor(color), buffer);
150  } else {
151  parser.parse(messageWithPrefix, type, subtype, findColor(color), buffer);
152  }
153  }
154  }
155 
156  @Override
157  public void setDebugMode(final boolean printMessageTypes) {
159  }
160 
161  };
162 
167  @NotNull
169 
170  @Override
171  public void commandDrawinfoReceived(@NotNull final String text, final int type) {
172  // guess category from message color
173  final int messageType;
174  switch (type) {
175  case NDI_WHITE:
176  case NDI_ORANGE:
177  case NDI_BLUE:
178  case NDI_RED:
179  messageType = MessageType.MSG_TYPE_COMMUNICATION;
180  break;
181 
182  default:
183  messageType = MessageType.MSG_TYPE_MISC;
184  break;
185  }
186 
187  if (types.isTypeShown(messageType, MessageType.MSG_SUBTYPE_NONE)) {
188  parser.parseWithoutMediaTags(addMessageTypePrefix(messageType, 0, type, text), messageType, MessageType.MSG_SUBTYPE_NONE, findColor(type), buffer);
189  }
190  }
191 
192  };
193 
202  public MessageBufferUpdater(@NotNull final CrossfireServerConnection crossfireServerConnection, @NotNull final Buffer buffer, @NotNull final Color defaultColor, @NotNull final Color selectionColor) {
203  this.crossfireServerConnection = crossfireServerConnection;
204  this.buffer = buffer;
205  parser = new Parser(selectionColor);
206  this.defaultColor = defaultColor;
207  this.crossfireServerConnection.addCrossfireQueryListener(crossfireQueryListener);
208  this.crossfireServerConnection.addCrossfireDrawextinfoListener(crossfireDrawextinfoListener);
209  this.crossfireServerConnection.addCrossfireDrawinfoListener(crossfireDrawinfoListener);
210  }
211 
215  public void dispose() {
219  }
220 
226  @NotNull
227  private Color findColor(final int index) {
228  try {
229  return colors[index];
230  } catch (final ArrayIndexOutOfBoundsException ignored) {
231  return defaultColor;
232  }
233  }
234 
240  @NotNull
241  public static String getColorName(final int index) {
242  try {
243  return COLOR_NAMES[index];
244  } catch (final ArrayIndexOutOfBoundsException ignored) {
245  return "undefined";
246  }
247  }
248 
254  public void setColor(final int index, @NotNull final Color color) {
255  colors[index] = color;
256  }
257 
262  public void setTypes(@NotNull final MessageTypes types) {
263  this.types = types;
264  }
265 
275  @NotNull
276  private CharSequence addMessageTypePrefix(final int type, final int subtype, final int color, @NotNull final CharSequence message) {
277  return printMessageTypes ? "(t="+MessageType.toString(type, subtype)+"/"+subtype+",c="+color+")"+message : message;
278  }
279 
280 }
com.realtime.crossfire.jxclient
com.realtime.crossfire.jxclient.server.crossfire.CrossfireServerConnection.removeCrossfireDrawinfoListener
void removeCrossfireDrawinfoListener(@NotNull CrossfireDrawinfoListener listener)
com.realtime.crossfire.jxclient.gui.log.MessageBufferUpdater.defaultColor
final Color defaultColor
Definition: MessageBufferUpdater.java:101
com.realtime.crossfire.jxclient.server
com.realtime.crossfire.jxclient.gui.log.Parser.parse
void parse(@NotNull final CharSequence text, final int type, final int subtype, @NotNull final Color defaultColor, @NotNull final Buffer buffer)
Definition: Parser.java:138
com.realtime.crossfire.jxclient.protocol.MessageType.toString
static String toString(final int type, final int subtype)
Definition: MessageType.java:793
com.realtime.crossfire.jxclient.gui.log.MessageBufferUpdater.crossfireQueryListener
final CrossfireQueryListener crossfireQueryListener
Definition: MessageBufferUpdater.java:125
com.realtime.crossfire.jxclient.protocol.MessageType.MSG_TYPE_MISC
static final int MSG_TYPE_MISC
Definition: MessageType.java:125
com.realtime.crossfire.jxclient.gui.log.MessageBufferUpdater.findColor
Color findColor(final int index)
Definition: MessageBufferUpdater.java:227
com.realtime.crossfire.jxclient.gui.log.Buffer
Definition: Buffer.java:41
com.realtime.crossfire.jxclient.gui.log.MessageBufferUpdater.addMessageTypePrefix
CharSequence addMessageTypePrefix(final int type, final int subtype, final int color, @NotNull final CharSequence message)
Definition: MessageBufferUpdater.java:276
com.realtime.crossfire.jxclient.protocol.MessageTypes.isTypeShown
boolean isTypeShown(final int type, final int subtype)
Definition: MessageTypes.java:61
com.realtime.crossfire.jxclient.protocol.MessageType.MSG_SUBTYPE_NONE
static final int MSG_SUBTYPE_NONE
Definition: MessageType.java:143
com.realtime.crossfire.jxclient.protocol.MessageTypes
Definition: MessageTypes.java:31
com.realtime.crossfire.jxclient.server.crossfire.CrossfireDrawextinfoListener
Definition: CrossfireDrawextinfoListener.java:33
com.realtime.crossfire.jxclient.server.crossfire.CrossfireDrawinfoListener
Definition: CrossfireDrawinfoListener.java:33
com.realtime.crossfire.jxclient.gui.log.MessageBufferUpdater.COLOR_NAMES
static final String[] COLOR_NAMES
Definition: MessageBufferUpdater.java:69
com.realtime.crossfire.jxclient.gui.log.MessageBufferUpdater.getColorName
static String getColorName(final int index)
Definition: MessageBufferUpdater.java:241
com.realtime.crossfire.jxclient.server.crossfire.CrossfireQueryListener
Definition: CrossfireQueryListener.java:33
com.realtime.crossfire.jxclient.server.crossfire.CrossfireServerConnection.removeCrossfireQueryListener
void removeCrossfireQueryListener(@NotNull CrossfireQueryListener listener)
com.realtime.crossfire.jxclient.protocol
Definition: MagicMap.java:23
com.realtime.crossfire.jxclient.gui.log.MessageBufferUpdater.NUM_COLORS
static final int NUM_COLORS
Definition: MessageBufferUpdater.java:43
com.realtime.crossfire.jxclient.gui.log.MessageBufferUpdater.setTypes
void setTypes(@NotNull final MessageTypes types)
Definition: MessageBufferUpdater.java:262
com.realtime.crossfire.jxclient.protocol.MessageType
Definition: MessageType.java:33
com.realtime.crossfire.jxclient.protocol.MessageType.MSG_TYPE_JXCLIENT
static final int MSG_TYPE_JXCLIENT
Definition: MessageType.java:136
com.realtime.crossfire.jxclient.gui.log.MessageBufferUpdater.crossfireDrawinfoListener
final CrossfireDrawinfoListener crossfireDrawinfoListener
Definition: MessageBufferUpdater.java:168
com.realtime.crossfire.jxclient.gui.log.MessageBufferUpdater.colors
final Color[] colors
Definition: MessageBufferUpdater.java:49
com.realtime.crossfire.jxclient.server.crossfire.CrossfireServerConnection
Definition: CrossfireServerConnection.java:37
com.realtime.crossfire.jxclient.gui.log.MessageBufferUpdater.types
MessageTypes types
Definition: MessageBufferUpdater.java:114
com.realtime.crossfire.jxclient.gui.log.MessageBufferUpdater.MessageBufferUpdater
MessageBufferUpdater(@NotNull final CrossfireServerConnection crossfireServerConnection, @NotNull final Buffer buffer, @NotNull final Color defaultColor, @NotNull final Color selectionColor)
Definition: MessageBufferUpdater.java:202
com.realtime.crossfire.jxclient.gui.log.MessageBufferUpdater.buffer
final Buffer buffer
Definition: MessageBufferUpdater.java:107
com.realtime.crossfire.jxclient.gui.log.MessageBufferUpdater.setColor
void setColor(final int index, @NotNull final Color color)
Definition: MessageBufferUpdater.java:254
com.realtime.crossfire.jxclient.gui.log.MessageBufferUpdater.parser
final Parser parser
Definition: MessageBufferUpdater.java:95
com.realtime.crossfire.jxclient.gui.log.MessageBufferUpdater
Definition: MessageBufferUpdater.java:38
com.realtime.crossfire.jxclient.server.crossfire
Definition: AbstractCrossfireServerConnection.java:23
com.realtime.crossfire.jxclient.protocol.MessageType.MSG_TYPE_COMMUNICATION
static final int MSG_TYPE_COMMUNICATION
Definition: MessageType.java:109
com.realtime.crossfire.jxclient.server.crossfire.CrossfireServerConnection.removeCrossfireDrawextinfoListener
void removeCrossfireDrawextinfoListener(@NotNull CrossfireDrawextinfoListener listener)
com.realtime.crossfire.jxclient.protocol.MessageType.MSG_SUBTYPE_JXCLIENT_QUERY
static final int MSG_SUBTYPE_JXCLIENT_QUERY
Definition: MessageType.java:474
com.realtime.crossfire.jxclient.gui.log.MessageBufferUpdater.dispose
void dispose()
Definition: MessageBufferUpdater.java:215
com.realtime.crossfire
com.realtime
com.realtime.crossfire.jxclient.gui.log.MessageBufferUpdater.printMessageTypes
boolean printMessageTypes
Definition: MessageBufferUpdater.java:119
com.realtime.crossfire.jxclient.gui.log.Parser.parseWithoutMediaTags
void parseWithoutMediaTags(@NotNull final CharSequence text, final int type, final int subtype, @NotNull final Color color, @NotNull final Buffer buffer)
Definition: Parser.java:154
com
com.realtime.crossfire.jxclient.gui.log.Parser
Definition: Parser.java:40
com.realtime.crossfire.jxclient.gui.log.MessageBufferUpdater.crossfireDrawextinfoListener
final CrossfireDrawextinfoListener crossfireDrawextinfoListener
Definition: MessageBufferUpdater.java:141
com.realtime.crossfire.jxclient.server.crossfire.CrossfireDrawinfoListener.NDI_RED
int NDI_RED
Definition: CrossfireDrawinfoListener.java:53
com.realtime.crossfire.jxclient.gui.log.MessageBufferUpdater.crossfireServerConnection
final CrossfireServerConnection crossfireServerConnection
Definition: MessageBufferUpdater.java:89