Crossfire JXClient, Trunk
GUIItemInventory.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 
38 import java.awt.Image;
39 import javax.swing.SwingUtilities;
40 import org.jetbrains.annotations.NotNull;
41 
46 public class GUIItemInventory extends GUIItemItem {
47 
51  private static final long serialVersionUID = 1;
52 
56  @NotNull
57  private final CommandQueue commandQueue;
58 
62  @NotNull
64 
68  @NotNull
69  private final FacesManager facesManager;
70 
74  @NotNull
75  private final FloorView floorView;
76 
80  @NotNull
81  private final ItemView inventoryView;
82 
86  private final int defaultIndex;
87 
91  @NotNull
92  private final Object sync = new Object();
93 
97  private int index = -1;
98 
102  private boolean selected;
103 
108  @NotNull
110 
111  @Override
112  public void locationChanged() {
113  SwingUtilities.invokeLater(locationListenerEdt);
114  }
115 
116  };
117 
121  @NotNull
122  private final Runnable locationListenerEdt = () -> {
123  setChanged();
124  tooltipChanged();
125  };
126 
142  public GUIItemInventory(@NotNull final TooltipManager tooltipManager, @NotNull final GUIElementListener elementListener, @NotNull final CommandQueue commandQueue, final String name, @NotNull final ItemPainter itemPainter, final int index, @NotNull final CrossfireServerConnection crossfireServerConnection, @NotNull final FacesManager facesManager, @NotNull final FloorView floorView, @NotNull final ItemView inventoryView, final int size, @NotNull final GuiFactory guiFactory) {
144  this.commandQueue = commandQueue;
145  this.crossfireServerConnection = crossfireServerConnection;
146  this.facesManager = facesManager;
147  this.floorView = floorView;
149  this.inventoryView = inventoryView;
150  setIndex(index);
151  if (size != 0) {
152  setSize(size, size);
153  }
154  }
155 
156  @Override
157  public void dispose() {
158  super.dispose();
159  setIndex(-1);
160  }
161 
162  @Override
163  public boolean canScroll(final int distance) {
164  if (distance < 0) {
165  synchronized (sync) {
166  return index >= -distance;
167  }
168  }
169  if (distance > 0) {
170  synchronized (sync) {
171  return index+distance < inventoryView.getSize();
172  }
173  }
174  return false;
175  }
176 
177  @Override
178  public void scroll(final int distance) {
179  final int index;
180  synchronized (sync) {
181  index = this.index;
182  }
183  setIndex(index+distance);
184  setChanged();
185  tooltipChanged();
186  }
187 
188  @Override
189  public void resetScroll() {
191  }
192 
193  @Override
194  public void button1Clicked(final int modifiers) {
195  final CfItem item = getItem();
196  if (item == null) {
197  return;
198  }
199 
200  switch (modifiers&Modifiers.MASK) {
201  case Modifiers.NONE:
203  break;
204 
205  case Modifiers.SHIFT:
207  break;
208 
209  case Modifiers.CTRL:
211  break;
212 
215  break;
216  }
217  }
218 
219  @Override
220  public void button2Clicked(final int modifiers) {
221  final CfItem item = getItem();
222  if (item == null) {
223  return;
224  }
225 
226  switch (modifiers&Modifiers.MASK) {
227  case Modifiers.NONE:
229  break;
230 
231  case Modifiers.SHIFT:
233  break;
234  }
235  }
236 
237  @Override
238  public void button3Clicked(final int modifiers) {
239  final CfItem item = getItem();
240  if (item == null) {
241  return;
242  }
243 
244  switch (modifiers&Modifiers.MASK) {
245  case Modifiers.NONE:
246  if (item.isLocked()) {
247  crossfireServerConnection.drawInfo("This item is locked. To drop it, first unlock by SHIFT+left-clicking on it.", CrossfireDrawinfoListener.NDI_RED);
248  return;
249  }
250 
252  break;
253 
254  case Modifiers.SHIFT:
256  break;
257  }
258  }
259 
260  @Override
261  public void setSelected(final boolean selected) {
262  if (this.selected == selected) {
263  return;
264  }
265 
266  this.selected = selected;
267  setChanged();
268  }
269 
270  @Override
271  protected boolean isSelected() {
272  return selected || isActive();
273  }
274 
275  @Override
276  public int getIndex() {
277  synchronized (sync) {
278  return index;
279  }
280  }
281 
286  private void setIndex(final int index) {
287  synchronized (sync) {
288  if (this.index == index) {
289  return;
290  }
291 
292  if (this.index >= 0) {
294  }
295  this.index = index;
296  if (this.index >= 0) {
298  }
299  }
300 
302  }
303 
304  @Override
305  public void setIndexNoListeners(final int index) {
306  synchronized (sync) {
307  this.index = index;
308  }
309 
311  }
312 
313  @NotNull
314  @Override
315  protected Image getFace(@NotNull final CfItem item) {
316  return facesManager.getOriginalImageIcon(item.getFace().getFaceNum(), null).getImage();
317  }
318 
319  @Override
320  public void setChanged() {
321  super.setChanged();
322  final int index;
323  synchronized (sync) {
324  index = this.index;
325  }
326  setItem(inventoryView.getItem(index));
327  }
328 
329  @Override
330  public void notifyOpen() {
331  }
332 
333 }
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.GUIItemItem.setItem
void setItem(@Nullable final CfItem item)
Definition: GUIItemItem.java:168
com.realtime.crossfire.jxclient.server.crossfire.CrossfireServerConnection.sendLock
void sendLock(boolean val, int tag)
com.realtime.crossfire.jxclient.gui.item.GUIItemInventory.resetScroll
void resetScroll()
Definition: GUIItemInventory.java:189
com.realtime.crossfire.jxclient.server
com.realtime.crossfire.jxclient.gui.item.GUIItemInventory.canScroll
boolean canScroll(final int distance)
Definition: GUIItemInventory.java:163
com.realtime.crossfire.jxclient.server.crossfire.CrossfireServerConnection.sendMark
void sendMark(int tag)
com.realtime.crossfire.jxclient.gui.misc.Modifiers.NONE
static final int NONE
Definition: Modifiers.java:36
com.realtime.crossfire.jxclient.items.ItemListener
Definition: ItemListener.java:32
com.realtime.crossfire.jxclient.items.FloorView
Definition: FloorView.java:36
com.realtime.crossfire.jxclient.skin
com.realtime.crossfire.jxclient.gui.item.GUIItemInventory.serialVersionUID
static final long serialVersionUID
Definition: GUIItemInventory.java:51
com.realtime.crossfire.jxclient.gui.item.GUIItemItem.setItemNoListeners
void setItemNoListeners(@Nullable final CfItem item)
Definition: GUIItemItem.java:190
com.realtime.crossfire.jxclient.faces.FacesManager.getOriginalImageIcon
ImageIcon getOriginalImageIcon(int faceNum, @Nullable AtomicBoolean returnIsUnknownImage)
com.realtime.crossfire.jxclient.gui.misc.Modifiers
Definition: Modifiers.java:31
com.realtime.crossfire.jxclient.server.crossfire.CrossfireServerConnection.sendExamine
void sendExamine(int tag)
com.realtime.crossfire.jxclient.skin.skin.GuiFactory
Definition: GuiFactory.java:41
com.realtime.crossfire.jxclient.gui.item.GUIItemInventory.locationListenerEdt
final Runnable locationListenerEdt
Definition: GUIItemInventory.java:122
com.realtime.crossfire.jxclient.server.crossfire.CrossfireDrawinfoListener
Definition: CrossfireDrawinfoListener.java:33
com.realtime.crossfire.jxclient.gui.misc.Modifiers.SHIFT
static final int SHIFT
Definition: Modifiers.java:41
com.realtime.crossfire.jxclient.gui.item.GUIItemInventory.floorView
final FloorView floorView
Definition: GUIItemInventory.java:75
com.realtime.crossfire.jxclient.items.CfItem.isLocked
boolean isLocked()
Definition: CfItem.java:417
com.realtime.crossfire.jxclient.gui.item.GUIItemInventory.inventoryView
final ItemView inventoryView
Definition: GUIItemInventory.java:81
com.realtime.crossfire.jxclient.faces
Definition: AbstractFaceQueue.java:23
com.realtime.crossfire.jxclient.gui.item.GUIItemItem.getItem
CfItem getItem()
Definition: GUIItemItem.java:160
com.realtime.crossfire.jxclient.gui.gui.AbstractGUIElement.tooltipChanged
void tooltipChanged()
Definition: AbstractGUIElement.java:265
com.realtime.crossfire.jxclient.gui.item.GUIItemInventory.locationListener
final LocationListener locationListener
Definition: GUIItemInventory.java:109
com.realtime.crossfire.jxclient.gui.item.GUIItemInventory.index
int index
Definition: GUIItemInventory.java:97
com.realtime.crossfire.jxclient.gui.item.GUIItemInventory.scroll
void scroll(final int distance)
Definition: GUIItemInventory.java:178
com.realtime.crossfire.jxclient.gui.item.GUIItemInventory.getFace
Image getFace(@NotNull final CfItem item)
Definition: GUIItemInventory.java:315
com.realtime.crossfire.jxclient.gui.item.GUIItemItem
Definition: GUIItemItem.java:46
com.realtime.crossfire.jxclient.server.crossfire.CrossfireServerConnection
Definition: CrossfireServerConnection.java:37
com.realtime.crossfire.jxclient.items.ItemView.removeLocationListener
void removeLocationListener(int index, @NotNull LocationListener locationListener)
com.realtime.crossfire.jxclient.gui.item.GUIItemInventory.notifyOpen
void notifyOpen()
Definition: GUIItemInventory.java:330
com.realtime.crossfire.jxclient.server.crossfire.CrossfireServerConnection.sendApply
void sendApply(int tag)
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.server.crossfire.CrossfireServerConnection.drawInfo
void drawInfo(@NotNull String message, int color)
com.realtime.crossfire.jxclient.items.ItemView.addLocationListener
void addLocationListener(int index, @NotNull LocationListener locationListener)
com.realtime.crossfire.jxclient.gui.item.GUIItemInventory.setSelected
void setSelected(final boolean selected)
Definition: GUIItemInventory.java:261
com.realtime.crossfire.jxclient.items.CfItem
Definition: CfItem.java:37
com.realtime.crossfire.jxclient.gui.item.GUIItemInventory.crossfireServerConnection
final CrossfireServerConnection crossfireServerConnection
Definition: GUIItemInventory.java:63
com.realtime.crossfire.jxclient.gui.item.GUIItemInventory.isSelected
boolean isSelected()
Definition: GUIItemInventory.java:271
com.realtime.crossfire.jxclient.gui.item.GUIItemInventory.button2Clicked
void button2Clicked(final int modifiers)
Definition: GUIItemInventory.java:220
com.realtime.crossfire.jxclient.server.crossfire
Definition: AbstractCrossfireServerConnection.java:23
com.realtime.crossfire.jxclient.gui.gui.TooltipManager
Definition: TooltipManager.java:33
com.realtime.crossfire.jxclient.gui.item.GUIItemItem.itemPainter
final ItemPainter itemPainter
Definition: GUIItemItem.java:63
com.realtime.crossfire.jxclient.faces.FacesManager
Definition: FacesManager.java:40
com.realtime.crossfire.jxclient.gui.gui
Definition: AbstractGUIElement.java:23
com.realtime.crossfire.jxclient.gui.item.GUIItemItem.item
CfItem item
Definition: GUIItemItem.java:69
com.realtime.crossfire.jxclient.queue
Definition: CommandQueue.java:23
com.realtime.crossfire.jxclient.gui.item.GUIItemInventory.setChanged
void setChanged()
Definition: GUIItemInventory.java:320
com.realtime.crossfire.jxclient.gui.item.GUIItemInventory.commandQueue
final CommandQueue commandQueue
Definition: GUIItemInventory.java:57
com.realtime.crossfire
com.realtime.crossfire.jxclient.gui.item.GUIItemInventory.button3Clicked
void button3Clicked(final int modifiers)
Definition: GUIItemInventory.java:238
com.realtime.crossfire.jxclient.items.ItemView.getSize
int getSize()
com.realtime.crossfire.jxclient.items.CfItem.getTag
int getTag()
Definition: CfItem.java:287
com.realtime
com.realtime.crossfire.jxclient.gui.item.GUIItemInventory.getIndex
int getIndex()
Definition: GUIItemInventory.java:276
com
com.realtime.crossfire.jxclient.gui.item.GUIItemInventory.setIndexNoListeners
void setIndexNoListeners(final int index)
Definition: GUIItemInventory.java:305
com.realtime.crossfire.jxclient.faces.Face.getFaceNum
int getFaceNum()
Definition: Face.java:105
com.realtime.crossfire.jxclient.items
Definition: AbstractItemView.java:23
com.realtime.crossfire.jxclient.items.CfItem.getFace
Face getFace()
Definition: CfItem.java:304
com.realtime.crossfire.jxclient.gui.misc.Modifiers.MASK
static final int MASK
Definition: Modifiers.java:56
com.realtime.crossfire.jxclient.gui.item.GUIItemInventory.button1Clicked
void button1Clicked(final int modifiers)
Definition: GUIItemInventory.java:194
com.realtime.crossfire.jxclient.gui.item.GUIItemInventory.facesManager
final FacesManager facesManager
Definition: GUIItemInventory.java:69
com.realtime.crossfire.jxclient.items.ItemView
Definition: ItemView.java:32
com.realtime.crossfire.jxclient.gui.gui.AbstractGUIElement.guiFactory
final GuiFactory guiFactory
Definition: AbstractGUIElement.java:48
com.realtime.crossfire.jxclient.gui.item.GUIItemInventory.setIndex
void setIndex(final int index)
Definition: GUIItemInventory.java:286
com.realtime.crossfire.jxclient.gui.misc
Definition: GUICheckBox.java:23
com.realtime.crossfire.jxclient.gui.item.GUIItemInventory.dispose
void dispose()
Definition: GUIItemInventory.java:157
com.realtime.crossfire.jxclient.items.ItemView.getItem
CfItem getItem(int index)
com.realtime.crossfire.jxclient.gui.misc.Modifiers.CTRL
static final int CTRL
Definition: Modifiers.java:46
com.realtime.crossfire.jxclient.gui.item.GUIItemInventory.sync
final Object sync
Definition: GUIItemInventory.java:92
com.realtime.crossfire.jxclient.server.crossfire.CrossfireDrawinfoListener.NDI_RED
int NDI_RED
Definition: CrossfireDrawinfoListener.java:53
com.realtime.crossfire.jxclient.gui.item.GUIItemInventory
Definition: GUIItemInventory.java:46
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
com.realtime.crossfire.jxclient.items.LocationListener
Definition: LocationListener.java:31
com.realtime.crossfire.jxclient.gui.item.GUIItemInventory.selected
boolean selected
Definition: GUIItemInventory.java:102
com.realtime.crossfire.jxclient.gui.item.GUIItemInventory.GUIItemInventory
GUIItemInventory(@NotNull final TooltipManager tooltipManager, @NotNull final GUIElementListener elementListener, @NotNull final CommandQueue commandQueue, final String name, @NotNull final ItemPainter itemPainter, final int index, @NotNull final CrossfireServerConnection crossfireServerConnection, @NotNull final FacesManager facesManager, @NotNull final FloorView floorView, @NotNull final ItemView inventoryView, final int size, @NotNull final GuiFactory guiFactory)
Definition: GUIItemInventory.java:142
com.realtime.crossfire.jxclient.queue.CommandQueue.sendMove
void sendMove(final int to, final int tag)
Definition: CommandQueue.java:304
com.realtime.crossfire.jxclient.gui.item.GUIItemInventory.defaultIndex
final int defaultIndex
Definition: GUIItemInventory.java:86
com.realtime.crossfire.jxclient.items.FloorView.getCurrentFloorTag
int getCurrentFloorTag()
Definition: FloorView.java:116