Crossfire JXClient, Trunk
GUICheckBox.java
Go to the documentation of this file.
1 /*
2  * This file is part of JXClient, the Fullscreen Java Crossfire Client.
3  *
4  * JXClient is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License as published by
6  * the Free Software Foundation; either version 2 of the License, or
7  * (at your option) any later version.
8  *
9  * JXClient is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with JXClient; if not, write to the Free Software
16  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
17  *
18  * Copyright (C) 2005-2008 Yann Chachkoff
19  * Copyright (C) 2006-2017,2019-2023 Andreas Kirschbaum
20  * Copyright (C) 2010-2012,2014-2018,2020-2023 Nicolas Weeger
21  */
22 
23 package com.realtime.crossfire.jxclient.gui.misc;
24 
33 import java.awt.Color;
34 import java.awt.Dimension;
35 import java.awt.Font;
36 import java.awt.Graphics;
37 import java.awt.Graphics2D;
38 import java.awt.Image;
39 import java.awt.event.MouseEvent;
40 import java.awt.geom.RectangularShape;
41 import java.awt.image.BufferedImage;
42 import org.jetbrains.annotations.NotNull;
43 import org.jetbrains.annotations.Nullable;
44 
49 public class GUICheckBox extends ActivatableGUIElement {
50 
54  private static final long serialVersionUID = 1;
55 
59  @NotNull
60  private final BufferedImage checkedImage;
61 
65  @NotNull
66  private final Image uncheckedImage;
67 
71  @NotNull
72  private final String text;
73 
77  @NotNull
78  private final Font font;
79 
83  @NotNull
84  private final Color color;
85 
89  @NotNull
90  private final CheckBoxOption option;
91 
95  @NotNull
96  private final OptionListener optionListener = this::setChanged;
97 
111  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, @NotNull final GuiFactory guiFactory) {
113  if (checkedImage.getWidth() != uncheckedImage.getWidth()) {
114  throw new IllegalArgumentException("'checked' width is "+checkedImage.getWidth()+" but 'unchecked' width is "+uncheckedImage.getWidth());
115  }
116 
117  this.checkedImage = checkedImage;
118  this.uncheckedImage = uncheckedImage;
119  this.text = text;
120  this.font = font;
121  this.color = color;
122  this.option = option;
123  this.option.addOptionListener(optionListener);
124  }
125 
126  @Override
127  public void dispose() {
128  super.dispose();
130  }
131 
132  @Override
133  public void paintComponent(@NotNull final Graphics g) {
134  super.paintComponent(g);
135  final Graphics2D g2 = (Graphics2D)g;
136  g2.setFont(font);
137  g2.setColor(color);
138  g2.drawImage(option.isChecked() ? checkedImage : uncheckedImage, 0, 0, null);
139  final RectangularShape rectangle = font.getStringBounds(text, g2.getFontRenderContext());
140  final int y = (int)Math.round(getHeight()-rectangle.getMaxY()-rectangle.getMinY())/2;
141  g2.drawString(text, checkedImage.getWidth()+4, y);
142  }
143 
144  @NotNull
145  @Override
146  @SuppressWarnings("MethodDoesntCallSuperMethod")
147  public Dimension getPreferredSize() {
148  return getMinimumSizeInt();
149  }
150 
151  @NotNull
152  @Override
153  @SuppressWarnings("MethodDoesntCallSuperMethod")
154  public Dimension getMinimumSize() {
155  return getMinimumSizeInt();
156  }
157 
162  @NotNull
163  private Dimension getMinimumSizeInt() {
164  final Dimension result = GuiUtils.getTextDimension(text, getFontMetrics(font));
165  result.width += checkedImage.getWidth()+4;
166  result.height = checkedImage.getHeight();
167  return result;
168  }
169 
170  @Override
171  protected void activeChanged() {
172  }
173 
174  @Override
175  public void mouseClicked(@NotNull final MouseEvent e) {
176  super.mouseClicked(e);
177 
178  if (!isEnabled()) {
179  return;
180  }
181 
182  final int b = e.getButton();
183  switch (b) {
184  case MouseEvent.BUTTON1:
186  break;
187 
188  case MouseEvent.BUTTON2:
189  break;
190 
191  case MouseEvent.BUTTON3:
192  break;
193  }
194  }
195 
196  @Override
197  public void notifyOpen() {
198  }
199 
200  @Override
201  public void execute() {
202  // ignore
203  }
204 
205  @Nullable
206  @Override
209  }
210 
211 }
com.realtime.crossfire.jxclient.gui.gui.AbstractGUIElement.newTooltipText
TooltipText newTooltipText(@Nullable final String tooltipText)
Definition: AbstractGUIElement.java:247
com.realtime.crossfire.jxclient.gui.gui.AbstractGUIElement.name
final String name
Definition: AbstractGUIElement.java:77
com.realtime.crossfire.jxclient
com.realtime.crossfire.jxclient.skin.skin
Definition: DefaultJXCSkin.java:23
com.realtime.crossfire.jxclient.settings.options.Option.removeOptionListener
void removeOptionListener(@NotNull final OptionListener listener)
Definition: Option.java:62
com.realtime.crossfire.jxclient.skin
com.realtime.crossfire.jxclient.gui.misc.GUICheckBox.option
final CheckBoxOption option
Definition: GUICheckBox.java:90
com.realtime.crossfire.jxclient.gui.misc.GUICheckBox.getPreferredSize
Dimension getPreferredSize()
Definition: GUICheckBox.java:147
com.realtime.crossfire.jxclient.gui.gui.ActivatableGUIElement
Definition: ActivatableGUIElement.java:33
com.realtime.crossfire.jxclient.gui.misc.GUICheckBox
Definition: GUICheckBox.java:49
com.realtime.crossfire.jxclient.skin.skin.GuiFactory
Definition: GuiFactory.java:41
com.realtime.crossfire.jxclient.gui.gui.GuiUtils.getTextDimension
static Dimension getTextDimension(@NotNull final String text, @NotNull final FontMetrics fontMetrics)
Definition: GuiUtils.java:50
com.realtime.crossfire.jxclient.gui.misc.GUICheckBox.getTooltip
TooltipText getTooltip()
Definition: GUICheckBox.java:207
com.realtime.crossfire.jxclient.gui.misc.GUICheckBox.uncheckedImage
final Image uncheckedImage
Definition: GUICheckBox.java:66
com.realtime.crossfire.jxclient.gui.misc.GUICheckBox.notifyOpen
void notifyOpen()
Definition: GUICheckBox.java:197
com.realtime.crossfire.jxclient.gui.misc.GUICheckBox.serialVersionUID
static final long serialVersionUID
Definition: GUICheckBox.java:54
com.realtime.crossfire.jxclient.gui.gui.GuiUtils
Definition: GuiUtils.java:34
com.realtime.crossfire.jxclient.settings.options.CheckBoxOption.toggleChecked
void toggleChecked()
Definition: CheckBoxOption.java:77
com.realtime.crossfire.jxclient.settings
Definition: CommandHistory.java:23
com.realtime.crossfire.jxclient.gui.misc.GUICheckBox.activeChanged
void activeChanged()
Definition: GUICheckBox.java:171
com.realtime.crossfire.jxclient.gui.misc.GUICheckBox.dispose
void dispose()
Definition: GUICheckBox.java:127
com.realtime.crossfire.jxclient.gui.misc.GUICheckBox.getMinimumSize
Dimension getMinimumSize()
Definition: GUICheckBox.java:154
com.realtime.crossfire.jxclient.gui.misc.GUICheckBox.optionListener
final OptionListener optionListener
Definition: GUICheckBox.java:96
com.realtime.crossfire.jxclient.gui.misc.GUICheckBox.paintComponent
void paintComponent(@NotNull final Graphics g)
Definition: GUICheckBox.java:133
com.realtime.crossfire.jxclient.gui
com.realtime.crossfire.jxclient.gui.gui.ActivatableGUIElement.elementListener
final GUIElementListener elementListener
Definition: ActivatableGUIElement.java:44
com.realtime.crossfire.jxclient.settings.options.CheckBoxOption.isChecked
boolean isChecked()
Definition: CheckBoxOption.java:57
com.realtime.crossfire.jxclient.gui.gui.TooltipManager
Definition: TooltipManager.java:33
com.realtime.crossfire.jxclient.gui.misc.GUICheckBox.color
final Color color
Definition: GUICheckBox.java:84
com.realtime.crossfire.jxclient.gui.gui
Definition: AbstractGUIElement.java:23
com.realtime.crossfire.jxclient.gui.misc.GUICheckBox.GUICheckBox
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, @NotNull final GuiFactory guiFactory)
Definition: GUICheckBox.java:111
com.realtime.crossfire.jxclient.gui.misc.GUICheckBox.getMinimumSizeInt
Dimension getMinimumSizeInt()
Definition: GUICheckBox.java:163
com.realtime.crossfire.jxclient.gui.gui.TooltipText
Definition: TooltipText.java:31
com.realtime.crossfire.jxclient.gui.misc.GUICheckBox.text
final String text
Definition: GUICheckBox.java:72
com.realtime.crossfire
com.realtime.crossfire.jxclient.settings.options
Definition: CheckBoxOption.java:23
com.realtime
com.realtime.crossfire.jxclient.gui.misc.GUICheckBox.font
final Font font
Definition: GUICheckBox.java:78
com
com.realtime.crossfire.jxclient.settings.options.Option.addOptionListener
void addOptionListener(@NotNull final OptionListener listener)
Definition: Option.java:54
com.realtime.crossfire.jxclient.settings.options.CheckBoxOption
Definition: CheckBoxOption.java:32
com.realtime.crossfire.jxclient.gui.misc.GUICheckBox.mouseClicked
void mouseClicked(@NotNull final MouseEvent e)
Definition: GUICheckBox.java:175
com.realtime.crossfire.jxclient.gui.misc.GUICheckBox.execute
void execute()
Definition: GUICheckBox.java:201
com.realtime.crossfire.jxclient.settings.options.CheckBoxOption.getTooltipText
String getTooltipText()
Definition: CheckBoxOption.java:105
com.realtime.crossfire.jxclient.gui.gui.AbstractGUIElement.guiFactory
final GuiFactory guiFactory
Definition: AbstractGUIElement.java:48
com.realtime.crossfire.jxclient.gui.misc.GUICheckBox.checkedImage
final BufferedImage checkedImage
Definition: GUICheckBox.java:60
com.realtime.crossfire.jxclient.gui.gui.GUIElementListener
Definition: GUIElementListener.java:32
com.realtime.crossfire.jxclient.gui.gui.AbstractGUIElement.tooltipManager
final TooltipManager tooltipManager
Definition: AbstractGUIElement.java:83
com.realtime.crossfire.jxclient.settings.options.OptionListener
Definition: OptionListener.java:31