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
com.realtime.crossfire.jxclient.skin.skin
Definition: DefaultJXCSkin.java:23
com.realtime.crossfire.jxclient.gui.list.GUIMetaElementList.guiFactory
final GuiFactory guiFactory
Definition: GUIMetaElementList.java:116
com.realtime.crossfire.jxclient.gui.label.AbstractLabel
Definition: AbstractLabel.java:43
com.realtime.crossfire.jxclient.gui.list.GUIMetaElement
Definition: GUIMetaElement.java:50
com.realtime.crossfire.jxclient.gui.list.GUIMetaElementList.image
final Image image
Definition: GUIMetaElementList.java:80
com.realtime.crossfire.jxclient.gui.list.GUIMetaElementList.serialVersionUID
static final long serialVersionUID
Definition: GUIMetaElementList.java:50
com.realtime.crossfire.jxclient.metaserver.MetaserverModel.addMetaserverEntryListener
void addMetaserverEntryListener(final int index, @NotNull final MetaserverEntryListener listener)
Definition: MetaserverModel.java:184
com.realtime.crossfire.jxclient.gui.list.GUIMetaElementList.selectionChanged
void selectionChanged(final int selectedIndex)
Definition: GUIMetaElementList.java:206
com.realtime.crossfire.jxclient.gui.list.GUIList< GUIMetaElement >::resizeElements
int resizeElements(final int newSize)
Definition: GUIList.java:212
com.realtime.crossfire.jxclient.gui.commandlist.CommandList
Definition: CommandList.java:34
com.realtime.crossfire.jxclient.skin
com.realtime.crossfire.jxclient.gui.list.GUIMetaElementList.metaserverModel
final MetaserverModel metaserverModel
Definition: GUIMetaElementList.java:56
com.realtime.crossfire.jxclient.gui.list.GUIMetaElementList.comment
final AbstractLabel comment
Definition: GUIMetaElementList.java:110
com.realtime.crossfire.jxclient.gui.list.MetaElementCellRenderer
Definition: MetaElementCellRenderer.java:36
com.realtime.crossfire.jxclient.metaserver.MetaserverListener
Definition: MetaserverListener.java:31
com.realtime.crossfire.jxclient.metaserver
Definition: DefaultMetaserver.java:23
com.realtime.crossfire.jxclient.gui.list.GUIMetaElementList
Definition: GUIMetaElementList.java:45
com.realtime.crossfire.jxclient.gui.label
Definition: AbstractLabel.java:23
com.realtime.crossfire.jxclient.gui.list.GUIMetaElementList.font
final Font font
Definition: GUIMetaElementList.java:86
com.realtime.crossfire.jxclient.skin.skin.GuiFactory
Definition: GuiFactory.java:41
com.realtime.crossfire.jxclient.gui.textinput
Definition: ActivateCommandInputCommand.java:23
com.realtime.crossfire.jxclient.gui.commandlist
Definition: CommandList.java:23
com.realtime.crossfire.jxclient.metaserver.MetaserverEntry.getHostname
String getHostname()
Definition: MetaserverEntry.java:143
com.realtime.crossfire.jxclient.gui.list.GUIMetaElementList.hostname
final GUIText hostname
Definition: GUIMetaElementList.java:104
com.realtime.crossfire.jxclient.metaserver.MetaserverEntry.format
String format(@NotNull final String format)
Definition: MetaserverEntry.java:284
com.realtime.crossfire.jxclient.gui.list.GUIList< GUIMetaElement >::cellHeight
final int cellHeight
Definition: GUIList.java:66
com.realtime.crossfire.jxclient.metaserver.Metaserver
Definition: Metaserver.java:32
com.realtime.crossfire.jxclient.metaserver.MetaserverModel.getEntry
MetaserverEntry getEntry(final int 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.GUIMetaElementList.format
final String format
Definition: GUIMetaElementList.java:92
com.realtime.crossfire.jxclient.gui.list.GUIMetaElementList.metaserverEntryListener
final MetaserverEntryListener metaserverEntryListener
Definition: GUIMetaElementList.java:130
com.realtime.crossfire.jxclient.gui.list.GUIMetaElementList.notifyOpen
void notifyOpen()
Definition: GUIMetaElementList.java:176
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)
Definition: GUIMetaElementList.java:149
com.realtime.crossfire.jxclient.gui.list.GUIMetaElementList.setSelectedHostname
void setSelectedHostname(@NotNull final String serverName)
Definition: GUIMetaElementList.java:234
com.realtime.crossfire.jxclient.gui.list.GUIMetaElementList.metaserverListener
final MetaserverListener metaserverListener
Definition: GUIMetaElementList.java:123
com.realtime.crossfire.jxclient.metaserver.MetaserverEntry.getComment
String getComment()
Definition: MetaserverEntry.java:169
com.realtime.crossfire.jxclient.gui
com.realtime.crossfire.jxclient.gui.list.GUIList< GUIMetaElement >::setSelectedIndex
void setSelectedIndex(final int newIndex)
Definition: GUIList.java:497
com.realtime.crossfire.jxclient.metaserver.MetaserverModel.removeMetaserverEntryListener
void removeMetaserverEntryListener(final int index, @NotNull final MetaserverEntryListener listener)
Definition: MetaserverModel.java:193
com.realtime.crossfire.jxclient.gui.list.GUIMetaElementList.elementListener
final GUIElementListener elementListener
Definition: GUIMetaElementList.java:68
com.realtime.crossfire.jxclient.gui.list.GUIList< GUIMetaElement >::setChanged
void setChanged()
Definition: GUIList.java:529
com.realtime.crossfire.jxclient.metaserver.MetaserverModel.size
int size()
Definition: MetaserverModel.java:114
com.realtime.crossfire.jxclient.gui.gui.TooltipManager
Definition: TooltipManager.java:33
com.realtime.crossfire.jxclient.gui.list.GUIList
Definition: GUIList.java:56
com.realtime.crossfire.jxclient.gui.list.GUIMetaElementList.tooltip
final String tooltip
Definition: GUIMetaElementList.java:98
com.realtime.crossfire.jxclient.gui.gui
Definition: AbstractGUIElement.java:23
com.realtime.crossfire.jxclient.gui.list.GUIMetaElementList.tooltipManager
final TooltipManager tooltipManager
Definition: GUIMetaElementList.java:62
com.realtime.crossfire.jxclient.gui.label.AbstractLabel.setText
void setText(@NotNull final String text)
Definition: AbstractLabel.java:120
com.realtime.crossfire
com.realtime.crossfire.jxclient.gui.textinput.GUIText
Definition: GUIText.java:61
com.realtime
com.realtime.crossfire.jxclient.gui.textinput.GUIText.setText
void setText(@NotNull final String text)
Definition: GUIText.java:223
com.realtime.crossfire.jxclient.gui.list.GUIMetaElementList.rebuildList
void rebuildList()
Definition: GUIMetaElementList.java:182
com
com.realtime.crossfire.jxclient.metaserver.MetaserverModel.getServerIndex
int getServerIndex(@NotNull final String serverName)
Definition: MetaserverModel.java:95
com.realtime.crossfire.jxclient.gui.list.GUIMetaElementList.dispose
void dispose()
Definition: GUIMetaElementList.java:167
com.realtime.crossfire.jxclient.gui.list.GUIList< GUIMetaElement >::addElement
void addElement( @NotNull final T element)
Definition: GUIList.java:195
com.realtime.crossfire.jxclient.gui.list.GUIMetaElementList.name
final String name
Definition: GUIMetaElementList.java:74
com.realtime.crossfire.jxclient.metaserver.MetaserverModel.removeMetaserverListener
void removeMetaserverListener(@NotNull final MetaserverListener listener)
Definition: MetaserverModel.java:175
com.realtime.crossfire.jxclient.metaserver.MetaserverEntry
Definition: MetaserverEntry.java:33
com.realtime.crossfire.jxclient.metaserver.MetaserverModel
Definition: MetaserverModel.java:40
com.realtime.crossfire.jxclient.metaserver.MetaserverEntryListener
Definition: MetaserverEntryListener.java:31
com.realtime.crossfire.jxclient.gui.gui.GUIElementListener
Definition: GUIElementListener.java:32
com.realtime.crossfire.jxclient.gui.list.GUIMetaElementList.activeChanged
void activeChanged()
Definition: GUIMetaElementList.java:202