00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 package com.realtime.crossfire.jxclient.gui.list;
00022
00023 import com.realtime.crossfire.jxclient.account.CharacterInformation;
00024 import com.realtime.crossfire.jxclient.account.CharacterInformationListener;
00025 import com.realtime.crossfire.jxclient.account.CharacterListener;
00026 import com.realtime.crossfire.jxclient.account.CharacterModel;
00027 import com.realtime.crossfire.jxclient.faces.Face;
00028 import com.realtime.crossfire.jxclient.faces.FacesManager;
00029 import com.realtime.crossfire.jxclient.faces.FacesManagerListener;
00030 import com.realtime.crossfire.jxclient.gui.gui.GUIElement;
00031 import com.realtime.crossfire.jxclient.gui.gui.GUIElementListener;
00032 import com.realtime.crossfire.jxclient.gui.gui.TooltipManager;
00033 import com.realtime.crossfire.jxclient.gui.misc.GUICharacter;
00034 import java.awt.Font;
00035 import org.jetbrains.annotations.NotNull;
00036 import org.jetbrains.annotations.Nullable;
00037
00042 public class GUICharacterList extends GUIList {
00043
00047 private static final long serialVersionUID = 1;
00048
00052 @NotNull
00053 private final CharacterModel characterModel;
00054
00058 @NotNull
00059 private final TooltipManager tooltipManager;
00060
00064 @NotNull
00065 private final FacesManager facesManager;
00066
00070 @NotNull
00071 private final GUIElementListener elementListener;
00072
00076 @NotNull
00077 private final String name;
00078
00082 @NotNull
00083 private final Font font;
00084
00088 private int selectedIndex;
00089
00095 @NotNull
00096 private final CharacterInformationListener characterInformationListener = new CharacterInformationListener() {
00097
00098 @Override
00099 public void informationChanged() {
00100 setChanged();
00101 }
00102
00103 };
00104
00116 public GUICharacterList(@NotNull final TooltipManager tooltipManager, @NotNull final FacesManager facesManager, @NotNull final GUIElementListener elementListener, @NotNull final String name, final int cellWidth, final int cellHeight, @NotNull final Font font, @NotNull final CharacterModel characterModel) {
00117 super(tooltipManager, elementListener, name, cellWidth, cellHeight, new CharacterCellRenderer(new GUICharacter(tooltipManager, facesManager, elementListener, name+"_template", 50, 20, font, 0, characterModel)), null);
00118 this.characterModel = characterModel;
00119 this.facesManager = facesManager;
00120 this.facesManager.addFacesManagerListener(new FacesManagerListener() {
00121
00122 @Override
00123 public void faceUpdated(@NotNull final Face face) {
00124 if (characterModel.displaysFace(face.getFaceNum())) {
00125 repaint();
00126 }
00127 }
00128
00129 });
00130 this.characterModel.addCharacterListener(new CharacterListener() {
00131
00132 @Override
00133 public void numberOfItemsChanged() {
00134 rebuildList();
00135 }
00136
00137 });
00138 this.tooltipManager = tooltipManager;
00139 this.font = font;
00140 this.elementListener = elementListener;
00141 this.name = name;
00142 }
00143
00147 @Override
00148 protected void selectionChanged(final int selectedIndex) {
00149 this.selectedIndex = selectedIndex;
00150 }
00151
00155 @Override
00156 protected void updateTooltip(final int index, final int x, final int y, final int w, final int h) {
00157 }
00158
00162 @Override
00163 protected void activeChanged() {
00164 }
00165
00169 private void rebuildList() {
00170 synchronized (getTreeLock()) {
00171 final int newSize = characterModel.size();
00172 final int oldSize = resizeElements(newSize);
00173 if (oldSize < newSize) {
00174 for (int i = oldSize; i < newSize; i++) {
00175 final GUIElement metaElement = new GUICharacter(tooltipManager, facesManager, elementListener, name+i, 1, 1, font, i, characterModel);
00176 addElement(metaElement);
00177 characterModel.addCharacterInformationListener(i, characterInformationListener);
00178 }
00179 } else {
00180 for (int i = newSize; i < oldSize; i++) {
00181 characterModel.removeCharacterInformationListener(i, characterInformationListener);
00182 }
00183 }
00184 }
00185 setChanged();
00186 }
00187
00193 @Nullable
00194 public CharacterInformation getCurrentCharacter() {
00195 return characterModel.getEntry(selectedIndex);
00196 }
00197
00202 public void setCharacter(@NotNull final String characterName) {
00203 setSelectedIndex(characterModel.getCharacterIndex(characterName));
00204 }
00205
00206 }