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.gauge;
00023
00024 import com.realtime.crossfire.jxclient.gui.gui.AbstractGUIElement;
00025 import com.realtime.crossfire.jxclient.gui.gui.GUIElementListener;
00026 import com.realtime.crossfire.jxclient.gui.gui.TooltipManager;
00027 import java.awt.Color;
00028 import java.awt.Dimension;
00029 import java.awt.Graphics;
00030 import java.awt.Image;
00031 import java.awt.Transparency;
00032 import org.jetbrains.annotations.NotNull;
00033 import org.jetbrains.annotations.Nullable;
00034
00040 public class GUIDupGauge extends AbstractGUIElement implements GUIGaugeListener {
00041
00045 private static final long serialVersionUID = 1;
00046
00050 @NotNull
00051 private String labelText = "";
00052
00057 @Nullable
00058 private final String tooltipPrefix;
00059
00064 @NotNull
00065 private String tooltipText = "";
00066
00070 @Nullable
00071 private final Image emptyImage;
00072
00076 @NotNull
00077 private final Orientation orientationDiv;
00078
00082 @NotNull
00083 private final Orientation orientationMod;
00084
00088 @NotNull
00089 private final GaugeState gaugeStateDiv;
00090
00094 @NotNull
00095 private final GaugeState gaugeStateMod;
00096
00111 public GUIDupGauge(@NotNull final TooltipManager tooltipManager, @NotNull final GUIElementListener elementListener, @NotNull final String name, @NotNull final Image fullImageDiv, @NotNull final Image fullImageMod, @Nullable final Image emptyImage, @NotNull final Orientation orientationDiv, @NotNull final Orientation orientationMod, @Nullable final String tooltipPrefix) {
00112 super(tooltipManager, elementListener, name, Transparency.TRANSLUCENT);
00113 this.emptyImage = emptyImage;
00114 this.orientationDiv = orientationDiv;
00115 this.orientationMod = orientationMod;
00116 this.tooltipPrefix = tooltipPrefix;
00117 gaugeStateDiv = new GaugeState(fullImageDiv, null, 0, 0);
00118 final int w = getWidth();
00119 final int h = getHeight();
00120 gaugeStateMod = new GaugeState(fullImageMod, null, 0, h/2);
00121 orientationDiv.setExtends(w, h);
00122 orientationMod.setExtends(w, h);
00123 orientationDiv.setValues(0, 0, 9);
00124 orientationMod.setValues(0, 0, 9);
00125 gaugeStateDiv.setValues(orientationDiv);
00126 gaugeStateMod.setValues(orientationMod);
00127 updateTooltipText();
00128 }
00129
00133 @Override
00134 public void paintComponent(@NotNull final Graphics g) {
00135 super.paintComponent(g);
00136 g.setColor(new Color(0, 0, 0, 0.0f));
00137 g.fillRect(0, 0, getWidth(), getHeight());
00138 if (emptyImage != null) {
00139 g.drawImage(emptyImage, 0, 0, null);
00140 }
00141 gaugeStateDiv.draw(g);
00142 gaugeStateMod.draw(g);
00143 }
00144
00148 @NotNull
00149 @Override
00150 public Dimension getPreferredSize() {
00151 return getGaugeStateSize();
00152 }
00153
00157 @NotNull
00158 @Override
00159 public Dimension getMinimumSize() {
00160 return getGaugeStateSize();
00161 }
00162
00166 @NotNull
00167 @Override
00168 public Dimension getMaximumSize() {
00169 return getGaugeStateSize();
00170 }
00171
00177 @NotNull
00178 private Dimension getGaugeStateSize() {
00179 final Dimension div = gaugeStateDiv.getPreferredSize();
00180 final Dimension mod = gaugeStateMod.getPreferredSize();
00181 return new Dimension(Math.max(div.width, mod.width), div.height+mod.height);
00182 }
00183
00187 @Override
00188 public void setValues(final int curValue, final int minValue, final int maxValue, @NotNull final String labelText, @NotNull final String tooltipText) {
00189 if (minValue != 0) {
00190 throw new IllegalArgumentException();
00191 }
00192 if (maxValue != 99) {
00193 throw new IllegalArgumentException();
00194 }
00195 if (!orientationDiv.setValues(curValue/10, 0, 9) && !orientationMod.setValues(curValue%10, 0, 9) && this.labelText.equals(labelText) && this.tooltipText.equals(tooltipText)) {
00196 return;
00197 }
00198
00199 this.labelText = labelText;
00200 this.tooltipText = tooltipText;
00201
00202 if (gaugeStateDiv.setValues(orientationDiv)) {
00203 setChanged();
00204 }
00205 if (gaugeStateMod.setValues(orientationMod)) {
00206 setChanged();
00207 }
00208
00209 updateTooltipText();
00210 }
00211
00216 private void updateTooltipText() {
00217 setTooltipText(tooltipPrefix == null || tooltipText.length() == 0 ? null : tooltipPrefix+tooltipText);
00218 }
00219
00223 @Override
00224 public void setBounds(final int x, final int y, final int width, final int height) {
00225 super.setBounds(x, y, width, height);
00226 gaugeStateMod.setDy(height/2);
00227 orientationDiv.setExtends(width, height);
00228 orientationMod.setExtends(width, height);
00229 }
00230
00234 @Override
00235 public void setHidden(final boolean hidden) {
00236
00237 }
00238
00242 @Override
00243 public void execute() {
00244
00245 }
00246
00247 }