Crossfire JXClient, Trunk
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-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.item;
24 
38 import java.awt.Dimension;
39 import java.awt.Image;
40 import org.jetbrains.annotations.NotNull;
41 import org.jetbrains.annotations.Nullable;
42 
46 public class GUIItemSpellSkill extends GUIItemItem {
47 
51  private static final long serialVersionUID = 1;
52 
56  @NotNull
57  private final Object sync = new Object();
58 
62  @NotNull
63  private final FacesManager facesManager;
64 
68  private final int defaultIndex;
69 
73  @NotNull
75 
80  @Nullable
81  private Skill skill;
82 
87  private int index = -1;
88 
92  private boolean selected;
93 
97  @NotNull
98  private final ItemView itemView;
99 
103  @NotNull
105 
106  @Override
107  public void spellAdded(final int index) {
108  synchronized (sync) {
109  if (GUIItemSpellSkill.this.index < index) {
110  return;
111  }
112  }
113 
114  setSkill();
115  }
116 
117  @Override
118  public void spellRemoved(final int index) {
119  synchronized (sync) {
120  if (GUIItemSpellSkill.this.index < index) {
121  return;
122  }
123  }
124 
125  setSkill();
126  }
127 
128  };
129 
133  @NotNull
135 
136  @Override
137  public void faceUpdated(@NotNull final Face face) {
138  //noinspection VariableNotUsedInsideIf
139  if (skill != null) { // && skill.getFaceNum() == face.getFaceNum()) {
140  setChanged();
141  }
142  }
143 
144  };
145 
146  @NotNull
148 
164  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, @NotNull final GuiFactory guiFactory) {
166  this.facesManager = facesManager;
167  this.defaultIndex = defaultIndex;
168  this.spellsManager = spellsManager;
170  this.spellsManager.addCrossfireSpellChangedListener(spellsManagerListener);
171  this.facesManager.addFacesManagerListener(facesManagerListener);
172  this.itemView = itemView;
173  this.defaultSkillIcon = defaultSkillIcon;
174  if (size != 0) {
175  setSize(size, size);
176  }
177  }
178 
179  @Override
180  public void dispose() {
181  super.dispose();
184  }
185 
186  @Override
187  public void notifyOpen() {
188  }
189 
190  @Override
191  public boolean canScroll(final int distance) {
192  if (distance < 0) {
193  synchronized (sync) {
194  return index >= -distance;
195  }
196  }
197  if (distance > 0) {
198  synchronized (sync) {
199  return index+distance < spellsManager.getFilteredSpellsCount();
200  }
201  }
202  return false;
203  }
204 
205  @Override
206  public void scroll(final int distance) {
207  final int index;
208  synchronized (sync) {
209  index = this.index;
210  }
211  setIndex(index+distance);
212  setChanged();
213  }
214 
215  @Override
216  public void resetScroll() {
218  }
219 
220  @NotNull
221  @Override
222  @SuppressWarnings("MethodDoesntCallSuperMethod")
223  public Dimension getPreferredSize() {
224  return getMinimumSizeInt();
225  }
226 
227  @NotNull
228  @Override
229  @SuppressWarnings("MethodDoesntCallSuperMethod")
230  public Dimension getMinimumSize() {
231  return getMinimumSizeInt();
232  }
233 
238  @NotNull
239  private static Dimension getMinimumSizeInt() {
240  return new Dimension(32, 32);
241  }
242 
246  private void setSkill() {
247  final int index;
248  synchronized (sync) {
249  index = this.index;
250  }
251  final Skill newSkill = spellsManager.getSpellSkill(index);
252  if (skill == newSkill) {
253  return;
254  }
255 
256  skill = newSkill;
257 
258  setChanged();
259  tooltipChanged();
260  }
261 
267  private void setIndex(final int index) {
268  synchronized (sync) {
269  if (this.index == index) {
270  return;
271  }
272  this.index = index;
273  }
274 
275  setSkill();
276  }
277 
278  @NotNull
279  @Override
280  protected Image getFace(@NotNull final CfItem item) {
281  if (item.getFace().getFaceNum() == 0) {
282  return defaultSkillIcon.getOriginalImageIcon().getImage();
283  }
284  return facesManager.getOriginalImageIcon(item.getFace().getFaceNum(), null).getImage();
285  }
286 
287  @Override
288  public void setSelected(final boolean selected) {
289  if (this.selected == selected) {
290  return;
291  }
292 
293  this.selected = selected;
294  setChanged();
295  }
296 
297  @Override
298  protected boolean isSelected() {
299  return selected || isActive();
300  }
301 
302  @Override
303  public int getIndex() {
304  synchronized (sync) {
305  return index;
306  }
307  }
308 
309  @Override
310  public void setIndexNoListeners(final int index) {
311  synchronized (sync) {
312  this.index = index;
313  }
314 
316  }
317 
318  @Override
319  public void button1Clicked(final int modifiers) {
320  }
321 
322  @Override
323  public void button2Clicked(final int modifiers) {
324  }
325 
326  @Override
327  public void button3Clicked(final int modifiers) {
328  }
329 
330 }
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.gui.item.GUIItemSpellSkill.spellsManagerListener
final SpellsManagerListener spellsManagerListener
Definition: GUIItemSpellSkill.java:104
com.realtime.crossfire.jxclient.gui.item.GUIItemSpellSkill.spellsManager
final SpellsManager spellsManager
Definition: GUIItemSpellSkill.java:74
com.realtime.crossfire.jxclient.gui.item.GUIItemSpellSkill.setSelected
void setSelected(final boolean selected)
Definition: GUIItemSpellSkill.java:288
com.realtime.crossfire.jxclient.gui.item.GUIItemSpellSkill.selected
boolean selected
Definition: GUIItemSpellSkill.java:92
com.realtime.crossfire.jxclient.gui.item.GUIItemSpellSkill.skill
Skill skill
Definition: GUIItemSpellSkill.java:81
com.realtime.crossfire.jxclient.gui.item.GUIItemSpellSkill
Definition: GUIItemSpellSkill.java:46
com.realtime.crossfire.jxclient.gui.item.GUIItemSpellSkill.facesManager
final FacesManager facesManager
Definition: GUIItemSpellSkill.java:63
com.realtime.crossfire.jxclient.skin
com.realtime.crossfire.jxclient.gui.item.GUIItemSpellSkill.defaultSkillIcon
final FaceImages defaultSkillIcon
Definition: GUIItemSpellSkill.java:147
com.realtime.crossfire.jxclient.gui.item.GUIItemSpellSkill.sync
final Object sync
Definition: GUIItemSpellSkill.java:57
com.realtime.crossfire.jxclient.gui.item.GUIItemSpellSkill.button2Clicked
void button2Clicked(final int modifiers)
Definition: GUIItemSpellSkill.java:323
com.realtime.crossfire.jxclient.gui.item.GUIItemItem.setItemNoListeners
void setItemNoListeners(@Nullable final CfItem item)
Definition: GUIItemItem.java:190
com.realtime.crossfire.jxclient.gui.item.GUIItemSpellSkill.getPreferredSize
Dimension getPreferredSize()
Definition: GUIItemSpellSkill.java:223
com.realtime.crossfire.jxclient.faces.FacesManager.getOriginalImageIcon
ImageIcon getOriginalImageIcon(int faceNum, @Nullable AtomicBoolean returnIsUnknownImage)
com.realtime.crossfire.jxclient.spells.SpellsManager.getSpellSkill
Skill getSpellSkill(final int index)
Definition: SpellsManager.java:453
com.realtime.crossfire.jxclient.skin.skin.GuiFactory
Definition: GuiFactory.java:41
com.realtime.crossfire.jxclient.faces.FacesManagerListener
Definition: FacesManagerListener.java:32
com.realtime.crossfire.jxclient.spells.SpellsManager.removeCrossfireSpellChangedListener
void removeCrossfireSpellChangedListener(@NotNull final SpellsManagerListener listener)
Definition: SpellsManager.java:197
com.realtime.crossfire.jxclient.skills.Skill
Definition: Skill.java:35
com.realtime.crossfire.jxclient.faces
Definition: AbstractFaceQueue.java:23
com.realtime.crossfire.jxclient.gui.list.GUISpellSkillList
Definition: GUISpellSkillList.java:43
com.realtime.crossfire.jxclient.gui.item.GUIItemSpellSkill.defaultIndex
final int defaultIndex
Definition: GUIItemSpellSkill.java:68
com.realtime.crossfire.jxclient.gui.item.GUIItemSpellSkill.GUIItemSpellSkill
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, @NotNull final GuiFactory guiFactory)
Definition: GUIItemSpellSkill.java:164
com.realtime.crossfire.jxclient.gui.item.GUIItemSpellSkill.resetScroll
void resetScroll()
Definition: GUIItemSpellSkill.java:216
com.realtime.crossfire.jxclient.gui.gui.AbstractGUIElement.tooltipChanged
void tooltipChanged()
Definition: AbstractGUIElement.java:265
com.realtime.crossfire.jxclient.gui.item.GUIItemSpellSkill.getIndex
int getIndex()
Definition: GUIItemSpellSkill.java:303
com.realtime.crossfire.jxclient.faces.FaceImages.getOriginalImageIcon
ImageIcon getOriginalImageIcon()
Definition: FaceImages.java:69
com.realtime.crossfire.jxclient.gui.item.GUIItemSpellSkill.setIndexNoListeners
void setIndexNoListeners(final int index)
Definition: GUIItemSpellSkill.java:310
com.realtime.crossfire.jxclient.gui.list
Definition: CharacterCellRenderer.java:23
com.realtime.crossfire.jxclient.gui.item.GUIItemItem
Definition: GUIItemItem.java:46
com.realtime.crossfire.jxclient.skills
Definition: Skill.java:23
com.realtime.crossfire.jxclient.gui.item.GUIItemSpellSkill.getFace
Image getFace(@NotNull final CfItem item)
Definition: GUIItemSpellSkill.java:280
com.realtime.crossfire.jxclient.gui
com.realtime.crossfire.jxclient.spells.SpellsManager
Definition: SpellsManager.java:50
com.realtime.crossfire.jxclient.gui.gui.ActivatableGUIElement.elementListener
final GUIElementListener elementListener
Definition: ActivatableGUIElement.java:44
com.realtime.crossfire.jxclient.gui.item.GUIItemSpellSkill.setSkill
void setSkill()
Definition: GUIItemSpellSkill.java:246
com.realtime.crossfire.jxclient.gui.item.ItemPainter
Definition: ItemPainter.java:41
com.realtime.crossfire.jxclient.items.CfItem
Definition: CfItem.java:37
com.realtime.crossfire.jxclient.gui.item.GUIItemSpellSkill.canScroll
boolean canScroll(final int distance)
Definition: GUIItemSpellSkill.java:191
com.realtime.crossfire.jxclient.gui.item.GUIItemSpellSkill.getMinimumSizeInt
static Dimension getMinimumSizeInt()
Definition: GUIItemSpellSkill.java:239
com.realtime.crossfire.jxclient.gui.item.GUIItemSpellSkill.scroll
void scroll(final int distance)
Definition: GUIItemSpellSkill.java:206
com.realtime.crossfire.jxclient.gui.item.GUIItemSpellSkill.index
int index
Definition: GUIItemSpellSkill.java:87
com.realtime.crossfire.jxclient.gui.item.GUIItemSpellSkill.dispose
void dispose()
Definition: GUIItemSpellSkill.java:180
com.realtime.crossfire.jxclient.gui.gui.TooltipManager
Definition: TooltipManager.java:33
com.realtime.crossfire.jxclient.gui.item.GUIItemItem.itemPainter
final ItemPainter itemPainter
Definition: GUIItemItem.java:63
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.item.GUIItemItem.item
CfItem item
Definition: GUIItemItem.java:69
com.realtime.crossfire.jxclient.spells.SpellsManager.getFilteredSpellsCount
int getFilteredSpellsCount()
Definition: SpellsManager.java:351
com.realtime.crossfire
com.realtime
com.realtime.crossfire.jxclient.gui.item.GUIItemSpellSkill.isSelected
boolean isSelected()
Definition: GUIItemSpellSkill.java:298
com
com.realtime.crossfire.jxclient.faces.Face.getFaceNum
int getFaceNum()
Definition: Face.java:105
com.realtime.crossfire.jxclient.items
Definition: AbstractItemView.java:23
com.realtime.crossfire.jxclient.items.CfItem.getFace
Face getFace()
Definition: CfItem.java:304
com.realtime.crossfire.jxclient.gui.gui.AbstractGUIElement.setChanged
void setChanged()
Definition: AbstractGUIElement.java:223
com.realtime.crossfire.jxclient.items.ItemView
Definition: ItemView.java:32
com.realtime.crossfire.jxclient.gui.item.GUIItemSpellSkill.getMinimumSize
Dimension getMinimumSize()
Definition: GUIItemSpellSkill.java:230
com.realtime.crossfire.jxclient.gui.gui.AbstractGUIElement.guiFactory
final GuiFactory guiFactory
Definition: AbstractGUIElement.java:48
com.realtime.crossfire.jxclient.gui.item.GUIItemSpellSkill.notifyOpen
void notifyOpen()
Definition: GUIItemSpellSkill.java:187
com.realtime.crossfire.jxclient.items.ItemView.getItem
CfItem getItem(int index)
com.realtime.crossfire.jxclient.faces.Face
Definition: Face.java:37
com.realtime.crossfire.jxclient.spells.SpellsManagerListener
Definition: SpellsManagerListener.java:31
com.realtime.crossfire.jxclient.gui.item.GUIItemSpellSkill.setIndex
void setIndex(final int index)
Definition: GUIItemSpellSkill.java:267
com.realtime.crossfire.jxclient.gui.item.GUIItemSpellSkill.facesManagerListener
final FacesManagerListener facesManagerListener
Definition: GUIItemSpellSkill.java:134
com.realtime.crossfire.jxclient.faces.FaceImages
Definition: FaceImages.java:32
com.realtime.crossfire.jxclient.faces.FacesManager.removeFacesManagerListener
void removeFacesManagerListener(@NotNull FacesManagerListener facesManagerListener)
com.realtime.crossfire.jxclient.gui.gui.GUIElementListener
Definition: GUIElementListener.java:32
com.realtime.crossfire.jxclient.gui.item.GUIItemSpellSkill.button3Clicked
void button3Clicked(final int modifiers)
Definition: GUIItemSpellSkill.java:327
com.realtime.crossfire.jxclient.gui.item.GUIItemSpellSkill.button1Clicked
void button1Clicked(final int modifiers)
Definition: GUIItemSpellSkill.java:319
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.item.GUIItemSpellSkill.itemView
final ItemView itemView
Definition: GUIItemSpellSkill.java:98
com.realtime.crossfire.jxclient.gui.item.GUIItemSpellSkill.serialVersionUID
static final long serialVersionUID
Definition: GUIItemSpellSkill.java:51
com.realtime.crossfire.jxclient.spells
Definition: Spell.java:23