Crossfire JXClient, Trunk  R20561
GUIItemSpellSkill.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.item;
23 
36 import java.awt.Dimension;
37 import java.awt.Image;
38 import org.jetbrains.annotations.NotNull;
39 import org.jetbrains.annotations.Nullable;
40 
44 public class GUIItemSpellSkill extends GUIItemItem {
45 
49  private static final long serialVersionUID = 1;
50 
54  @NotNull
55  private final Object sync = new Object();
56 
60  @NotNull
61  private final FacesManager facesManager;
62 
66  private final int defaultIndex;
67 
71  @NotNull
73 
78  @Nullable
79  private Skill skill;
80 
85  private int index = -1;
86 
90  private boolean selected;
91 
95  @NotNull
96  private final ItemView itemView;
97 
101  @NotNull
103 
104  @Override
105  public void spellAdded(final int index) {
106  if (GUIItemSpellSkill.this.index >= index) {
107  setSkill();
108  }
109  }
110 
111  @Override
112  public void spellRemoved(final int index) {
113  if (GUIItemSpellSkill.this.index >= index) {
114  setSkill();
115  }
116  }
117 
118  };
119 
123  @NotNull
125 
126  @Override
127  public void faceUpdated(@NotNull final Face face) {
128  if (skill != null) { // && skill.getFaceNum() == face.getFaceNum()) {
129  setChanged();
130  }
131  }
132 
133  };
134 
135  @NotNull
137 
152  public GUIItemSpellSkill(@NotNull final TooltipManager tooltipManager, @NotNull final GUIElementListener elementListener, @NotNull final String name, @NotNull final ItemPainter itemPainter, final int defaultIndex, @NotNull final FacesManager facesManager, @NotNull final SpellsManager spellsManager, @NotNull final ItemView itemView, @NotNull final FaceImages defaultSkillIcon, final int size) {
153  super(tooltipManager, elementListener, name, itemPainter, facesManager);
154  this.facesManager = facesManager;
155  this.defaultIndex = defaultIndex;
156  this.spellsManager = spellsManager;
157  setIndex(defaultIndex);
158  this.spellsManager.addCrossfireSpellChangedListener(spellsManagerListener);
159  this.facesManager.addFacesManagerListener(facesManagerListener);
160  this.itemView = itemView;
161  this.defaultSkillIcon = defaultSkillIcon;
162  if (size != 0) {
163  setSize(size, size);
164  }
165  }
166 
170  @Override
171  public void dispose() {
172  super.dispose();
173  spellsManager.removeCrossfireSpellChangedListener(spellsManagerListener);
174  facesManager.removeFacesManagerListener(facesManagerListener);
175  }
176 
180  @Override
181  public boolean canScroll(final int distance) {
182  if (distance < 0) {
183  return index >= -distance;
184  }
185  //noinspection SimplifiableIfStatement
186  if (distance > 0) {
187  return index+distance < spellsManager.getSpells();
188  }
189  return false;
190  }
191 
195  @Override
196  public void scroll(final int distance) {
197  setIndex(index+distance);
198  setChanged();
199  }
200 
204  @Override
205  public void resetScroll() {
206  setIndex(defaultIndex);
207  }
208 
212  @NotNull
213  @Override
214  public Dimension getPreferredSize() {
215  return getMinimumSizeInt();
216  }
217 
221  @NotNull
222  @Override
223  public Dimension getMinimumSize() {
224  return getMinimumSizeInt();
225  }
226 
231  @NotNull
232  private static Dimension getMinimumSizeInt() {
233  return new Dimension(32, 32);
234  }
235 
239  private void setSkill() {
240  final Skill newSkill = spellsManager.getSpellSkill(index);
241  if (skill == newSkill) {
242  return;
243  }
244 
245  skill = newSkill;
246 
247  setChanged();
248 
249  setTooltipText(newSkill == null ? null : newSkill.toString());
250  }
251 
257  private void setIndex(final int index) {
258  if (this.index == index) {
259  return;
260  }
261  this.index = index;
262 
263  setSkill();
264  }
265 
269  @NotNull
270  @Override
271  protected Image getFace(@NotNull final CfItem item) {
272  if (item.getFace().getFaceNum() == 0) {
273  return defaultSkillIcon.getOriginalImageIcon().getImage();
274  }
275  return facesManager.getOriginalImageIcon(item.getFace().getFaceNum(), null).getImage();
276  }
277 
281  @Override
282  public void setSelected(final boolean selected) {
283  if (this.selected == selected) {
284  return;
285  }
286 
287  this.selected = selected;
288  setChanged();
289  }
290 
294  @Override
295  protected boolean isSelected() {
296  return selected || isActive();
297  }
298 
302  @Override
303  public int getIndex() {
304  synchronized (sync) {
305  return index;
306  }
307  }
308 
312  @Override
313  public void setIndexNoListeners(final int index) {
314  synchronized (sync) {
315  this.index = index;
316  }
317 
318  setItemNoListeners(itemView.getItem(this.index));
319  }
320 
324  @Override
325  public void button1Clicked(final int modifiers) {
326  }
327 
331  @Override
332  public void button2Clicked(final int modifiers) {
333  }
334 
338  @Override
339  public void button3Clicked(final int modifiers) {
340  }
341 
342 }
ImageIcon getOriginalImageIcon(int faceNum, @Nullable boolean[] isUnknownImage)
Returns the "original" face for a face ID.
static final long serialVersionUID
The serial version UID.
final TooltipManager tooltipManager
The TooltipManager to update.
final GUIElementListener elementListener
The GUIElementListener to notify.
void setChanged()
Records that the contents have changed and must be repainted.
static Dimension getMinimumSizeInt()
Returns the minimal size to display this component.
GUIItemSpellSkill(@NotNull final TooltipManager tooltipManager, @NotNull final GUIElementListener elementListener, @NotNull final String name, @NotNull final ItemPainter itemPainter, final int defaultIndex, @NotNull final FacesManager facesManager, @NotNull final SpellsManager spellsManager, @NotNull final ItemView itemView, @NotNull final FaceImages defaultSkillIcon, final int size)
Creates a new instance.
Interface for listeners interested in SpellsManager events.
int getSpells()
Returns the number of known spells.
void resetScroll()
Resets the scroll index to the default value.
boolean selected
Whether this element is selected in its GUISpellSkillList.
void setItemNoListeners(@Nullable final CfItem item)
Sets the current item instance without registering listeners for updates.
Manages image information ("faces") needed to display the map view, items, and spell icons...
A GUIElement instance representing an in-game item.
Consists of three ImageIcons representing a Face.
Definition: FaceImages.java:31
final FacesManager facesManager
The FacesManager for looking up faces.
One skill of the character.
Definition: Skill.java:32
void removeCrossfireSpellChangedListener(@NotNull final SpellsManagerListener listener)
Removes a SpellsManagerListener to notify about changes.
void setSkill()
Sets the currently selected Skill.
Interface for listeners interested in FacesManager events.
void setTooltipText(@Nullable final String tooltipText)
Sets the tooltip text to show when the mouse is inside this element.the text to show ornull to disab...
void setIndex(final int index)
Sets the index of the currently selected skill.
final FacesManagerListener facesManagerListener
The FacesManagerListener registered to detect updated faces.
void scroll(final int distance)
Scrolls the element.the distance to scroll
boolean canScroll(final int distance)
Returns whether scrolling is possible.the distance to scroll whether scrolling is possible ...
final ItemPainter itemPainter
The ItemPainter for painting the icon.
CfItem getItem(int index)
Returns the CfItem in a given slot.
Skill getSpellSkill(final int index)
Returns the specified spell skill.
void removeFacesManagerListener(@NotNull FacesManagerListener facesManagerListener)
Removes a FacesManagerListener to be notified about updated faces.
final Object sync
The object used for synchronization on index.
The representation of a Crossfire Item, client-side.
Definition: CfItem.java:36
ImageIcon getOriginalImageIcon()
Returns the ImageIcon as sent by the Crossfire server.
Definition: FaceImages.java:68
final SpellsManager spellsManager
The SpellsManager instance to watch.
boolean isActive()
Returns whether a GUI element is active.
final SpellsManagerListener spellsManagerListener
The SpellsManagerListener used to detect spell changes.
Maintains a mapping of face numbers to face data.