00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 package com.realtime.crossfire.jxclient.gui.item;
00023
00024 import com.realtime.crossfire.jxclient.faces.FacesManager;
00025 import com.realtime.crossfire.jxclient.gui.gui.GUIElement;
00026 import com.realtime.crossfire.jxclient.gui.gui.GUIElementListener;
00027 import com.realtime.crossfire.jxclient.gui.gui.TooltipManager;
00028 import com.realtime.crossfire.jxclient.gui.misc.Modifiers;
00029 import com.realtime.crossfire.jxclient.items.CfItem;
00030 import com.realtime.crossfire.jxclient.items.ItemSet;
00031 import com.realtime.crossfire.jxclient.items.ItemView;
00032 import com.realtime.crossfire.jxclient.items.LocationListener;
00033 import com.realtime.crossfire.jxclient.queue.CommandQueue;
00034 import com.realtime.crossfire.jxclient.server.crossfire.CrossfireServerConnection;
00035 import java.awt.Image;
00036 import org.jetbrains.annotations.NotNull;
00037
00042 public class GUIItemFloor extends GUIItemItem {
00043
00047 private static final long serialVersionUID = 1;
00048
00052 @NotNull
00053 private final CommandQueue commandQueue;
00054
00058 @NotNull
00059 private final CrossfireServerConnection crossfireServerConnection;
00060
00064 @NotNull
00065 private final ItemView floorView;
00066
00070 @NotNull
00071 private final ItemSet itemSet;
00072
00076 @NotNull
00077 private final FacesManager facesManager;
00078
00082 @NotNull
00083 private final Image nextGroupFace;
00084
00088 @NotNull
00089 private final Image prevGroupFace;
00090
00094 private final int defaultIndex;
00095
00100 private int index = -1;
00101
00106 @NotNull
00107 private final LocationListener locationListener = new LocationListener() {
00108
00109 @Override
00110 public void locationChanged() {
00111 setIndex(index, true);
00112 }
00113
00114 };
00115
00131 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) {
00132 super(tooltipManager, elementListener, name, itemPainter, facesManager);
00133 this.commandQueue = commandQueue;
00134 this.crossfireServerConnection = crossfireServerConnection;
00135 this.floorView = floorView;
00136 this.itemSet = itemSet;
00137 this.facesManager = facesManager;
00138 this.nextGroupFace = nextGroupFace;
00139 this.prevGroupFace = prevGroupFace;
00140 defaultIndex = index;
00141 setIndex(index, false);
00142 }
00143
00147 @Override
00148 public void dispose() {
00149 super.dispose();
00150 setIndex(-1, false);
00151 }
00152
00156 @Override
00157 public boolean canScroll(final int distance) {
00158 if (distance < 0) {
00159 return index >= -distance;
00160 } else if (distance > 0) {
00161 return index+distance < floorView.getSize();
00162 } else {
00163 return false;
00164 }
00165 }
00166
00170 @Override
00171 public void scroll(final int distance) {
00172 setIndex(index+distance, false);
00173 }
00174
00178 @Override
00179 public void resetScroll() {
00180 setIndex(defaultIndex, false);
00181 }
00182
00186 @Override
00187 public void button1Clicked(final int modifiers) {
00188 final CfItem item = getItem();
00189 if (item == null) {
00190 return;
00191 }
00192
00193 switch (modifiers&Modifiers.MASK) {
00194 case Modifiers.NONE:
00195 if (item.isItemGroupButton()) {
00196 crossfireServerConnection.sendApply(item.getTag());
00197 } else {
00198 crossfireServerConnection.sendExamine(item.getTag());
00199 }
00200 break;
00201 }
00202 }
00203
00207 @Override
00208 public void button2Clicked(final int modifiers) {
00209 final CfItem item = getItem();
00210 if (item == null) {
00211 return;
00212 }
00213
00214 switch (modifiers&Modifiers.MASK) {
00215 case Modifiers.NONE:
00216 crossfireServerConnection.sendApply(item.getTag());
00217 break;
00218 }
00219 }
00220
00224 @Override
00225 public void button3Clicked(final int modifiers) {
00226 final CfItem item = getItem();
00227 if (item == null) {
00228 return;
00229 }
00230
00231 final CfItem player = itemSet.getPlayer();
00232 if (player == null) {
00233 return;
00234 }
00235
00236 switch (modifiers&Modifiers.MASK) {
00237 case Modifiers.NONE:
00238 commandQueue.sendMove(player.getTag(), item.getTag());
00239 break;
00240
00241 case Modifiers.SHIFT:
00242 crossfireServerConnection.sendApply(item.getTag());
00243 break;
00244 }
00245 }
00246
00250 @Override
00251 public int getIndex() {
00252 return index;
00253 }
00254
00261 private void setIndex(final int index, final boolean forced) {
00262 if (this.index != index) {
00263 if (this.index >= 0) {
00264 floorView.removeLocationListener(this.index, locationListener);
00265 }
00266 this.index = index;
00267 if (this.index >= 0) {
00268 floorView.addLocationListener(this.index, locationListener);
00269 }
00270 } else if (!forced) {
00271 return;
00272 }
00273
00274 setItem(floorView.getItem(index));
00275 }
00276
00280 @Override
00281 public void setIndexNoListeners(final int index) {
00282 this.index = index;
00283
00284 setItemNoListeners(floorView.getItem(index));
00285 }
00286
00290 @NotNull
00291 @Override
00292 protected Image getFace(@NotNull final CfItem item) {
00293 if (!item.isItemGroupButton()) {
00294 return facesManager.getOriginalImageIcon(item.getFace().getFaceNum(), null).getImage();
00295 }
00296
00297
00298
00299
00300
00301
00302 final int min = itemSet.getOpenContainer() == 0 ? 0 : 1;
00303 return index > min ? nextGroupFace : prevGroupFace;
00304 }
00305
00309 @Override
00310 public void setSelected(final boolean selected) {
00311
00312 }
00313
00317 @Override
00318 protected boolean isSelected() {
00319 return false;
00320 }
00321
00322 }