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.misc;
00023
00024 import com.realtime.crossfire.jxclient.gui.gui.ActivatableGUIElement;
00025 import com.realtime.crossfire.jxclient.gui.gui.GUIElementListener;
00026 import com.realtime.crossfire.jxclient.gui.gui.GuiUtils;
00027 import com.realtime.crossfire.jxclient.gui.gui.TooltipManager;
00028 import com.realtime.crossfire.jxclient.settings.options.CheckBoxOption;
00029 import com.realtime.crossfire.jxclient.settings.options.OptionListener;
00030 import java.awt.Color;
00031 import java.awt.Dimension;
00032 import java.awt.Font;
00033 import java.awt.Graphics;
00034 import java.awt.Graphics2D;
00035 import java.awt.Image;
00036 import java.awt.Transparency;
00037 import java.awt.event.MouseEvent;
00038 import java.awt.geom.RectangularShape;
00039 import java.awt.image.BufferedImage;
00040 import org.jetbrains.annotations.NotNull;
00041
00046 public class GUICheckBox extends ActivatableGUIElement {
00047
00051 private static final long serialVersionUID = 1;
00052
00056 @NotNull
00057 private final BufferedImage checkedImage;
00058
00062 @NotNull
00063 private final Image uncheckedImage;
00064
00068 @NotNull
00069 private final String text;
00070
00074 @NotNull
00075 private final Font font;
00076
00080 @NotNull
00081 private final Color color;
00082
00086 @NotNull
00087 private final CheckBoxOption option;
00088
00092 @NotNull
00093 private final OptionListener optionListener = new OptionListener() {
00094
00095 @Override
00096 public void stateChanged() {
00097 setChanged();
00098 }
00099
00100 };
00101
00114 public GUICheckBox(@NotNull final TooltipManager tooltipManager, @NotNull final GUIElementListener elementListener, @NotNull final String name, @NotNull final BufferedImage checkedImage, @NotNull final BufferedImage uncheckedImage, @NotNull final Font font, @NotNull final Color color, @NotNull final CheckBoxOption option, @NotNull final String text) {
00115 super(tooltipManager, elementListener, name, Transparency.TRANSLUCENT);
00116 if (checkedImage.getWidth() != uncheckedImage.getWidth()) {
00117 throw new IllegalArgumentException("'checked' width is "+checkedImage.getWidth()+" but 'unchecked' width is "+uncheckedImage.getWidth());
00118 }
00119
00120 this.checkedImage = checkedImage;
00121 this.uncheckedImage = uncheckedImage;
00122 this.text = text;
00123 this.font = font;
00124 this.color = color;
00125 this.option = option;
00126 this.option.addOptionListener(optionListener);
00127 }
00128
00132 @Override
00133 public void dispose() {
00134 super.dispose();
00135 option.removeOptionListener(optionListener);
00136 }
00137
00141 @Override
00142 public void paintComponent(@NotNull final Graphics g) {
00143 super.paintComponent(g);
00144 final Graphics2D g2 = (Graphics2D)g;
00145 g2.setFont(font);
00146 g2.setColor(color);
00147 g2.drawImage(option.isChecked() ? checkedImage : uncheckedImage, 0, 0, null);
00148 final RectangularShape rectangle = font.getStringBounds(text, g2.getFontRenderContext());
00149 final int y = (int)Math.round(getHeight()-rectangle.getMaxY()-rectangle.getMinY())/2;
00150 g2.drawString(text, checkedImage.getWidth()+4, y);
00151 }
00152
00156 @NotNull
00157 @Override
00158 public Dimension getPreferredSize() {
00159 return getMinimumSizeInt();
00160 }
00161
00165 @NotNull
00166 @Override
00167 public Dimension getMinimumSize() {
00168 return getMinimumSizeInt();
00169 }
00170
00175 @NotNull
00176 private Dimension getMinimumSizeInt() {
00177 final Dimension result = GuiUtils.getTextDimension(text, getFontMetrics(font));
00178 result.width += checkedImage.getWidth()+4;
00179 result.height = checkedImage.getHeight();
00180 return result;
00181 }
00182
00186 @Override
00187 protected void activeChanged() {
00188 }
00189
00193 @Override
00194 public void mouseClicked(@NotNull final MouseEvent e) {
00195 super.mouseClicked(e);
00196 final int b = e.getButton();
00197 switch (b) {
00198 case MouseEvent.BUTTON1:
00199 option.toggleChecked();
00200 break;
00201
00202 case MouseEvent.BUTTON2:
00203 break;
00204
00205 case MouseEvent.BUTTON3:
00206 break;
00207 }
00208 }
00209
00213 @Override
00214 public void mousePressed(@NotNull final MouseEvent e) {
00215 super.mousePressed(e);
00216 final int b = e.getButton();
00217 switch (b) {
00218 case MouseEvent.BUTTON1:
00219 setActive(true);
00220 break;
00221
00222 case MouseEvent.BUTTON2:
00223 break;
00224
00225 case MouseEvent.BUTTON3:
00226 break;
00227 }
00228 }
00229
00233 @Override
00234 public void execute() {
00235
00236 }
00237
00241 @Override
00242 public void mouseEntered(@NotNull final MouseEvent e, final boolean debugGui) {
00243 if (!hasTooltipText()) {
00244 setTooltipText(option.getTooltipText());
00245 }
00246 super.mouseEntered(e, debugGui);
00247 }
00248
00249 }