Crossfire JXClient, Trunk
GUISpellList.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 
38 import org.jetbrains.annotations.NotNull;
39 import org.jetbrains.annotations.Nullable;
40 
45 public class GUISpellList extends GUIItemList<GUIItemSpell> {
46 
50  private static final long serialVersionUID = 1L;
51 
55  @NotNull
57 
61  @NotNull
63 
67  @NotNull
68  private final String name;
69 
73  @NotNull
74  private final ItemView itemView;
75 
79  @NotNull
81 
85  @NotNull
87 
91  @NotNull
92  private final CommandQueue commandQueue;
93 
97  @NotNull
98  private final ItemPainter itemPainter;
99 
103  @NotNull
104  private final FacesManager facesManager;
105 
109  @NotNull
110  private final GuiFactory guiFactory;
111 
129  public GUISpellList(@NotNull final TooltipManager tooltipManager, @NotNull final GUIElementListener elementListener, @NotNull final String name, final int cellWidth, final int cellHeight, @NotNull final ItemView itemView, @Nullable final AbstractLabel currentItem, @NotNull final SpellsManager spellsManager, @NotNull final KeybindingsManager keybindingsManager, @NotNull final CommandQueue commandQueue, @NotNull final ItemPainter itemPainter, @NotNull final FacesManager facesManager, @NotNull final GuiFactory guiFactory) {
131  this.tooltipManager = tooltipManager;
132  this.elementListener = elementListener;
133  this.name = name;
134  this.itemView = itemView;
135  this.spellsManager = spellsManager;
136  this.keybindingsManager = keybindingsManager;
137  this.commandQueue = commandQueue;
138  this.itemPainter = itemPainter;
139  this.facesManager = facesManager;
140  this.guiFactory = guiFactory;
141  }
142 
151  @NotNull
152  private String getBindings(@NotNull final Spell spell, @NotNull final String prefix, @NotNull final String legend) {
153  final String search = prefix+spell.getName().charAt(0);
154  final String match = prefix+spell.getName();
155 
156  // because key bindings can specify partial names, we search in 2 steps:
157  // - search all bindings with the first spell letter
158  // - from those bindings only keep the ones the spell's command matches
159  final Iterable<KeyBinding> bindings = keybindingsManager.getBindings(binding -> binding.getCommandString().startsWith(search)).keySet();
160  boolean first = true;
161  final StringBuilder sb = new StringBuilder();
162 
163  for (KeyBinding binding : bindings) {
164  if (match.startsWith(binding.getCommandString())) {
165  if (first) {
166  sb.append(legend);
167  first = false;
168  } else {
169  sb.append(" ; ");
170  }
171 
172  sb.append(binding.getBindingDescription());
173  }
174  }
175 
176  return sb.toString();
177  }
178 
179  @Nullable
180  @Override
181  protected String getTooltip(final int index) {
182  final Spell spell = spellsManager.getFilteredSpell(index);
183  if (spell == null) {
184  return null;
185  }
186 
187  //noinspection StringBufferReplaceableByString
188  final StringBuilder sb = new StringBuilder(spell.getTooltipText());
189 
190  // find bindings to cast or invoke the spell
191  sb.append(getBindings(spell, "cast ", "<br>Cast shortcut: "));
192  sb.append(getBindings(spell, "invoke ", "<br>Invoke shortcut:"));
193 
194  return sb.toString();
195  }
196 
197  @NotNull
198  @Override
199  protected GUIItemSpell newItem(final int index) {
201  }
202 
203  @Override
204  public void notifyOpen() {
205  }
206 
207 }
com.realtime.crossfire.jxclient.gui.list.GUISpellList.tooltipManager
final TooltipManager tooltipManager
Definition: GUISpellList.java:56
com.realtime.crossfire.jxclient
com.realtime.crossfire.jxclient.skin.skin
Definition: DefaultJXCSkin.java:23
com.realtime.crossfire.jxclient.gui.label.AbstractLabel
Definition: AbstractLabel.java:43
com.realtime.crossfire.jxclient.gui.list.GUISpellList
Definition: GUISpellList.java:45
com.realtime.crossfire.jxclient.gui.list.GUISpellList.keybindingsManager
final KeybindingsManager keybindingsManager
Definition: GUISpellList.java:86
com.realtime.crossfire.jxclient.skin
com.realtime.crossfire.jxclient.gui.label
Definition: AbstractLabel.java:23
com.realtime.crossfire.jxclient.gui.list.GUISpellList.elementListener
final GUIElementListener elementListener
Definition: GUISpellList.java:62
com.realtime.crossfire.jxclient.gui.list.GUISpellList.notifyOpen
void notifyOpen()
Definition: GUISpellList.java:204
com.realtime.crossfire.jxclient.skin.skin.GuiFactory
Definition: GuiFactory.java:41
com.realtime.crossfire.jxclient.gui.list.GUISpellList.itemPainter
final ItemPainter itemPainter
Definition: GUISpellList.java:98
com.realtime.crossfire.jxclient.faces
Definition: AbstractFaceQueue.java:23
com.realtime.crossfire.jxclient.gui.keybindings
Definition: InvalidKeyBindingException.java:23
com.realtime.crossfire.jxclient.gui.list.GUISpellList.spellsManager
final SpellsManager spellsManager
Definition: GUISpellList.java:80
com.realtime.crossfire.jxclient.gui.list.GUISpellList.facesManager
final FacesManager facesManager
Definition: GUISpellList.java:104
com.realtime.crossfire.jxclient.gui.list.GUIItemList
Definition: GUIItemList.java:46
com.realtime.crossfire.jxclient.gui.list.GUISpellList.serialVersionUID
static final long serialVersionUID
Definition: GUISpellList.java:50
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.list.GUISpellList.name
final String name
Definition: GUISpellList.java:68
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.item.ItemPainter
Definition: ItemPainter.java:41
com.realtime.crossfire.jxclient.gui.list.GUISpellList.getBindings
String getBindings(@NotNull final Spell spell, @NotNull final String prefix, @NotNull final String legend)
Definition: GUISpellList.java:152
com.realtime.crossfire.jxclient.gui.keybindings.KeyBinding
Definition: KeyBinding.java:37
com.realtime.crossfire.jxclient.gui.list.GUIItemList< GUIItemSpell >::currentItem
final AbstractLabel currentItem
Definition: GUIItemList.java:63
com.realtime.crossfire.jxclient.gui.list.GUISpellList.getTooltip
String getTooltip(final int index)
Definition: GUISpellList.java:181
com.realtime.crossfire.jxclient.gui.list.GUISpellList.commandQueue
final CommandQueue commandQueue
Definition: GUISpellList.java:92
com.realtime.crossfire.jxclient.gui.gui.TooltipManager
Definition: TooltipManager.java:33
com.realtime.crossfire.jxclient.faces.FacesManager
Definition: FacesManager.java:40
com.realtime.crossfire.jxclient.gui.gui
Definition: AbstractGUIElement.java:23
com.realtime.crossfire.jxclient.queue
Definition: CommandQueue.java:23
com.realtime.crossfire.jxclient.gui.list.GUISpellList.guiFactory
final GuiFactory guiFactory
Definition: GUISpellList.java:110
com.realtime.crossfire
com.realtime
com.realtime.crossfire.jxclient.gui.list.GUISpellList.GUISpellList
GUISpellList(@NotNull final TooltipManager tooltipManager, @NotNull final GUIElementListener elementListener, @NotNull final String name, final int cellWidth, final int cellHeight, @NotNull final ItemView itemView, @Nullable final AbstractLabel currentItem, @NotNull final SpellsManager spellsManager, @NotNull final KeybindingsManager keybindingsManager, @NotNull final CommandQueue commandQueue, @NotNull final ItemPainter itemPainter, @NotNull final FacesManager facesManager, @NotNull final GuiFactory guiFactory)
Definition: GUISpellList.java:129
com.realtime.crossfire.jxclient.gui.keybindings.KeybindingsManager.getBindings
Map< KeyBinding, String > getBindings(@NotNull final Predicate< KeyBinding > predicate)
Definition: KeybindingsManager.java:287
com
com.realtime.crossfire.jxclient.gui.list.GUISpellList.itemView
final ItemView itemView
Definition: GUISpellList.java:74
com.realtime.crossfire.jxclient.gui.list.GUISpellList.newItem
GUIItemSpell newItem(final int index)
Definition: GUISpellList.java:199
com.realtime.crossfire.jxclient.items
Definition: AbstractItemView.java:23
com.realtime.crossfire.jxclient.gui.item
Definition: GUIItem.java:23
com.realtime.crossfire.jxclient.spells.Spell.getTooltipText
String getTooltipText()
Definition: Spell.java:357
com.realtime.crossfire.jxclient.items.ItemView
Definition: ItemView.java:32
com.realtime.crossfire.jxclient.spells.SpellsManager.getFilteredSpell
Spell getFilteredSpell(final int index)
Definition: SpellsManager.java:362
com.realtime.crossfire.jxclient.gui.gui.GUIElementListener
Definition: GUIElementListener.java:32
com.realtime.crossfire.jxclient.spells
Definition: Spell.java:23
com.realtime.crossfire.jxclient.gui.keybindings.KeybindingsManager
Definition: KeybindingsManager.java:40