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.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
com.realtime.crossfire.jxclient.skin.skin
Definition: DefaultJXCSkin.java:23
com.realtime.crossfire.jxclient.account.CharacterModel.getEntry
CharacterInformation getEntry(final int index)
Definition: CharacterModel.java:80
com.realtime.crossfire.jxclient.gui.list.GUICharacter.setSelected
void setSelected(final boolean selected)
Definition: GUICharacter.java:213
com.realtime.crossfire.jxclient.gui.list.GUICharacter.selected
boolean selected
Definition: GUICharacter.java:79
com.realtime.crossfire.jxclient.account.CharacterInformation.getName
String getName()
Definition: CharacterInformation.java:107
com.realtime.crossfire.jxclient.account.CharacterInformation.getRace
String getRace()
Definition: CharacterInformation.java:125
com.realtime.crossfire.jxclient.skin
com.realtime.crossfire.jxclient.account.CharacterInformation.getParty
String getParty()
Definition: CharacterInformation.java:143
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)
Definition: GUICharacter.java:103
com.realtime.crossfire.jxclient.gui.gui.ActivatableGUIElement
Definition: ActivatableGUIElement.java:33
com.realtime.crossfire.jxclient.faces.FacesManager.getOriginalImageIcon
ImageIcon getOriginalImageIcon(int faceNum, @Nullable AtomicBoolean returnIsUnknownImage)
com.realtime.crossfire.jxclient.account.CharacterInformationListener
Definition: CharacterInformationListener.java:31
com.realtime.crossfire.jxclient.account.CharacterModel.removeCharacterInformationListener
void removeCharacterInformationListener(final int index, @NotNull final CharacterInformationListener listener)
Definition: CharacterModel.java:193
com.realtime.crossfire.jxclient.gui.list.GUICharacter.resetScroll
void resetScroll()
Definition: GUICharacter.java:181
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.GUICharacter
Definition: GUICharacter.java:47
com.realtime.crossfire.jxclient.account.CharacterInformation
Definition: CharacterInformation.java:32
com.realtime.crossfire.jxclient.faces
Definition: AbstractFaceQueue.java:23
com.realtime.crossfire.jxclient.gui.list.GUICharacter.getMinimumSizeInt
Dimension getMinimumSizeInt()
Definition: GUICharacter.java:165
com.realtime.crossfire.jxclient.gui.gui.GuiUtils
Definition: GuiUtils.java:34
com.realtime.crossfire.jxclient.gui.gui.AbstractGUIElement.tooltipChanged
void tooltipChanged()
Definition: AbstractGUIElement.java:265
com.realtime.crossfire.jxclient.gui.list.GUICharacter.characterModel
final CharacterModel characterModel
Definition: GUICharacter.java:63
com.realtime.crossfire.jxclient.gui.list.GUICharacter.activeChanged
void activeChanged()
Definition: GUICharacter.java:113
com.realtime.crossfire.jxclient.gui.list.GUICharacter.font
final Font font
Definition: GUICharacter.java:74
com.realtime.crossfire.jxclient.gui.list.GUICharacter.getTooltip
TooltipText getTooltip()
Definition: GUICharacter.java:233
com.realtime.crossfire.jxclient.gui.list.GUICharacter.setIndex
void setIndex(final int index)
Definition: GUICharacter.java:197
com.realtime.crossfire.jxclient.gui.list.GUICharacter.notifyOpen
void notifyOpen()
Definition: GUICharacter.java:228
com.realtime.crossfire.jxclient.gui.list.GUICharacter.getMinimumSize
Dimension getMinimumSize()
Definition: GUICharacter.java:156
com.realtime.crossfire.jxclient.gui
com.realtime.crossfire.jxclient.gui.list.GUICharacter.serialVersionUID
static final long serialVersionUID
Definition: GUICharacter.java:52
com.realtime.crossfire.jxclient.gui.gui.ActivatableGUIElement.elementListener
final GUIElementListener elementListener
Definition: ActivatableGUIElement.java:44
com.realtime.crossfire.jxclient.gui.list.GUICharacter.characterInformationListener
final CharacterInformationListener characterInformationListener
Definition: GUICharacter.java:85
com.realtime.crossfire.jxclient.gui.list.GUICharacter.scroll
void scroll(final int distance)
Definition: GUICharacter.java:176
com.realtime.crossfire.jxclient.gui.list.GUICharacter.canScroll
boolean canScroll(final int distance)
Definition: GUICharacter.java:171
com.realtime.crossfire.jxclient.gui.list.GUICharacter.paintComponent
void paintComponent(@NotNull final Graphics g)
Definition: GUICharacter.java:118
com.realtime.crossfire.jxclient.gui.gui.TooltipManager
Definition: TooltipManager.java:33
com.realtime.crossfire.jxclient.account
Definition: CharacterInformation.java:23
com.realtime.crossfire.jxclient.account.CharacterInformation.getFaceNumber
int getFaceNumber()
Definition: CharacterInformation.java:168
com.realtime.crossfire.jxclient.gui.scrollable.GUIScrollable
Definition: GUIScrollable.java:32
com.realtime.crossfire.jxclient.faces.FacesManager
Definition: FacesManager.java:40
com.realtime.crossfire.jxclient.gui.gui
Definition: AbstractGUIElement.java:23
com.realtime.crossfire.jxclient.gui.list.GUICharacter.index
int index
Definition: GUICharacter.java:68
com.realtime.crossfire.jxclient.gui.gui.TooltipText
Definition: TooltipText.java:31
com.realtime.crossfire
com.realtime.crossfire.jxclient.gui.list.GUICharacter.getPreferredSize
Dimension getPreferredSize()
Definition: GUICharacter.java:149
com.realtime.crossfire.jxclient.gui.list.GUICharacter.facesManager
final FacesManager facesManager
Definition: GUICharacter.java:58
com.realtime
com.realtime.crossfire.jxclient.gui.scrollable
Definition: GUIScrollable.java:23
com
com.realtime.crossfire.jxclient.gui.gui.AbstractGUIElement.setChanged
void setChanged()
Definition: AbstractGUIElement.java:223
com.realtime.crossfire.jxclient.account.CharacterInformation.getMap
String getMap()
Definition: CharacterInformation.java:152
com.realtime.crossfire.jxclient.account.CharacterModel.addCharacterInformationListener
void addCharacterInformationListener(final int index, @NotNull final CharacterInformationListener listener)
Definition: CharacterModel.java:184
com.realtime.crossfire.jxclient.gui.gui.AbstractGUIElement.guiFactory
final GuiFactory guiFactory
Definition: AbstractGUIElement.java:48
com.realtime.crossfire.jxclient.gui.list.GUICharacter.execute
void execute()
Definition: GUICharacter.java:223
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.account.CharacterModel
Definition: CharacterModel.java:40
com.realtime.crossfire.jxclient.gui.list.GUICharacter.getIndex
int getIndex()
Definition: GUICharacter.java:189