22 package com.realtime.crossfire.jxclient.gui.label;
30 import java.awt.Component;
32 import java.util.WeakHashMap;
33 import org.jetbrains.annotations.NotNull;
34 import org.jetbrains.annotations.Nullable;
84 private final Map<GUIElement, TooltipText>
tooltipTexts =
new WeakHashMap<>();
97 activeGuiElement = null;
133 final TooltipText tooltipText = tooltipTexts.get(guiElement);
134 if (tooltipText != null) {
135 guiElement.setTooltipText(tooltipText.
getText());
139 if (activeGuiElement == null) {
140 activeGuiElement = guiElement;
142 }
else if (activeGuiElement != guiElement) {
144 activeGuiElement = guiElement;
158 if (activeGuiElement == guiElement) {
160 activeGuiElement = null;
173 setTooltipText(element, tooltipText, gui.getX()+element.getX(), gui.getY()+element.getY(), element.getWidth(), element.getHeight());
181 public void setTooltipText(@NotNull
final GUIElement element, @Nullable
final String tooltipText,
final int x,
final int y,
final int w,
final int h) {
182 final TooltipText oldTooltipText = tooltipTexts.get(element);
183 if (oldTooltipText == null) {
184 if (tooltipText == null) {
188 if (tooltipText != null && tooltipText.equals(oldTooltipText.
getText()) && x == oldTooltipText.
getX() && y == oldTooltipText.
getY() && w == oldTooltipText.
getW() && h == oldTooltipText.
getH()) {
192 tooltipTexts.put(element, tooltipText == null ? null :
new TooltipText(tooltipText, x, y, w, h));
196 if (activeGuiElement == element) {
209 return tooltipTexts.get(element) != null;
218 assert tmpActiveGuiElement != null;
219 assert Thread.holdsLock(activeGuiElementSync);
222 if (tmpTooltip == null) {
226 final TooltipText tooltipText = tooltipTexts.get(tmpActiveGuiElement);
227 if (tooltipText == null) {
228 tmpTooltip.setVisible(
false);
232 tmpTooltip.setVisible(
true);
235 final int preferredX = tooltipText.
getX()+tooltipText.
getW()/2-tmpTooltip.getWidth()/2;
236 final int maxX = windowWidth-tmpTooltip.getWidth();
237 final int tx = Math.max(0, Math.min(preferredX, maxX));
238 final int elementY = tooltipText.
getY();
240 final int ty = preferredY+tmpTooltip.getHeight() <= windowHeight ? preferredY : elementY-tmpTooltip.getHeight()-
TOOLTIP_DISTANCE;
241 tmpTooltip.setLocation(tx, ty);
248 if (tooltip != null) {
249 tooltip.setVisible(
false);
Abstract base class for all label classes.
static Gui getGui(@NotNull final Component element)
Returns the Gui an element is part of.
void setText(@NotNull final String text)
The label text.
Information for displaying tooltips.
String getText()
Returns the text.
int getY()
Returns the y coordinate of the associated gui element.
Interface defining an abstract GUI element.
int getW()
Returns the width of the associated gui element.
Utility class for Gui related functions.
int getH()
Returns the height of the associated gui element.
Utility class for Swing related functions.
Abstract base class for GUI elements to be shown in Guis.
int getX()
Returns the x coordinate of the associated gui element.
static void invokeAndWait(@NotNull final Runnable runnable)
Calls SwingUtilities#invokeAndWait(Runnable) if not on the EDT or calls the Runnable directly if on t...