Crossfire JXClient, Trunk
GUICharacter.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 org.jetbrains.annotations.NotNull;
41 import org.jetbrains.annotations.Nullable;
42 
47 public class GUICharacter extends ActivatableGUIElement implements GUIScrollable {
48 
52  private static final long serialVersionUID = 1;
53 
57  @NotNull
58  private final FacesManager facesManager;
59 
64 
68  private int index;
69 
73  @NotNull
74  private final Font font;
75 
79  private boolean selected;
80 
84  @NotNull
86  setChanged();
88  };
89 
103  public GUICharacter(@NotNull final TooltipManager tooltipManager, @NotNull final FacesManager facesManager, @NotNull final GUIElementListener elementListener, @NotNull final String name, final int w, final int h, @NotNull final Font font, final int defaultIndex, final CharacterModel characterModel, @NotNull final GuiFactory guiFactory) {
105  setSize(w, h);
106  this.facesManager = facesManager;
107  this.characterModel = characterModel;
108  this.font = font;
109  index = defaultIndex;
110  }
111 
112  @Override
113  protected void activeChanged() {
114  throw new UnsupportedOperationException("Not supported yet.");
115  }
116 
117  @Override
118  public void paintComponent(@NotNull final Graphics g) {
119  super.paintComponent(g);
120  g.setColor(new Color(0, 0, 0, 0.0f));
121  g.fillRect(0, 0, getWidth(), getHeight());
122  g.setFont(font);
123  g.setColor(isActive() || selected ? Color.RED : Color.GRAY);
125  if (character == null) {
126  return;
127  }
128 
129  /*
130  * @todo improve, make skin-based ; also getOriginalImageIcon can
131  * spit warnings about undefined face, fix somehow.
132  */
133  final int y = (getHeight()+font.getSize())/2;
134  int x = 0;
135  g.drawImage(facesManager.getOriginalImageIcon(character.getFaceNumber(), null).getImage(), x, (getHeight()-facesManager.getOriginalImageIcon(character.getFaceNumber(), null).getImage().getHeight(null))/2, this);
136  x += 40;
137  g.drawString(character.getName(), x, y);
138  x += 150;
139  g.drawString(character.getRace(), x, y);
140  x += 80;
141  g.drawString(character.getParty(), x, y);
142  x += 100;
143  g.drawString(character.getMap(), x, y);
144  }
145 
146  @Nullable
147  @Override
148  @SuppressWarnings("MethodDoesntCallSuperMethod")
149  public Dimension getPreferredSize() {
150  return getMinimumSizeInt();
151  }
152 
153  @Nullable
154  @Override
155  @SuppressWarnings("MethodDoesntCallSuperMethod")
156  public Dimension getMinimumSize() {
157  return getMinimumSizeInt();
158  }
159 
164  @NotNull
165  private Dimension getMinimumSizeInt() {
167  return GuiUtils.getTextDimension(character == null ? "" : character.getName(), getFontMetrics(font));
168  }
169 
170  @Override
171  public boolean canScroll(final int distance) {
172  throw new UnsupportedOperationException("Not supported yet.");
173  }
174 
175  @Override
176  public void scroll(final int distance) {
177  throw new UnsupportedOperationException("Not supported yet.");
178  }
179 
180  @Override
181  public void resetScroll() {
182  throw new UnsupportedOperationException("Not supported yet.");
183  }
184 
189  public int getIndex() {
190  return index;
191  }
192 
197  public void setIndex(final int index) {
198  if (this.index == index) {
199  return;
200  }
201 
203  this.index = index;
205  setChanged();
206  tooltipChanged();
207  }
208 
213  public void setSelected(final boolean selected) {
214  if (this.selected == selected) {
215  return;
216  }
217 
218  this.selected = selected;
219  setChanged();
220  }
221 
222  @Override
223  public void execute() {
224  // ignore
225  }
226 
227  @Override
228  public void notifyOpen() {
229  }
230 
231  @Nullable
232  @Override
234  final CharacterInformation characterInformation = characterModel.getEntry(index);
235  return characterInformation == null ? null : newTooltipText(characterInformation.getName());
236  }
237 
238 }
com.realtime.crossfire.jxclient
com.realtime.crossfire.jxclient.skin.skin
Definition: DefaultJXCSkin.java:23
com.realtime.crossfire.jxclient.faces.FacesManager
Maintains a mapping of face numbers to face data.
Definition: FacesManager.java:40
com.realtime.crossfire.jxclient.gui.list.GUICharacter.activeChanged
void activeChanged()
Will be called whenever the active state has changed.
Definition: GUICharacter.java:113
com.realtime.crossfire.jxclient.gui.gui.AbstractGUIElement.tooltipChanged
void tooltipChanged()
Must be called whenever the tooltip may have changed.
Definition: AbstractGUIElement.java:264
com.realtime.crossfire.jxclient.account.CharacterInformation.getParty
String getParty()
Returns the character's party.
Definition: CharacterInformation.java:143
com.realtime.crossfire.jxclient.gui.list.GUICharacter.serialVersionUID
static final long serialVersionUID
The serial version UID.
Definition: GUICharacter.java:52
com.realtime.crossfire.jxclient.skin
com.realtime.crossfire.jxclient.faces.FacesManager.getOriginalImageIcon
ImageIcon getOriginalImageIcon(int faceNum, @Nullable AtomicBoolean returnIsUnknownImage)
Returns the "original" face for a face ID.
com.realtime.crossfire.jxclient.gui.list.GUICharacter.characterModel
final CharacterModel characterModel
Character model to display items from.
Definition: GUICharacter.java:63
com.realtime.crossfire.jxclient.gui.scrollable.GUIScrollable
Interface for GUIElements that support scrolling.
Definition: GUIScrollable.java:32
com.realtime.crossfire.jxclient.account.CharacterInformation.getRace
String getRace()
Returns the character's race.
Definition: CharacterInformation.java:125
com.realtime.crossfire.jxclient.gui.list.GUICharacter.resetScroll
void resetScroll()
Resets the scroll index to the default value.
Definition: GUICharacter.java:181
com.realtime.crossfire.jxclient.account.CharacterModel.getEntry
CharacterInformation getEntry(final int index)
Returns a character entry by index.
Definition: CharacterModel.java:80
com.realtime.crossfire.jxclient.gui.gui.AbstractGUIElement.setChanged
void setChanged()
Records that the contents have changed and must be repainted.
Definition: AbstractGUIElement.java:223
com.realtime.crossfire.jxclient.account.CharacterInformation.getFaceNumber
int getFaceNumber()
Returns the character's face number.
Definition: CharacterInformation.java:168
com.realtime.crossfire.jxclient.gui.list.GUICharacter.getIndex
int getIndex()
Returns the index of this element.
Definition: GUICharacter.java:189
com.realtime.crossfire.jxclient.gui.gui.GuiUtils.getTextDimension
static Dimension getTextDimension(@NotNull final String text, @NotNull final FontMetrics fontMetrics)
Returns the extents of a string when rendered in a given Font on this component.
Definition: GuiUtils.java:50
com.realtime.crossfire.jxclient.gui.list.GUICharacter.canScroll
boolean canScroll(final int distance)
Returns whether scrolling is possible.
Definition: GUICharacter.java:171
com.realtime.crossfire.jxclient.gui.list.GUICharacter.getTooltip
TooltipText getTooltip()
Returns the current tooltip text.
Definition: GUICharacter.java:233
com.realtime.crossfire.jxclient.gui.list.GUICharacter.getMinimumSize
Dimension getMinimumSize()
Definition: GUICharacter.java:156
com.realtime.crossfire.jxclient.gui.gui.ActivatableGUIElement
A GUIElement that can be set to active or inactive.
Definition: ActivatableGUIElement.java:33
com.realtime.crossfire.jxclient.faces
Manages image information ("faces") needed to display the map view, items, and spell icons.
Definition: AbstractFaceQueue.java:23
com.realtime.crossfire.jxclient.gui.list.GUICharacter.font
final Font font
The font to use.
Definition: GUICharacter.java:74
com.realtime.crossfire.jxclient.gui.list.GUICharacter.setIndex
void setIndex(final int index)
Sets the index of this element.
Definition: GUICharacter.java:197
com.realtime.crossfire.jxclient.gui.list.GUICharacter.setSelected
void setSelected(final boolean selected)
Sets the selected state.
Definition: GUICharacter.java:213
com.realtime.crossfire.jxclient.account.CharacterModel
Maintains the character list for an account.
Definition: CharacterModel.java:40
com.realtime.crossfire.jxclient.gui.gui.ActivatableGUIElement.isActive
boolean isActive()
Returns whether a GUI element is active.
Definition: ActivatableGUIElement.java:124
com.realtime.crossfire.jxclient.gui.list.GUICharacter.selected
boolean selected
If set, paint the element in "selected" state.
Definition: GUICharacter.java:79
com.realtime.crossfire.jxclient.gui.list.GUICharacter.GUICharacter
GUICharacter(@NotNull final TooltipManager tooltipManager, @NotNull final FacesManager facesManager, @NotNull final GUIElementListener elementListener, @NotNull final String name, final int w, final int h, @NotNull final Font font, final int defaultIndex, final CharacterModel characterModel, @NotNull final GuiFactory guiFactory)
Creates a new instance.
Definition: GUICharacter.java:103
com.realtime.crossfire.jxclient.gui.list.GUICharacter.getPreferredSize
Dimension getPreferredSize()
Definition: GUICharacter.java:149
com.realtime.crossfire.jxclient.account.CharacterInformation.getName
String getName()
Returns the character's name.
Definition: CharacterInformation.java:107
com.realtime.crossfire.jxclient.gui.list.GUICharacter
A character displaying GUI element.
Definition: GUICharacter.java:47
com.realtime.crossfire.jxclient.gui.gui.GuiUtils
Utility class for Gui related functions.
Definition: GuiUtils.java:34
com.realtime.crossfire.jxclient.gui.list.GUICharacter.characterInformationListener
final CharacterInformationListener characterInformationListener
All listeners to the entry itself.
Definition: GUICharacter.java:85
com.realtime.crossfire.jxclient.gui.list.GUICharacter.execute
void execute()
Executes the actions associated with this GUI element.
Definition: GUICharacter.java:223
com.realtime.crossfire.jxclient.gui
com.realtime.crossfire.jxclient.account.CharacterInformationListener
Callback when a CharacterInformation is changed.
Definition: CharacterInformationListener.java:31
com.realtime.crossfire.jxclient.gui.gui.AbstractGUIElement.guiFactory
final GuiFactory guiFactory
The global GuiFactory instance.
Definition: AbstractGUIElement.java:48
com.realtime.crossfire.jxclient.account.CharacterInformation
Information for one character for an account.
Definition: CharacterInformation.java:32
com.realtime.crossfire.jxclient.gui.gui.AbstractGUIElement.newTooltipText
TooltipText newTooltipText(@Nullable final String tooltipText)
Creates a TooltipText instance relative to this instance.
Definition: AbstractGUIElement.java:247
com.realtime.crossfire.jxclient.gui.gui.ActivatableGUIElement.elementListener
final GUIElementListener elementListener
The GUIElementListener to notify.
Definition: ActivatableGUIElement.java:44
com.realtime.crossfire.jxclient.gui.list.GUICharacter.scroll
void scroll(final int distance)
Scrolls the element.
Definition: GUICharacter.java:176
com.realtime.crossfire.jxclient.account
Definition: CharacterInformation.java:23
com.realtime.crossfire.jxclient.gui.gui.TooltipText
Information for displaying tooltips.
Definition: TooltipText.java:31
com.realtime.crossfire.jxclient.account.CharacterInformation.getMap
String getMap()
Returns the character's map.
Definition: CharacterInformation.java:152
com.realtime.crossfire.jxclient.account.CharacterModel.removeCharacterInformationListener
void removeCharacterInformationListener(final int index, @NotNull final CharacterInformationListener listener)
Removes a character entry listener for one entry.
Definition: CharacterModel.java:193
com.realtime.crossfire.jxclient.skin.skin.GuiFactory
Factory for creating Gui instances.
Definition: GuiFactory.java:41
com.realtime.crossfire.jxclient.gui.gui.AbstractGUIElement.name
final String name
The name of this element.
Definition: AbstractGUIElement.java:77
com.realtime.crossfire.jxclient.gui.gui
Definition: AbstractGUIElement.java:23
com.realtime.crossfire
com.realtime.crossfire.jxclient.gui.gui.TooltipManager
Manages the tooltip display.
Definition: TooltipManager.java:33
com.realtime
com.realtime.crossfire.jxclient.gui.scrollable
Definition: GUIScrollable.java:23
com
com.realtime.crossfire.jxclient.gui.list.GUICharacter.notifyOpen
void notifyOpen()
Called each time the enclosing dialog is opened (or raised).
Definition: GUICharacter.java:228
com.realtime.crossfire.jxclient.gui.list.GUICharacter.paintComponent
void paintComponent(@NotNull final Graphics g)
Definition: GUICharacter.java:118
com.realtime.crossfire.jxclient.gui.list.GUICharacter.facesManager
final FacesManager facesManager
The FacesManager to use to display faces.
Definition: GUICharacter.java:58
com.realtime.crossfire.jxclient.gui.list.GUICharacter.getMinimumSizeInt
Dimension getMinimumSizeInt()
Returns the minimal size needed to display this component.
Definition: GUICharacter.java:165
com.realtime.crossfire.jxclient.gui.gui.AbstractGUIElement.tooltipManager
final TooltipManager tooltipManager
The TooltipManager to update.
Definition: AbstractGUIElement.java:83
com.realtime.crossfire.jxclient.gui.list.GUICharacter.index
int index
Index of the item to display in characterModel.
Definition: GUICharacter.java:68
com.realtime.crossfire.jxclient.account.CharacterModel.addCharacterInformationListener
void addCharacterInformationListener(final int index, @NotNull final CharacterInformationListener listener)
Adds a character entry listener for one entry.
Definition: CharacterModel.java:184
com.realtime.crossfire.jxclient.gui.gui.GUIElementListener
Listener for GUIElement related events.
Definition: GUIElementListener.java:32