Crossfire JXClient, Trunk
GUIMetaElementList.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.list;
24 
36 import java.awt.Font;
37 import java.awt.Image;
38 import org.jetbrains.annotations.NotNull;
39 import org.jetbrains.annotations.Nullable;
40 
45 public class GUIMetaElementList extends GUIList<GUIMetaElement> {
46 
50  private static final long serialVersionUID = 1;
51 
55  @NotNull
57 
61  @NotNull
63 
67  @NotNull
69 
73  @NotNull
74  private final String name;
75 
79  @Nullable
80  private final Image image;
81 
85  @NotNull
86  private final Font font;
87 
91  @NotNull
92  private final String format;
93 
97  @NotNull
98  private final String tooltip;
99 
103  @Nullable
104  private final GUIText hostname;
105 
109  @Nullable
110  private final AbstractLabel comment;
111 
115  @NotNull
116  private final GuiFactory guiFactory;
117 
122  @NotNull
123  private final MetaserverListener metaserverListener = this::rebuildList;
124 
129  @NotNull
130  private final MetaserverEntryListener metaserverEntryListener = this::setChanged;
131 
149  public GUIMetaElementList(@NotNull final TooltipManager tooltipManager, @NotNull final GUIElementListener elementListener, @NotNull final String name, final int cellWidth, final int cellHeight, @NotNull final MetaserverModel metaserverModel, @Nullable final Image image, @NotNull final Font font, @NotNull final String format, @NotNull final String tooltip, @Nullable final GUIText hostname, @Nullable final AbstractLabel comment, @NotNull final CommandList connectCommandList, @NotNull final GuiFactory guiFactory) {
151  this.metaserverModel = metaserverModel;
152  this.tooltipManager = tooltipManager;
153  this.elementListener = elementListener;
154  this.name = name;
155  this.image = image;
156  this.font = font;
157  this.format = format;
158  this.tooltip = tooltip;
159  this.hostname = hostname;
160  this.comment = comment;
161  this.guiFactory = guiFactory;
162  this.metaserverModel.addMetaserverListener(metaserverListener);
163  rebuildList();
164  }
165 
166  @Override
167  public void dispose() {
168  super.dispose();
169  for (int i = 0; i < metaserverModel.size(); i++) {
171  }
173  }
174 
175  @Override
176  public void notifyOpen() {
177  }
178 
182  private void rebuildList() {
183  synchronized (getTreeLock()) {
184  final int newSize = metaserverModel.size();
185  final int oldSize = resizeElements(newSize);
186  if (oldSize < newSize) {
187  for (int i = oldSize; i < newSize; i++) {
189  addElement(metaElement);
191  }
192  } else {
193  for (int i = newSize; i < oldSize; i++) {
195  }
196  }
197  }
198  setChanged();
199  }
200 
201  @Override
202  protected void activeChanged() {
203  }
204 
205  @Override
206  protected void selectionChanged(final int selectedIndex) {
207  if (selectedIndex == -1) {
208  // do not update hostname
209  if (comment != null) {
210  comment.setText("");
211  }
212  } else {
213  final MetaserverEntry metaEntry = metaserverModel.getEntry(selectedIndex);
214  if (hostname != null) {
215  hostname.setText(metaEntry == null ? "" : metaEntry.getHostname());
216  }
217  if (comment != null) {
218  comment.setText(metaEntry == null ? "" : metaEntry.getComment());
219  }
220  }
221  }
222 
223  @Nullable
224  @Override
225  protected String getTooltip(final int index) {
226  final MetaserverEntry metaEntry = metaserverModel.getEntry(index);
227  return metaEntry == null ? null : metaEntry.format(tooltip);
228  }
229 
234  public void setSelectedHostname(@NotNull final String serverName) {
235  final int index = metaserverModel.getServerIndex(serverName);
236  setSelectedIndex(index);
237  if (index == -1 && hostname != null) {
238  hostname.setText(serverName);
239  }
240  }
241 
242 }
com.realtime.crossfire.jxclient.gui.textinput.GUIText
Abstract base class for text input fields.
Definition: GUIText.java:61
com.realtime.crossfire.jxclient
com.realtime.crossfire.jxclient.skin.skin
Definition: DefaultJXCSkin.java:23
com.realtime.crossfire.jxclient.gui.list.GUIMetaElementList.tooltip
final String tooltip
The tooltip format for drawing list entries.
Definition: GUIMetaElementList.java:98
com.realtime.crossfire.jxclient.metaserver.MetaserverEntry
Represents a response line from the metaserver.
Definition: MetaserverEntry.java:33
com.realtime.crossfire.jxclient.gui.list.GUIMetaElementList.hostname
final GUIText hostname
The hostname input field to update; may be.
Definition: GUIMetaElementList.java:104
com.realtime.crossfire.jxclient.gui.list.GUIMetaElementList.elementListener
final GUIElementListener elementListener
The GUIElementListener to use.
Definition: GUIMetaElementList.java:68
com.realtime.crossfire.jxclient.metaserver.MetaserverModel.removeMetaserverListener
void removeMetaserverListener(@NotNull final MetaserverListener listener)
Removes a metaserver listener.
Definition: MetaserverModel.java:175
com.realtime.crossfire.jxclient.metaserver.MetaserverModel.addMetaserverEntryListener
void addMetaserverEntryListener(final int index, @NotNull final MetaserverEntryListener listener)
Adds a metaserver entry listener for one entry.
Definition: MetaserverModel.java:184
com.realtime.crossfire.jxclient.skin
com.realtime.crossfire.jxclient.gui.list.GUIMetaElementList.image
final Image image
The image for drawing list entries.
Definition: GUIMetaElementList.java:80
com.realtime.crossfire.jxclient.gui.list.GUIMetaElementList.metaserverEntryListener
final MetaserverEntryListener metaserverEntryListener
The MetaserverEntryListener attached to all tracked metaserver entries.
Definition: GUIMetaElementList.java:130
com.realtime.crossfire.jxclient.gui.list.GUIList
A GUIElement that displays a list of entries.
Definition: GUIList.java:56
com.realtime.crossfire.jxclient.metaserver
Definition: DefaultMetaserver.java:23
com.realtime.crossfire.jxclient.gui.list.GUIMetaElementList.comment
final AbstractLabel comment
The comment field to update; may be.
Definition: GUIMetaElementList.java:110
com.realtime.crossfire.jxclient.gui.label
Definition: AbstractLabel.java:23
com.realtime.crossfire.jxclient.metaserver.MetaserverEntry.format
String format(@NotNull final String format)
Returns a formatted string using the given format.
Definition: MetaserverEntry.java:284
com.realtime.crossfire.jxclient.metaserver.MetaserverModel.getServerIndex
int getServerIndex(@NotNull final String serverName)
Returns the index of an entry by server name.
Definition: MetaserverModel.java:95
com.realtime.crossfire.jxclient.gui.list.GUIMetaElement
Display a Crossfire server entry.
Definition: GUIMetaElement.java:50
com.realtime.crossfire.jxclient.gui.label.AbstractLabel
Abstract base class for all label classes.
Definition: AbstractLabel.java:43
com.realtime.crossfire.jxclient.metaserver.Metaserver
Queries Crossfire's metaserver to learn about existing servers.
Definition: Metaserver.java:32
com.realtime.crossfire.jxclient.gui.textinput
Definition: ActivateCommandInputCommand.java:23
com.realtime.crossfire.jxclient.metaserver.MetaserverEntry.getHostname
String getHostname()
Returns the hostname.
Definition: MetaserverEntry.java:143
com.realtime.crossfire.jxclient.gui.commandlist
Definition: CommandList.java:23
com.realtime.crossfire.jxclient.gui.list.GUIMetaElementList.setSelectedHostname
void setSelectedHostname(@NotNull final String serverName)
Select an entry by server name.
Definition: GUIMetaElementList.java:234
com.realtime.crossfire.jxclient.gui.list.GUIMetaElementList.font
final Font font
The font for drawing list entries.
Definition: GUIMetaElementList.java:86
com.realtime.crossfire.jxclient.gui.list.GUIMetaElementList.metaserverModel
final MetaserverModel metaserverModel
The metaserver model to track.
Definition: GUIMetaElementList.java:56
com.realtime.crossfire.jxclient.gui.list.GUIMetaElementList.rebuildList
void rebuildList()
Rebuild the list cells.
Definition: GUIMetaElementList.java:182
com.realtime.crossfire.jxclient.gui.list.GUIMetaElementList.selectionChanged
void selectionChanged(final int selectedIndex)
Definition: GUIMetaElementList.java:206
com.realtime.crossfire.jxclient.metaserver.MetaserverModel.removeMetaserverEntryListener
void removeMetaserverEntryListener(final int index, @NotNull final MetaserverEntryListener listener)
Removes a metaserver entry listener for one entry.
Definition: MetaserverModel.java:193
com.realtime.crossfire.jxclient.gui.list.GUIList< GUIMetaElement >::resizeElements
int resizeElements(final int newSize)
Changes the number of list elements.
Definition: GUIList.java:212
com.realtime.crossfire.jxclient.gui.list.GUIList< GUIMetaElement >::cellHeight
final int cellHeight
The height of a list cell in pixels.
Definition: GUIList.java:66
com.realtime.crossfire.jxclient.gui.list.GUIMetaElementList.metaserverListener
final MetaserverListener metaserverListener
The MetaserverListener attached to metaserverModel.
Definition: GUIMetaElementList.java:123
com.realtime.crossfire.jxclient.gui.list.GUIList< GUIMetaElement >::addElement
void addElement( @NotNull final T element)
Adds an GUIElement to the list.
Definition: GUIList.java:195
com.realtime.crossfire.jxclient.gui.list.GUIMetaElementList.format
final String format
The format for drawing list entries.
Definition: GUIMetaElementList.java:92
com.realtime.crossfire.jxclient.gui.label.AbstractLabel.setText
void setText(@NotNull final String text)
Sets the label text.
Definition: AbstractLabel.java:120
com.realtime.crossfire.jxclient.gui
com.realtime.crossfire.jxclient.metaserver.MetaserverModel.size
int size()
Returns the number of metaserver entries.
Definition: MetaserverModel.java:114
com.realtime.crossfire.jxclient.metaserver.MetaserverEntry.getComment
String getComment()
Returns the server comment.
Definition: MetaserverEntry.java:169
com.realtime.crossfire.jxclient.gui.list.GUIMetaElementList.dispose
void dispose()
Definition: GUIMetaElementList.java:167
com.realtime.crossfire.jxclient.metaserver.MetaserverListener
Interface for listeners on metaserver related events.
Definition: MetaserverListener.java:31
com.realtime.crossfire.jxclient.gui.list.GUIMetaElementList.activeChanged
void activeChanged()
Definition: GUIMetaElementList.java:202
com.realtime.crossfire.jxclient.metaserver.MetaserverModel
Maintains the metaserver information.
Definition: MetaserverModel.java:40
com.realtime.crossfire.jxclient.gui.list.GUIMetaElementList.GUIMetaElementList
GUIMetaElementList(@NotNull final TooltipManager tooltipManager, @NotNull final GUIElementListener elementListener, @NotNull final String name, final int cellWidth, final int cellHeight, @NotNull final MetaserverModel metaserverModel, @Nullable final Image image, @NotNull final Font font, @NotNull final String format, @NotNull final String tooltip, @Nullable final GUIText hostname, @Nullable final AbstractLabel comment, @NotNull final CommandList connectCommandList, @NotNull final GuiFactory guiFactory)
Creates a new instance.
Definition: GUIMetaElementList.java:149
com.realtime.crossfire.jxclient.metaserver.MetaserverModel.getEntry
MetaserverEntry getEntry(final int index)
Returns a metaserver entry by index.
Definition: MetaserverModel.java:80
com.realtime.crossfire.jxclient.gui.list.GUIMetaElementList.getTooltip
String getTooltip(final int index)
Definition: GUIMetaElementList.java:225
com.realtime.crossfire.jxclient.gui.list.MetaElementCellRenderer
A ListCellRenderer that renders GUIMetaElement instances.
Definition: MetaElementCellRenderer.java:36
com.realtime.crossfire.jxclient.skin.skin.GuiFactory
Factory for creating Gui instances.
Definition: GuiFactory.java:41
com.realtime.crossfire.jxclient.gui.list.GUIMetaElementList.notifyOpen
void notifyOpen()
Definition: GUIMetaElementList.java:176
com.realtime.crossfire.jxclient.gui.commandlist.CommandList
A list of GUICommand instances.
Definition: CommandList.java:34
com.realtime.crossfire.jxclient.gui.list.GUIMetaElementList.tooltipManager
final TooltipManager tooltipManager
The TooltipManager to update.
Definition: GUIMetaElementList.java:62
com.realtime.crossfire.jxclient.gui.gui
Definition: AbstractGUIElement.java:23
com.realtime.crossfire.jxclient.gui.list.GUIMetaElementList.guiFactory
final GuiFactory guiFactory
The global GuiFactory instance.
Definition: GUIMetaElementList.java:116
com.realtime.crossfire.jxclient.gui.list.GUIMetaElementList.serialVersionUID
static final long serialVersionUID
The serial version UID.
Definition: GUIMetaElementList.java:50
com.realtime.crossfire
com.realtime.crossfire.jxclient.gui.gui.TooltipManager
Manages the tooltip display.
Definition: TooltipManager.java:33
com.realtime
com
com.realtime.crossfire.jxclient.gui.textinput.GUIText.setText
void setText(@NotNull final String text)
Sets the entered text.
Definition: GUIText.java:223
com.realtime.crossfire.jxclient.gui.list.GUIList< GUIMetaElement >::setChanged
void setChanged()
Definition: GUIList.java:517
com.realtime.crossfire.jxclient.metaserver.MetaserverEntryListener
Interface for listeners on metaserver entry related events.
Definition: MetaserverEntryListener.java:31
com.realtime.crossfire.jxclient.gui.list.GUIList< GUIMetaElement >::setSelectedIndex
void setSelectedIndex(final int newIndex)
Update the selected list entry.
Definition: GUIList.java:485
com.realtime.crossfire.jxclient.gui.list.GUIMetaElementList
A GUIList that tracks a Metaserver instance.
Definition: GUIMetaElementList.java:45
com.realtime.crossfire.jxclient.gui.gui.GUIElementListener
Listener for GUIElement related events.
Definition: GUIElementListener.java:32
com.realtime.crossfire.jxclient.gui.list.GUIMetaElementList.name
final String name
The name of this element.
Definition: GUIMetaElementList.java:74