Crossfire JXClient, Trunk  R20561
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-2011 Andreas Kirschbaum.
20  */
21 
22 package com.realtime.crossfire.jxclient.gui.list;
23 
34 import java.awt.Font;
35 import java.awt.Image;
36 import org.jetbrains.annotations.NotNull;
37 import org.jetbrains.annotations.Nullable;
38 
43 public class GUIMetaElementList extends GUIList<GUIMetaElement> {
44 
48  private static final long serialVersionUID = 1;
49 
53  @NotNull
55 
59  @NotNull
61 
65  @NotNull
67 
71  @NotNull
72  private final String name;
73 
77  @Nullable
78  private final Image image;
79 
83  @NotNull
84  private final Font font;
85 
89  @NotNull
90  private final String format;
91 
95  @NotNull
96  private final String tooltip;
97 
101  @Nullable
102  private final GUIText hostname;
103 
107  @Nullable
108  private final AbstractLabel comment;
109 
114  @NotNull
115  private final MetaserverListener metaserverListener = this::rebuildList;
116 
121  @NotNull
122  private final MetaserverEntryListener metaserverEntryListener = this::setChanged;
123 
140  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) {
141  super(tooltipManager, elementListener, name, cellWidth, cellHeight, new MetaElementCellRenderer(new GUIMetaElement(tooltipManager, elementListener, metaserverModel, name+"_template", image, font, 0, format, tooltip)), connectCommandList);
142  this.metaserverModel = metaserverModel;
143  this.tooltipManager = tooltipManager;
144  this.elementListener = elementListener;
145  this.name = name;
146  this.image = image;
147  this.font = font;
148  this.format = format;
149  this.tooltip = tooltip;
150  this.hostname = hostname;
151  this.comment = comment;
152  this.metaserverModel.addMetaserverListener(metaserverListener);
153  rebuildList();
154  }
155 
159  @Override
160  public void dispose() {
161  super.dispose();
162  for (int i = 0; i < metaserverModel.size(); i++) {
163  metaserverModel.removeMetaserverEntryListener(i, metaserverEntryListener);
164  }
165  metaserverModel.removeMetaserverListener(metaserverListener);
166  }
167 
171  private void rebuildList() {
172  synchronized (getTreeLock()) {
173  final int newSize = metaserverModel.size();
174  final int oldSize = resizeElements(newSize);
175  if (oldSize < newSize) {
176  for (int i = oldSize; i < newSize; i++) {
177  final GUIMetaElement metaElement = new GUIMetaElement(tooltipManager, elementListener, metaserverModel, name+i, image, font, i, format, tooltip);
178  addElement(metaElement);
179  metaserverModel.addMetaserverEntryListener(i, metaserverEntryListener);
180  }
181  } else {
182  for (int i = newSize; i < oldSize; i++) {
183  metaserverModel.removeMetaserverEntryListener(i, metaserverEntryListener);
184  }
185  }
186  }
187  setChanged();
188  }
189 
193  @Override
194  protected void activeChanged() {
195  }
196 
200  @Override
201  protected void selectionChanged(final int selectedIndex) {
202  if (selectedIndex == -1) {
203  // do not update hostname
204  if (comment != null) {
205  comment.setText("");
206  }
207  } else {
208  final MetaserverEntry metaEntry = metaserverModel.getEntry(selectedIndex);
209  if (hostname != null) {
210  hostname.setText(metaEntry == null ? "" : metaEntry.getHostname());
211  }
212  if (comment != null) {
213  comment.setText(metaEntry == null ? "" : metaEntry.getComment());
214  }
215  }
216  }
217 
222  @Override
223  protected void updateTooltip(final int index, final int x, final int y, final int w, final int h) {
224  final MetaserverEntry metaEntry = metaserverModel.getEntry(index);
225  setTooltipText(metaEntry == null ? null : metaEntry.format(tooltip), x, y, w, h);
226  }
227 
232  public void setSelectedHostname(@NotNull final String serverName) {
233  final int index = metaserverModel.getServerIndex(serverName);
234  setSelectedIndex(index);
235  if (index == -1 && hostname != null) {
236  hostname.setText(serverName);
237  }
238  }
239 
240 }
Abstract base class for all label classes.
final AbstractLabel comment
The comment field to update; may be.
void setText(@NotNull final String text)
The label text.
String format(@NotNull final String format)
Returns a formatted string using the given format.
void setSelectedIndex(final int newIndex)
Update the selected list entry.
Definition: GUIList.java:469
final int cellHeight
The height of a list cell in pixels.
Definition: GUIList.java:64
void setSelectedHostname(@NotNull final String serverName)
Select an entry by server name.
final GUIElementListener elementListener
The GUIElementListener to use.
static final long serialVersionUID
The serial version UID.
Interface for listeners on metaserver related events.
final MetaserverListener metaserverListener
The MetaserverListener attached to metaserverModel.
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)
Creates a new instance.
final String tooltip
The tooltip format for drawing list entries.
final MetaserverModel metaserverModel
The metaserver model to track.
int resizeElements(final int newSize)
Changes the number of list elements.
Definition: GUIList.java:205
final GUIText hostname
The hostname input field to update; may be.
int size()
Returns the number of metaserver entries.
int getServerIndex(@NotNull final String serverName)
Returns the index of an entry by server name.
Represents a response line from the metaserver.
void addElement( @NotNull final T element)
Adds an GUIElement to the list.
Definition: GUIList.java:188
MetaserverEntry getEntry(final int index)
Returns a metaserver entry by index.
final MetaserverEntryListener metaserverEntryListener
The MetaserverEntryListener attached to all tracked metaserver entries.
void removeMetaserverEntryListener(final int index, @NotNull final MetaserverEntryListener listener)
Removes a metaserver entry listener for one entry.
void updateTooltip(final int index, final int x, final int y, final int w, final int h)
Updates the tooltip text.
Queries Crossfire&#39;s metaserver to learn about existing servers.
Definition: Metaserver.java:39
A GUIList that tracks a Metaserver instance.
final Font font
The font for drawing list entries.
void removeMetaserverListener(@NotNull final MetaserverListener listener)
Removes a metaserver listener.
Interface for listeners on metaserver entry related events.
final Image image
The image for drawing list entries.
void setText(@NotNull final String text)
Sets the entered text.
Definition: GUIText.java:205
void addMetaserverEntryListener(final int index, @NotNull final MetaserverEntryListener listener)
Adds a metaserver entry listener for one entry.
A GUIElement that displays a list of entries.
Definition: GUIList.java:54
final String format
The format for drawing list entries.
A ListCellRenderer that renders GUIMetaElement instances.
final TooltipManager tooltipManager
The TooltipManager to update.
Abstract base class for text input fields.
Definition: GUIText.java:57