Crossfire JXClient, Trunk
GUIItemFloor.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.Image;
38 import javax.swing.SwingUtilities;
39 import org.jetbrains.annotations.NotNull;
40 
45 public class GUIItemFloor extends GUIItemItem {
46 
50  private static final long serialVersionUID = 1;
51 
55  @NotNull
56  private final CommandQueue commandQueue;
57 
61  @NotNull
63 
67  @NotNull
68  private final ItemView floorView;
69 
73  @NotNull
74  private final ItemSet itemSet;
75 
79  @NotNull
80  private final FacesManager facesManager;
81 
85  @NotNull
86  private final Image nextGroupFace;
87 
91  @NotNull
92  private final Image prevGroupFace;
93 
97  private final int defaultIndex;
98 
103  private int index = -1;
104 
109  @NotNull
111 
112  @Override
113  public void locationChanged() {
114  SwingUtilities.invokeLater(locationListenerEdt);
115  }
116 
117  };
118 
122  @NotNull
123  private final Runnable locationListenerEdt = () -> setIndex(index, true);
124 
142  public GUIItemFloor(@NotNull final TooltipManager tooltipManager, @NotNull final GUIElementListener elementListener, @NotNull final CommandQueue commandQueue, @NotNull final String name, @NotNull final ItemPainter itemPainter, final int index, @NotNull final CrossfireServerConnection crossfireServerConnection, @NotNull final ItemView floorView, @NotNull final ItemSet itemSet, @NotNull final FacesManager facesManager, @NotNull final Image nextGroupFace, @NotNull final Image prevGroupFace, final int size, @NotNull final GuiFactory guiFactory) {
144  this.commandQueue = commandQueue;
145  this.crossfireServerConnection = crossfireServerConnection;
146  this.floorView = floorView;
147  this.itemSet = itemSet;
148  this.facesManager = facesManager;
149  this.nextGroupFace = nextGroupFace;
150  this.prevGroupFace = prevGroupFace;
152  setIndex(index, false);
153  if (size != 0) {
154  setSize(size, size);
155  }
156  }
157 
158  @Override
159  public void dispose() {
160  super.dispose();
161  setIndex(-1, false);
162  }
163 
164  @Override
165  public void notifyOpen() {
166  }
167 
168  @Override
169  public boolean canScroll(final int distance) {
170  if (distance < 0) {
171  return index >= -distance;
172  }
173  //noinspection SimplifiableIfStatement
174  if (distance > 0) {
175  return index+distance < floorView.getSize();
176  }
177  return false;
178  }
179 
180  @Override
181  public void scroll(final int distance) {
182  setIndex(index+distance, false);
183  }
184 
185  @Override
186  public void resetScroll() {
187  setIndex(defaultIndex, false);
188  }
189 
190  @Override
191  public void button1Clicked(final int modifiers) {
192  final CfItem item = getItem();
193  if (item == null) {
194  return;
195  }
196 
197  switch (modifiers&Modifiers.MASK) {
198  case Modifiers.NONE:
199  if (item.isItemGroupButton()) {
201  } else {
203  }
204  break;
205 
206  case Modifiers.CTRL:
208  break;
209  }
210  }
211 
212  @Override
213  public void button2Clicked(final int modifiers) {
214  final CfItem item = getItem();
215  if (item == null) {
216  return;
217  }
218 
219  //noinspection SwitchStatementWithTooFewBranches
220  switch (modifiers&Modifiers.MASK) {
221  case Modifiers.NONE:
223  break;
224  }
225  }
226 
227  @Override
228  public void button3Clicked(final int modifiers) {
229  final CfItem item = getItem();
230  if (item == null) {
231  return;
232  }
233 
234  final CfItem player = itemSet.getPlayer();
235  if (player == null) {
236  return;
237  }
238 
239  switch (modifiers&Modifiers.MASK) {
240  case Modifiers.NONE:
241  commandQueue.sendMove(player.getTag(), item.getTag());
242  break;
243 
244  case Modifiers.SHIFT:
246  break;
247  }
248  }
249 
250  @Override
251  public int getIndex() {
252  return index;
253  }
254 
261  private void setIndex(final int index, final boolean forced) {
262  if (this.index != index) {
263  if (this.index >= 0) {
265  }
266  this.index = index;
267  if (this.index >= 0) {
269  }
270  } else if (!forced) {
271  return;
272  }
273 
275  }
276 
277  @Override
278  public void setIndexNoListeners(final int index) {
279  this.index = index;
280 
282  }
283 
284  @NotNull
285  @Override
286  protected Image getFace(@NotNull final CfItem item) {
287  if (!item.isItemGroupButton()) {
288  return facesManager.getOriginalImageIcon(item.getFace().getFaceNum(), null).getImage();
289  }
290 
291  /*
292  * replace empty.111 with arrows for "Click here for next/previous
293  * group of items". When a container is opened, the first item
294  * will be the 'prev' arrow, so take that into account.
295  */
296  final int min = itemSet.getOpenContainer() == 0 ? 0 : 1;
297  return index > min ? nextGroupFace : prevGroupFace;
298  }
299 
300  @Override
301  public void setSelected(final boolean selected) {
302  // ignore: floor objects are never selected
303  }
304 
305  @Override
306  protected boolean isSelected() {
307  return false;
308  }
309 
310 }
com.realtime.crossfire.jxclient.gui.item.GUIItemFloor.locationListenerEdt
final Runnable locationListenerEdt
Definition: GUIItemFloor.java:123
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.GUIItemFloor.itemSet
final ItemSet itemSet
Definition: GUIItemFloor.java:74
com.realtime.crossfire.jxclient.gui.item.GUIItemFloor.dispose
void dispose()
Definition: GUIItemFloor.java:159
com.realtime.crossfire.jxclient.gui.item.GUIItemItem.setItem
void setItem(@Nullable final CfItem item)
Definition: GUIItemItem.java:168
com.realtime.crossfire.jxclient.gui.item.GUIItemFloor
Definition: GUIItemFloor.java:45
com.realtime.crossfire.jxclient.server
com.realtime.crossfire.jxclient.gui.item.GUIItemFloor.setSelected
void setSelected(final boolean selected)
Definition: GUIItemFloor.java:301
com.realtime.crossfire.jxclient.gui.item.GUIItemFloor.prevGroupFace
final Image prevGroupFace
Definition: GUIItemFloor.java:92
com.realtime.crossfire.jxclient.gui.misc.Modifiers.NONE
static final int NONE
Definition: Modifiers.java:36
com.realtime.crossfire.jxclient.skin
com.realtime.crossfire.jxclient.gui.item.GUIItemFloor.index
int index
Definition: GUIItemFloor.java:103
com.realtime.crossfire.jxclient.gui.item.GUIItemItem.setItemNoListeners
void setItemNoListeners(@Nullable final CfItem item)
Definition: GUIItemItem.java:190
com.realtime.crossfire.jxclient.gui.item.GUIItemFloor.floorView
final ItemView floorView
Definition: GUIItemFloor.java:68
com.realtime.crossfire.jxclient.faces.FacesManager.getOriginalImageIcon
ImageIcon getOriginalImageIcon(int faceNum, @Nullable AtomicBoolean returnIsUnknownImage)
com.realtime.crossfire.jxclient.items.ItemSet
Definition: ItemSet.java:44
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.misc.Modifiers.SHIFT
static final int SHIFT
Definition: Modifiers.java:41
com.realtime.crossfire.jxclient.faces
Definition: AbstractFaceQueue.java:23
com.realtime.crossfire.jxclient.gui.item.GUIItemFloor.commandQueue
final CommandQueue commandQueue
Definition: GUIItemFloor.java:56
com.realtime.crossfire.jxclient.gui.item.GUIItemFloor.button2Clicked
void button2Clicked(final int modifiers)
Definition: GUIItemFloor.java:213
com.realtime.crossfire.jxclient.gui.item.GUIItemFloor.setIndex
void setIndex(final int index, final boolean forced)
Definition: GUIItemFloor.java:261
com.realtime.crossfire.jxclient.gui.item.GUIItemItem.getItem
CfItem getItem()
Definition: GUIItemItem.java:160
com.realtime.crossfire.jxclient.items.ItemSet.getPlayer
CfItem getPlayer()
Definition: ItemSet.java:272
com.realtime.crossfire.jxclient.items.ItemSet.getOpenContainer
int getOpenContainer()
Definition: ItemSet.java:428
com.realtime.crossfire.jxclient.gui.item.GUIItemFloor.resetScroll
void resetScroll()
Definition: GUIItemFloor.java:186
com.realtime.crossfire.jxclient.gui.item.GUIItemFloor.button3Clicked
void button3Clicked(final int modifiers)
Definition: GUIItemFloor.java:228
com.realtime.crossfire.jxclient.items.CfItem.isItemGroupButton
boolean isItemGroupButton()
Definition: CfItem.java:619
com.realtime.crossfire.jxclient.gui.item.GUIItemItem
Definition: GUIItemItem.java:46
com.realtime.crossfire.jxclient.gui.item.GUIItemFloor.getIndex
int getIndex()
Definition: GUIItemFloor.java:251
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.GUIItemFloor.button1Clicked
void button1Clicked(final int modifiers)
Definition: GUIItemFloor.java:191
com.realtime.crossfire.jxclient.server.crossfire.CrossfireServerConnection.sendApply
void sendApply(int tag)
com.realtime.crossfire.jxclient.gui.item.GUIItemFloor.scroll
void scroll(final int distance)
Definition: GUIItemFloor.java:181
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.items.ItemView.addLocationListener
void addLocationListener(int index, @NotNull LocationListener locationListener)
com.realtime.crossfire.jxclient.items.CfItem
Definition: CfItem.java:37
com.realtime.crossfire.jxclient.gui.item.GUIItemFloor.serialVersionUID
static final long serialVersionUID
Definition: GUIItemFloor.java:50
com.realtime.crossfire.jxclient.gui.item.GUIItemFloor.isSelected
boolean isSelected()
Definition: GUIItemFloor.java:306
com.realtime.crossfire.jxclient.server.crossfire
Definition: AbstractCrossfireServerConnection.java:23
com.realtime.crossfire.jxclient.gui.item.GUIItemFloor.nextGroupFace
final Image nextGroupFace
Definition: GUIItemFloor.java:86
com.realtime.crossfire.jxclient.gui.gui.TooltipManager
Definition: TooltipManager.java:33
com.realtime.crossfire.jxclient.gui.gui.GUIElement
Definition: GUIElement.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
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.GUIItemFloor.getFace
Image getFace(@NotNull final CfItem item)
Definition: GUIItemFloor.java:286
com.realtime.crossfire.jxclient.gui.item.GUIItemFloor.locationListener
final LocationListener locationListener
Definition: GUIItemFloor.java:110
com
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.gui.item.GUIItemFloor.GUIItemFloor
GUIItemFloor(@NotNull final TooltipManager tooltipManager, @NotNull final GUIElementListener elementListener, @NotNull final CommandQueue commandQueue, @NotNull final String name, @NotNull final ItemPainter itemPainter, final int index, @NotNull final CrossfireServerConnection crossfireServerConnection, @NotNull final ItemView floorView, @NotNull final ItemSet itemSet, @NotNull final FacesManager facesManager, @NotNull final Image nextGroupFace, @NotNull final Image prevGroupFace, final int size, @NotNull final GuiFactory guiFactory)
Definition: GUIItemFloor.java:142
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.items.ItemView
Definition: ItemView.java:32
com.realtime.crossfire.jxclient.gui.item.GUIItemFloor.notifyOpen
void notifyOpen()
Definition: GUIItemFloor.java:165
com.realtime.crossfire.jxclient.gui.gui.AbstractGUIElement.guiFactory
final GuiFactory guiFactory
Definition: AbstractGUIElement.java:48
com.realtime.crossfire.jxclient.gui.misc
Definition: GUICheckBox.java:23
com.realtime.crossfire.jxclient.gui.item.GUIItemFloor.setIndexNoListeners
void setIndexNoListeners(final int index)
Definition: GUIItemFloor.java:278
com.realtime.crossfire.jxclient.items.ItemView.getItem
CfItem getItem(int index)
com.realtime.crossfire.jxclient.gui.item.GUIItemFloor.canScroll
boolean canScroll(final int distance)
Definition: GUIItemFloor.java:169
com.realtime.crossfire.jxclient.gui.misc.Modifiers.CTRL
static final int CTRL
Definition: Modifiers.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.items.LocationListener
Definition: LocationListener.java:31
com.realtime.crossfire.jxclient.gui.item.GUIItemFloor.crossfireServerConnection
final CrossfireServerConnection crossfireServerConnection
Definition: GUIItemFloor.java:62
com.realtime.crossfire.jxclient.gui.item.GUIItemFloor.defaultIndex
final int defaultIndex
Definition: GUIItemFloor.java:97
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.GUIItemFloor.facesManager
final FacesManager facesManager
Definition: GUIItemFloor.java:80