Crossfire JXClient, Trunk
QuestsView.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.items;
24 
29 import java.util.ArrayList;
30 import java.util.List;
31 import org.jetbrains.annotations.NotNull;
32 import org.jetbrains.annotations.Nullable;
33 
38 public class QuestsView extends AbstractItemView {
39 
43  @NotNull
45 
49  @NotNull
50  private final FacesManager facesManager;
51 
55  @NotNull
56  @SuppressWarnings("FieldAccessedSynchronizedAndUnsynchronized")
58 
62  @NotNull
63  private final List<CfItem> quests = new ArrayList<>();
64 
70  public QuestsView(@NotNull final QuestsManager questsManager, @NotNull final FacesManager facesManager) {
71  this.questsManager = questsManager;
72  this.facesManager = facesManager;
75  if (questsManager.displaysFace(face.getFaceNum())) {
76  addModifiedRange(0, quests.size());
77  }
78  });
79  }
80 
81  @Override
82  public int getSize() {
83  synchronized (quests) {
84  return quests.size();
85  }
86  }
87 
88  @Nullable
89  @Override
90  public CfItem getItem(final int index) {
91  synchronized (quests) {
92  try {
93  return quests.get(index);
94  } catch (final IndexOutOfBoundsException ignored) {
95  return null;
96  }
97  }
98  }
99 
100  private void rebuildList() {
101  synchronized (quests) {
102  quests.clear();
103  for (final Quest quest : questsManager.getQuests()) {
104  if (filter.matches(quest)) {
105  final Face face = facesManager.getFace(quest.getFace());
106  quests.add(new CfItem(0, quest.getCode(), 0, 0, face, quest.getTitle(), quest.getTitle(), 0, 0, 0, 0));
107  }
108  }
109  addModifiedRange(0, quests.size()-1);
110  }
111  }
112 
117  public void setFilter(@NotNull final QuestsFilter filter) {
118  if (this.filter == filter) {
119  return;
120  }
121 
122  this.filter = filter;
123  rebuildList();
124  }
125 
126 }
com.realtime.crossfire.jxclient
com.realtime.crossfire.jxclient.items.QuestsFilter.matches
matches
Definition: QuestsFilter.java:17
com.realtime.crossfire.jxclient.items.AbstractItemView
Definition: AbstractItemView.java:35
com.realtime.crossfire.jxclient.items.QuestsView.getSize
int getSize()
Definition: QuestsView.java:82
com.realtime.crossfire.jxclient.quests.QuestsManager.displaysFace
boolean displaysFace(final int faceNum)
Definition: QuestsManager.java:212
com.realtime.crossfire.jxclient.faces
Definition: AbstractFaceQueue.java:23
com.realtime.crossfire.jxclient.items.QuestsView.setFilter
void setFilter(@NotNull final QuestsFilter filter)
Definition: QuestsView.java:117
com.realtime.crossfire.jxclient.items.QuestsFilter
Definition: QuestsFilter.java:10
com.realtime.crossfire.jxclient.faces.FacesManager.getFace
Face getFace(int faceNum)
com.realtime.crossfire.jxclient.items.QuestsView.rebuildList
void rebuildList()
Definition: QuestsView.java:100
com.realtime.crossfire.jxclient.quests.QuestsManager.getQuests
List< Quest > getQuests()
Definition: QuestsManager.java:233
com.realtime.crossfire.jxclient.items.QuestsView
Definition: QuestsView.java:38
com.realtime.crossfire.jxclient.items.AbstractItemView.addModifiedRange
void addModifiedRange(final int firstIndex, final int lastIndex)
Definition: AbstractItemView.java:103
com.realtime.crossfire.jxclient.quests.Quest
Definition: Quest.java:32
com.realtime.crossfire.jxclient.items.QuestsView.facesManager
final FacesManager facesManager
Definition: QuestsView.java:50
com.realtime.crossfire.jxclient.items.CfItem
Definition: CfItem.java:37
com.realtime.crossfire.jxclient.items.QuestsView.quests
final List< CfItem > quests
Definition: QuestsView.java:63
com.realtime.crossfire.jxclient.quests
Definition: Quest.java:23
com.realtime.crossfire.jxclient.faces.FacesManager.addFacesManagerListener
void addFacesManagerListener(@NotNull FacesManagerListener facesManagerListener)
com.realtime.crossfire.jxclient.faces.FacesManager
Definition: FacesManager.java:40
com.realtime.crossfire.jxclient.quests.QuestsManager
Definition: QuestsManager.java:41
com.realtime.crossfire
com.realtime
com.realtime.crossfire.jxclient.items.QuestsView.getItem
CfItem getItem(final int index)
Definition: QuestsView.java:90
com.realtime.crossfire.jxclient.items.QuestsView.filter
QuestsFilter filter
Definition: QuestsView.java:57
com
com.realtime.crossfire.jxclient.quests.QuestsManager.addCrossfireQuestChangedListener
void addCrossfireQuestChangedListener(@NotNull final QuestsManagerListener listener)
Definition: QuestsManager.java:120
com.realtime.crossfire.jxclient.faces.Face
Definition: Face.java:37
com.realtime.crossfire.jxclient.items.QuestsView.questsManager
final QuestsManager questsManager
Definition: QuestsView.java:44