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.Face;
00025 import com.realtime.crossfire.jxclient.faces.FacesManager;
00026 import com.realtime.crossfire.jxclient.faces.FacesManagerListener;
00027 import com.realtime.crossfire.jxclient.gui.gui.GUIElement;
00028 import com.realtime.crossfire.jxclient.gui.gui.GUIElementListener;
00029 import com.realtime.crossfire.jxclient.gui.gui.TooltipManager;
00030 import com.realtime.crossfire.jxclient.items.CfItem;
00031 import com.realtime.crossfire.jxclient.items.CfItemListener;
00032 import java.awt.Dimension;
00033 import java.awt.Graphics;
00034 import java.awt.Graphics2D;
00035 import java.awt.Image;
00036 import org.jetbrains.annotations.NotNull;
00037 import org.jetbrains.annotations.Nullable;
00038
00043 public abstract class GUIItemItem extends GUIItem {
00044
00048 private static final long serialVersionUID = 1;
00049
00053 @NotNull
00054 private final FacesManager facesManager;
00055
00059 @NotNull
00060 private final ItemPainter itemPainter;
00061
00065 @Nullable
00066 private CfItem item = null;
00067
00072 @NotNull
00073 private final CfItemListener itemListener = new CfItemListener() {
00074
00075 @Override
00076 public void itemModified() {
00077 setChanged();
00078 updateTooltipText();
00079 }
00080
00081 };
00082
00086 @NotNull
00087 private final FacesManagerListener facesManagerListener = new FacesManagerListener() {
00088
00089 @Override
00090 public void faceUpdated(@NotNull final Face face) {
00091 if (item != null && face.equals(item.getFace())) {
00092 setChanged();
00093 }
00094 }
00095
00096 };
00097
00106 protected GUIItemItem(@NotNull final TooltipManager tooltipManager, @NotNull final GUIElementListener elementListener, @NotNull final String name, @NotNull final ItemPainter itemPainter, @NotNull final FacesManager facesManager) {
00107 super(tooltipManager, elementListener, name);
00108 this.itemPainter = itemPainter;
00109 this.facesManager = facesManager;
00110 this.facesManager.addFacesManagerListener(facesManagerListener);
00111 }
00112
00116 @Override
00117 public void dispose() {
00118 super.dispose();
00119 facesManager.removeFacesManagerListener(facesManagerListener);
00120 setItem(null);
00121 }
00122
00126 @Override
00127 public void paintComponent(@NotNull final Graphics g) {
00128 super.paintComponent(g);
00129
00130 final CfItem tmpItem = item;
00131 if (tmpItem == null) {
00132 return;
00133 }
00134
00135 final Graphics2D g2 = (Graphics2D)g;
00136 itemPainter.paint(g2, tmpItem, isSelected(), getFace(tmpItem), getWidth(), getHeight());
00137 }
00138
00142 @Nullable
00143 @Override
00144 public Dimension getPreferredSize() {
00145 return itemPainter.getMinimumSize();
00146 }
00147
00151 @Nullable
00152 @Override
00153 public Dimension getMinimumSize() {
00154 return itemPainter.getMinimumSize();
00155 }
00156
00162 @NotNull
00163 protected abstract Image getFace(@NotNull final CfItem item);
00164
00169 @Nullable
00170 public CfItem getItem() {
00171 return item;
00172 }
00173
00178 protected void setItem(@Nullable final CfItem item) {
00179 if (this.item == item) {
00180 return;
00181 }
00182
00183 if (this.item != null) {
00184 this.item.removeCfItemModifiedListener(itemListener);
00185 }
00186 this.item = item;
00187 if (this.item != null) {
00188 this.item.addCfItemModifiedListener(itemListener);
00189 }
00190
00191 setChanged();
00192 updateTooltipText();
00193 }
00194
00200 protected void setItemNoListeners(@Nullable final CfItem item) {
00201 this.item = item;
00202 }
00203
00207 protected void updateTooltipText() {
00208 setTooltipText(item == null ? null : item.getTooltipText());
00209 }
00210
00215 public abstract void setSelected(final boolean selected);
00216
00221 protected abstract boolean isSelected();
00222
00227 public abstract int getIndex();
00228
00234 public abstract void setIndexNoListeners(final int index);
00235
00236 }