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.items;
00023
00024 import org.jetbrains.annotations.NotNull;
00025 import org.jetbrains.annotations.Nullable;
00026
00035 public class FloorView extends AbstractItemView {
00036
00040 @NotNull
00041 private final ItemSet itemSet;
00042
00047 private int currentFloor = 0;
00048
00052 @NotNull
00053 private final ItemSetListener itemSetListener = new ItemSetListener() {
00054
00055 @Override
00056 public void itemAdded(@NotNull final CfItem item) {
00057
00058 }
00059
00060 @Override
00061 public void itemMoved(@NotNull final CfItem item) {
00062
00063 }
00064
00065 @Override
00066 public void itemChanged(@NotNull final CfItem item) {
00067
00068 }
00069
00070 @Override
00071 public void itemRemoved(@NotNull final CfItem item) {
00072
00073 }
00074
00075 @Override
00076 public void playerChanged(@Nullable final CfItem player) {
00077
00078 }
00079
00080 @Override
00081 public void openContainerChanged(final int tag) {
00082 setCurrentFloor(tag);
00083 }
00084
00085 };
00086
00090 @NotNull
00091 private final ItemListener itemListener = new ItemListener() {
00092
00093 @Override
00094 public void itemChanged(final int tag) {
00095 if (currentFloor != 0) {
00096 addModified(0);
00097 }
00098 }
00099
00100 @Override
00101 public void itemRemoved(final int tag) {
00102 setCurrentFloor(0);
00103 }
00104
00105 @Override
00106 public void inventoryAdded(final int tag, final int index, @NotNull final CfItem item) {
00107 final int offset = getOffset();
00108 addModifiedRange(index+offset, itemSet.getNumberOfItemsByLocation(tag)-1+offset);
00109 }
00110
00111 @Override
00112 public void inventoryRemoved(final int tag, final int index) {
00113 final int offset = getOffset();
00114 addModifiedRange(index+offset, itemSet.getNumberOfItemsByLocation(tag)+offset);
00115 }
00116
00117 };
00118
00123 public FloorView(@NotNull final ItemSet itemSet) {
00124 this.itemSet = itemSet;
00125 itemSet.addInventoryListener(currentFloor, itemListener);
00126 setCurrentFloor(itemSet.getOpenContainer());
00127 itemSet.addItemSetListener(itemSetListener);
00128 }
00129
00134 public int getCurrentFloor() {
00135 return currentFloor;
00136 }
00137
00143 private void setCurrentFloor(final int currentFloor) {
00144 if (this.currentFloor == currentFloor) {
00145 return;
00146 }
00147
00148 final int prevLastIndex = getSize()-1;
00149 itemSet.removeInventoryListener(this.currentFloor, itemListener);
00150 this.currentFloor = currentFloor;
00151 itemSet.addInventoryListener(this.currentFloor, itemListener);
00152 final int nextLastIndex = getSize()-1;
00153 addModifiedRange(0, Math.max(prevLastIndex, nextLastIndex));
00154 }
00155
00159 @Override
00160 public int getSize() {
00161 return itemSet.getNumberOfItemsByLocation(currentFloor)+getOffset();
00162 }
00163
00167 @Nullable
00168 @Override
00169 public CfItem getItem(final int index) {
00170 final int index2;
00171 if (currentFloor == 0) {
00172 index2 = index;
00173 } else {
00174 if (index == 0) {
00175 return itemSet.getItemByTag(currentFloor);
00176 }
00177
00178 index2 = index-1;
00179 }
00180
00181 return itemSet.getInventoryItem(currentFloor, index2);
00182 }
00183
00190 private int getOffset() {
00191 return currentFloor == 0 ? 0 : 1;
00192 }
00193
00194 }