Crossfire JXClient, Trunk
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-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 
37 import java.awt.Dimension;
38 import java.awt.Image;
39 import org.jetbrains.annotations.NotNull;
40 import org.jetbrains.annotations.Nullable;
41 
45 public class GUIItemKnowledge extends GUIItemItem {
46 
50  private static final long serialVersionUID = 1;
51 
55  @NotNull
56  private final Object sync = new Object();
57 
61  @NotNull
62  private final FacesManager facesManager;
63 
64  @NotNull
66 
70  private final int defaultIndex;
71 
76  private int index = -1;
77 
81  private boolean selected;
82 
86  @NotNull
87  private final CommandQueue commandQueue;
88 
89  @NotNull
90  private final ItemView view;
91 
92  @Nullable
94 
98  @NotNull
99  @SuppressWarnings("FieldCanBeLocal")
100  private final FacesManagerListener facesManagerListener = face -> {
101  if (item != null && item.getFaceNum() == face.getFaceNum()) {
102  setChanged();
103  }
104  };
105 
120  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, @NotNull final GuiFactory guiFactory) {
122  this.defaultIndex = defaultIndex;
123  this.facesManager = facesManager;
124  this.knowledgeManager = knowledgeManager;
125  this.view = view;
126  this.commandQueue = commandQueue;
128 
130 
131  @Override
132  public void typeAdded(final int index) {
133  }
134 
135  @Override
136  public void knowledgeAdded(final int index) {
137  synchronized (sync) {
138  if (GUIItemKnowledge.this.index < index) {
139  return;
140  }
141  }
142 
144  }
145  });
147  if (size != 0) {
148  setSize(size, size);
149  }
150  }
151 
152  @Override
153  public boolean canScroll(final int distance) {
154  if (distance < 0) {
155  synchronized (sync) {
156  return index >= -distance;
157  }
158  }
159  if (distance > 0) {
160  synchronized (sync) {
161  return index+distance < knowledgeManager.getTypes();
162  }
163  }
164  return false;
165  }
166 
167  @Override
168  public void scroll(final int distance) {
169  final int index;
170  synchronized (sync) {
171  index = this.index;
172  }
173  setIndex(index+distance);
174  setChanged();
175  }
176 
177  @Override
178  public void resetScroll() {
180  }
181 
182  @NotNull
183  @Override
184  @SuppressWarnings("MethodDoesntCallSuperMethod")
185  public Dimension getPreferredSize() {
186  return getMinimumSizeInt();
187  }
188 
189  @NotNull
190  @Override
191  @SuppressWarnings("MethodDoesntCallSuperMethod")
192  public Dimension getMinimumSize() {
193  return getMinimumSizeInt();
194  }
195 
200  @NotNull
201  private static Dimension getMinimumSizeInt() {
202  return new Dimension(32, 32);
203  }
204 
208  private void setKnowledgeItem() {
209  final int index;
210  synchronized (sync) {
211  index = this.index;
212  }
214 
215  if (newItem == item) {
216  return;
217  }
218 
219  item = newItem;
220  setChanged();
221  }
222 
228  private void setIndex(final int index) {
229  synchronized (sync) {
230  if (this.index == index) {
231  return;
232  }
233  this.index = index;
234  }
235 
237  }
238 
239  @NotNull
240  @Override
241  protected Image getFace(@NotNull final CfItem item) {
242  return facesManager.getOriginalImageIcon(item.getFace().getFaceNum(), null).getImage();
243  }
244 
245  @Override
246  public void setSelected(final boolean selected) {
247  if (this.selected == selected) {
248  return;
249  }
250 
251  this.selected = selected;
252  setChanged();
253  }
254 
255  @Override
256  protected boolean isSelected() {
257  return selected || isActive();
258  }
259 
260  @Override
261  public int getIndex() {
262  synchronized (sync) {
263  return index;
264  }
265  }
266 
267  @Override
268  public void setIndexNoListeners(final int index) {
269  synchronized (sync) {
270  this.index = index;
271  }
272 
275  }
276 
277  @Override
278  public void button1Clicked(final int modifiers) {
279  if (item == null) {
280  return;
281  }
282 
283  commandQueue.sendNcom(false, "knowledge show "+item.getKnowledgeIndex());
284  }
285 
286  @Override
287  public void button2Clicked(final int modifiers) {
288  if (item == null || !knowledgeManager.canAttemptType(item.getType())) {
289  return;
290  }
291 
292  assert item != null;
293  commandQueue.sendNcom(false, "knowledge attempt "+item.getKnowledgeIndex());
294  }
295 
296  @Override
297  public void button3Clicked(final int modifiers) {
298  }
299 
300  @Override
301  public void notifyOpen() {
302  }
303 
304 }
com.realtime.crossfire.jxclient.knowledge
Definition: KnowledgeItem.java:23
com.realtime.crossfire.jxclient.gui.gui.AbstractGUIElement.name
final String name
Definition: AbstractGUIElement.java:77
com.realtime.crossfire.jxclient
com.realtime.crossfire.jxclient.skin.skin
Definition: DefaultJXCSkin.java:23
com.realtime.crossfire.jxclient.gui.item.GUIItemKnowledge.facesManagerListener
final FacesManagerListener facesManagerListener
Definition: GUIItemKnowledge.java:100
com.realtime.crossfire.jxclient.knowledge.KnowledgeManager.getKnowledge
KnowledgeItem getKnowledge(final int index)
Definition: KnowledgeManager.java:193
com.realtime.crossfire.jxclient.gui.item.GUIItemKnowledge.knowledgeManager
final KnowledgeManager knowledgeManager
Definition: GUIItemKnowledge.java:65
com.realtime.crossfire.jxclient.knowledge.KnowledgeItem.getKnowledgeIndex
int getKnowledgeIndex()
Definition: KnowledgeItem.java:81
com.realtime.crossfire.jxclient.gui.item.GUIItemKnowledge.serialVersionUID
static final long serialVersionUID
Definition: GUIItemKnowledge.java:50
com.realtime.crossfire.jxclient.gui.item.GUIItemKnowledge.getPreferredSize
Dimension getPreferredSize()
Definition: GUIItemKnowledge.java:185
com.realtime.crossfire.jxclient.skin
com.realtime.crossfire.jxclient.gui.item.GUIItemKnowledge.notifyOpen
void notifyOpen()
Definition: GUIItemKnowledge.java:301
com.realtime.crossfire.jxclient.gui.item.GUIItemKnowledge.getMinimumSize
Dimension getMinimumSize()
Definition: GUIItemKnowledge.java:192
com.realtime.crossfire.jxclient.gui.item.GUIItemItem.setItemNoListeners
void setItemNoListeners(@Nullable final CfItem item)
Definition: GUIItemItem.java:190
com.realtime.crossfire.jxclient.gui.item.GUIItemKnowledge.resetScroll
void resetScroll()
Definition: GUIItemKnowledge.java:178
com.realtime.crossfire.jxclient.faces.FacesManager.getOriginalImageIcon
ImageIcon getOriginalImageIcon(int faceNum, @Nullable AtomicBoolean returnIsUnknownImage)
com.realtime.crossfire.jxclient.knowledge.KnowledgeManager.getTypes
int getTypes()
Definition: KnowledgeManager.java:146
com.realtime.crossfire.jxclient.skin.skin.GuiFactory
Definition: GuiFactory.java:41
com.realtime.crossfire.jxclient.faces.FacesManagerListener
Definition: FacesManagerListener.java:32
com.realtime.crossfire.jxclient.gui.item.GUIItemKnowledge.selected
boolean selected
Definition: GUIItemKnowledge.java:81
com.realtime.crossfire.jxclient.knowledge.KnowledgeManager.addKnowledgeListener
void addKnowledgeListener(@NotNull final KnowledgeListener listener)
Definition: KnowledgeManager.java:121
com.realtime.crossfire.jxclient.gui.item.GUIItemKnowledge.sync
final Object sync
Definition: GUIItemKnowledge.java:56
com.realtime.crossfire.jxclient.faces
Definition: AbstractFaceQueue.java:23
com.realtime.crossfire.jxclient.gui.item.GUIItemKnowledge.button3Clicked
void button3Clicked(final int modifiers)
Definition: GUIItemKnowledge.java:297
com.realtime.crossfire.jxclient.knowledge.KnowledgeManager.canAttemptType
boolean canAttemptType(@NotNull final String type)
Definition: KnowledgeManager.java:165
com.realtime.crossfire.jxclient.gui.list.GUIKnowledgeList
Definition: GUIKnowledgeList.java:42
com.realtime.crossfire.jxclient.gui.list
Definition: CharacterCellRenderer.java:23
com.realtime.crossfire.jxclient.gui.item.GUIItemItem
Definition: GUIItemItem.java:46
com.realtime.crossfire.jxclient.gui.item.GUIItemKnowledge.index
int index
Definition: GUIItemKnowledge.java:76
com.realtime.crossfire.jxclient.gui.item.GUIItemKnowledge.item
KnowledgeItem item
Definition: GUIItemKnowledge.java:93
com.realtime.crossfire.jxclient.gui.item.GUIItemKnowledge.setKnowledgeItem
void setKnowledgeItem()
Definition: GUIItemKnowledge.java:208
com.realtime.crossfire.jxclient.gui
com.realtime.crossfire.jxclient.queue.CommandQueue
Definition: CommandQueue.java:38
com.realtime.crossfire.jxclient.gui.gui.ActivatableGUIElement.elementListener
final GUIElementListener elementListener
Definition: ActivatableGUIElement.java:44
com.realtime.crossfire.jxclient.gui.item.ItemPainter
Definition: ItemPainter.java:41
com.realtime.crossfire.jxclient.knowledge.KnowledgeItem
Definition: KnowledgeItem.java:32
com.realtime.crossfire.jxclient.items.CfItem
Definition: CfItem.java:37
com.realtime.crossfire.jxclient.knowledge.KnowledgeItem.getFaceNum
int getFaceNum()
Definition: KnowledgeItem.java:98
com.realtime.crossfire.jxclient.gui.item.GUIItemKnowledge.facesManager
final FacesManager facesManager
Definition: GUIItemKnowledge.java:62
com.realtime.crossfire.jxclient.gui.item.GUIItemKnowledge.getFace
Image getFace(@NotNull final CfItem item)
Definition: GUIItemKnowledge.java:241
com.realtime.crossfire.jxclient.gui.item.GUIItemKnowledge.setSelected
void setSelected(final boolean selected)
Definition: GUIItemKnowledge.java:246
com.realtime.crossfire.jxclient.gui.gui.TooltipManager
Definition: TooltipManager.java:33
com.realtime.crossfire.jxclient.gui.item.GUIItemKnowledge.GUIItemKnowledge
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, @NotNull final GuiFactory guiFactory)
Definition: GUIItemKnowledge.java:120
com.realtime.crossfire.jxclient.knowledge.KnowledgeItem.getType
String getType()
Definition: KnowledgeItem.java:147
com.realtime.crossfire.jxclient.gui.item.GUIItemItem.itemPainter
final ItemPainter itemPainter
Definition: GUIItemItem.java:63
com.realtime.crossfire.jxclient.faces.FacesManager.addFacesManagerListener
void addFacesManagerListener(@NotNull FacesManagerListener facesManagerListener)
com.realtime.crossfire.jxclient.gui.item.GUIItemKnowledge.setIndex
void setIndex(final int index)
Definition: GUIItemKnowledge.java:228
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.item.GUIItemKnowledge.button2Clicked
void button2Clicked(final int modifiers)
Definition: GUIItemKnowledge.java:287
com.realtime.crossfire.jxclient.gui.item.GUIItemKnowledge.getIndex
int getIndex()
Definition: GUIItemKnowledge.java:261
com.realtime.crossfire.jxclient.gui.item.GUIItemKnowledge.commandQueue
final CommandQueue commandQueue
Definition: GUIItemKnowledge.java:87
com.realtime.crossfire
com.realtime.crossfire.jxclient.gui.item.GUIItemKnowledge.canScroll
boolean canScroll(final int distance)
Definition: GUIItemKnowledge.java:153
com.realtime
com.realtime.crossfire.jxclient.gui.item.GUIItemKnowledge
Definition: GUIItemKnowledge.java:45
com.realtime.crossfire.jxclient.knowledge.KnowledgeManager
Definition: KnowledgeManager.java:19
com.realtime.crossfire.jxclient.queue.CommandQueue.sendNcom
void sendNcom(final boolean mustSend, @NotNull final String command)
Definition: CommandQueue.java:184
com
com.realtime.crossfire.jxclient.gui.item.GUIItemKnowledge.isSelected
boolean isSelected()
Definition: GUIItemKnowledge.java:256
com.realtime.crossfire.jxclient.items
Definition: AbstractItemView.java:23
com.realtime.crossfire.jxclient.gui.gui.AbstractGUIElement.setChanged
void setChanged()
Definition: AbstractGUIElement.java:223
com.realtime.crossfire.jxclient.gui.item.GUIItemKnowledge.view
final ItemView view
Definition: GUIItemKnowledge.java:90
com.realtime.crossfire.jxclient.items.ItemView
Definition: ItemView.java:32
com.realtime.crossfire.jxclient.gui.item.GUIItemKnowledge.getMinimumSizeInt
static Dimension getMinimumSizeInt()
Definition: GUIItemKnowledge.java:201
com.realtime.crossfire.jxclient.gui.gui.AbstractGUIElement.guiFactory
final GuiFactory guiFactory
Definition: AbstractGUIElement.java:48
com.realtime.crossfire.jxclient.items.ItemView.getItem
CfItem getItem(int index)
com.realtime.crossfire.jxclient.gui.item.GUIItemKnowledge.setIndexNoListeners
void setIndexNoListeners(final int index)
Definition: GUIItemKnowledge.java:268
com.realtime.crossfire.jxclient.gui.item.GUIItemKnowledge.button1Clicked
void button1Clicked(final int modifiers)
Definition: GUIItemKnowledge.java:278
com.realtime.crossfire.jxclient.gui.item.GUIItemKnowledge.defaultIndex
final int defaultIndex
Definition: GUIItemKnowledge.java:70
com.realtime.crossfire.jxclient.gui.item.GUIItemKnowledge.scroll
void scroll(final int distance)
Definition: GUIItemKnowledge.java:168
com.realtime.crossfire.jxclient.knowledge.KnowledgeListener
Definition: KnowledgeListener.java:30
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.gui.gui.ActivatableGUIElement.isActive
boolean isActive()
Definition: ActivatableGUIElement.java:124