Crossfire JXClient, Trunk
GUIItemQuest.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 
40 import java.awt.Dimension;
41 import java.awt.Image;
42 import javax.swing.SwingUtilities;
43 import org.jetbrains.annotations.NotNull;
44 import org.jetbrains.annotations.Nullable;
45 
50 public class GUIItemQuest extends GUIItemItem {
51 
55  private static final long serialVersionUID = 1;
56 
60  @NotNull
61  private final Object sync = new Object();
62 
66  @NotNull
67  private final FacesManager facesManager;
68 
72  private final int defaultIndex;
73 
77  @NotNull
79 
83  @Nullable
84  private Quest quest;
85 
90  private int index = -1;
91 
95  private boolean selected;
96 
100  @NotNull
101  private final ItemView questsView;
102 
106  @NotNull
107  private final CommandQueue commandQueue;
108 
112  @NotNull
113  private final QuestsManagerListener questsManagerListener = index1 -> {
114  synchronized (sync) {
115  if (index < index1) {
116  return;
117  }
118  }
119 
120  setQuest();
121  };
122 
126  @NotNull
127  private final QuestListener questListener = this::setQuest;
128 
132  @NotNull
134 
135  @Override
136  public void faceUpdated(@NotNull final Face face) {
137  if (quest != null && quest.getFace() == face.getFaceNum()) {
138  setChanged();
139  }
140  }
141 
142  };
143 
148  @NotNull
150 
151  @Override
152  public void locationChanged() {
153  SwingUtilities.invokeLater(locationListenerEdt);
154  }
155 
156  };
157 
161  @NotNull
162  private final Runnable locationListenerEdt = () -> {
163  setChanged();
164  tooltipChanged();
165  };
166 
181  public GUIItemQuest(@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 QuestsManager questsManager, @NotNull final ItemView questsView, @NotNull final CommandQueue commandQueue, final int size, @NotNull final GuiFactory guiFactory) {
183  this.facesManager = facesManager;
184  this.defaultIndex = defaultIndex;
185  this.questsManager = questsManager;
186  this.questsView = questsView;
187  this.commandQueue = commandQueue;
189  this.questsManager.addCrossfireQuestChangedListener(questsManagerListener);
190  this.facesManager.addFacesManagerListener(facesManagerListener);
191  if (size != 0) {
192  setSize(size, size);
193  }
194  }
195 
196  @Override
197  public void dispose() {
198  super.dispose();
201  if (quest != null) {
203  }
204  }
205 
206  @Override
207  public void notifyOpen() {
208  }
209 
210  @Override
211  public boolean canScroll(final int distance) {
212  if (distance < 0) {
213  synchronized (sync) {
214  return index >= -distance;
215  }
216  }
217  if (distance > 0) {
218  synchronized (sync) {
219  return index+distance < questsView.getSize();
220  }
221  }
222  return false;
223  }
224 
225  @Override
226  public void scroll(final int distance) {
227  final int index;
228  synchronized (sync) {
229  index = this.index;
230  }
231  setIndex(index+distance);
232  setChanged();
233  }
234 
235  @Override
236  public void resetScroll() {
238  }
239 
240  @NotNull
241  @Override
242  @SuppressWarnings("MethodDoesntCallSuperMethod")
243  public Dimension getPreferredSize() {
244  return getMinimumSizeInt();
245  }
246 
247  @NotNull
248  @Override
249  @SuppressWarnings("MethodDoesntCallSuperMethod")
250  public Dimension getMinimumSize() {
251  return getMinimumSizeInt();
252  }
253 
258  @NotNull
259  private static Dimension getMinimumSizeInt() {
260  return new Dimension(32, 32);
261  }
262 
267  private void setQuest() {
268  final int index;
269  synchronized (sync) {
270  index = this.index;
271  }
273  if (item == null) {
274  return;
275  }
276  final Quest newQuest = questsManager.getQuestByCode(item.getTag());
277  if (quest == newQuest) {
278  return;
279  }
280 
281  if (quest != null) {
283  }
284 
285  quest = newQuest;
286 
287  if (quest != null) {
289  }
290 
291  setChanged();
292  tooltipChanged();
293  }
294 
300  private void setIndex(final int index) {
301  synchronized (sync) {
302  if (this.index == index) {
303  setQuest();
304  return;
305  }
306  this.index = index;
307 
308  if (this.index >= 0) {
310  }
311  this.index = index;
312  if (this.index >= 0) {
314  }
315  setQuest();
316  }
317  }
318 
319  @NotNull
320  @Override
321  protected Image getFace(@NotNull final CfItem item) {
322  return facesManager.getOriginalImageIcon(item.getFace().getFaceNum(), null).getImage();
323  }
324 
325  @Override
326  public void setSelected(final boolean selected) {
327  if (this.selected == selected) {
328  return;
329  }
330 
331  this.selected = selected;
332  setChanged();
333  }
334 
335  @Override
336  protected boolean isSelected() {
337  return selected || isActive();
338  }
339 
340  @Override
341  public int getIndex() {
342  synchronized (sync) {
343  return index;
344  }
345  }
346 
347  @Override
348  public void setIndexNoListeners(final int index) {
349  synchronized (sync) {
350  this.index = index;
351  }
352 
354  }
355 
356  @Override
357  public void button1Clicked(final int modifiers) {
358  setQuest();
359  if (quest == null) {
360  return;
361  }
362 
363  commandQueue.sendNcom(false, "quest info_c "+quest.getCode());
364  }
365 
366  @Override
367  public void button2Clicked(final int modifiers) {
368  }
369 
370  @Override
371  public void button3Clicked(final int modifiers) {
372  }
373 
374 }
com.realtime.crossfire.jxclient.quests.Quest.getCode
int getCode()
Definition: Quest.java:102
com.realtime.crossfire.jxclient.gui.item.GUIItemQuest.facesManagerListener
final FacesManagerListener facesManagerListener
Definition: GUIItemQuest.java:133
com.realtime.crossfire.jxclient.gui.gui.AbstractGUIElement.name
final String name
Definition: AbstractGUIElement.java:77
com.realtime.crossfire.jxclient
com.realtime.crossfire.jxclient.gui.item.GUIItemQuest.scroll
void scroll(final int distance)
Definition: GUIItemQuest.java:226
com.realtime.crossfire.jxclient.skin.skin
Definition: DefaultJXCSkin.java:23
com.realtime.crossfire.jxclient.gui.item.GUIItemQuest.selected
boolean selected
Definition: GUIItemQuest.java:95
com.realtime.crossfire.jxclient.gui.item.GUIItemQuest.dispose
void dispose()
Definition: GUIItemQuest.java:197
com.realtime.crossfire.jxclient.quests.QuestListener
Definition: QuestListener.java:31
com.realtime.crossfire.jxclient.gui.item.GUIItemQuest.getFace
Image getFace(@NotNull final CfItem item)
Definition: GUIItemQuest.java:321
com.realtime.crossfire.jxclient.gui.item.GUIItemQuest.getIndex
int getIndex()
Definition: GUIItemQuest.java:341
com.realtime.crossfire.jxclient.skin
com.realtime.crossfire.jxclient.gui.item.GUIItemQuest.questsManagerListener
final QuestsManagerListener questsManagerListener
Definition: GUIItemQuest.java:113
com.realtime.crossfire.jxclient.gui.item.GUIItemQuest.facesManager
final FacesManager facesManager
Definition: GUIItemQuest.java:67
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.skin.skin.GuiFactory
Definition: GuiFactory.java:41
com.realtime.crossfire.jxclient.faces.FacesManagerListener
Definition: FacesManagerListener.java:32
com.realtime.crossfire.jxclient.gui.item.GUIItemQuest.getMinimumSizeInt
static Dimension getMinimumSizeInt()
Definition: GUIItemQuest.java:259
com.realtime.crossfire.jxclient.gui.list.GUIQuestList
Definition: GUIQuestList.java:43
com.realtime.crossfire.jxclient.faces
Definition: AbstractFaceQueue.java:23
com.realtime.crossfire.jxclient.gui.item.GUIItemQuest.locationListener
final LocationListener locationListener
Definition: GUIItemQuest.java:149
com.realtime.crossfire.jxclient.gui.gui.AbstractGUIElement.tooltipChanged
void tooltipChanged()
Definition: AbstractGUIElement.java:265
com.realtime.crossfire.jxclient.gui.item.GUIItemQuest.notifyOpen
void notifyOpen()
Definition: GUIItemQuest.java:207
com.realtime.crossfire.jxclient.gui.item.GUIItemQuest.button2Clicked
void button2Clicked(final int modifiers)
Definition: GUIItemQuest.java:367
com.realtime.crossfire.jxclient.gui.item.GUIItemQuest.getPreferredSize
Dimension getPreferredSize()
Definition: GUIItemQuest.java:243
com.realtime.crossfire.jxclient.gui.list
Definition: CharacterCellRenderer.java:23
com.realtime.crossfire.jxclient.quests.Quest.addQuestListener
void addQuestListener(@NotNull final QuestListener listener)
Definition: Quest.java:188
com.realtime.crossfire.jxclient.gui.item.GUIItemQuest.questListener
final QuestListener questListener
Definition: GUIItemQuest.java:127
com.realtime.crossfire.jxclient.quests.Quest.removeQuestListener
void removeQuestListener(@NotNull final QuestListener listener)
Definition: Quest.java:196
com.realtime.crossfire.jxclient.gui.item.GUIItemItem
Definition: GUIItemItem.java:46
com.realtime.crossfire.jxclient.quests.Quest
Definition: Quest.java:32
com.realtime.crossfire.jxclient.items.ItemView.removeLocationListener
void removeLocationListener(int index, @NotNull LocationListener locationListener)
com.realtime.crossfire.jxclient.gui.item.GUIItemQuest.sync
final Object sync
Definition: GUIItemQuest.java:61
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.GUIItemQuest
Definition: GUIItemQuest.java:50
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.gui.item.GUIItemQuest.questsView
final ItemView questsView
Definition: GUIItemQuest.java:101
com.realtime.crossfire.jxclient.items.CfItem
Definition: CfItem.java:37
com.realtime.crossfire.jxclient.gui.item.GUIItemQuest.defaultIndex
final int defaultIndex
Definition: GUIItemQuest.java:72
com.realtime.crossfire.jxclient.gui.item.GUIItemQuest.getMinimumSize
Dimension getMinimumSize()
Definition: GUIItemQuest.java:250
com.realtime.crossfire.jxclient.quests
Definition: Quest.java:23
com.realtime.crossfire.jxclient.gui.item.GUIItemQuest.setQuest
void setQuest()
Definition: GUIItemQuest.java:267
com.realtime.crossfire.jxclient.quests.QuestsManager.getQuestByCode
Quest getQuestByCode(final int code)
Definition: QuestsManager.java:198
com.realtime.crossfire.jxclient.gui.item.GUIItemQuest.button1Clicked
void button1Clicked(final int modifiers)
Definition: GUIItemQuest.java:357
com.realtime.crossfire.jxclient.gui.item.GUIItemQuest.quest
Quest quest
Definition: GUIItemQuest.java:84
com.realtime.crossfire.jxclient.gui.gui.TooltipManager
Definition: TooltipManager.java:33
com.realtime.crossfire.jxclient.gui.item.GUIItemQuest.isSelected
boolean isSelected()
Definition: GUIItemQuest.java:336
com.realtime.crossfire.jxclient.gui.item.GUIItemItem.itemPainter
final ItemPainter itemPainter
Definition: GUIItemItem.java:63
com.realtime.crossfire.jxclient.gui.item.GUIItemQuest.questsManager
final QuestsManager questsManager
Definition: GUIItemQuest.java:78
com.realtime.crossfire.jxclient.quests.QuestsManager.removeCrossfireQuestChangedListener
void removeCrossfireQuestChangedListener(@NotNull final QuestsManagerListener listener)
Definition: QuestsManager.java:128
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.quests.QuestsManager
Definition: QuestsManager.java:41
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.queue.CommandQueue.sendNcom
void sendNcom(final boolean mustSend, @NotNull final String command)
Definition: CommandQueue.java:184
com.realtime.crossfire.jxclient.gui.item.GUIItemQuest.setIndex
void setIndex(final int index)
Definition: GUIItemQuest.java:300
com
com.realtime.crossfire.jxclient.quests.Quest.getFace
int getFace()
Definition: Quest.java:119
com.realtime.crossfire.jxclient.faces.Face.getFaceNum
int getFaceNum()
Definition: Face.java:105
com.realtime.crossfire.jxclient.gui.item.GUIItemQuest.resetScroll
void resetScroll()
Definition: GUIItemQuest.java:236
com.realtime.crossfire.jxclient.gui.item.GUIItemQuest.setIndexNoListeners
void setIndexNoListeners(final int index)
Definition: GUIItemQuest.java:348
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.gui.AbstractGUIElement.setChanged
void setChanged()
Definition: AbstractGUIElement.java:223
com.realtime.crossfire.jxclient.quests.QuestsManagerListener
Definition: QuestsManagerListener.java:31
com.realtime.crossfire.jxclient.gui.item.GUIItemQuest.locationListenerEdt
final Runnable locationListenerEdt
Definition: GUIItemQuest.java:162
com.realtime.crossfire.jxclient.items.ItemView
Definition: ItemView.java:32
com.realtime.crossfire.jxclient.gui.item.GUIItemQuest.commandQueue
final CommandQueue commandQueue
Definition: GUIItemQuest.java:107
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.GUIItemQuest.button3Clicked
void button3Clicked(final int modifiers)
Definition: GUIItemQuest.java:371
com.realtime.crossfire.jxclient.gui.item.GUIItemQuest.serialVersionUID
static final long serialVersionUID
Definition: GUIItemQuest.java:55
com.realtime.crossfire.jxclient.gui.item.GUIItemQuest.index
int index
Definition: GUIItemQuest.java:90
com.realtime.crossfire.jxclient.gui.item.GUIItemQuest.setSelected
void setSelected(final boolean selected)
Definition: GUIItemQuest.java:326
com.realtime.crossfire.jxclient.gui.item.GUIItemQuest.canScroll
boolean canScroll(final int distance)
Definition: GUIItemQuest.java:211
com.realtime.crossfire.jxclient.faces.Face
Definition: Face.java:37
com.realtime.crossfire.jxclient.faces.FacesManager.removeFacesManagerListener
void removeFacesManagerListener(@NotNull FacesManagerListener facesManagerListener)
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.item.GUIItemQuest.GUIItemQuest
GUIItemQuest(@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 QuestsManager questsManager, @NotNull final ItemView questsView, @NotNull final CommandQueue commandQueue, final int size, @NotNull final GuiFactory guiFactory)
Definition: GUIItemQuest.java:181
com.realtime.crossfire.jxclient.gui.gui.ActivatableGUIElement.isActive
boolean isActive()
Definition: ActivatableGUIElement.java:124
com.realtime.crossfire.jxclient.items.LocationListener
Definition: LocationListener.java:31