Crossfire JXClient, Trunk
GUIDupGauge.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.gauge;
24 
31 import java.awt.Color;
32 import java.awt.Dimension;
33 import java.awt.Font;
34 import java.awt.Graphics;
35 import java.awt.Graphics2D;
36 import java.awt.Image;
37 import java.awt.event.MouseEvent;
38 import java.awt.geom.RectangularShape;
39 import org.jetbrains.annotations.NotNull;
40 import org.jetbrains.annotations.Nullable;
41 
47 public class GUIDupGauge extends AbstractGUIElement implements GUIGaugeListener {
48 
52  private static final long serialVersionUID = 1;
53 
57  @NotNull
58  private String labelText = "";
59 
64  @Nullable
65  private final String tooltipPrefix;
66 
70  @Nullable
71  private final CommandList commandList;
72 
77  @NotNull
78  private String tooltipText = "";
79 
83  @Nullable
84  private final Image emptyImage;
85 
89  @NotNull
90  private final Orientation orientationDiv;
91 
95  @NotNull
96  private final Orientation orientationMod;
97 
101  @NotNull
102  private final GaugeState gaugeStateDiv;
103 
107  @NotNull
108  private final GaugeState gaugeStateMod;
109 
113  @NotNull
114  private final Color color;
115 
119  @NotNull
120  private final Font font;
121 
140  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, @NotNull final Color color, @NotNull final Font font, @Nullable final CommandList commandList, @NotNull final GuiFactory guiFactory) {
142  this.emptyImage = emptyImage;
143  this.orientationDiv = orientationDiv;
144  this.orientationMod = orientationMod;
145  this.tooltipPrefix = tooltipPrefix;
146  this.commandList = commandList;
147  this.color = color;
148  this.font = font;
149  gaugeStateDiv = new GaugeState(fullImageDiv, fullImageDiv, null, 0, 0);
150  final int w = getWidth();
151  final int h = getHeight();
152  gaugeStateMod = new GaugeState(fullImageMod, fullImageMod, null, 0, h/2);
155  orientationDiv.setValues(0, 0, 9);
156  orientationMod.setValues(0, 0, 9);
159  }
160 
161  @Override
162  public void paintComponent(@NotNull final Graphics g) {
163  super.paintComponent(g);
164  g.setColor(new Color(0, 0, 0, 0.0f));
165  g.fillRect(0, 0, getWidth(), getHeight());
166  if (emptyImage != null) {
167  g.drawImage(emptyImage, 0, 0, null);
168  }
169  gaugeStateDiv.draw(g);
170  gaugeStateMod.draw(g);
171 
172  final Graphics2D g2 = (Graphics2D)g;
173  g2.setBackground(new Color(0, 0, 0, 0.0f));
174  g2.setColor(color);
175  g2.setFont(font);
176  final String text = labelText;
177  final RectangularShape rectangle = font.getStringBounds(text, g2.getFontRenderContext());
178  g2.drawString(text, (int)Math.round((getWidth()-rectangle.getWidth())/2), (int)Math.round(getHeight()-rectangle.getMaxY()-rectangle.getMinY())/2);
179  }
180 
181  @NotNull
182  @Override
183  @SuppressWarnings("MethodDoesntCallSuperMethod")
184  public Dimension getPreferredSize() {
185  return getGaugeStateSize();
186  }
187 
188  @NotNull
189  @Override
190  @SuppressWarnings("MethodDoesntCallSuperMethod")
191  public Dimension getMinimumSize() {
192  return getGaugeStateSize();
193  }
194 
195  @NotNull
196  @Override
197  @SuppressWarnings("MethodDoesntCallSuperMethod")
198  public Dimension getMaximumSize() {
199  return getGaugeStateSize();
200  }
201 
207  @NotNull
208  private Dimension getGaugeStateSize() {
209  final Dimension div = gaugeStateDiv.getPreferredSize();
210  final Dimension mod = gaugeStateMod.getPreferredSize();
211  return new Dimension(Math.max(div.width, mod.width), div.height+mod.height);
212  }
213 
214  @Override
215  public void setValues(final int curValue, final int minValue, final int maxValue, @NotNull final String labelText, @NotNull final String tooltipText) {
216  if (minValue != 0) {
217  throw new IllegalArgumentException("minValue="+minValue);
218  }
219  if (maxValue != 99) {
220  throw new IllegalArgumentException("maxValue="+maxValue);
221  }
222  if (!orientationDiv.setValues(curValue/10, 0, 9) && !orientationMod.setValues(curValue%10, 0, 9) && this.labelText.equals(labelText) && this.tooltipText.equals(tooltipText)) {
223  return;
224  }
225 
226  if (!this.labelText.equals(labelText)) {
227  this.labelText = labelText;
228  setChanged();
229  }
230  this.tooltipText = tooltipText;
231 
233  setChanged();
234  }
236  setChanged();
237  }
238 
239  tooltipChanged();
240  }
241 
242  @Override
243  public void setBounds(final int x, final int y, final int width, final int height) {
244  super.setBounds(x, y, width, height);
245  gaugeStateMod.setDy(height/2);
246  orientationDiv.setExtends(width, height);
247  orientationMod.setExtends(width, height);
248  }
249 
250  @Override
251  public void setHidden(final boolean hidden) {
252  // nothing
253  }
254 
255  @Override
256  public void mouseClicked(@NotNull final MouseEvent e) {
257  super.mouseClicked(e);
258 
259  if (!isEnabled()) {
260  return;
261  }
262 
263  switch (e.getButton()) {
264  case MouseEvent.BUTTON1:
265  break;
266 
267  case MouseEvent.BUTTON2:
268  if (commandList != null) {
270  }
271  break;
272 
273  case MouseEvent.BUTTON3:
274  break;
275  }
276  }
277 
278  @Nullable
279  @Override
281  final String text;
282  if (tooltipPrefix == null || tooltipPrefix.isEmpty()) {
283  text = tooltipText;
284  } else if (tooltipText.isEmpty()) {
285  text = tooltipPrefix;
286  } else {
287  text = tooltipPrefix+tooltipText;
288  }
289  return newTooltipText(text);
290  }
291 
292  @Override
293  public void notifyOpen() {
294  }
295 
296 }
com.realtime.crossfire.jxclient.gui.gui.AbstractGUIElement.newTooltipText
TooltipText newTooltipText(@Nullable final String tooltipText)
Definition: AbstractGUIElement.java:247
com.realtime.crossfire.jxclient.gui.gauge.GUIDupGauge.setHidden
void setHidden(final boolean hidden)
Definition: GUIDupGauge.java:251
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.gui.gauge.Orientation.setExtends
boolean setExtends(int width, int height)
com.realtime.crossfire.jxclient.gui.gauge.GUIDupGauge.tooltipPrefix
final String tooltipPrefix
Definition: GUIDupGauge.java:65
com.realtime.crossfire.jxclient.gui.commandlist.CommandList
Definition: CommandList.java:34
com.realtime.crossfire.jxclient.gui.gauge.GUIDupGauge.mouseClicked
void mouseClicked(@NotNull final MouseEvent e)
Definition: GUIDupGauge.java:256
com.realtime.crossfire.jxclient.skin
com.realtime.crossfire.jxclient.gui.gauge.GUIDupGauge.GUIDupGauge
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, @NotNull final Color color, @NotNull final Font font, @Nullable final CommandList commandList, @NotNull final GuiFactory guiFactory)
Definition: GUIDupGauge.java:140
com.realtime.crossfire.jxclient.skin.skin.GuiFactory
Definition: GuiFactory.java:41
com.realtime.crossfire.jxclient.gui.commandlist
Definition: CommandList.java:23
com.realtime.crossfire.jxclient.gui.gauge.GaugeState.draw
void draw(@NotNull final Graphics g)
Definition: GaugeState.java:162
com.realtime.crossfire.jxclient.gui.gauge.GUIDupGauge.tooltipText
String tooltipText
Definition: GUIDupGauge.java:78
com.realtime.crossfire.jxclient.gui.gauge.GUIDupGauge.emptyImage
final Image emptyImage
Definition: GUIDupGauge.java:84
com.realtime.crossfire.jxclient.gui.gauge.GUIDupGauge.getMaximumSize
Dimension getMaximumSize()
Definition: GUIDupGauge.java:198
com.realtime.crossfire.jxclient.gui.gui.AbstractGUIElement.tooltipChanged
void tooltipChanged()
Definition: AbstractGUIElement.java:265
com.realtime.crossfire.jxclient.gui.gauge.GUIDupGauge.getGaugeStateSize
Dimension getGaugeStateSize()
Definition: GUIDupGauge.java:208
com.realtime.crossfire.jxclient.gui.gauge.GaugeState.getPreferredSize
Dimension getPreferredSize()
Definition: GaugeState.java:173
com.realtime.crossfire.jxclient.gui.gauge.GUIDupGauge.commandList
final CommandList commandList
Definition: GUIDupGauge.java:71
com.realtime.crossfire.jxclient.gui.gauge.GaugeState
Definition: GaugeState.java:35
com.realtime.crossfire.jxclient.gui.gauge.GUIDupGauge.setValues
void setValues(final int curValue, final int minValue, final int maxValue, @NotNull final String labelText, @NotNull final String tooltipText)
Definition: GUIDupGauge.java:215
com.realtime.crossfire.jxclient.gui.gauge.GaugeState.setDy
void setDy(final int dy)
Definition: GaugeState.java:121
com.realtime.crossfire.jxclient.gui.gauge.GaugeState.setValues
boolean setValues(@NotNull final Orientation orientation)
Definition: GaugeState.java:130
com.realtime.crossfire.jxclient.gui.gauge.GUIDupGauge
Definition: GUIDupGauge.java:47
com.realtime.crossfire.jxclient.gui
com.realtime.crossfire.jxclient.gui.commandlist.CommandList.execute
void execute()
Definition: CommandList.java:99
com.realtime.crossfire.jxclient.gui.gauge.GUIDupGauge.getMinimumSize
Dimension getMinimumSize()
Definition: GUIDupGauge.java:191
com.realtime.crossfire.jxclient.gui.gauge.GUIDupGauge.paintComponent
void paintComponent(@NotNull final Graphics g)
Definition: GUIDupGauge.java:162
com.realtime.crossfire.jxclient.gui.gui.AbstractGUIElement.elementListener
final GUIElementListener elementListener
Definition: AbstractGUIElement.java:89
com.realtime.crossfire.jxclient.gui.gui.TooltipManager
Definition: TooltipManager.java:33
com.realtime.crossfire.jxclient.gui.gauge.GUIDupGauge.font
final Font font
Definition: GUIDupGauge.java:120
com.realtime.crossfire.jxclient.gui.gui
Definition: AbstractGUIElement.java:23
com.realtime.crossfire.jxclient.gui.gauge.GUIDupGauge.notifyOpen
void notifyOpen()
Definition: GUIDupGauge.java:293
com.realtime.crossfire.jxclient.gui.gauge.Orientation.setValues
boolean setValues(int cur, int min, int max)
com.realtime.crossfire.jxclient.gui.gui.TooltipText
Definition: TooltipText.java:31
com.realtime.crossfire
com.realtime.crossfire.jxclient.gui.gauge.GUIDupGauge.getPreferredSize
Dimension getPreferredSize()
Definition: GUIDupGauge.java:184
com.realtime
com.realtime.crossfire.jxclient.gui.gauge.GUIDupGauge.orientationMod
final Orientation orientationMod
Definition: GUIDupGauge.java:96
com
com.realtime.crossfire.jxclient.gui.gauge.GUIDupGauge.gaugeStateDiv
final GaugeState gaugeStateDiv
Definition: GUIDupGauge.java:102
com.realtime.crossfire.jxclient.gui.gui.AbstractGUIElement.setChanged
void setChanged()
Definition: AbstractGUIElement.java:223
com.realtime.crossfire.jxclient.gui.gauge.GUIDupGauge.serialVersionUID
static final long serialVersionUID
Definition: GUIDupGauge.java:52
com.realtime.crossfire.jxclient.gui.gauge.GUIDupGauge.setBounds
void setBounds(final int x, final int y, final int width, final int height)
Definition: GUIDupGauge.java:243
com.realtime.crossfire.jxclient.gui.gauge.GUIDupGauge.labelText
String labelText
Definition: GUIDupGauge.java:58
com.realtime.crossfire.jxclient.gui.gui.AbstractGUIElement
Definition: AbstractGUIElement.java:37
com.realtime.crossfire.jxclient.gui.gauge.GUIDupGauge.getTooltip
TooltipText getTooltip()
Definition: GUIDupGauge.java:280
com.realtime.crossfire.jxclient.gui.gui.AbstractGUIElement.guiFactory
final GuiFactory guiFactory
Definition: AbstractGUIElement.java:48
com.realtime.crossfire.jxclient.gui.gauge.Orientation
Definition: Orientation.java:29
com.realtime.crossfire.jxclient.gui.gauge.GUIDupGauge.color
final Color color
Definition: GUIDupGauge.java:114
com.realtime.crossfire.jxclient.gui.gauge.GUIGaugeListener
Definition: GUIGaugeListener.java:31
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.gui.gauge.GUIDupGauge.orientationDiv
final Orientation orientationDiv
Definition: GUIDupGauge.java:90
com.realtime.crossfire.jxclient.gui.gauge.GUIDupGauge.gaugeStateMod
final GaugeState gaugeStateMod
Definition: GUIDupGauge.java:108