00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 package com.realtime.crossfire.jxclient.gui.list;
00023
00024 import com.realtime.crossfire.jxclient.gui.gui.GUIElementListener;
00025 import com.realtime.crossfire.jxclient.gui.gui.TooltipManager;
00026 import com.realtime.crossfire.jxclient.gui.item.GUIItemItemFactory;
00027 import com.realtime.crossfire.jxclient.gui.keybindings.KeyBinding;
00028 import com.realtime.crossfire.jxclient.gui.label.AbstractLabel;
00029 import com.realtime.crossfire.jxclient.items.ItemView;
00030 import com.realtime.crossfire.jxclient.spells.Spell;
00031 import com.realtime.crossfire.jxclient.spells.SpellsManager;
00032 import com.realtime.crossfire.jxclient.window.KeybindingsManager;
00033 import org.jetbrains.annotations.NotNull;
00034 import org.jetbrains.annotations.Nullable;
00035
00040 public class GUISpellList extends GUIItemList {
00041
00045 private static final long serialVersionUID = 1L;
00046
00050 @NotNull
00051 private final SpellsManager spellsManager;
00052
00056 @NotNull
00057 private final KeybindingsManager keybindingsManager;
00058
00073 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 GUIItemItemFactory itemItemFactory, @NotNull final SpellsManager spellsManager, @NotNull final KeybindingsManager keybindingsManager) {
00074 super(tooltipManager, elementListener, name, cellWidth, cellHeight, itemView, currentItem, itemItemFactory);
00075 this.spellsManager = spellsManager;
00076 this.keybindingsManager = keybindingsManager;
00077 }
00078
00087 private String getBindings(@NotNull final Spell spell, @NotNull final String prefix, @NotNull final String legend) {
00088 final String search = prefix+spell.getName().charAt(0);
00089 final String match = prefix+spell.getName();
00090
00091
00092
00093
00094 final Iterable<KeyBinding> bindings = keybindingsManager.getBindingsForPartialCommand(search);
00095 boolean first = true;
00096 final StringBuilder sb = new StringBuilder();
00097
00098 for (final KeyBinding binding : bindings) {
00099 if (match.startsWith(binding.getCommandString())) {
00100 if (first) {
00101 sb.append(legend);
00102 first = false;
00103 } else {
00104 sb.append(" ; ");
00105 }
00106
00107 sb.append(binding.getBindingDescription());
00108 }
00109 }
00110
00111 return sb.toString();
00112 }
00113
00114 @Override
00115 protected void updateTooltip(final int index, final int x, final int y, final int w, final int h) {
00116 final Spell spell = spellsManager.getSpell(index);
00117 if (spell == null) {
00118 setTooltipText(null, x, y, w, h);
00119 return;
00120 }
00121
00122 final StringBuilder sb = new StringBuilder(spell.getTooltipText());
00123
00124
00125 sb.append(getBindings(spell, "cast ", "<br>Cast shortcut: "));
00126 sb.append(getBindings(spell, "invoke ", "<br>Invoke shortcut:"));
00127
00128 setTooltipText(sb.toString(), x, y, w, h);
00129 }
00130 }