Crossfire JXClient, Trunk  R20561
GUIItemKnowledge.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-2011 Andreas Kirschbaum.
20  */
21 
22 package com.realtime.crossfire.jxclient.gui.item;
23 
36 import java.awt.Dimension;
37 import java.awt.Image;
38 import org.jetbrains.annotations.NotNull;
39 import org.jetbrains.annotations.Nullable;
40 
44 public class GUIItemKnowledge extends GUIItemItem {
45 
49  private static final long serialVersionUID = 1;
50 
54  @NotNull
55  private final Object sync = new Object();
56 
60  @NotNull
61  private final FacesManager facesManager;
62 
63  @NotNull
65 
69  private final int defaultIndex;
70 
75  private int index = -1;
76 
80  private boolean selected;
81 
85  @NotNull
86  private final CommandQueue commandQueue;
87 
88  @NotNull
89  private final ItemView view;
90 
91  @Nullable
93 
97  @NotNull
98  @SuppressWarnings("FieldCanBeLocal")
100 
101  @Override
102  public void faceUpdated(@NotNull final Face face) {
103  if (item != null && item.getFaceNum() == face.getFaceNum()) {
104  setChanged();
105  }
106  }
107 
108  };
109 
123  public GUIItemKnowledge(@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 KnowledgeManager knowledgeManager, @NotNull final ItemView view, @NotNull final CommandQueue commandQueue, final int size) {
124  super(tooltipManager, elementListener, name, itemPainter, facesManager);
125  this.defaultIndex = defaultIndex;
126  this.facesManager = facesManager;
127  this.knowledgeManager = knowledgeManager;
128  this.view = view;
129  this.commandQueue = commandQueue;
130  setIndex(defaultIndex);
131 
132  knowledgeManager.addKnowledgeListener(new KnowledgeListener() {
133  @Override
134  public void typeAdded(final int index) {
135  }
136 
137  @Override
138  public void knowledgeAdded(final int index) {
139  if (GUIItemKnowledge.this.index >= index) {
141  }
142  }
143  });
144  facesManager.addFacesManagerListener(facesManagerListener);
145  if (size != 0) {
146  setSize(size, size);
147  }
148  }
149 
153  @Override
154  public boolean canScroll(final int distance) {
155  if (distance < 0) {
156  return index >= -distance;
157  }
158  //noinspection SimplifiableIfStatement
159  if (distance > 0) {
160  return index+distance < knowledgeManager.getTypes();
161  }
162  return false;
163  }
164 
168  @Override
169  public void scroll(final int distance) {
170  setIndex(index+distance);
171  setChanged();
172  }
173 
177  @Override
178  public void resetScroll() {
179  setIndex(defaultIndex);
180  }
181 
185  @NotNull
186  @Override
187  public Dimension getPreferredSize() {
188  return getMinimumSizeInt();
189  }
190 
194  @NotNull
195  @Override
196  public Dimension getMinimumSize() {
197  return getMinimumSizeInt();
198  }
199 
204  @NotNull
205  private static Dimension getMinimumSizeInt() {
206  return new Dimension(32, 32);
207  }
208 
212  private void setKnowledgeItem() {
213  final KnowledgeItem newItem = knowledgeManager.getKnowledge(index);
214 
215  if (newItem == item) {
216  return;
217  }
218 
219  item = newItem;
220  setChanged();
221  }
222 
228  private void setIndex(final int index) {
229  if (this.index == index) {
230  return;
231  }
232  this.index = index;
233 
235  }
236 
240  @NotNull
241  @Override
242  protected Image getFace(@NotNull final CfItem item) {
243  // if (item.getFace() == null) {
244  // return defaultSkillIcon.getOriginalImageIcon().getImage();
245  // }
246  return facesManager.getOriginalImageIcon(item.getFace().getFaceNum(), null).getImage();
247  }
248 
252  @Override
253  public void setSelected(final boolean selected) {
254  if (this.selected == selected) {
255  return;
256  }
257 
258  this.selected = selected;
259  setChanged();
260  }
261 
265  @Override
266  protected boolean isSelected() {
267  return selected || isActive();
268  }
269 
273  @Override
274  public int getIndex() {
275  synchronized (sync) {
276  return index;
277  }
278  }
279 
283  @Override
284  public void setIndexNoListeners(final int index) {
285  synchronized (sync) {
286  this.index = index;
287  }
288 
289  setItemNoListeners(view.getItem(this.index));
291  }
292 
296  @Override
297  public void button1Clicked(final int modifiers) {
298  if (item == null) {
299  return;
300  }
301 
302  commandQueue.sendNcom(false, "knowledge show "+item.getKnowledgeIndex());
303  }
304 
308  @Override
309  public void button2Clicked(final int modifiers) {
310  if (item == null || !knowledgeManager.canAttemptType(item.getType())) {
311  return;
312  }
313 
314  assert item != null;
315  commandQueue.sendNcom(false, "knowledge attempt "+item.getKnowledgeIndex());
316  }
317 
321  @Override
322  public void button3Clicked(final int modifiers) {
323  }
324 
325 }
void setKnowledgeItem()
Sets the currently selected KnowledgeItem.
KnowledgeItem getKnowledge(final int index)
Returns a KnowledgeItem instance by index.
final FacesManager facesManager
The FacesManager for looking up faces.
ImageIcon getOriginalImageIcon(int faceNum, @Nullable boolean[] isUnknownImage)
Returns the "original" face for a face ID.
void scroll(final int distance)
Scrolls the element.the distance to scroll
void setIndex(final int index)
Sets the index of the currently selected item.
final TooltipManager tooltipManager
The TooltipManager to update.
void sendNcom(final boolean mustSend, @NotNull final String command)
Sends an "ncom" command to the server.
final GUIElementListener elementListener
The GUIElementListener to notify.
static final long serialVersionUID
The serial version UID.
void setChanged()
Records that the contents have changed and must be repainted.
static Dimension getMinimumSizeInt()
Returns the minimal size to display this component.
void setItemNoListeners(@Nullable final CfItem item)
Sets the current item instance without registering listeners for updates.
Manages image information ("faces") needed to display the map view, items, and spell icons...
A GUIElement instance representing an in-game item.
Interface for listeners interested in FacesManager events.
boolean selected
Whether this element is selected in its GUIKnowledgeList.
GUIItemKnowledge(@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 KnowledgeManager knowledgeManager, @NotNull final ItemView view, @NotNull final CommandQueue commandQueue, final int size)
Creates a new instance.
final FacesManagerListener facesManagerListener
The FacesManagerListener registered to detect updated faces.
void resetScroll()
Resets the scroll index to the default value.
final Object sync
The object used for synchronization on index.
final ItemPainter itemPainter
The ItemPainter for painting the icon.
CfItem getItem(int index)
Returns the CfItem in a given slot.
Maintains the pending (ncom) commands sent to the server.
boolean canScroll(final int distance)
Returns whether scrolling is possible.the distance to scroll whether scrolling is possible ...
String getType()
Returns the knowledge&#39;s type.
The representation of a Crossfire Item, client-side.
Definition: CfItem.java:36
final CommandQueue commandQueue
The command queue for sending commands.
boolean isActive()
Returns whether a GUI element is active.
Maintains a mapping of face numbers to face data.