Crossfire JXClient, Trunk
GUIMetaElement.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.Color;
37 import java.awt.Dimension;
38 import java.awt.Font;
39 import java.awt.Graphics;
40 import java.awt.Image;
41 import java.awt.event.MouseEvent;
42 import org.jetbrains.annotations.NotNull;
43 import org.jetbrains.annotations.Nullable;
44 
50 public class GUIMetaElement extends ActivatableGUIElement implements GUIScrollable {
51 
55  private static final long serialVersionUID = 1;
56 
60  @NotNull
62 
67  @Nullable
68  private final Image image;
69 
73  @NotNull
74  private final Font font;
75 
79  @NotNull
80  private final String format;
81 
85  @NotNull
86  private final String tooltip;
87 
91  private final int defaultIndex;
92 
96  private int index;
97 
101  private boolean selected;
102 
106  @NotNull
108  setChanged();
109  tooltipChanged();
110  };
111 
126  public GUIMetaElement(@NotNull final TooltipManager tooltipManager, @NotNull final GUIElementListener elementListener, @NotNull final MetaserverModel metaserverModel, @NotNull final String name, @Nullable final Image image, @NotNull final Font font, final int defaultIndex, @NotNull final String format, @NotNull final String tooltip, @NotNull final GuiFactory guiFactory) {
128  this.metaserverModel = metaserverModel;
129  this.image = image;
130  this.font = font;
131  this.defaultIndex = defaultIndex;
133  this.format = format;
134  this.tooltip = tooltip;
135  this.metaserverModel.addMetaserverEntryListener(index, metaserverEntryListener);
136  setChanged();
137  }
138 
139  @Override
140  public void dispose() {
141  super.dispose();
143  }
144 
145  @Override
146  public void paintComponent(@NotNull final Graphics g) {
147  super.paintComponent(g);
148  g.setColor(new Color(0, 0, 0, 0.0f));
149  g.fillRect(0, 0, getWidth(), getHeight());
150  g.setFont(font);
151  g.setColor(isActive() || selected ? Color.RED : Color.GRAY);
152  if (image != null) {
153  g.drawImage(image, 0, 0, null);
154  }
155  final MetaserverEntry metaEntry = metaserverModel.getEntry(index);
156  g.drawString(metaEntry == null ? "" : metaEntry.format(format), image == null ? 0 : image.getWidth(this), font.getSize()+1);
157  }
158 
159  @Nullable
160  @Override
161  @SuppressWarnings("MethodDoesntCallSuperMethod")
162  public Dimension getPreferredSize() {
163  return getMinimumSizeInt();
164  }
165 
166  @Nullable
167  @Override
168  @SuppressWarnings("MethodDoesntCallSuperMethod")
169  public Dimension getMinimumSize() {
170  return getMinimumSizeInt();
171  }
172 
177  @NotNull
178  private Dimension getMinimumSizeInt() {
179  final MetaserverEntry metaEntry = metaserverModel.getEntry(index);
180  final Dimension result = GuiUtils.getTextDimension(metaEntry == null ? "" : metaEntry.format(format), getFontMetrics(font));
181  if (image != null) {
182  result.width += image.getWidth(this);
183  }
184  return result;
185  }
186 
187  @Override
188  public void mouseClicked(@NotNull final MouseEvent e) {
189  super.mouseClicked(e);
190 
191  if (!isEnabled()) {
192  return;
193  }
194 
195  final int b = e.getButton();
196  switch (b) {
197  case MouseEvent.BUTTON1:
198  setActive(true);
199  setChanged();
200  break;
201 
202  case MouseEvent.BUTTON2:
203  break;
204 
205  case MouseEvent.BUTTON3:
206  break;
207  }
208  }
209 
210  @Nullable
211  @Override
213  final MetaserverEntry metaEntry = metaserverModel.getEntry(index);
214  return metaEntry == null ? null : newTooltipText(metaEntry.format(tooltip));
215  }
216 
217  @Override
218  public void notifyOpen() {
219  }
220 
221  @Override
222  public void execute() {
223  // ignore
224  }
225 
226  @Override
227  public boolean canScroll(final int distance) {
228  if (distance < 0) {
229  return index >= -distance;
230  }
231  //noinspection SimplifiableIfStatement
232  if (distance > 0) {
233  return index+distance < metaserverModel.size();
234  }
235  return false;
236  }
237 
238  @Override
239  public void scroll(final int distance) {
240  setIndex(index+distance);
241  }
242 
243  @Override
244  public void resetScroll() {
245  if (index != defaultIndex) {
247  }
248  }
249 
250  @Override
251  protected void activeChanged() {
252  setChanged();
253  }
254 
259  public int getIndex() {
260  return index;
261  }
262 
267  public void setIndex(final int index) {
268  if (this.index == index) {
269  return;
270  }
271 
273  this.index = index;
275  setChanged();
276  tooltipChanged();
277  }
278 
283  public void setSelected(final boolean selected) {
284  if (this.selected == selected) {
285  return;
286  }
287 
288  this.selected = selected;
289  setChanged();
290  }
291 
292 }
com.realtime.crossfire.jxclient.gui.gui.AbstractGUIElement.newTooltipText
TooltipText newTooltipText(@Nullable final String tooltipText)
Definition: AbstractGUIElement.java:247
com.realtime.crossfire.jxclient.gui.gui.AbstractGUIElement.name
final String name
Definition: AbstractGUIElement.java:77
com.realtime.crossfire.jxclient.gui.list.GUIMetaElement.selected
boolean selected
Definition: GUIMetaElement.java:101
com.realtime.crossfire.jxclient
com.realtime.crossfire.jxclient.skin.skin
Definition: DefaultJXCSkin.java:23
com.realtime.crossfire.jxclient.gui.list.GUIMetaElement.scroll
void scroll(final int distance)
Definition: GUIMetaElement.java:239
com.realtime.crossfire.jxclient.gui.list.GUIMetaElement
Definition: GUIMetaElement.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.GUIMetaElement.GUIMetaElement
GUIMetaElement(@NotNull final TooltipManager tooltipManager, @NotNull final GUIElementListener elementListener, @NotNull final MetaserverModel metaserverModel, @NotNull final String name, @Nullable final Image image, @NotNull final Font font, final int defaultIndex, @NotNull final String format, @NotNull final String tooltip, @NotNull final GuiFactory guiFactory)
Definition: GUIMetaElement.java:126
com.realtime.crossfire.jxclient.gui.list.GUIMetaElement.resetScroll
void resetScroll()
Definition: GUIMetaElement.java:244
com.realtime.crossfire.jxclient.skin
com.realtime.crossfire.jxclient.gui.list.GUIMetaElement.metaserverModel
final MetaserverModel metaserverModel
Definition: GUIMetaElement.java:61
com.realtime.crossfire.jxclient.metaserver
Definition: DefaultMetaserver.java:23
com.realtime.crossfire.jxclient.gui.gui.ActivatableGUIElement
Definition: ActivatableGUIElement.java:33
com.realtime.crossfire.jxclient.gui.list.GUIMetaElement.setSelected
void setSelected(final boolean selected)
Definition: GUIMetaElement.java:283
com.realtime.crossfire.jxclient.skin.skin.GuiFactory
Definition: GuiFactory.java:41
com.realtime.crossfire.jxclient.gui.gui.GuiUtils.getTextDimension
static Dimension getTextDimension(@NotNull final String text, @NotNull final FontMetrics fontMetrics)
Definition: GuiUtils.java:50
com.realtime.crossfire.jxclient.gui.list.GUIMetaElement.getMinimumSize
Dimension getMinimumSize()
Definition: GUIMetaElement.java:169
com.realtime.crossfire.jxclient.gui.list.GUIMetaElement.getIndex
int getIndex()
Definition: GUIMetaElement.java:259
com.realtime.crossfire.jxclient.metaserver.MetaserverEntry.format
String format(@NotNull final String format)
Definition: MetaserverEntry.java:284
com.realtime.crossfire.jxclient.gui.gui.GuiUtils
Definition: GuiUtils.java:34
com.realtime.crossfire.jxclient.metaserver.Metaserver
Definition: Metaserver.java:32
com.realtime.crossfire.jxclient.gui.list.GUIMetaElement.notifyOpen
void notifyOpen()
Definition: GUIMetaElement.java:218
com.realtime.crossfire.jxclient.metaserver.MetaserverModel.getEntry
MetaserverEntry getEntry(final int index)
Definition: MetaserverModel.java:80
com.realtime.crossfire.jxclient.gui.gui.AbstractGUIElement.tooltipChanged
void tooltipChanged()
Definition: AbstractGUIElement.java:265
com.realtime.crossfire.jxclient.gui.list.GUIMetaElement.getPreferredSize
Dimension getPreferredSize()
Definition: GUIMetaElement.java:162
com.realtime.crossfire.jxclient.gui.list.GUIMetaElement.setIndex
void setIndex(final int index)
Definition: GUIMetaElement.java:267
com.realtime.crossfire.jxclient.gui.list.GUIMetaElement.mouseClicked
void mouseClicked(@NotNull final MouseEvent e)
Definition: GUIMetaElement.java:188
com.realtime.crossfire.jxclient.gui.list.GUIMetaElement.font
final Font font
Definition: GUIMetaElement.java:74
com.realtime.crossfire.jxclient.gui.list.GUIMetaElement.dispose
void dispose()
Definition: GUIMetaElement.java:140
com.realtime.crossfire.jxclient.gui.list.GUIMetaElement.activeChanged
void activeChanged()
Definition: GUIMetaElement.java:251
com.realtime.crossfire.jxclient.gui.list.GUIMetaElement.getTooltip
TooltipText getTooltip()
Definition: GUIMetaElement.java:212
com.realtime.crossfire.jxclient.gui.list.GUIMetaElement.serialVersionUID
static final long serialVersionUID
Definition: GUIMetaElement.java:55
com.realtime.crossfire.jxclient.gui
com.realtime.crossfire.jxclient.gui.gui.ActivatableGUIElement.elementListener
final GUIElementListener elementListener
Definition: ActivatableGUIElement.java:44
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.GUIMetaElement.canScroll
boolean canScroll(final int distance)
Definition: GUIMetaElement.java:227
com.realtime.crossfire.jxclient.gui.list.GUIMetaElement.index
int index
Definition: GUIMetaElement.java:96
com.realtime.crossfire.jxclient.gui.list.GUIMetaElement.execute
void execute()
Definition: GUIMetaElement.java:222
com.realtime.crossfire.jxclient.gui.list.GUIMetaElement.format
final String format
Definition: GUIMetaElement.java:80
com.realtime.crossfire.jxclient.metaserver.MetaserverModel.size
int size()
Definition: MetaserverModel.java:114
com.realtime.crossfire.jxclient.gui.list.GUIMetaElement.defaultIndex
final int defaultIndex
Definition: GUIMetaElement.java:91
com.realtime.crossfire.jxclient.gui.gui.TooltipManager
Definition: TooltipManager.java:33
com.realtime.crossfire.jxclient.gui.list.GUIMetaElement.image
final Image image
Definition: GUIMetaElement.java:68
com.realtime.crossfire.jxclient.gui.list.GUIMetaElement.paintComponent
void paintComponent(@NotNull final Graphics g)
Definition: GUIMetaElement.java:146
com.realtime.crossfire.jxclient.gui.scrollable.GUIScrollable
Definition: GUIScrollable.java:32
com.realtime.crossfire.jxclient.gui.gui
Definition: AbstractGUIElement.java:23
com.realtime.crossfire.jxclient.gui.gui.TooltipText
Definition: TooltipText.java:31
com.realtime.crossfire
com.realtime.crossfire.jxclient.gui.list.GUIMetaElement.metaserverEntryListener
final MetaserverEntryListener metaserverEntryListener
Definition: GUIMetaElement.java:107
com.realtime
com.realtime.crossfire.jxclient.gui.scrollable
Definition: GUIScrollable.java:23
com
com.realtime.crossfire.jxclient.gui.list.GUIMetaElement.getMinimumSizeInt
Dimension getMinimumSizeInt()
Definition: GUIMetaElement.java:178
com.realtime.crossfire.jxclient.gui.gui.ActivatableGUIElement.setActive
void setActive(final boolean active)
Definition: ActivatableGUIElement.java:115
com.realtime.crossfire.jxclient.gui.gui.AbstractGUIElement.setChanged
void setChanged()
Definition: AbstractGUIElement.java:223
com.realtime.crossfire.jxclient.gui.gui.AbstractGUIElement.guiFactory
final GuiFactory guiFactory
Definition: AbstractGUIElement.java:48
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.gui.AbstractGUIElement.tooltipManager
final TooltipManager tooltipManager
Definition: AbstractGUIElement.java:83
com.realtime.crossfire.jxclient.gui.gui.ActivatableGUIElement.isActive
boolean isActive()
Definition: ActivatableGUIElement.java:124
com.realtime.crossfire.jxclient.gui.list.GUIMetaElement.tooltip
final String tooltip
Definition: GUIMetaElement.java:86