Crossfire JXClient, Trunk
DefaultJXCSkin.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.skin.skin;
24 
37 import java.util.ArrayList;
38 import java.util.Collection;
39 import java.util.HashSet;
40 import java.util.Iterator;
41 import org.jetbrains.annotations.NotNull;
42 import org.jetbrains.annotations.Nullable;
43 
48 public class DefaultJXCSkin implements JXCSkin {
49 
53  @NotNull
54  private String skinName = "unknown";
55 
59  @NotNull
60  private Resolution minResolution = new Resolution(1, 1);
61 
65  @NotNull
66  private Resolution maxResolution = new Resolution(1, 1);
67 
71  private int currentScreenWidth;
72 
76  private int currentScreenHeight;
77 
81  @NotNull
82  private final Collection<CommandList> initEvents = new ArrayList<>();
83 
87  @NotNull
88  private final JXCSkinCache<CommandList> definedCommandLists = new JXCSkinCache<>("command list");
89 
93  @NotNull
94  private final Collection<GUIElement> guiElements = new HashSet<>();
95 
99  @NotNull
100  private final Collection<SkinEvent> skinEvents = new HashSet<>();
101 
105  @NotNull
106  private final Dialogs dialogs;
107 
111  @NotNull
113 
117  @NotNull
119 
123  @NotNull
124  private final Collection<String> optionNames = new HashSet<>();
125 
129  @Nullable
131 
136  @Nullable
138 
145  public DefaultJXCSkin(@NotNull final KeyBindings defaultKeyBindings, @NotNull final OptionManager optionManager, @NotNull final Dialogs dialogs) {
146  this.defaultKeyBindings = defaultKeyBindings;
147  this.optionManager = optionManager;
148  this.dialogs = dialogs;
149  }
150 
151  @NotNull
152  @Override
153  public String getSkinName() {
154  return skinName;
155  }
156 
163  public void setSkinName(@NotNull final String skinName, @NotNull final Resolution minResolution, @NotNull final Resolution maxResolution) {
165  throw new IllegalArgumentException("minimum width must not exceed maximum width");
166  }
168  throw new IllegalArgumentException("minimum height must not exceed maximum height");
169  }
170 
171  this.skinName = skinName;
172  this.minResolution = minResolution;
173  this.maxResolution = maxResolution;
174  }
175 
176  @NotNull
177  @Override
179  return minResolution;
180  }
181 
182  @NotNull
183  @Override
185  return maxResolution;
186  }
187 
188  @Nullable
189  @Override
190  public Gui getDialogQuit() {
191  try {
192  return getDialog("quit");
193  } catch (final JXCSkinException ignored) {
194  return null;
195  }
196  }
197 
198  @Nullable
199  @Override
201  try {
202  return getDialog("disconnect");
203  } catch (final JXCSkinException ignored) {
204  return null;
205  }
206  }
207 
208  @Nullable
209  @Override
211  try {
212  return getDialog("connect");
213  } catch (final JXCSkinException ignored) {
214  return null;
215  }
216  }
217 
218  @NotNull
219  @Override
221  try {
222  return getDialog("keybind");
223  } catch (final JXCSkinException ex) {
224  final AssertionError error = new AssertionError("keybind dialog does not exist");
225  error.initCause(ex);
226  throw error;
227  }
228  }
229 
230  @NotNull
231  @Override
232  public Gui getDialogQuery() {
233  try {
234  return getDialog("query");
235  } catch (final JXCSkinException ex) {
236  final AssertionError error = new AssertionError("query dialog does not exist");
237  error.initCause(ex);
238  throw error;
239  }
240  }
241 
242  @NotNull
243  @Override
244  public Gui getDialogBook(final int bookNo) {
245  try {
246  return getDialog("book");
247  } catch (final JXCSkinException ex) {
248  final AssertionError error = new AssertionError("book dialog does not exist");
249  error.initCause(ex);
250  throw error;
251  }
252  }
253 
254  @NotNull
255  @Override
257  try {
258  return getDialog("main");
259  } catch (final JXCSkinException ex) {
260  final AssertionError error = new AssertionError("main dialog does not exist");
261  error.initCause(ex);
262  throw error;
263  }
264  }
265 
266  @NotNull
267  @Override
269  try {
270  return getDialog("meta");
271  } catch (final JXCSkinException ex) {
272  final AssertionError error = new AssertionError("meta dialog does not exist");
273  error.initCause(ex);
274  throw error;
275  }
276  }
277 
278  @NotNull
279  @Override
281  try {
282  return getDialog("start");
283  } catch (final JXCSkinException ex) {
284  final AssertionError error = new AssertionError("start dialog does not exist");
285  error.initCause(ex);
286  throw error;
287  }
288  }
289 
290  @NotNull
291  @Override
292  public Gui getDialog(@NotNull final String name) throws JXCSkinException {
293  return dialogs.lookup(name);
294  }
295 
296  @NotNull
297  @Override
298  public Iterator<Gui> iterator() {
299  return dialogs.iterator();
300  }
301 
302  @NotNull
303  @Override
304  public CommandList getCommandList(@NotNull final String name) throws JXCSkinException {
305  return definedCommandLists.lookup(name);
306  }
307 
308  @NotNull
309  @Override
310  public Collection<String> getCommandListNames() {
311  return definedCommandLists.getNames();
312  }
313 
314  @NotNull
315  @Override
317  return defaultKeyBindings;
318  }
319 
320  @Override
321  public void attach(@NotNull final TooltipManagerImpl tooltipManager) {
322  //noinspection VariableNotUsedInsideIf
323  if (this.tooltipManager != null) {
324  throw new IllegalStateException("skin is already attached");
325  }
326 
327  this.tooltipManager = tooltipManager;
329 
331  }
332 
333  @Override
334  public void detach() {
335  final TooltipManagerImpl tmpTooltipManager = tooltipManager;
336  tooltipManager = null;
337  if (tmpTooltipManager != null) {
338  tmpTooltipManager.setTooltip(null);
339  }
340 
341  optionNames.forEach(optionManager::removeOption);
342  optionNames.clear();
345  guiElements.clear();
346  }
347 
348  @Override
349  public void setScreenSize(final int screenWidth, final int screenHeight) {
350  final int newScreenWidth = Math.max(minResolution.getWidth(), Math.min(maxResolution.getWidth(), screenWidth));
351  final int newScreenHeight = Math.max(minResolution.getHeight(), Math.min(maxResolution.getHeight(), screenHeight));
352  if (currentScreenWidth == newScreenWidth && currentScreenHeight == newScreenHeight) {
353  return;
354  }
355  currentScreenWidth = newScreenWidth;
356  currentScreenHeight = newScreenHeight;
357  }
358 
363  public void insertGuiElement(@NotNull final GUIElement guiElement) {
364  guiElements.add(guiElement);
365  }
366 
371  public void addDialog(@NotNull final String dialogName) {
372  dialogs.addDialog(dialogName);
373  }
374 
379  @Nullable
380  public String getDialogToLoad() {
381  return dialogs.getDialogToLoad();
382  }
383 
390  public void addCommandList(@NotNull final String commandListName, @NotNull final CommandListType commandListType) throws JXCSkinException {
391  final CommandList commandList = new CommandList(commandListType);
392  definedCommandLists.insert(commandListName, commandList);
393  }
394 
399  public void addInitEvent(@NotNull final CommandList commandList) {
400  initEvents.add(commandList);
401  }
402 
410  public void addOption(@NotNull final String optionName, @NotNull final String documentation, @NotNull final Option commandCheckBoxOption) throws JXCSkinException {
411  try {
412  optionManager.addOption(optionName, documentation, commandCheckBoxOption);
413  } catch (final OptionException ex) {
414  throw new JXCSkinException(ex.getMessage(), ex);
415  }
416  optionNames.add(optionName);
417  }
418 
423  public void setTooltipLabel(@Nullable final AbstractLabel tooltipLabel) {
424  this.tooltipLabel = tooltipLabel;
425  }
426 
427  @Nullable
428  @Override
430  return tooltipLabel;
431  }
432 
437  public void addSkinEvent(@NotNull final SkinEvent skinEvent) {
438  skinEvents.add(skinEvent);
439  }
440 
441 }
com.realtime.crossfire.jxclient
com.realtime.crossfire.jxclient.gui.label.AbstractLabel
Definition: AbstractLabel.java:43
com.realtime.crossfire.jxclient.skin.skin.DefaultJXCSkin.getTooltipLabel
AbstractLabel getTooltipLabel()
Definition: DefaultJXCSkin.java:429
com.realtime.crossfire.jxclient.skin.skin.DefaultJXCSkin.tooltipLabel
AbstractLabel tooltipLabel
Definition: DefaultJXCSkin.java:130
com.realtime.crossfire.jxclient.gui.gui.Gui
Definition: Gui.java:49
com.realtime.crossfire.jxclient.skin.skin.DefaultJXCSkin.getStartInterface
Gui getStartInterface()
Definition: DefaultJXCSkin.java:280
com.realtime.crossfire.jxclient.util.Resolution.getWidth
int getWidth()
Definition: Resolution.java:88
com.realtime.crossfire.jxclient.gui.commandlist.CommandList
Definition: CommandList.java:34
com.realtime.crossfire.jxclient.skin.skin.DefaultJXCSkin.getSkinName
String getSkinName()
Definition: DefaultJXCSkin.java:153
com.realtime.crossfire.jxclient.skin.skin.DefaultJXCSkin.addCommandList
void addCommandList(@NotNull final String commandListName, @NotNull final CommandListType commandListType)
Definition: DefaultJXCSkin.java:390
com.realtime.crossfire.jxclient.skin
com.realtime.crossfire.jxclient.skin.skin.DefaultJXCSkin.minResolution
Resolution minResolution
Definition: DefaultJXCSkin.java:60
com.realtime.crossfire.jxclient.skin.skin.DefaultJXCSkin.getDialogQuit
Gui getDialogQuit()
Definition: DefaultJXCSkin.java:190
com.realtime.crossfire.jxclient.settings.options.OptionException
Definition: OptionException.java:31
com.realtime.crossfire.jxclient.skin.skin.DefaultJXCSkin.setSkinName
void setSkinName(@NotNull final String skinName, @NotNull final Resolution minResolution, @NotNull final Resolution maxResolution)
Definition: DefaultJXCSkin.java:163
com.realtime.crossfire.jxclient.skin.skin.DefaultJXCSkin.addOption
void addOption(@NotNull final String optionName, @NotNull final String documentation, @NotNull final Option commandCheckBoxOption)
Definition: DefaultJXCSkin.java:410
com.realtime.crossfire.jxclient.gui.label
Definition: AbstractLabel.java:23
com.realtime.crossfire.jxclient.gui.commandlist
Definition: CommandList.java:23
com.realtime.crossfire.jxclient.skin.skin.JXCSkinException
Definition: JXCSkinException.java:31
com.realtime.crossfire.jxclient.skin.skin.DefaultJXCSkin.getDialogQuery
Gui getDialogQuery()
Definition: DefaultJXCSkin.java:232
com.realtime.crossfire.jxclient.gui.keybindings
Definition: InvalidKeyBindingException.java:23
com.realtime.crossfire.jxclient.skin.skin.DefaultJXCSkin.addDialog
void addDialog(@NotNull final String dialogName)
Definition: DefaultJXCSkin.java:371
com.realtime.crossfire.jxclient.settings
Definition: CommandHistory.java:23
com.realtime.crossfire.jxclient.skin.skin.DefaultJXCSkin.optionNames
final Collection< String > optionNames
Definition: DefaultJXCSkin.java:124
com.realtime.crossfire.jxclient.skin.skin.DefaultJXCSkin.iterator
Iterator< Gui > iterator()
Definition: DefaultJXCSkin.java:298
com.realtime.crossfire.jxclient.skin.skin.JXCSkin
Definition: JXCSkin.java:42
com.realtime.crossfire.jxclient.skin.skin.DefaultJXCSkin.guiElements
final Collection< GUIElement > guiElements
Definition: DefaultJXCSkin.java:94
com.realtime.crossfire.jxclient.gui.label.TooltipManagerImpl.setTooltip
void setTooltip(@Nullable final AbstractLabel tooltip)
Definition: TooltipManagerImpl.java:108
com.realtime.crossfire.jxclient.skin.events
Definition: ConnectionStateSkinEvent.java:23
com.realtime.crossfire.jxclient.skin.skin.DefaultJXCSkin.getDialog
Gui getDialog(@NotNull final String name)
Definition: DefaultJXCSkin.java:292
com.realtime.crossfire.jxclient.skin.skin.Dialogs.iterator
Iterator< Gui > iterator()
Definition: Dialogs.java:123
com.realtime.crossfire.jxclient.skin.skin.DefaultJXCSkin.addInitEvent
void addInitEvent(@NotNull final CommandList commandList)
Definition: DefaultJXCSkin.java:399
com.realtime.crossfire.jxclient.skin.skin.Dialogs.lookup
Gui lookup(@NotNull final String name)
Definition: Dialogs.java:82
com.realtime.crossfire.jxclient.skin.skin.DefaultJXCSkin.getMaxResolution
Resolution getMaxResolution()
Definition: DefaultJXCSkin.java:184
com.realtime.crossfire.jxclient.skin.skin.DefaultJXCSkin.getCommandListNames
Collection< String > getCommandListNames()
Definition: DefaultJXCSkin.java:310
com.realtime.crossfire.jxclient.skin.skin.DefaultJXCSkin.currentScreenWidth
int currentScreenWidth
Definition: DefaultJXCSkin.java:71
com.realtime.crossfire.jxclient.skin.skin.DefaultJXCSkin.setScreenSize
void setScreenSize(final int screenWidth, final int screenHeight)
Definition: DefaultJXCSkin.java:349
com.realtime.crossfire.jxclient.skin.skin.DefaultJXCSkin.currentScreenHeight
int currentScreenHeight
Definition: DefaultJXCSkin.java:76
com.realtime.crossfire.jxclient.gui
com.realtime.crossfire.jxclient.skin.skin.DefaultJXCSkin.getMainInterface
Gui getMainInterface()
Definition: DefaultJXCSkin.java:256
com.realtime.crossfire.jxclient.skin.skin.DefaultJXCSkin.setTooltipLabel
void setTooltipLabel(@Nullable final AbstractLabel tooltipLabel)
Definition: DefaultJXCSkin.java:423
com.realtime.crossfire.jxclient.skin.skin.JXCSkinCache
Definition: JXCSkinCache.java:40
com.realtime.crossfire.jxclient.gui.commandlist.CommandList.execute
void execute()
Definition: CommandList.java:99
com.realtime.crossfire.jxclient.skin.skin.DefaultJXCSkin.detach
void detach()
Definition: DefaultJXCSkin.java:334
com.realtime.crossfire.jxclient.skin.skin.DefaultJXCSkin.getMinResolution
Resolution getMinResolution()
Definition: DefaultJXCSkin.java:178
com.realtime.crossfire.jxclient.util
Definition: Codec.java:23
com.realtime.crossfire.jxclient.skin.skin.DefaultJXCSkin.skinEvents
final Collection< SkinEvent > skinEvents
Definition: DefaultJXCSkin.java:100
com.realtime.crossfire.jxclient.gui.gui.GUIElement
Definition: GUIElement.java:33
com.realtime.crossfire.jxclient.skin.events.SkinEvent
Definition: SkinEvent.java:29
com.realtime.crossfire.jxclient.skin.skin.DefaultJXCSkin.dialogs
final Dialogs dialogs
Definition: DefaultJXCSkin.java:106
com.realtime.crossfire.jxclient.gui.gui.GUIElement.dispose
void dispose()
com.realtime.crossfire.jxclient.skin.skin.DefaultJXCSkin.getMetaInterface
Gui getMetaInterface()
Definition: DefaultJXCSkin.java:268
com.realtime.crossfire.jxclient.gui.gui
Definition: AbstractGUIElement.java:23
com.realtime.crossfire.jxclient.skin.skin.DefaultJXCSkin.initEvents
final Collection< CommandList > initEvents
Definition: DefaultJXCSkin.java:82
com.realtime.crossfire.jxclient.skin.skin.DefaultJXCSkin.getCommandList
CommandList getCommandList(@NotNull final String name)
Definition: DefaultJXCSkin.java:304
com.realtime.crossfire.jxclient.skin.skin.DefaultJXCSkin.DefaultJXCSkin
DefaultJXCSkin(@NotNull final KeyBindings defaultKeyBindings, @NotNull final OptionManager optionManager, @NotNull final Dialogs dialogs)
Definition: DefaultJXCSkin.java:145
com.realtime.crossfire.jxclient.skin.skin.DefaultJXCSkin.optionManager
final OptionManager optionManager
Definition: DefaultJXCSkin.java:118
com.realtime.crossfire.jxclient.skin.skin.Dialogs.addDialog
void addDialog(@NotNull final String name)
Definition: Dialogs.java:90
com.realtime.crossfire
com.realtime.crossfire.jxclient.settings.options
Definition: CheckBoxOption.java:23
com.realtime
com.realtime.crossfire.jxclient.skin.skin.DefaultJXCSkin.getDialogDisconnect
Gui getDialogDisconnect()
Definition: DefaultJXCSkin.java:200
com.realtime.crossfire.jxclient.skin.skin.DefaultJXCSkin.definedCommandLists
final JXCSkinCache< CommandList > definedCommandLists
Definition: DefaultJXCSkin.java:88
com.realtime.crossfire.jxclient.skin.skin.DefaultJXCSkin.defaultKeyBindings
final KeyBindings defaultKeyBindings
Definition: DefaultJXCSkin.java:112
com.realtime.crossfire.jxclient.util.Resolution
Definition: Resolution.java:36
com.realtime.crossfire.jxclient.skin.skin.DefaultJXCSkin.getDialogToLoad
String getDialogToLoad()
Definition: DefaultJXCSkin.java:380
com
com.realtime.crossfire.jxclient.skin.skin.Dialogs
Definition: Dialogs.java:39
com.realtime.crossfire.jxclient.settings.options.Option
Definition: Option.java:33
com.realtime.crossfire.jxclient.gui.keybindings.KeyBindings
Definition: KeyBindings.java:47
com.realtime.crossfire.jxclient.skin.skin.DefaultJXCSkin.tooltipManager
TooltipManagerImpl tooltipManager
Definition: DefaultJXCSkin.java:137
com.realtime.crossfire.jxclient.skin.skin.DefaultJXCSkin.getDialogBook
Gui getDialogBook(final int bookNo)
Definition: DefaultJXCSkin.java:244
com.realtime.crossfire.jxclient.skin.skin.DefaultJXCSkin
Definition: DefaultJXCSkin.java:48
com.realtime.crossfire.jxclient.gui.commandlist.CommandListType
Definition: CommandListType.java:29
com.realtime.crossfire.jxclient.skin.events.SkinEvent.dispose
void dispose()
com.realtime.crossfire.jxclient.skin.skin.DefaultJXCSkin.getDialogConnect
Gui getDialogConnect()
Definition: DefaultJXCSkin.java:210
com.realtime.crossfire.jxclient.skin.skin.DefaultJXCSkin.insertGuiElement
void insertGuiElement(@NotNull final GUIElement guiElement)
Definition: DefaultJXCSkin.java:363
com.realtime.crossfire.jxclient.gui.label.TooltipManagerImpl
Definition: TooltipManagerImpl.java:38
com.realtime.crossfire.jxclient.settings.options.OptionManager
Definition: OptionManager.java:36
com.realtime.crossfire.jxclient.skin.skin.DefaultJXCSkin.maxResolution
Resolution maxResolution
Definition: DefaultJXCSkin.java:66
com.realtime.crossfire.jxclient.skin.skin.DefaultJXCSkin.getDefaultKeyBindings
KeyBindings getDefaultKeyBindings()
Definition: DefaultJXCSkin.java:316
com.realtime.crossfire.jxclient.skin.skin.DefaultJXCSkin.getDialogKeyBind
Gui getDialogKeyBind()
Definition: DefaultJXCSkin.java:220
com.realtime.crossfire.jxclient.skin.skin.DefaultJXCSkin.attach
void attach(@NotNull final TooltipManagerImpl tooltipManager)
Definition: DefaultJXCSkin.java:321
com.realtime.crossfire.jxclient.skin.skin.DefaultJXCSkin.addSkinEvent
void addSkinEvent(@NotNull final SkinEvent skinEvent)
Definition: DefaultJXCSkin.java:437
com.realtime.crossfire.jxclient.skin.skin.DefaultJXCSkin.skinName
String skinName
Definition: DefaultJXCSkin.java:54
com.realtime.crossfire.jxclient.settings.options.OptionManager.addOption
void addOption(@NotNull final String optionName, @NotNull final String documentation, @NotNull final Option option)
Definition: OptionManager.java:65
com.realtime.crossfire.jxclient.skin.skin.Dialogs.getDialogToLoad
String getDialogToLoad()
Definition: Dialogs.java:110
com.realtime.crossfire.jxclient.util.Resolution.getHeight
int getHeight()
Definition: Resolution.java:96