Crossfire JXClient, Trunk
GUIItemSpell.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 
40 import java.awt.Dimension;
41 import java.awt.Image;
42 import org.jetbrains.annotations.NotNull;
43 import org.jetbrains.annotations.Nullable;
44 
49 public class GUIItemSpell extends GUIItemItem {
50 
54  private static final long serialVersionUID = 1;
55 
59  @NotNull
60  private final Object sync = new Object();
61 
65  @NotNull
66  private final CommandQueue commandQueue;
67 
71  @NotNull
72  private final FacesManager facesManager;
73 
77  private final int defaultIndex;
78 
82  @NotNull
84 
89  @Nullable
90  private Spell spell;
91 
96  private int index = -1;
97 
101  private boolean selected;
102 
106  @NotNull
107  private final ItemView spellsView;
108 
112  @NotNull
114 
115  @Override
116  public void spellAdded(final int index) {
117  synchronized (sync) {
118  if (GUIItemSpell.this.index < index) {
119  return;
120  }
121  }
122 
123  setSpell();
124  }
125 
126  @Override
127  public void spellRemoved(final int index) {
128  synchronized (sync) {
129  if (GUIItemSpell.this.index < index) {
130  return;
131  }
132  }
133 
134  setSpell();
135  }
136 
137  };
138 
142  @NotNull
143  private final SpellListener spellListener = this::setSpell;
144 
148  @NotNull
150 
151  @Override
152  public void faceUpdated(@NotNull final Face face) {
153  if (spell != null && spell.getFaceNum() == face.getFaceNum()) {
154  setChanged();
155  }
156  }
157 
158  };
159 
174  public GUIItemSpell(@NotNull final TooltipManager tooltipManager, @NotNull final GUIElementListener elementListener, @NotNull final CommandQueue commandQueue, @NotNull final String name, @NotNull final ItemPainter itemPainter, final int defaultIndex, @NotNull final FacesManager facesManager, @NotNull final SpellsManager spellsManager, @NotNull final ItemView spellsView, final int size, @NotNull final GuiFactory guiFactory) {
176  this.commandQueue = commandQueue;
177  this.facesManager = facesManager;
178  this.defaultIndex = defaultIndex;
179  this.spellsManager = spellsManager;
181  this.spellsManager.addCrossfireSpellChangedListener(spellsManagerListener);
182  this.facesManager.addFacesManagerListener(facesManagerListener);
183  this.spellsView = spellsView;
184  if (size != 0) {
185  setSize(size, size);
186  }
187  }
188 
189  @Override
190  public void dispose() {
191  super.dispose();
194  if (spell != null) {
196  }
197  }
198 
199  @Override
200  public void notifyOpen() {
201  }
202 
203  @Override
204  public boolean canScroll(final int distance) {
205  if (distance < 0) {
206  synchronized (sync) {
207  return index >= -distance;
208  }
209  }
210  if (distance > 0) {
211  synchronized (sync) {
212  return index+distance < spellsManager.getFilteredSpellsCount();
213  }
214  }
215  return false;
216  }
217 
218  @Override
219  public void scroll(final int distance) {
220  final int index;
221  synchronized (sync) {
222  index = this.index;
223  }
224  setIndex(index+distance);
225  setChanged();
226  }
227 
228  @Override
229  public void resetScroll() {
231  }
232 
233  @Override
234  public void button1Clicked(final int modifiers) {
235  if (spell == null) {
236  return;
237  }
238 
239  switch (modifiers&Modifiers.MASK) {
240  case Modifiers.NONE:
241  commandQueue.sendNcom(false, "cast "+spell.getName());
242  break;
243 
244  case Modifiers.CTRL:
245  commandQueue.sendNcom(false, "invoke "+spell.getName());
246  break;
247  }
248  }
249 
250  @Override
251  public void button2Clicked(final int modifiers) {
252  if (spell == null) {
253  return;
254  }
255 
256  //noinspection SwitchStatementWithTooFewBranches
257  switch (modifiers&Modifiers.MASK) {
258  case Modifiers.NONE:
259  commandQueue.sendNcom(false, "invoke "+spell.getName());
260  break;
261  }
262  }
263 
264  @Override
265  public void button3Clicked(final int modifiers) {
266  if (spell == null) {
267  return;
268  }
269 
270  //noinspection SwitchStatementWithTooFewBranches
271  switch (modifiers&Modifiers.MASK) {
272  case Modifiers.SHIFT:
273  commandQueue.sendNcom(false, "invoke "+spell.getName());
274  break;
275  }
276  }
277 
278  @NotNull
279  @Override
280  @SuppressWarnings("MethodDoesntCallSuperMethod")
281  public Dimension getPreferredSize() {
282  return getMinimumSizeInt();
283  }
284 
285  @NotNull
286  @Override
287  @SuppressWarnings("MethodDoesntCallSuperMethod")
288  public Dimension getMinimumSize() {
289  return getMinimumSizeInt();
290  }
291 
296  @NotNull
297  private static Dimension getMinimumSizeInt() {
298  return new Dimension(32, 32);
299  }
300 
305  private void setSpell() {
306  final int index;
307  synchronized (sync) {
308  index = this.index;
309  }
310  final Spell newSpell = spellsManager.getFilteredSpell(index);
311  if (spell == newSpell) {
312  return;
313  }
314 
315  if (spell != null) {
317  }
318 
319  spell = newSpell;
320 
321  if (spell != null) {
323  }
324 
325  setChanged();
326  tooltipChanged();
327  }
328 
334  private void setIndex(final int index) {
335  synchronized (sync) {
336  if (this.index == index) {
337  return;
338  }
339  this.index = index;
340  }
341 
342  setSpell();
343  }
344 
345  @NotNull
346  @Override
347  protected Image getFace(@NotNull final CfItem item) {
348  return facesManager.getOriginalImageIcon(item.getFace().getFaceNum(), null).getImage();
349  }
350 
351  @Override
352  public void setSelected(final boolean selected) {
353  if (this.selected == selected) {
354  return;
355  }
356 
357  this.selected = selected;
358  setChanged();
359  }
360 
361  @Override
362  protected boolean isSelected() {
363  return selected || isActive();
364  }
365 
366  @Override
367  public int getIndex() {
368  synchronized (sync) {
369  return index;
370  }
371  }
372 
373  @Override
374  public void setIndexNoListeners(final int index) {
375  synchronized (sync) {
376  this.index = index;
377  }
378 
380  }
381 
382 }
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.list.GUISpellList
Definition: GUISpellList.java:45
com.realtime.crossfire.jxclient.gui.misc.Modifiers.NONE
static final int NONE
Definition: Modifiers.java:36
com.realtime.crossfire.jxclient.spells.Spell.getName
String getName()
Definition: Spell.java:198
com.realtime.crossfire.jxclient.gui.item.GUIItemSpell.setSelected
void setSelected(final boolean selected)
Definition: GUIItemSpell.java:352
com.realtime.crossfire.jxclient.gui.item.GUIItemSpell.notifyOpen
void notifyOpen()
Definition: GUIItemSpell.java:200
com.realtime.crossfire.jxclient.gui.item.GUIItemSpell.canScroll
boolean canScroll(final int distance)
Definition: GUIItemSpell.java:204
com.realtime.crossfire.jxclient.gui.item.GUIItemSpell.isSelected
boolean isSelected()
Definition: GUIItemSpell.java:362
com.realtime.crossfire.jxclient.skin
com.realtime.crossfire.jxclient.gui.item.GUIItemSpell.getMinimumSizeInt
static Dimension getMinimumSizeInt()
Definition: GUIItemSpell.java:297
com.realtime.crossfire.jxclient.gui.item.GUIItemSpell.resetScroll
void resetScroll()
Definition: GUIItemSpell.java:229
com.realtime.crossfire.jxclient.gui.item.GUIItemSpell.spellsView
final ItemView spellsView
Definition: GUIItemSpell.java:107
com.realtime.crossfire.jxclient.gui.item.GUIItemSpell.spellsManager
final SpellsManager spellsManager
Definition: GUIItemSpell.java:83
com.realtime.crossfire.jxclient.gui.item.GUIItemItem.setItemNoListeners
void setItemNoListeners(@Nullable final CfItem item)
Definition: GUIItemItem.java:190
com.realtime.crossfire.jxclient.gui.item.GUIItemSpell.dispose
void dispose()
Definition: GUIItemSpell.java:190
com.realtime.crossfire.jxclient.faces.FacesManager.getOriginalImageIcon
ImageIcon getOriginalImageIcon(int faceNum, @Nullable AtomicBoolean returnIsUnknownImage)
com.realtime.crossfire.jxclient.gui.misc.Modifiers
Definition: Modifiers.java:31
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.gui.misc.Modifiers.SHIFT
static final int SHIFT
Definition: Modifiers.java:41
com.realtime.crossfire.jxclient.faces
Definition: AbstractFaceQueue.java:23
com.realtime.crossfire.jxclient.gui.item.GUIItemSpell.button3Clicked
void button3Clicked(final int modifiers)
Definition: GUIItemSpell.java:265
com.realtime.crossfire.jxclient.gui.gui.AbstractGUIElement.tooltipChanged
void tooltipChanged()
Definition: AbstractGUIElement.java:265
com.realtime.crossfire.jxclient.gui.list
Definition: CharacterCellRenderer.java:23
com.realtime.crossfire.jxclient.gui.item.GUIItemSpell.commandQueue
final CommandQueue commandQueue
Definition: GUIItemSpell.java:66
com.realtime.crossfire.jxclient.gui.item.GUIItemSpell.getIndex
int getIndex()
Definition: GUIItemSpell.java:367
com.realtime.crossfire.jxclient.spells.Spell.removeSpellListener
void removeSpellListener(@NotNull final SpellListener listener)
Definition: Spell.java:428
com.realtime.crossfire.jxclient.gui.item.GUIItemSpell.spellsManagerListener
final SpellsManagerListener spellsManagerListener
Definition: GUIItemSpell.java:113
com.realtime.crossfire.jxclient.gui.item.GUIItemSpell.serialVersionUID
static final long serialVersionUID
Definition: GUIItemSpell.java:54
com.realtime.crossfire.jxclient.gui.item.GUIItemItem
Definition: GUIItemItem.java:46
com.realtime.crossfire.jxclient.gui.item.GUIItemSpell
Definition: GUIItemSpell.java:49
com.realtime.crossfire.jxclient.spells.Spell
Definition: Spell.java:37
com.realtime.crossfire.jxclient.gui.item.GUIItemSpell.setSpell
void setSpell()
Definition: GUIItemSpell.java:305
com.realtime.crossfire.jxclient.gui.item.GUIItemSpell.spellListener
final SpellListener spellListener
Definition: GUIItemSpell.java:143
com.realtime.crossfire.jxclient.gui.item.GUIItemSpell.GUIItemSpell
GUIItemSpell(@NotNull final TooltipManager tooltipManager, @NotNull final GUIElementListener elementListener, @NotNull final CommandQueue commandQueue, @NotNull final String name, @NotNull final ItemPainter itemPainter, final int defaultIndex, @NotNull final FacesManager facesManager, @NotNull final SpellsManager spellsManager, @NotNull final ItemView spellsView, final int size, @NotNull final GuiFactory guiFactory)
Definition: GUIItemSpell.java:174
com.realtime.crossfire.jxclient.gui.item.GUIItemSpell.setIndex
void setIndex(final int index)
Definition: GUIItemSpell.java:334
com.realtime.crossfire.jxclient.gui
com.realtime.crossfire.jxclient.spells.SpellsManager
Definition: SpellsManager.java:50
com.realtime.crossfire.jxclient.queue.CommandQueue
Definition: CommandQueue.java:38
com.realtime.crossfire.jxclient.gui.gui.ActivatableGUIElement.elementListener
final GUIElementListener elementListener
Definition: ActivatableGUIElement.java:44
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.GUIItemSpell.scroll
void scroll(final int distance)
Definition: GUIItemSpell.java:219
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.gui.item.GUIItemSpell.spell
Spell spell
Definition: GUIItemSpell.java:90
com.realtime.crossfire.jxclient.gui.item.GUIItemSpell.index
int index
Definition: GUIItemSpell.java:96
com.realtime.crossfire.jxclient.faces.FacesManager
Definition: FacesManager.java:40
com.realtime.crossfire.jxclient.gui.item.GUIItemSpell.button1Clicked
void button1Clicked(final int modifiers)
Definition: GUIItemSpell.java:234
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.queue
Definition: CommandQueue.java:23
com.realtime.crossfire.jxclient.spells.SpellsManager.getFilteredSpellsCount
int getFilteredSpellsCount()
Definition: SpellsManager.java:351
com.realtime.crossfire.jxclient.gui.item.GUIItemSpell.defaultIndex
final int defaultIndex
Definition: GUIItemSpell.java:77
com.realtime.crossfire.jxclient.spells.Spell.getFaceNum
int getFaceNum()
Definition: Spell.java:215
com.realtime.crossfire
com.realtime
com.realtime.crossfire.jxclient.queue.CommandQueue.sendNcom
void sendNcom(final boolean mustSend, @NotNull final String command)
Definition: CommandQueue.java:184
com
com.realtime.crossfire.jxclient.faces.Face.getFaceNum
int getFaceNum()
Definition: Face.java:105
com.realtime.crossfire.jxclient.gui.item.GUIItemSpell.sync
final Object sync
Definition: GUIItemSpell.java:60
com.realtime.crossfire.jxclient.items
Definition: AbstractItemView.java:23
com.realtime.crossfire.jxclient.spells.Spell.addSpellListener
void addSpellListener(@NotNull final SpellListener listener)
Definition: Spell.java:420
com.realtime.crossfire.jxclient.items.CfItem.getFace
Face getFace()
Definition: CfItem.java:304
com.realtime.crossfire.jxclient.gui.misc.Modifiers.MASK
static final int MASK
Definition: Modifiers.java:56
com.realtime.crossfire.jxclient.gui.gui.AbstractGUIElement.setChanged
void setChanged()
Definition: AbstractGUIElement.java:223
com.realtime.crossfire.jxclient.gui.item.GUIItemSpell.selected
boolean selected
Definition: GUIItemSpell.java:101
com.realtime.crossfire.jxclient.gui.item.GUIItemSpell.getMinimumSize
Dimension getMinimumSize()
Definition: GUIItemSpell.java:288
com.realtime.crossfire.jxclient.gui.item.GUIItemSpell.facesManagerListener
final FacesManagerListener facesManagerListener
Definition: GUIItemSpell.java:149
com.realtime.crossfire.jxclient.items.ItemView
Definition: ItemView.java:32
com.realtime.crossfire.jxclient.gui.item.GUIItemSpell.setIndexNoListeners
void setIndexNoListeners(final int index)
Definition: GUIItemSpell.java:374
com.realtime.crossfire.jxclient.gui.gui.AbstractGUIElement.guiFactory
final GuiFactory guiFactory
Definition: AbstractGUIElement.java:48
com.realtime.crossfire.jxclient.gui.misc
Definition: GUICheckBox.java:23
com.realtime.crossfire.jxclient.spells.SpellsManager.getFilteredSpell
Spell getFilteredSpell(final int index)
Definition: SpellsManager.java:362
com.realtime.crossfire.jxclient.items.ItemView.getItem
CfItem getItem(int index)
com.realtime.crossfire.jxclient.gui.item.GUIItemSpell.button2Clicked
void button2Clicked(final int modifiers)
Definition: GUIItemSpell.java:251
com.realtime.crossfire.jxclient.gui.item.GUIItemSpell.getPreferredSize
Dimension getPreferredSize()
Definition: GUIItemSpell.java:281
com.realtime.crossfire.jxclient.gui.misc.Modifiers.CTRL
static final int CTRL
Definition: Modifiers.java:46
com.realtime.crossfire.jxclient.faces.Face
Definition: Face.java:37
com.realtime.crossfire.jxclient.spells.SpellsManagerListener
Definition: SpellsManagerListener.java:31
com.realtime.crossfire.jxclient.spells.SpellListener
Definition: SpellListener.java:31
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.GUIItemSpell.facesManager
final FacesManager facesManager
Definition: GUIItemSpell.java:72
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.spells
Definition: Spell.java:23
com.realtime.crossfire.jxclient.gui.item.GUIItemSpell.getFace
Image getFace(@NotNull final CfItem item)
Definition: GUIItemSpell.java:347