Crossfire JXClient, Trunk
GUIItemShortcut.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.Color;
41 import java.awt.Dimension;
42 import java.awt.Font;
43 import java.awt.Graphics;
44 import java.awt.Image;
45 import org.jetbrains.annotations.NotNull;
46 import org.jetbrains.annotations.Nullable;
47 
52 public class GUIItemShortcut extends GUIItem {
53 
57  private static final long serialVersionUID = 1;
58 
62  @NotNull
63  private static final Color BACKGROUND_COLOR = new Color(0, 0, 0, 0.0f);
64 
68  @NotNull
69  private static final String DEFAULT_TOOLTIP_TEXT = "(empty)";
70 
75  @NotNull
76  private final Shortcuts shortcuts;
77 
81  @NotNull
82  private final FacesManager facesManager;
83 
87  @NotNull
89 
93  @Nullable
94  private final Color activateColor;
95 
99  @Nullable
100  private final Image activateImage;
101 
105  @Nullable
106  private final Color immediateColor;
107 
111  @Nullable
112  private final Image immediateImage;
113 
117  @NotNull
118  private final Font font;
119 
123  @NotNull
124  private final ShortcutSlot shortcutSlot;
125 
129  @NotNull
130  private final Object sync = new Object();
131 
136  @Nullable
138 
142  @NotNull
144 
145  @Override
146  public void shortcutAdded(@NotNull final ShortcutSlot shortcutSlot, @NotNull final Shortcut shortcut) {
149  }
150  }
151 
152  @Override
153  public void shortcutRemoved(@NotNull final ShortcutSlot shortcutSlot, @NotNull final Shortcut shortcut) {
155  setShortcut(null);
156  }
157  }
158  };
159 
163  @NotNull
164  private final ShortcutListener shortcutListener = () -> {
165  setChanged();
166  tooltipChanged();
167  };
168 
172  @NotNull
174 
175  @Override
176  public void faceUpdated(@NotNull final Face face) {
177  final Shortcut shortcut = getShortcut();
178  if (shortcut != null && shortcut.displaysFace(face)) {
179  setChanged();
180  }
181  }
182  };
183 
204  public GUIItemShortcut(@NotNull final TooltipManager tooltipManager, @NotNull final GUIElementListener elementListener, @NotNull final String name, @Nullable final Color activateColor, @Nullable final Image activateImage, @Nullable final Color immediateColor, @Nullable final Image immediateImage, @NotNull final ShortcutSlot shortcutSlot, @NotNull final FacesManager facesManager, @NotNull final CommandExecutor commandExecutor, @NotNull final Shortcuts shortcuts, @NotNull final Font font, @NotNull final GuiFactory guiFactory) {
206  this.shortcuts = shortcuts;
207  this.facesManager = facesManager;
208  this.commandExecutor = commandExecutor;
209  this.activateColor = activateColor;
210  this.activateImage = activateImage;
211  this.immediateColor = immediateColor;
212  this.immediateImage = immediateImage;
213  this.font = font;
214  this.shortcutSlot = shortcutSlot;
215  this.shortcuts.addShortcutsListener(shortcutsListener);
216  this.facesManager.addFacesManagerListener(facesManagerListener);
217  }
218 
219  @Override
220  public void dispose() {
221  super.dispose();
224  setShortcut(null);
225  }
226 
231  @Nullable
232  private Shortcut getShortcut() {
233  synchronized (sync) {
234  return shortcut;
235  }
236  }
237 
238  @Nullable
239  @Override
241  final Shortcut shortcut = getShortcut();
243  }
244 
245  @Override
246  public void notifyOpen() {
247  }
248 
254  private void setShortcut(@Nullable final Shortcut shortcut) {
255  synchronized (sync) {
256  if (this.shortcut == shortcut) {
257  return;
258  }
259 
260  if (this.shortcut != null) {
261  this.shortcut.removeShortcutListener(shortcutListener);
262  }
263  this.shortcut = shortcut;
264  if (this.shortcut != null) {
265  this.shortcut.addShortcutListener(shortcutListener);
266  }
267  }
268  setChanged();
269  tooltipChanged();
270  }
271 
272  @Override
273  public void button1Clicked(final int modifiers) {
274  final Shortcut shortcut = getShortcut();
275  switch (modifiers&Modifiers.MASK) {
276  case Modifiers.NONE:
277  if (shortcut != null) {
279  }
280  break;
281 
282  case Modifiers.CTRL:
283  if (shortcut != null) {
285  }
286  break;
287  }
288  }
289 
290  @Override
291  public void button2Clicked(final int modifiers) {
292  //noinspection SwitchStatementWithTooFewBranches
293  switch (modifiers&Modifiers.MASK) {
294  case Modifiers.NONE:
295  final Shortcut shortcut = getShortcut();
296  if (shortcut != null) {
298  }
299  break;
300  }
301  }
302 
303  @Override
304  public void button3Clicked(final int modifiers) {
305  }
306 
307  @Override
308  public void paintComponent(@NotNull final Graphics g) {
309  super.paintComponent(g);
310 
311  g.setColor(BACKGROUND_COLOR);
312  g.fillRect(0, 0, getWidth(), getHeight());
313 
314  final Shortcut shortcut = getShortcut();
315  if (shortcut != null) {
316  final Spell spell = shortcut.getSpell();
317  if (spell != null) {
318  final Color color = shortcut.isImmediate() ? immediateColor : activateColor;
319  if (color != null) {
320  g.setColor(color);
321  g.fillRect(0, 0, getWidth(), getHeight());
322  }
323  g.drawImage(facesManager.getOriginalImageIcon(spell.getFaceNum(), null).getImage(), 0, 0, null);
324  final Image image = shortcut.isImmediate() ? immediateImage : activateImage;
325  if (image != null) {
326  g.drawImage(image, 0, 0, null);
327  }
328  }
329  }
330 
331  g.setFont(font);
332  //noinspection VariableNotUsedInsideIf
333  g.setColor(shortcut == null ? Color.LIGHT_GRAY : Color.DARK_GRAY); // XXX: define in skin
334  g.drawString(shortcutSlot.toString(), 1, 1+font.getSize()); // XXX: define in skin
335  }
336 
337  @NotNull
338  @Override
339  @SuppressWarnings("MethodDoesntCallSuperMethod")
340  public Dimension getPreferredSize() {
341  return getMinimumSizeInt();
342  }
343 
344  @NotNull
345  @Override
346  @SuppressWarnings("MethodDoesntCallSuperMethod")
347  public Dimension getMinimumSize() {
348  return getMinimumSizeInt();
349  }
350 
355  @NotNull
356  private static Dimension getMinimumSizeInt() {
357  return new Dimension(32, 32);
358  }
359 
360  @Override
361  public boolean canScroll(final int distance) {
362  return false;
363  }
364 
365  @Override
366  public void scroll(final int distance) {
367  }
368 
369  @Override
370  public void resetScroll() {
371  }
372 
373 }
com.realtime.crossfire.jxclient.gui.gui.AbstractGUIElement.newTooltipText
TooltipText newTooltipText(@Nullable final String tooltipText)
Definition: AbstractGUIElement.java:247
com.realtime.crossfire.jxclient.gui.item.GUIItemShortcut.notifyOpen
void notifyOpen()
Definition: GUIItemShortcut.java:246
com.realtime.crossfire.jxclient.gui.gui.AbstractGUIElement.name
final String name
Definition: AbstractGUIElement.java:77
com.realtime.crossfire.jxclient
com.realtime.crossfire.jxclient.gui.item.GUIItemShortcut.shortcutListener
final ShortcutListener shortcutListener
Definition: GUIItemShortcut.java:164
com.realtime.crossfire.jxclient.skin.skin
Definition: DefaultJXCSkin.java:23
com.realtime.crossfire.jxclient.gui.item.GUIItemShortcut.activateColor
final Color activateColor
Definition: GUIItemShortcut.java:94
com.realtime.crossfire.jxclient.shortcuts.Shortcuts
Definition: Shortcuts.java:43
com.realtime.crossfire.jxclient.gui.item.GUIItemShortcut.activateImage
final Image activateImage
Definition: GUIItemShortcut.java:100
com.realtime.crossfire.jxclient.gui.item.GUIItemShortcut.canScroll
boolean canScroll(final int distance)
Definition: GUIItemShortcut.java:361
com.realtime.crossfire.jxclient.gui.misc.Modifiers.NONE
static final int NONE
Definition: Modifiers.java:36
com.realtime.crossfire.jxclient.gui.textinput.CommandExecutor.executeCommand
void executeCommand(@NotNull final CharSequence commandLine)
com.realtime.crossfire.jxclient.skin
com.realtime.crossfire.jxclient.gui.item.GUIItemShortcut.scroll
void scroll(final int distance)
Definition: GUIItemShortcut.java:366
com.realtime.crossfire.jxclient.gui.item.GUIItemShortcut.DEFAULT_TOOLTIP_TEXT
static final String DEFAULT_TOOLTIP_TEXT
Definition: GUIItemShortcut.java:69
com.realtime.crossfire.jxclient.gui.item.GUIItemShortcut.GUIItemShortcut
GUIItemShortcut(@NotNull final TooltipManager tooltipManager, @NotNull final GUIElementListener elementListener, @NotNull final String name, @Nullable final Color activateColor, @Nullable final Image activateImage, @Nullable final Color immediateColor, @Nullable final Image immediateImage, @NotNull final ShortcutSlot shortcutSlot, @NotNull final FacesManager facesManager, @NotNull final CommandExecutor commandExecutor, @NotNull final Shortcuts shortcuts, @NotNull final Font font, @NotNull final GuiFactory guiFactory)
Definition: GUIItemShortcut.java:204
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.gui.textinput
Definition: ActivateCommandInputCommand.java:23
com.realtime.crossfire.jxclient.faces.FacesManagerListener
Definition: FacesManagerListener.java:32
com.realtime.crossfire.jxclient.gui.item.GUIItemShortcut.getMinimumSizeInt
static Dimension getMinimumSizeInt()
Definition: GUIItemShortcut.java:356
com.realtime.crossfire.jxclient.gui.item.GUIItemShortcut.button3Clicked
void button3Clicked(final int modifiers)
Definition: GUIItemShortcut.java:304
com.realtime.crossfire.jxclient.gui.item.GUIItemShortcut.getMinimumSize
Dimension getMinimumSize()
Definition: GUIItemShortcut.java:347
com.realtime.crossfire.jxclient.faces
Definition: AbstractFaceQueue.java:23
com.realtime.crossfire.jxclient.gui.item.GUIItemShortcut.immediateImage
final Image immediateImage
Definition: GUIItemShortcut.java:112
com.realtime.crossfire.jxclient.gui.item.GUIItemShortcut.facesManager
final FacesManager facesManager
Definition: GUIItemShortcut.java:82
com.realtime.crossfire.jxclient.gui.item.GUIItem
Definition: GUIItem.java:39
com.realtime.crossfire.jxclient.gui.item.GUIItemShortcut
Definition: GUIItemShortcut.java:52
com.realtime.crossfire.jxclient.shortcuts.Shortcuts.removeShortcutsListener
void removeShortcutsListener(@NotNull final ShortcutsListener listener)
Definition: Shortcuts.java:188
com.realtime.crossfire.jxclient.gui.gui.AbstractGUIElement.tooltipChanged
void tooltipChanged()
Definition: AbstractGUIElement.java:265
com.realtime.crossfire.jxclient.gui.item.GUIItemShortcut.getTooltip
TooltipText getTooltip()
Definition: GUIItemShortcut.java:240
com.realtime.crossfire.jxclient.gui.item.GUIItemShortcut.shortcutSlot
final ShortcutSlot shortcutSlot
Definition: GUIItemShortcut.java:124
com.realtime.crossfire.jxclient.gui.item.GUIItemShortcut.commandExecutor
final CommandExecutor commandExecutor
Definition: GUIItemShortcut.java:88
com.realtime.crossfire.jxclient.gui.item.GUIItemShortcut.button1Clicked
void button1Clicked(final int modifiers)
Definition: GUIItemShortcut.java:273
com.realtime.crossfire.jxclient.spells.Spell
Definition: Spell.java:37
com.realtime.crossfire.jxclient.shortcuts.Shortcut.toggleImmediate
void toggleImmediate()
Definition: Shortcut.java:158
com.realtime.crossfire.jxclient.shortcuts.ShortcutListener
Definition: ShortcutListener.java:31
com.realtime.crossfire.jxclient.gui.item.GUIItemShortcut.dispose
void dispose()
Definition: GUIItemShortcut.java:220
com.realtime.crossfire.jxclient.gui
com.realtime.crossfire.jxclient.gui.item.GUIItemShortcut.getPreferredSize
Dimension getPreferredSize()
Definition: GUIItemShortcut.java:340
com.realtime.crossfire.jxclient.gui.gui.ActivatableGUIElement.elementListener
final GUIElementListener elementListener
Definition: ActivatableGUIElement.java:44
com.realtime.crossfire.jxclient.gui.item.GUIItemShortcut.paintComponent
void paintComponent(@NotNull final Graphics g)
Definition: GUIItemShortcut.java:308
com.realtime.crossfire.jxclient.shortcuts.Shortcut.displaysFace
boolean displaysFace(@NotNull final Face face)
Definition: Shortcut.java:141
com.realtime.crossfire.jxclient.gui.item.GUIItemShortcut.serialVersionUID
static final long serialVersionUID
Definition: GUIItemShortcut.java:57
com.realtime.crossfire.jxclient.gui.textinput.CommandExecutor
Definition: CommandExecutor.java:31
com.realtime.crossfire.jxclient.gui.item.GUIItemShortcut.BACKGROUND_COLOR
static final Color BACKGROUND_COLOR
Definition: GUIItemShortcut.java:63
com.realtime.crossfire.jxclient.gui.gui.TooltipManager
Definition: TooltipManager.java:33
com.realtime.crossfire.jxclient.gui.item.GUIItemShortcut.shortcutsListener
final ShortcutsListener shortcutsListener
Definition: GUIItemShortcut.java:143
com.realtime.crossfire.jxclient.gui.item.GUIItemShortcut.facesManagerListener
final FacesManagerListener facesManagerListener
Definition: GUIItemShortcut.java:173
com.realtime.crossfire.jxclient.shortcuts
Definition: Shortcut.java:23
com.realtime.crossfire.jxclient.faces.FacesManager
Definition: FacesManager.java:40
com.realtime.crossfire.jxclient.gui.gui
Definition: AbstractGUIElement.java:23
com.realtime.crossfire.jxclient.shortcuts.Shortcut.getSpell
Spell getSpell()
Definition: Shortcut.java:86
com.realtime.crossfire.jxclient.spells.Spell.getFaceNum
int getFaceNum()
Definition: Spell.java:215
com.realtime.crossfire.jxclient.shortcuts.ShortcutsListener
Definition: ShortcutsListener.java:32
com.realtime.crossfire.jxclient.gui.gui.TooltipText
Definition: TooltipText.java:31
com.realtime.crossfire
com.realtime.crossfire.jxclient.shortcuts.Shortcut.getCommand
String getCommand()
Definition: Shortcut.java:76
com.realtime.crossfire.jxclient.gui.item.GUIItemShortcut.resetScroll
void resetScroll()
Definition: GUIItemShortcut.java:370
com.realtime
com.realtime.crossfire.jxclient.gui.item.GUIItemShortcut.setShortcut
void setShortcut(@Nullable final Shortcut shortcut)
Definition: GUIItemShortcut.java:254
com.realtime.crossfire.jxclient.shortcuts.Shortcut.getTooltipText
String getTooltipText()
Definition: Shortcut.java:129
com.realtime.crossfire.jxclient.shortcuts.ShortcutSlot
Definition: ShortcutSlot.java:8
com.realtime.crossfire.jxclient.gui.item.GUIItemShortcut.font
final Font font
Definition: GUIItemShortcut.java:118
com
com.realtime.crossfire.jxclient.gui.item.GUIItemShortcut.shortcuts
final Shortcuts shortcuts
Definition: GUIItemShortcut.java:76
com.realtime.crossfire.jxclient.shortcuts.Shortcut
Definition: Shortcut.java:35
com.realtime.crossfire.jxclient.gui.item.GUIItemShortcut.immediateColor
final Color immediateColor
Definition: GUIItemShortcut.java:106
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.shortcuts.Shortcut.isImmediate
boolean isImmediate()
Definition: Shortcut.java:150
com.realtime.crossfire.jxclient.gui.item.GUIItemShortcut.button2Clicked
void button2Clicked(final int modifiers)
Definition: GUIItemShortcut.java:291
com.realtime.crossfire.jxclient.gui.item.GUIItemShortcut.getShortcut
Shortcut getShortcut()
Definition: GUIItemShortcut.java:232
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.gui.misc.Modifiers.CTRL
static final int CTRL
Definition: Modifiers.java:46
com.realtime.crossfire.jxclient.gui.item.GUIItemShortcut.shortcut
Shortcut shortcut
Definition: GUIItemShortcut.java:137
com.realtime.crossfire.jxclient.shortcuts.Shortcut.addShortcutListener
void addShortcutListener(@NotNull final ShortcutListener listener)
Definition: Shortcut.java:103
com.realtime.crossfire.jxclient.faces.Face
Definition: Face.java:37
com.realtime.crossfire.jxclient.shortcuts.ShortcutSlot.toString
String toString()
Definition: ShortcutSlot.java:94
com.realtime.crossfire.jxclient.faces.FacesManager.removeFacesManagerListener
void removeFacesManagerListener(@NotNull FacesManagerListener facesManagerListener)
com.realtime.crossfire.jxclient.gui.item.GUIItemShortcut.sync
final Object sync
Definition: GUIItemShortcut.java:130
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.spells
Definition: Spell.java:23