Crossfire JXClient, Trunk
GUILabelMessage.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.misc;
24 
35 import java.awt.Color;
36 import java.awt.Font;
37 import org.jetbrains.annotations.NotNull;
38 import org.jetbrains.annotations.Nullable;
39 
44 public class GUILabelMessage extends GUIMultiLineLabel {
45 
49  private static final int MAX_LINE_LENGTH = 75;
50 
54  private static final long serialVersionUID = 1;
55 
59  @NotNull
61 
65  @NotNull
67 
71  @NotNull
72  private final GuiFactory guiFactory;
73 
78  @NotNull
80 
81  @Override
82  public void commandDrawinfoReceived(@NotNull final String text, final int type) {
83  final Gui gui = guiFactory.getGui(GUILabelMessage.this);
84  if (gui == null || !windowRenderer.isDialogOpen(gui)) {
85  setText(text);
86  }
87  }
88 
89  };
90 
95  @NotNull
97 
98  @Override
99  public void commandDrawextinfoReceived(final int color, final int type, final int subtype, @NotNull final String message) {
100  final Gui gui = guiFactory.getGui(GUILabelMessage.this);
101  if (gui == null || !windowRenderer.isDialogOpen(gui)) {
102  setText(message);
103  }
104  }
105 
106  @Override
107  public void setDebugMode(final boolean printMessageTypes) {
108  // ignore
109  }
110 
111  };
112 
125  public GUILabelMessage(@NotNull final TooltipManager tooltipManager, @NotNull final GUIElementListener elementListener, @NotNull final String name, @NotNull final CrossfireServerConnection crossfireServerConnection, @NotNull final JXCWindowRenderer windowRenderer, @NotNull final Font font, @NotNull final Color color, @Nullable final Color backgroundColor, @NotNull final GuiFactory guiFactory) {
126  super(tooltipManager, elementListener, name, null, font, color, backgroundColor, Alignment.LEFT, "", guiFactory);
127  this.crossfireServerConnection = crossfireServerConnection;
128  this.windowRenderer = windowRenderer;
129  this.guiFactory = guiFactory;
130  this.crossfireServerConnection.addCrossfireDrawinfoListener(crossfireDrawinfoListener);
131  this.crossfireServerConnection.addCrossfireDrawextinfoListener(crossfireDrawextinfoListener);
132  }
133 
134  @Override
135  public void dispose() {
136  super.dispose();
139  }
140 
141  @Override
142  public void setText(@NotNull final String text) {
143  final StringBuilder sb = new StringBuilder();
144  int pos = 0;
145  while (pos < text.length()) {
146  sb.append('\n');
147 
148  int endPos = pos;
149  while (endPos < pos+MAX_LINE_LENGTH && endPos < text.length() && text.charAt(endPos) != '\n') {
150  endPos++;
151  }
152 
153  if (endPos >= pos+MAX_LINE_LENGTH) {
154  // whitespace split
155  int endPos2 = endPos;
156  while (endPos2 > pos) {
157  endPos2--;
158  final int ch = text.charAt(endPos2);
159  if (ch == ' ') {
160  break;
161  }
162  }
163  if (endPos2 > pos) {
164  sb.append(text, pos, endPos2);
165  pos = endPos2+1;
166  } else {
167  sb.append(text, pos, endPos);
168  pos = endPos;
169  }
170  } else if (endPos >= text.length()) {
171  // append all
172  sb.append(text.substring(pos));
173  pos = endPos;
174  } else {
175  assert text.charAt(endPos) == '\n';
176  // append segment
177  sb.append(text, pos, endPos);
178  pos = endPos+1;
179  }
180  }
181  super.setText(sb.length() > 0 ? sb.substring(1) : "");
182  }
183 
184 }
com.realtime.crossfire.jxclient.gui.misc.GUILabelMessage.serialVersionUID
static final long serialVersionUID
Definition: GUILabelMessage.java:54
com.realtime.crossfire.jxclient.gui.gui.AbstractGUIElement.name
final String name
Definition: AbstractGUIElement.java:77
com.realtime.crossfire.jxclient
com.realtime.crossfire.jxclient.skin.skin
Definition: DefaultJXCSkin.java:23
com.realtime.crossfire.jxclient.server.crossfire.CrossfireServerConnection.removeCrossfireDrawinfoListener
void removeCrossfireDrawinfoListener(@NotNull CrossfireDrawinfoListener listener)
com.realtime.crossfire.jxclient.gui.misc.GUILabelMessage.crossfireServerConnection
final CrossfireServerConnection crossfireServerConnection
Definition: GUILabelMessage.java:60
com.realtime.crossfire.jxclient.gui.misc.GUILabelMessage
Definition: GUILabelMessage.java:44
com.realtime.crossfire.jxclient.server
com.realtime.crossfire.jxclient.gui.label.GUIHTMLLabel
Definition: GUIHTMLLabel.java:49
com.realtime.crossfire.jxclient.gui.gui.Gui
Definition: Gui.java:49
com.realtime.crossfire.jxclient.gui.misc.GUILabelMessage.MAX_LINE_LENGTH
static final int MAX_LINE_LENGTH
Definition: GUILabelMessage.java:49
com.realtime.crossfire.jxclient.gui.label.AbstractLabel.text
String text
Definition: AbstractLabel.java:54
com.realtime.crossfire.jxclient.skin
com.realtime.crossfire.jxclient.gui.label
Definition: AbstractLabel.java:23
com.realtime.crossfire.jxclient.skin.skin.GuiFactory
Definition: GuiFactory.java:41
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.misc.GUILabelMessage.guiFactory
final GuiFactory guiFactory
Definition: GUILabelMessage.java:72
com.realtime.crossfire.jxclient.gui.misc.JXCWindowRenderer.isDialogOpen
boolean isDialogOpen(@NotNull final Gui dialog)
Definition: JXCWindowRenderer.java:728
com.realtime.crossfire.jxclient.gui.label.Alignment
Definition: Alignment.java:29
com.realtime.crossfire.jxclient.gui.misc.GUILabelMessage.dispose
void dispose()
Definition: GUILabelMessage.java:135
com.realtime.crossfire.jxclient.gui.misc.JXCWindowRenderer
Definition: JXCWindowRenderer.java:87
com.realtime.crossfire.jxclient.gui.misc.GUILabelMessage.crossfireDrawinfoListener
final CrossfireDrawinfoListener crossfireDrawinfoListener
Definition: GUILabelMessage.java:79
com.realtime.crossfire.jxclient.gui.misc.GUILabelMessage.crossfireDrawextinfoListener
final CrossfireDrawextinfoListener crossfireDrawextinfoListener
Definition: GUILabelMessage.java:96
com.realtime.crossfire.jxclient.gui.misc.GUILabelMessage.GUILabelMessage
GUILabelMessage(@NotNull final TooltipManager tooltipManager, @NotNull final GUIElementListener elementListener, @NotNull final String name, @NotNull final CrossfireServerConnection crossfireServerConnection, @NotNull final JXCWindowRenderer windowRenderer, @NotNull final Font font, @NotNull final Color color, @Nullable final Color backgroundColor, @NotNull final GuiFactory guiFactory)
Definition: GUILabelMessage.java:125
com.realtime.crossfire.jxclient.skin.skin.GuiFactory.getGui
Gui getGui(@NotNull final AbstractGUIElement element)
Definition: GuiFactory.java:110
com.realtime.crossfire.jxclient.server.crossfire.CrossfireServerConnection
Definition: CrossfireServerConnection.java:37
com.realtime.crossfire.jxclient.gui.misc.GUILabelMessage.setText
void setText(@NotNull final String text)
Definition: GUILabelMessage.java:142
com.realtime.crossfire.jxclient.gui.label.AbstractLabel.backgroundColor
final Color backgroundColor
Definition: AbstractLabel.java:85
com.realtime.crossfire.jxclient.gui
com.realtime.crossfire.jxclient.gui.label.Alignment.LEFT
LEFT
Definition: Alignment.java:34
com.realtime.crossfire.jxclient.gui.label.GUIMultiLineLabel
Definition: GUIMultiLineLabel.java:46
com.realtime.crossfire.jxclient.gui.gui.AbstractGUIElement.elementListener
final GUIElementListener elementListener
Definition: AbstractGUIElement.java:89
com.realtime.crossfire.jxclient.gui.misc.GUILabelMessage.windowRenderer
final JXCWindowRenderer windowRenderer
Definition: GUILabelMessage.java:66
com.realtime.crossfire.jxclient.server.crossfire
Definition: AbstractCrossfireServerConnection.java:23
com.realtime.crossfire.jxclient.gui.gui.TooltipManager
Definition: TooltipManager.java:33
com.realtime.crossfire.jxclient.gui.gui
Definition: AbstractGUIElement.java:23
com.realtime.crossfire.jxclient.server.crossfire.CrossfireServerConnection.removeCrossfireDrawextinfoListener
void removeCrossfireDrawextinfoListener(@NotNull CrossfireDrawextinfoListener listener)
com.realtime.crossfire
com.realtime
com
com.realtime.crossfire.jxclient.gui.gui.GUIElementListener
Definition: GUIElementListener.java:32
com.realtime.crossfire.jxclient.gui.gui.AbstractGUIElement.tooltipManager
final TooltipManager tooltipManager
Definition: AbstractGUIElement.java:83