Crossfire JXClient, Trunk  R20561
GUIItemKnowledgeType.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 
33 import java.awt.Dimension;
34 import java.awt.Image;
35 import org.jetbrains.annotations.NotNull;
36 
40 public class GUIItemKnowledgeType extends GUIItemItem {
41 
45  private static final long serialVersionUID = 1;
46 
50  @NotNull
51  private final Object sync = new Object();
52 
56  @NotNull
57  private final FacesManager facesManager;
58 
62  @NotNull
64 
68  private final int defaultIndex;
69 
74  private int index = -1;
75 
79  private boolean selected;
80 
81  private int currentFace = -1;
82 
86  @NotNull
87  private final ItemView itemView;
88 
92  @NotNull
93  @SuppressWarnings("FieldCanBeLocal")
94  private final FacesManagerListener facesManagerListener = face -> {
95  if (currentFace == face.getFaceNum()) {
96  setChanged();
97  }
98  };
99 
112  public GUIItemKnowledgeType(@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 itemView, final int size) {
113  super(tooltipManager, elementListener, name, itemPainter, facesManager);
114  this.defaultIndex = defaultIndex;
115  this.facesManager = facesManager;
116  this.knowledgeManager = knowledgeManager;
117  this.itemView = itemView;
118  setIndex(defaultIndex);
119 
120  knowledgeManager.addKnowledgeListener(new KnowledgeListener() {
121  @Override
122  public void typeAdded(final int index) {
123  if (GUIItemKnowledgeType.this.index >= index) {
124  setSkill();
125  }
126  }
127 
128  @Override
129  public void knowledgeAdded(final int index) {
130  }
131  });
132  facesManager.addFacesManagerListener(facesManagerListener);
133  if (size != 0) {
134  setSize(0, 0);
135  }
136  }
137 
141  @Override
142  public boolean canScroll(final int distance) {
143  if (distance < 0) {
144  return index >= -distance;
145  }
146  //noinspection SimplifiableIfStatement
147  if (distance > 0) {
148  return index+distance < knowledgeManager.getTypes();
149  }
150  return false;
151  }
152 
156  @Override
157  public void scroll(final int distance) {
158  setIndex(index+distance);
159  setChanged();
160  }
161 
165  @Override
166  public void resetScroll() {
167  setIndex(defaultIndex);
168  }
169 
173  @NotNull
174  @Override
175  public Dimension getPreferredSize() {
176  return getMinimumSizeInt();
177  }
178 
182  @NotNull
183  @Override
184  public Dimension getMinimumSize() {
185  return getMinimumSizeInt();
186  }
187 
192  @NotNull
193  private static Dimension getMinimumSizeInt() {
194  return new Dimension(32, 32);
195  }
196 
200  private void setSkill() {
201  currentFace = knowledgeManager.getTypeFace(index);
202  setChanged();
203  /*
204  setTooltipText(newSkill == null ? null : newSkill.toString());*/
205  }
206 
212  private void setIndex(final int index) {
213  if (this.index == index) {
214  return;
215  }
216  this.index = index;
217 
218  setSkill();
219  }
220 
224  @NotNull
225  @Override
226  protected Image getFace(@NotNull final CfItem item) {
227  // if (item.getFace() == null) {
228  // return defaultSkillIcon.getOriginalImageIcon().getImage();
229  // }
230  return facesManager.getOriginalImageIcon(item.getFace().getFaceNum(), null).getImage();
231  }
232 
236  @Override
237  public void setSelected(final boolean selected) {
238  if (this.selected == selected) {
239  return;
240  }
241 
242  this.selected = selected;
243  setChanged();
244  }
245 
249  @Override
250  protected boolean isSelected() {
251  return selected || isActive();
252  }
253 
257  @Override
258  public int getIndex() {
259  synchronized (sync) {
260  return index;
261  }
262  }
263 
267  @Override
268  public void setIndexNoListeners(final int index) {
269  synchronized (sync) {
270  this.index = index;
271  }
272 
273  setItemNoListeners(itemView.getItem(this.index));
274  }
275 
279  @Override
280  public void button1Clicked(final int modifiers) {
281  }
282 
286  @Override
287  public void button2Clicked(final int modifiers) {
288  }
289 
293  @Override
294  public void button3Clicked(final int modifiers) {
295  }
296 
297 }
void resetScroll()
Resets the scroll index to the default value.
boolean canScroll(final int distance)
Returns whether scrolling is possible.the distance to scroll whether scrolling is possible ...
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
final TooltipManager tooltipManager
The TooltipManager to update.
final Object sync
The object used for synchronization on index.
final GUIElementListener elementListener
The GUIElementListener to notify.
final KnowledgeManager knowledgeManager
The KnowledgeManager instance being watched.
boolean selected
Whether this element is selected in its GUIKnowledgeTypeList.
void setChanged()
Records that the contents have changed and must be repainted.
GUIItemKnowledgeType(@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 itemView, final int size)
Creates a new instance.
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.
static Dimension getMinimumSizeInt()
Returns the minimal size to display this component.
final FacesManagerListener facesManagerListener
The FacesManagerListener registered to detect updated faces.
Interface for listeners interested in FacesManager events.
final ItemPainter itemPainter
The ItemPainter for painting the icon.
CfItem getItem(int index)
Returns the CfItem in a given slot.
void setSkill()
Sets the currently selected knowledge type.
The representation of a Crossfire Item, client-side.
Definition: CfItem.java:36
final FacesManager facesManager
The FacesManager for looking up faces.
void setIndex(final int index)
Sets the index of the currently selected currentFace.
boolean isActive()
Returns whether a GUI element is active.
Maintains a mapping of face numbers to face data.