Crossfire JXClient, Trunk
JXCSkinLoader.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.io;
24 
154 import java.awt.Color;
155 import java.awt.Component;
156 import java.awt.Container;
157 import java.awt.Font;
158 import java.awt.Image;
159 import java.awt.image.BufferedImage;
160 import java.io.IOException;
161 import java.io.InputStream;
162 import java.io.InputStreamReader;
163 import java.io.LineNumberReader;
164 import java.nio.charset.StandardCharsets;
165 import java.util.ArrayList;
166 import java.util.Collection;
167 import java.util.Comparator;
168 import java.util.List;
169 import java.util.TreeSet;
170 import javax.swing.GroupLayout;
171 import javax.swing.GroupLayout.Group;
172 import javax.swing.GroupLayout.SequentialGroup;
173 import javax.swing.SwingConstants;
174 import org.jetbrains.annotations.NotNull;
175 import org.jetbrains.annotations.Nullable;
176 
182 public class JXCSkinLoader {
183 
189  private enum ListType {
190 
195 
200 
205 
210 
215 
220 
224  KNOWLEDGE_LIST
225  }
226 
230  @NotNull
231  private final Model model;
232 
236  @NotNull
237  private final NewCharModel newCharModel;
238 
242  @NotNull
244 
248  @NotNull
249  private final FloorView floorView;
250 
254  @NotNull
255  private final SpellsView spellView;
256 
260  @NotNull
262 
266  @NotNull
267  private final QuestsView questView;
268 
269  @NotNull
271 
272  @NotNull
274 
279  private final boolean avoidCopyArea;
280 
284  @NotNull
285  private final GuiFactory guiFactory;
286 
290  @NotNull
292 
296  @NotNull
297  private final String soundsCredits;
298 
302  @NotNull
303  private final FacesManager facesManager;
304 
308  private final int defaultTileSize;
309 
313  @NotNull
315 
319  @NotNull
320  private final GuiManager guiManager;
321 
326  @NotNull
328 
332  @NotNull
334 
338  @NotNull
340 
344  @NotNull
346 
350  private final float fontScaleFactor;
351 
355  @NotNull
357 
361  @NotNull
362  private final JXCSkinCache<Font> definedFonts = new JXCSkinCache<>("font");
363 
367  @Nullable
369 
373  @Nullable
375 
379  @Nullable
381 
386  @Nullable
388 
392  @NotNull
394 
398  @NotNull
400 
404  @NotNull
406 
410  @NotNull
412 
416  @NotNull
418 
423  @NotNull
424  private final List<ActivatableGUIElement> focusOrder = new ArrayList<>();
425 
429  @NotNull
431 
436  @NotNull
438 
443  @NotNull
444  private static final Comparator<GUIElement> ELEMENT_COMPARATOR = (o1, o2) -> {
445  final Comparable<String> n1 = o1.getName();
446  final String n2 = o2.getName();
447  return n1.compareTo(n2);
448  };
449 
453  @NotNull
455 
481  public JXCSkinLoader(@NotNull final Model model, @NotNull final InventoryView inventoryView, @NotNull final FloorView floorView, @NotNull final SpellsView spellView, @NotNull final SpellSkillView spellSkillsView, @NotNull final FacesManager facesManager, @NotNull final MapUpdaterState mapUpdaterState, @NotNull final KeyBindings defaultKeyBindings, @NotNull final OptionManager optionManager, final int defaultTileSize, @NotNull final KeybindingsManager keybindingsManager, @NotNull final QuestsView questView, @NotNull final CommandHistoryFactory commandHistoryFactory, @NotNull final KnowledgeView knowledgeView, @NotNull final KnowledgeTypeView knowledgeTypeView, final boolean avoidCopyArea, @NotNull final GuiManager guiManager, @NotNull final GuiFactory guiFactory, @NotNull final PendingDirections pendingDirections, @NotNull final String soundsCredits, final float fontScaleFactor) {
482  this.model = model;
483  this.inventoryView = inventoryView;
484  this.floorView = floorView;
485  this.spellView = spellView;
486  this.spellSkillsView = spellSkillsView;
487  this.facesManager = facesManager;
488  this.defaultTileSize = defaultTileSize;
489  this.commandHistoryFactory = commandHistoryFactory;
490  this.guiManager = guiManager;
492  this.mapUpdaterState = mapUpdaterState;
493  this.defaultKeyBindings = defaultKeyBindings;
494  this.optionManager = optionManager;
495  this.keybindingsManager = keybindingsManager;
496  this.questView = questView;
497  this.knowledgeView = knowledgeView;
498  this.knowledgeTypeView = knowledgeTypeView;
499  this.avoidCopyArea = avoidCopyArea;
500  this.guiFactory = guiFactory;
501  this.pendingDirections = pendingDirections;
502  newCharModel = new NewCharModel(this.model.getNewCharacterInformation());
503  this.soundsCredits = soundsCredits;
504  this.fontScaleFactor = fontScaleFactor;
505  }
506 
526  @NotNull
527  public JXCSkin load(@NotNull final JXCSkinSource skinSource, @NotNull final CrossfireServerConnection crossfireServerConnection, @NotNull final GuiStateManager guiStateManager, @NotNull final TooltipManager tooltipManager, @NotNull final JXCWindowRenderer windowRenderer, @NotNull final GUIElementListener elementListener, @NotNull final MetaserverModel metaserverModel, @NotNull final CharacterModel characterModel, @NotNull final CommandQueue commandQueue, @NotNull final Shortcuts shortcuts, @NotNull final CommandExecutor commandExecutor, @NotNull final CommandCallback commandCallback, @NotNull final Macros macros, @NotNull final SmoothFaces smoothFaces) throws JXCSkinException {
528  imageParser = new ImageParser(skinSource);
529  fontParser = new FontParser(skinSource);
530 
531  final Image nextGroupFace;
532  try {
533  nextGroupFace = ResourceUtils.loadImage(ResourceUtils.NEXT_GROUP_FACE).getImage();
534  } catch (final IOException ex) {
535  throw new JXCSkinException(ex.getMessage(), ex);
536  }
537  final Image prevGroupFace;
538  try {
539  prevGroupFace = ResourceUtils.loadImage(ResourceUtils.PREV_GROUP_FACE).getImage();
540  } catch (final IOException ex) {
541  throw new JXCSkinException(ex.getMessage(), ex);
542  }
543 
544  final Dialogs dialogs = new Dialogs(guiFactory, guiManager);
548  @Nullable JXCSkin skinToDetach = skin;
549  try {
551  imageParser.clear();
552  skin.addDialog("keybind");
553  skin.addDialog("query");
554  skin.addDialog("book");
555  skin.addDialog("main");
556  skin.addDialog("meta");
557  skin.addDialog("quit");
558  skin.addDialog("disconnect");
559  skin.addDialog("connect");
560  skin.addDialog("start");
561  skin.addDialog("account_login");
562  skin.addDialog("account_characters");
564  textButtonFactory = null;
565  dialogFactory = null;
566  checkBoxFactory = null;
567  try {
568  load(skinSource, "global", crossfireServerConnection, guiStateManager, tooltipManager, windowRenderer, elementListener, metaserverModel, characterModel, commandQueue, null, shortcuts, commandExecutor, commandCallback, macros, nextGroupFace, prevGroupFace, smoothFaces);
569  while (true) {
570  final String name = skin.getDialogToLoad();
571  if (name == null) {
572  break;
573  }
574  final Gui gui = skin.getDialog(name);
575  load(skinSource, name, crossfireServerConnection, guiStateManager, tooltipManager, windowRenderer, elementListener, metaserverModel, characterModel, commandQueue, gui, shortcuts, commandExecutor, commandCallback, macros, nextGroupFace, prevGroupFace, smoothFaces);
576  }
577  } finally {
579  textButtonFactory = null;
580  dialogFactory = null;
581  checkBoxFactory = null;
582  imageParser.clear();
583  }
584 
585  skinToDetach = null;
586  } finally {
587  if (skinToDetach != null) {
588  skinToDetach.detach();
589  windowRenderer.setTooltip(null);
590  }
591  }
592 
593  return skin;
594  }
595 
619  private void load(@NotNull final JXCSkinSource skinSource, @NotNull final String dialogName, @NotNull final CrossfireServerConnection server, @NotNull final GuiStateManager guiStateManager, @NotNull final TooltipManager tooltipManager, @NotNull final JXCWindowRenderer windowRenderer, @NotNull final GUIElementListener elementListener, @NotNull final MetaserverModel metaserverModel, @NotNull final CharacterModel characterModel, @NotNull final CommandQueue commandQueue, @Nullable final Gui gui, @NotNull final Shortcuts shortcuts, @NotNull final CommandExecutor commandExecutor, @NotNull final CommandCallback commandCallback, @NotNull final Macros macros, @NotNull final Image nextGroupFace, @NotNull final Image prevGroupFace, @NotNull final SmoothFaces smoothFaces) throws JXCSkinException {
620  String resourceName = dialogName+".skin";
621 
622  definedGUIElements.clear();
623  focusOrder.clear();
624  try {
625  InputStream inputStream;
626  try {
627  inputStream = skinSource.getInputStream(resourceName);
628  } catch (final IOException ignored) {
629  resourceName = dialogName+".skin";
630  inputStream = skinSource.getInputStream(resourceName);
631  }
632  try {
633  load(skinSource, dialogName, resourceName, inputStream, server, guiStateManager, tooltipManager, windowRenderer, elementListener, metaserverModel, characterModel, commandQueue, gui, shortcuts, commandExecutor, commandCallback, macros, nextGroupFace, prevGroupFace, smoothFaces);
634  } finally {
635  inputStream.close();
636  }
637  } catch (final IOException|JXCSkinException ex) {
638  throw new JXCSkinException(skinSource.getURI(resourceName)+": "+ex.getMessage(), ex);
639  } finally {
640  definedGUIElements.clear();
641  focusOrder.clear();
642  }
643  }
644 
671  private void load(@NotNull final JXCSkinSource skinSource, @NotNull final String dialogName, @NotNull final String resourceName, @NotNull final InputStream inputStream, @NotNull final CrossfireServerConnection server, @NotNull final GuiStateManager guiStateManager, @NotNull final TooltipManager tooltipManager, @NotNull final JXCWindowRenderer windowRenderer, @NotNull final GUIElementListener elementListener, @NotNull final MetaserverModel metaserverModel, @NotNull final CharacterModel characterModel, @NotNull final CommandQueue commandQueue, @Nullable final Gui gui, @NotNull final Shortcuts shortcuts, @NotNull final CommandExecutor commandExecutor, @NotNull final CommandCallback commandCallback, @NotNull final Macros macros, @NotNull final Image nextGroupFace, @NotNull final Image prevGroupFace, @NotNull final SmoothFaces smoothFaces) throws JXCSkinException {
672  try {
673  try (InputStreamReader isr = new InputStreamReader(inputStream, StandardCharsets.UTF_8)) {
674  try (LineNumberReader lnr = new LineNumberReader(isr)) {
675  try {
676  boolean isDialog = false;
677  while (true) {
678  final String line = lnr.readLine();
679  if (line == null) {
680  break;
681  }
682 
683  if (line.startsWith("#") || line.isEmpty()) {
684  continue;
685  }
686 
687  final String[] argsTmp;
688  try {
689  argsTmp = StringUtils.splitFields(line);
690  } catch (final UnterminatedTokenException ex) {
691  throw new JXCSkinException(ex.getMessage(), ex);
692  }
693  final Args args = new Args(argsTmp);
694  final String cmd = args.get();
695  if (gui != null && cmd.equals("button")) {
696  parseButton(args, tooltipManager, elementListener, lnr);
697  } else if (gui != null && cmd.equals("selectable_button")) {
698  parseSelectableButton(args, tooltipManager, elementListener, lnr);
699  } else if (gui != null && cmd.equals("checkbox")) {
700  parseCheckbox(args, tooltipManager, elementListener, lnr);
701  } else if (gui != null && cmd.equals("combobox")) {
702  parseComboBox(args, tooltipManager, elementListener);
703  } else if (gui != null && cmd.equals("spinner")) {
704  parseSpinner(args, tooltipManager, elementListener);
705  } else if (cmd.equals("commandlist")) {
706  parseCommandList(args, guiStateManager, lnr, commandExecutor, commandQueue, server, commandCallback, macros);
707  } else if (cmd.equals("commandlist_add")) {
708  parseCommandListAdd(args, guiStateManager, lnr, commandExecutor, commandQueue, server, commandCallback, macros);
709  } else if (gui != null && cmd.equals("command_text")) {
710  parseCommandText(args, commandCallback, tooltipManager, elementListener, commandExecutor, server);
711  } else if (cmd.equals("def")) {
712  parseDef(args, lnr);
713  } else if (gui != null && cmd.equals("dialog")) {
714  if (isDialog) {
715  throw new JXCSkinException("'dialog' must not be used more than once per dialog");
716  }
717  parseDialog(args, tooltipManager, windowRenderer, elementListener, lnr, gui, dialogName);
718  isDialog = true;
719  } else if (gui != null && cmd.equals("dialog_hide")) {
720  parseDialogHide(args, gui);
721  } else if (gui != null && cmd.equals("dupgauge")) {
722  parseDupGauge(args, tooltipManager, elementListener, lnr);
723  } else if (cmd.equals("event")) {
724  parseEvent(args, guiStateManager, server);
725  } else if (gui != null && cmd.equals("fill")) {
726  parseFill(args, tooltipManager, elementListener);
727  } else if (cmd.equals("font")) {
728  parseFont(args);
729  } else if (gui != null && cmd.equals("gauge")) {
730  parseGauge(args, tooltipManager, elementListener, lnr);
731  } else if (gui != null && cmd.equals("ignore")) {
732  parseIgnore(args);
733  } else if (gui != null && cmd.equals("inventory_list")) {
734  parseList(args, ListType.INVENTORY, tooltipManager, elementListener, commandQueue, server, nextGroupFace, prevGroupFace);
735  } else if (gui != null && cmd.equals("floor_list")) {
736  parseList(args, ListType.GROUND, tooltipManager, elementListener, commandQueue, server, nextGroupFace, prevGroupFace);
737  } else if (gui != null && cmd.equals("spells_list")) {
738  parseList(args, ListType.SPELL, tooltipManager, elementListener, commandQueue, server, nextGroupFace, prevGroupFace);
739  } else if (gui != null && cmd.equals("spell_skills")) {
740  parseList(args, ListType.SPELL_SKILLS, tooltipManager, elementListener, commandQueue, server, nextGroupFace, prevGroupFace);
741  } else if (gui != null && cmd.equals("quests_list")) {
742  parseList(args, ListType.QUEST, tooltipManager, elementListener, commandQueue, server, nextGroupFace, prevGroupFace);
743  } else if (gui != null && cmd.equals("knowledge_types")) {
744  parseList(args, ListType.KNOWLEDGE_TYPES, tooltipManager, elementListener, commandQueue, server, nextGroupFace, prevGroupFace);
745  } else if (gui != null && cmd.equals("knowledge_list")) {
746  parseList(args, ListType.KNOWLEDGE_LIST, tooltipManager, elementListener, commandQueue, server, nextGroupFace, prevGroupFace);
747  } else if (gui != null && cmd.equals("horizontal")) {
748  parseHorizontal(args, gui.getComponent(), lnr, isDialog);
749  } else if (gui != null && cmd.equals("item")) {
750  parseItem(args, tooltipManager, elementListener, commandQueue, commandExecutor, server, shortcuts, nextGroupFace, prevGroupFace);
751  } else if (cmd.equals("key")) {
752  parseKey(args, gui, line);
753  } else if (gui != null && cmd.equals("label_html")) {
754  parseLabelHtml(args, tooltipManager, elementListener, lnr);
755  } else if (gui != null && cmd.equals("label_multi")) {
756  parseLabelMulti(args, tooltipManager, elementListener, lnr);
757  } else if (gui != null && cmd.equals("label_query")) {
758  parseLabelQuery(args, tooltipManager, elementListener, server);
759  } else if (gui != null && cmd.equals("label_failure")) {
760  parseLabelFailure(args, tooltipManager, elementListener, server);
761  } else if (gui != null && cmd.equals("label_message")) {
762  parseLabelMessage(args, tooltipManager, elementListener, server, windowRenderer);
763  } else if (gui != null && cmd.equals("label_text")) {
764  parseLabelText(args, tooltipManager, elementListener, lnr);
765  } else if (gui != null && cmd.equals("label_stat")) {
766  parseLabelStat(args, tooltipManager, elementListener);
767  } else if (gui != null && cmd.equals("label_stat2")) {
768  parseLabelStat2(args, tooltipManager, elementListener);
769  } else if (gui != null && cmd.equals("label_newchar")) {
770  parseLabelNewchar(args, tooltipManager, elementListener, server);
771  } else if (gui != null && cmd.equals("label_sounds_credits")) {
772  parseLabelSoundsCredits(args, tooltipManager, elementListener);
773  } else if (gui != null && cmd.equals("link_size")) {
774  parseLinkSize(args, gui.getComponent());
775  } else if (gui != null && cmd.equals("log_label")) {
776  parseLogLabel(args, tooltipManager, elementListener);
777  } else if (gui != null && cmd.equals("log_message")) {
778  parseLogMessage(args, tooltipManager, elementListener, server);
779  } else if (gui != null && cmd.equals("log_color")) {
780  parseLogColor(args);
781  } else if (gui != null && cmd.equals("log_filter")) {
782  parseLogFilter(args);
783  } else if (gui != null && cmd.equals("minimap")) {
784  parseMinimap(args, tooltipManager, elementListener);
785  } else if (gui != null && cmd.equals("map")) {
786  parseMap(args, tooltipManager, elementListener, server, smoothFaces);
787  } else if (gui != null && cmd.equals("map_directions")) {
788  parseMapDirections(args, tooltipManager, elementListener, smoothFaces);
789  } else if (gui != null && cmd.equals("meta_list")) {
790  parseMetaList(args, tooltipManager, elementListener, metaserverModel);
791  } else if (gui != null && cmd.equals("picture")) {
792  parsePicture(args, tooltipManager, elementListener, lnr, gui, false);
793  } else if (gui != null && cmd.equals("picture_scaled")) {
794  parsePicture(args, tooltipManager, elementListener, lnr, gui, true);
795  } else if (gui != null && cmd.equals("picture_stat")) {
796  parsePictureStat(args, tooltipManager, elementListener, lnr);
797  } else if (gui != null && cmd.equals("query_text")) {
798  parseQueryText(args, server, commandCallback, tooltipManager, elementListener);
799  } else if (gui != null && cmd.equals("set_forced_active")) {
800  parseSetForcedActive(args, gui);
801  } else if (gui != null && cmd.equals("set_auto_size")) {
802  parseSetAutoSize(gui, args);
803  } else if (gui != null && cmd.equals("set_default")) {
804  parseSetDefault(args);
805  } else if (gui != null && cmd.equals("set_invisible")) {
806  parseSetInvisible(args);
807  } else if (gui != null && cmd.equals("set_modal")) {
808  parseSetModal(gui);
809  } else if (gui != null && cmd.equals("set_user_resizable")) {
811  } else if (gui != null && cmd.equals("scrollbar")) {
812  parseScrollbar(args, tooltipManager, elementListener);
813  } else if (gui == null && cmd.equals("skin_name")) {
814  parseSkinName(args);
815  } else if (gui != null && cmd.equals("text")) {
816  parseText(args, commandCallback, tooltipManager, elementListener);
817  } else if (gui != null && cmd.equals("textbutton")) {
818  parseTextButton(args, tooltipManager, elementListener, lnr);
819  } else if (gui != null && cmd.equals("textgauge")) {
820  parseTextGauge(args, tooltipManager, elementListener, lnr);
821  } else if (cmd.equals("tooltip")) {
822  parseTooltip(args, tooltipManager, elementListener);
823  } else if (gui != null && cmd.equals("vertical")) {
824  parseVertical(args, gui.getComponent(), lnr, isDialog);
825  } else if (cmd.equals("character_list")) {
826  parseCharacterList(args, tooltipManager, elementListener, characterModel);
827  } else if (cmd.equals("hide_input")) {
828  parseHideInput(args);
829  } else if (gui != null && cmd.equals("focus")) {
830  parseFocus(args, lnr);
831  } else {
832  throw new IOException("unknown keyword '"+cmd+"'");
833  }
834 
835  if (args.hasMore()) {
836  throw new IOException("excess arguments");
837  }
838  }
839  } catch (final IOException|JXCSkinException ex) {
840  throw new IOException(ex.getMessage()+" in line "+lnr.getLineNumber(), ex);
841  } catch (final IllegalArgumentException ex) {
842  final Object msg = ex.getMessage();
843  throw new IOException("invalid parameter"+(msg == null ? "" : " ("+msg+")")+" in line "+lnr.getLineNumber(), ex);
844  } finally {
845  lnr.close();
846  }
847  }
848  }
849 
850  if (gui != null) {
851  if (focusOrder.isEmpty()) {
852  for (GUIElement element : definedGUIElements) {
853  if (element instanceof ActivatableGUIElement) {
854  focusOrder.add((ActivatableGUIElement)element);
855  }
856  }
857  } else {
858  final Collection<GUIElement> unreferencedElements = new TreeSet<>(ELEMENT_COMPARATOR);
859  for (final GUIElement element : definedGUIElements) {
860  if (element instanceof ActivatableGUIElement) {
861  unreferencedElements.add(element);
862  }
863  }
864  unreferencedElements.removeAll(focusOrder);
865  if (!unreferencedElements.isEmpty()) {
866  throw new IOException("missing elements in focus block: "+unreferencedElements);
867  }
868  }
869  for (int i = 0; i < focusOrder.size(); i++) {
870  final ActivatableGUIElement prev = focusOrder.get(i);
871  final ActivatableGUIElement next = focusOrder.get((i+1)%focusOrder.size());
872  prev.setNextActive(next);
873  next.setPrevActive(prev);
874  }
875  }
876  } catch (final IOException ex) {
877  throw new JXCSkinException(skinSource.getURI(resourceName)+": "+ex.getMessage(), ex);
878  }
879 
880  assert gui != null || !definedGUIElements.iterator().hasNext();
881  }
882 
892  private void parseButton(@NotNull final Args args, @NotNull final TooltipManager tooltipManager, @NotNull final GUIElementListener elementListener, @NotNull final LineNumberReader lnr) throws IOException, JXCSkinException {
893  final String name = args.get();
894  final BufferedImage upImage = scaleImage(imageParser.getImage(args.get()));
895  final BufferedImage downImage = scaleImage(imageParser.getImage(args.get()));
896  final boolean autoRepeat = NumberParser.parseBoolean(args.get());
897  final CommandList commandList = skin.getCommandList(args.get());
898  @Nullable final String label;
899  @Nullable final Font font;
900  @Nullable final Color color;
901  final int textX;
902  final int textY;
903  if (args.hasMore()) {
904  font = definedFonts.lookup(args.get());
905  color = ParseUtils.parseColor(args.get());
906  textX = ExpressionParser.parseInt(args.get());
907  textY = ExpressionParser.parseInt(args.get());
908  label = ParseUtils.parseText(args, lnr);
909  } else {
910  label = null;
911  font = null;
912  color = null;
913  textX = 0;
914  textY = 0;
915  }
916  insertGuiElement(new GUIButton(tooltipManager, elementListener, name, upImage, downImage, label, font, color, textX, textY, autoRepeat, commandList, guiFactory, newCharModel));
917  }
918 
928  private void parseSelectableButton(@NotNull final Args args, @NotNull final TooltipManager tooltipManager, @NotNull final GUIElementListener elementListener, @NotNull final LineNumberReader lnr) throws IOException, JXCSkinException {
929  final String name = args.get();
930  final BufferedImage upImage = imageParser.getImage(args.get());
931  final BufferedImage downImage = imageParser.getImage(args.get());
932  final boolean autoRepeat = NumberParser.parseBoolean(args.get());
933  final CommandList commandList = skin.getCommandList(args.get());
934  final String tooltipText = ParseUtils.parseText(args, lnr);
935  insertGuiElement(new GUISelectableButton(tooltipManager, elementListener, name, upImage, downImage, tooltipText, autoRepeat, commandList, guiFactory, newCharModel));
936  }
937 
947  private void parseCheckbox(@NotNull final Args args, @NotNull final TooltipManager tooltipManager, @NotNull final GUIElementListener elementListener, @NotNull final LineNumberReader lnr) throws IOException, JXCSkinException {
948  if (checkBoxFactory == null) {
949  throw new IOException("missing 'def checkbox' command");
950  }
951 
952  final String name = args.get();
953  final CheckBoxOption option = ParseUtils.parseCheckBoxOption(args.get(), optionManager);
954  final String text = ParseUtils.parseText(args, lnr);
955  assert checkBoxFactory != null;
956  insertGuiElement(checkBoxFactory.newCheckBox(tooltipManager, elementListener, name, option, text));
957  }
958 
967  private void parseComboBox(@NotNull final Args args, @NotNull final TooltipManager tooltipManager, @NotNull final GUIElementListener elementListener) throws IOException, JXCSkinException {
968  final String name = args.get();
969  final String type = args.get();
970  final GUILabelLog label = args.get().equals("null") ? null : guiElementParser.lookupLabelLogElement(args.getPrev());
971  final AbstractGUIElement element;
972  switch (type) {
973  case "classes":
974  element = new GUIClassesComboBox(tooltipManager, elementListener, name, model, newCharModel, label, guiFactory);
975  break;
976 
977  case "races":
978  element = new GUIRacesComboBox(tooltipManager, elementListener, name, model, newCharModel, label, guiFactory);
979  break;
980 
981  case "starting_maps":
982  element = new GUIStartingMapsComboBox(tooltipManager, elementListener, name, model, newCharModel, label, guiFactory);
983  break;
984 
985  case "char_options":
986  element = new GUICharOptionsComboBox(tooltipManager, elementListener, name, newCharModel, label, guiFactory);
987  break;
988 
989  default:
990  throw new IOException("undefined 'combobox' type '"+type+"'");
991  }
992  insertGuiElement(element);
993  }
994 
1003  private void parseSpinner(@NotNull final Args args, @NotNull final TooltipManager tooltipManager, @NotNull final GUIElementListener elementListener) throws IOException, JXCSkinException {
1004  final String name = args.get();
1005  final NewcharStat stat = NumberParser.parseEnum(NewcharStat.class, args.get(), "stat");
1006  insertGuiElement(new GUISpinner(tooltipManager, elementListener, name, stat, newCharModel, guiFactory));
1007  }
1008 
1022  private void parseCommandList(@NotNull final Args args, @NotNull final GuiStateManager guiStateManager, @NotNull final LineNumberReader lnr, @NotNull final CommandExecutor commandExecutor, @NotNull final CommandQueue commandQueue, @NotNull final CrossfireServerConnection server, @NotNull final CommandCallback commandCallback, @NotNull final Macros macros) throws IOException, JXCSkinException {
1023  final String commandListName = args.get();
1024  final CommandListType commandListType = NumberParser.parseEnum(CommandListType.class, args.get(), "type");
1025  skin.addCommandList(commandListName, commandListType);
1026  if (args.hasMore()) {
1027  final AbstractGUIElement element = args.get().equals("null") ? null : definedGUIElements.lookup(args.getPrev());
1028  addCommand(commandListName, args, element, args.get(), guiStateManager, commandExecutor, lnr, commandQueue, server, commandCallback, macros);
1029  }
1030  }
1031 
1045  private void parseCommandListAdd(@NotNull final Args args, @NotNull final GuiStateManager guiStateManager, @NotNull final LineNumberReader lnr, @NotNull final CommandExecutor commandExecutor, @NotNull final CommandQueue commandQueue, @NotNull final CrossfireServerConnection server, @NotNull final CommandCallback commandCallback, @NotNull final Macros macros) throws IOException, JXCSkinException {
1046  final String name = args.get();
1047  final AbstractGUIElement element = args.get().equals("null") ? null : definedGUIElements.lookup(args.getPrev());
1048  addCommand(name, args, element, args.get(), guiStateManager, commandExecutor, lnr, commandQueue, server, commandCallback, macros);
1049  }
1050 
1062  private void parseCommandText(@NotNull final Args args, @NotNull final CommandCallback commandCallback, @NotNull final TooltipManager tooltipManager, @NotNull final GUIElementListener elementListener, @NotNull final CommandExecutor commandExecutor, @NotNull final CrossfireServerConnection crossfireServerConnection) throws IOException, JXCSkinException {
1063  final String name = args.get();
1064  final Image activeImage = imageParser.getImage(args.get());
1065  final Image inactiveImage = imageParser.getImage(args.get());
1066  final Font font = definedFonts.lookup(args.get());
1067  final Color inactiveColor = ParseUtils.parseColor(args.get());
1068  final Color activeColor = ParseUtils.parseColor(args.get());
1069  final int margin = ExpressionParser.parseInt(args.get());
1070  final boolean enableHistory = NumberParser.parseBoolean(args.get());
1071  final CommandHistory commandHistory = enableHistory ? commandHistoryFactory.getCommandHistory(name) : null;
1072  insertGuiElement(new GUICommandText(commandCallback, commandHistory, tooltipManager, elementListener, name, newCharModel, activeImage, inactiveImage, font, inactiveColor, activeColor, margin, "", commandExecutor, guiFactory, crossfireServerConnection));
1073  }
1074 
1082  private void parseDef(@NotNull final Args args, @NotNull final LineNumberReader lnr) throws IOException, JXCSkinException {
1083  final String type = args.get();
1084  switch (type) {
1085  case "checkbox": {
1086  final BufferedImage checkedImage = scaleImage(imageParser.getImage(args.get()));
1087  final BufferedImage uncheckedImage = scaleImage(imageParser.getImage(args.get()));
1088  final Font font = definedFonts.lookup(args.get());
1089  final Color color = ParseUtils.parseColor(args.get());
1090  checkBoxFactory = new CheckBoxFactory(checkedImage, uncheckedImage, font, color, guiFactory);
1091  break;
1092  }
1093 
1094  case "checkbox_option":
1095  final String optionName = args.get();
1096  final boolean defaultValue = NumberParser.parseBoolean(args.get());
1097  final CommandList commandOn = skin.getCommandList(args.get());
1098  final CommandList commandOff = skin.getCommandList(args.get());
1099  final String documentation = ParseUtils.parseText(args, lnr);
1100  skin.addOption(optionName, documentation, new CommandCheckBoxOption(defaultValue, commandOn, commandOff, documentation));
1101  break;
1102 
1103  case "dialog":
1104  final String frame = args.get();
1105  final Image frameNW = imageParser.getImage(frame+"_nw");
1106  final Image frameN = imageParser.getImage(frame+"_n");
1107  final Image frameNE = imageParser.getImage(frame+"_ne");
1108  final Image frameW = imageParser.getImage(frame+"_w");
1109  final Image frameC = imageParser.getImage(frame+"_c");
1110  final Image frameE = imageParser.getImage(frame+"_e");
1111  final Image frameSW = imageParser.getImage(frame+"_sw");
1112  final Image frameS = imageParser.getImage(frame+"_s");
1113  final Image frameSE = imageParser.getImage(frame+"_se");
1114  final Font titleFont = definedFonts.lookup(args.get());
1115  final Color titleColor = ParseUtils.parseColor(args.get());
1116  final Color titleBackgroundColor = ParseUtils.parseColor(args.get());
1117  final float alpha = NumberParser.parseFloat(args.get());
1118  if (alpha < 0 || alpha > 1.0F) {
1119  throw new IOException("invalid alpha value: "+alpha);
1120  }
1121  dialogFactory = new DialogFactory(frameNW, frameN, frameNE, frameW, frameC, frameE, frameSW, frameS, frameSE, titleFont, titleColor, titleBackgroundColor, alpha, guiFactory);
1122  break;
1123 
1124  case "item": {
1125  final Color cursedColor = ParseUtils.parseColorNull(args.get());
1126  final Image cursedImage = imageParser.getImage(cursedColor, args.getPrev());
1127  final Color damnedColor = ParseUtils.parseColorNull(args.get());
1128  final Image damnedImage = imageParser.getImage(damnedColor, args.getPrev());
1129  final Color magicColor = ParseUtils.parseColorNull(args.get());
1130  final Image magicImage = imageParser.getImage(magicColor, args.getPrev());
1131  final Color blessedColor = ParseUtils.parseColorNull(args.get());
1132  final Image blessedImage = imageParser.getImage(blessedColor, args.getPrev());
1133  final Color appliedColor = ParseUtils.parseColorNull(args.get());
1134  final Image appliedImage = imageParser.getImage(appliedColor, args.getPrev());
1135  final Color unidentifiedColor = ParseUtils.parseColorNull(args.get());
1136  final Image unidentifiedImage = imageParser.getImage(unidentifiedColor, args.getPrev());
1137  final Color selectorColor = ParseUtils.parseColorNull(args.get());
1138  final Image selectorImage = imageParser.getImage(selectorColor, args.getPrev());
1139  final Color lockedColor = ParseUtils.parseColorNull(args.get());
1140  final Image lockedImage = imageParser.getImage(lockedColor, args.getPrev());
1141  final Color unpaidColor = ParseUtils.parseColorNull(args.get());
1142  final Image unpaidImage = imageParser.getImage(unpaidColor, args.getPrev());
1143  final Color markedColor = ParseUtils.parseColorNull(args.get());
1144  final Image markedImage = imageParser.getImage(unpaidColor, args.getPrev());
1145  final Font font = definedFonts.lookup(args.get());
1146  final Color nrofColor = ParseUtils.parseColor(args.get());
1147  defaultItemPainter = new ItemPainter(cursedImage, damnedImage, magicImage, blessedImage, appliedImage, unidentifiedImage, selectorImage, lockedImage, unpaidImage, markedImage, cursedColor, damnedColor, magicColor, blessedColor, appliedColor, unidentifiedColor, selectorColor, lockedColor, unpaidColor, markedColor, font, nrofColor);
1148  break;
1149  }
1150 
1151  case "textbutton":
1152  final String up = args.get();
1153  final String down = args.get();
1154  final Font font = definedFonts.lookup(args.get());
1155  final Color color = ParseUtils.parseColor(args.get());
1156  final Color colorSelected = ParseUtils.parseColor(args.get());
1157  final Color colorDisabled = ParseUtils.parseColor(args.get());
1158  final BufferedImage upImageLeft = scaleImage(imageParser.getImage(up+"_w"));
1159  final BufferedImage upImageMiddle = scaleImage(imageParser.getImage(up+"_c"));
1160  final BufferedImage upImageRight = scaleImage(imageParser.getImage(up+"_e"));
1161  final ButtonImages upImages = new ButtonImages(upImageLeft, upImageMiddle, upImageRight);
1162  final BufferedImage downImageLeft = scaleImage(imageParser.getImage(down+"_w"));
1163  final BufferedImage downImageMiddle = scaleImage(imageParser.getImage(down+"_c"));
1164  final BufferedImage downImageRight = scaleImage(imageParser.getImage(down+"_e"));
1165  final ButtonImages downImages = new ButtonImages(downImageLeft, downImageMiddle, downImageRight);
1166  textButtonFactory = new TextButtonFactory(upImages, downImages, font, color, colorSelected, colorDisabled, guiFactory, newCharModel, keybindingsManager);
1167  break;
1168 
1169  default:
1170  throw new IOException("unknown type '"+type+"'");
1171  }
1172  }
1173 
1186  private void parseDialog(@NotNull final Args args, @NotNull final TooltipManager tooltipManager, @NotNull final JXCWindowRenderer windowRenderer, @NotNull final GUIElementListener elementListener, @NotNull final LineNumberReader lnr, @NotNull final Gui gui, @NotNull final String dialogName) throws IOException, JXCSkinException {
1187  if (dialogFactory == null) {
1188  throw new IOException("missing 'def dialog' command");
1189  }
1190 
1191  final Expression defaultX = ExpressionParser.parseExpression(args.get());
1192  final Expression defaultY = ExpressionParser.parseExpression(args.get());
1193  final boolean saveDialog = NumberParser.parseBoolean(args.get());
1194  final String title = ParseUtils.parseText(args, lnr);
1195  assert dialogFactory != null;
1196  final Iterable<AbstractGUIElement> elements = dialogFactory.newDialog(tooltipManager, windowRenderer, elementListener, title);
1197  for (AbstractGUIElement element : elements) {
1198  insertGuiElement(element);
1199  }
1200  gui.getComponent().setName(dialogName);
1201  gui.setDefaultPosition(defaultX, defaultY);
1202  if (saveDialog) {
1203  gui.setSaveDialog();
1204  }
1205  }
1206 
1213  private static void parseDialogHide(@NotNull final Args args, @NotNull final Gui gui) throws IOException {
1214  do {
1215  gui.hideInState(NumberParser.parseEnum(RendererGuiState.class, args.get(), "gui state"));
1216  } while (args.hasMore());
1217  }
1218 
1228  private void parseDupGauge(@NotNull final Args args, @NotNull final TooltipManager tooltipManager, @NotNull final GUIElementListener elementListener, @NotNull final LineNumberReader lnr) throws IOException, JXCSkinException {
1229  final String name = args.get();
1230  final Image positiveDivImage = scaleImage(imageParser.getImage(args.get()));
1231  final Image positiveModImage = scaleImage(imageParser.getImage(args.get()));
1232  final Image emptyImage = scaleImage(imageParser.getImage(args.get()));
1233  final GaugeUpdater gaugeUpdater = newGaugeUpdater(args.get());
1234  final Orientation orientationDiv = ParseUtils.parseOrientation(args.get());
1235  final Orientation orientationMod = ParseUtils.parseOrientation(args.get());
1236  final Color color = ParseUtils.parseColor(args.get());
1237  final Font font = definedFonts.lookup(args.get());
1238  final CommandList commandList = args.get().equals("null") ? null : skin.getCommandList(args.getPrev());
1239  final String tooltipPrefix = ParseUtils.parseText(args, lnr);
1240  final GUIDupGauge element = new GUIDupGauge(tooltipManager, elementListener, name, positiveDivImage, positiveModImage, emptyImage, orientationDiv, orientationMod, tooltipPrefix.isEmpty() ? null : tooltipPrefix, color, font, commandList, guiFactory);
1241  insertGuiElement(element);
1242  gaugeUpdater.setGauge(element);
1243  }
1244 
1253  private void parseEvent(@NotNull final Args args, @NotNull final GuiStateManager guiStateManager, @NotNull final CrossfireServerConnection server) throws IOException, JXCSkinException {
1254  final String type = args.get();
1255  switch (type) {
1256  case "connect": {
1257  final CommandList commandList = skin.getCommandList(args.get());
1258  skin.addSkinEvent(new ConnectionStateSkinEvent(commandList, guiStateManager));
1259  break;
1260  }
1261 
1262  case "init":
1263  skin.addInitEvent(skin.getCommandList(args.get()));
1264  break;
1265 
1266  case "login": {
1267  final CommandList commandList = skin.getCommandList(args.get());
1268  skin.addSkinEvent(new PlayerLoginSkinEvent(true, commandList, model.getItemSet()));
1269  break;
1270  }
1271 
1272  case "logout": {
1273  final CommandList commandList = skin.getCommandList(args.get());
1274  skin.addSkinEvent(new PlayerLoginSkinEvent(false, commandList, model.getItemSet()));
1275  break;
1276  }
1277 
1278  case "magicmap": {
1279  final CommandList commandList = skin.getCommandList(args.get());
1280  skin.addSkinEvent(new CrossfireMagicmapSkinEvent(commandList, server));
1281  break;
1282  }
1283 
1284  case "mapscroll": {
1285  final CommandList commandList = skin.getCommandList(args.get());
1287  break;
1288  }
1289 
1290  case "skill":
1291  final String subtype = args.get();
1292  final Skill skill = model.getSkillSet().getNamedSkill(args.get().replace('_', ' '), -1);
1293  final CommandList commandList = skin.getCommandList(args.get());
1294  switch (subtype) {
1295  case "add":
1296  skin.addSkinEvent(new SkillAddedSkinEvent(commandList, skill));
1297  break;
1298 
1299  case "del":
1300  skin.addSkinEvent(new SkillRemovedSkinEvent(commandList, skill));
1301  break;
1302 
1303  default:
1304  throw new IOException("undefined event sub-type: "+subtype);
1305  }
1306  break;
1307 
1308  default:
1309  throw new IOException("undefined event type: "+type);
1310  }
1311  }
1312 
1321  private void parseFill(@NotNull final Args args, @NotNull final TooltipManager tooltipManager, @NotNull final GUIElementListener elementListener) throws IOException, JXCSkinException {
1322  final String name = args.get();
1323  final Color color = ParseUtils.parseColor(args.get());
1324  final float alpha = NumberParser.parseFloat(args.get());
1325  if (alpha < 0 || alpha > 1.0F) {
1326  throw new IOException("invalid alpha value: "+alpha);
1327  }
1328  insertGuiElement(new GUIFill(tooltipManager, elementListener, name, color, alpha, guiFactory));
1329  }
1330 
1337  private void parseFont(@NotNull final Args args) throws IOException, JXCSkinException {
1338  final String name = args.get();
1339  final Font fontNormal = fontParser.getFont(args.get());
1340  final Font font = fontNormal.deriveFont(NumberParser.parseFloat(args.get())*fontScaleFactor);
1341  definedFonts.insert(name, font);
1342  }
1343 
1353  private void parseGauge(@NotNull final Args args, @NotNull final TooltipManager tooltipManager, @NotNull final GUIElementListener elementListener, @NotNull final LineNumberReader lnr) throws IOException, JXCSkinException {
1354  if (dialogFactory == null) {
1355  throw new IOException("missing 'def dialog' command");
1356  }
1357 
1358  final String name = args.get();
1359  final Image positiveImage = args.get().equals("null") ? null : imageParser.getImage(args.getPrev());
1360  final Image positiveLowImage = args.get().equals("null") ? null : imageParser.getImage(args.getPrev());
1361  final Image negativeImage = args.get().equals("null") ? null : imageParser.getImage(args.getPrev());
1362  final Image emptyImage = args.get().equals("null") ? null : imageParser.getImage(args.getPrev());
1363  final GaugeUpdater gaugeUpdater = newGaugeUpdater(args.get());
1364  final Orientation orientation = ParseUtils.parseOrientation(args.get());
1365  final CommandList commandList = args.get().equals("null") ? null : skin.getCommandList(args.getPrev());
1366  final String tooltipFormat = ParseUtils.parseText(args, lnr);
1367  assert dialogFactory != null;
1368  final float alpha = dialogFactory.getFrameAlpha();
1369  final GUIGauge element = new GUIGauge(tooltipManager, elementListener, name, positiveImage, positiveLowImage, negativeImage, emptyImage, orientation, tooltipFormat.isEmpty() ? null : tooltipFormat, alpha, commandList, guiFactory, model.getStats());
1370  insertGuiElement(element);
1371  gaugeUpdater.setGauge(element);
1372  }
1373 
1380  private void parseIgnore(@NotNull final Args args) throws IOException, JXCSkinException {
1381  final String name = args.get();
1382  definedGUIElements.lookup(name).setIgnore();
1383  }
1384 
1399  private void parseList(@NotNull final Args args, final ListType type, @NotNull final TooltipManager tooltipManager, @NotNull final GUIElementListener elementListener, @NotNull final CommandQueue commandQueue, @NotNull final CrossfireServerConnection server, @NotNull final Image nextGroupFace, @NotNull final Image prevGroupFace) throws IOException, JXCSkinException {
1400  if (defaultItemPainter == null) {
1401  throw new IOException("cannot use '"+type+"_list"+"' without 'def item' command");
1402  }
1403 
1404  final String name = args.get();
1405  final int cellWidth = ExpressionParser.parseInt(args.get());
1406  final int cellHeight = ExpressionParser.parseInt(args.get());
1407  final AbstractLabel selectedItem = args.get().equals("null") ? null : guiElementParser.lookupLabelElement(args.getPrev());
1408 
1409  assert defaultItemPainter != null;
1410  final ItemPainter itemPainter = defaultItemPainter.newItemPainter();
1411  final AbstractGUIElement element;
1412  switch (type) {
1413  case INVENTORY:
1414  element = new GUIInventoryList(tooltipManager, elementListener, name, cellWidth, cellHeight, inventoryView, selectedItem, commandQueue, itemPainter, server, facesManager, floorView, guiFactory);
1415  break;
1416 
1417  case GROUND:
1418  element = new GUIFloorList(tooltipManager, elementListener, name, cellWidth, cellHeight, floorView, selectedItem, commandQueue, itemPainter, server, facesManager, model.getItemSet(), nextGroupFace, prevGroupFace, guiFactory);
1419  break;
1420 
1421  case SPELL:
1422  element = new GUISpellList(tooltipManager, elementListener, name, cellWidth, cellHeight, spellView, selectedItem, model.getSpellsManager(), keybindingsManager, commandQueue, itemPainter, facesManager, guiFactory);
1423  break;
1424 
1425  case QUEST:
1426  element = new GUIQuestList(tooltipManager, elementListener, name, cellWidth, cellHeight, questView, selectedItem, model.getQuestsManager(), commandQueue, itemPainter, facesManager, guiFactory);
1427  break;
1428 
1429  case SPELL_SKILLS:
1431  element = new GUISpellSkillList(tooltipManager, elementListener, name, cellWidth, cellHeight, spellSkillsView, selectedItem, model.getSpellsManager(), itemPainter, facesManager, defaultSkillIcon, guiFactory);
1432  break;
1433 
1434  case KNOWLEDGE_TYPES:
1435  element = new GUIKnowledgeTypeList(tooltipManager, elementListener, name, cellWidth, cellHeight, knowledgeTypeView, selectedItem, model.getKnowledgeManager(), itemPainter, facesManager, guiFactory);
1436  break;
1437 
1438  case KNOWLEDGE_LIST:
1439  element = new GUIKnowledgeList(tooltipManager, elementListener, name, cellWidth, cellHeight, knowledgeView, selectedItem, itemPainter, facesManager, model.getKnowledgeManager(), commandQueue, guiFactory);
1440  break;
1441 
1442  default:
1443  throw new AssertionError("unhandled type "+type);
1444  }
1445  insertGuiElement(element);
1446  }
1447 
1457  private void parseHorizontal(@NotNull final Args args, @NotNull final Container gui, @NotNull final LineNumberReader lnr, final boolean isDialog) throws IOException, JXCSkinException {
1458  final GroupLayout layout = (GroupLayout)gui.getLayout();
1459  final String begin = args.get();
1460  if (!begin.equals("begin")) {
1461  throw new IOException("syntax error: expecting 'begin'");
1462  }
1463  final Collection<GUIElement> unreferencedElements = new TreeSet<>(ELEMENT_COMPARATOR);
1464  for (GUIElement element : definedGUIElements) {
1465  unreferencedElements.add(element);
1466  }
1467  if (!isDialog) {
1468  final Group content = parseBegin(args, layout, lnr, unreferencedElements, true);
1469  if (!unreferencedElements.isEmpty()) {
1470  throw new IOException("layout doesn't define elements "+unreferencedElements);
1471  }
1472  layout.setHorizontalGroup(content);
1473  return;
1474  }
1475  final AbstractGUIElement background = getUnreferencedElement("dialog_background", unreferencedElements);
1476  if (background == null) {
1477  throw new AssertionError("element 'dialog_background' is missing");
1478  }
1479  final Group content = parseBegin(args, layout, lnr, unreferencedElements, true);
1480  final Component title = getUnreferencedElement("dialog_title", unreferencedElements);
1481  final Component close = getUnreferencedElement("dialog_close", unreferencedElements);
1482  final Component help = getUnreferencedElement("dialog_help", unreferencedElements);
1483  final Group group2 = layout.createSequentialGroup();
1484  group2.addGap(background.getDialogBorderLeft());
1485  if (title == null) {
1486  if (help == null) {
1487  if (close == null) {
1488  // no title, no help, no close
1489  group2.addGroup(content);
1490  } else {
1491  // no title, no help, close
1492  final Group group3 = layout.createSequentialGroup();
1493  group3.addGap(0, 10, Short.MAX_VALUE);
1494  group3.addComponent(close);
1495  final Group group4 = layout.createParallelGroup();
1496  group4.addGroup(group3);
1497  group4.addGroup(content);
1498  group2.addGroup(group4);
1499  }
1500  } else {
1501  if (close == null) {
1502  // no title, help, no close
1503  final Group group3 = layout.createSequentialGroup();
1504  group3.addGap(0, 10, Short.MAX_VALUE);
1505  group3.addComponent(help);
1506  final Group group4 = layout.createParallelGroup();
1507  group4.addGroup(group3);
1508  group4.addGroup(content);
1509  group2.addGroup(group4);
1510  } else {
1511  // no title, help, close
1512  final Group group3 = layout.createSequentialGroup();
1513  group3.addGap(0, 10, Short.MAX_VALUE);
1514  group3.addComponent(help);
1515  group3.addComponent(close);
1516  final Group group4 = layout.createParallelGroup();
1517  group4.addGroup(group3);
1518  group4.addGroup(content);
1519  group2.addGroup(group4);
1520  }
1521  }
1522  } else {
1523  if (help == null) {
1524  if (close == null) {
1525  // title, no help, no close
1526  final Group group3 = layout.createParallelGroup();
1527  group3.addComponent(title);
1528  group3.addGroup(content);
1529  group2.addGroup(group3);
1530  } else {
1531  // title, no help, close
1532  final Group group3 = layout.createSequentialGroup();
1533  group3.addComponent(title);
1534  group3.addComponent(close);
1535  final Group group4 = layout.createParallelGroup();
1536  group4.addGroup(group3);
1537  group4.addGroup(content);
1538  group2.addGroup(group4);
1539  }
1540  } else {
1541  if (close == null) {
1542  // title, help, no close
1543  final Group group3 = layout.createSequentialGroup();
1544  group3.addComponent(title);
1545  group3.addComponent(help);
1546  final Group group4 = layout.createParallelGroup();
1547  group4.addGroup(group3);
1548  group4.addGroup(content);
1549  group2.addGroup(group4);
1550  } else {
1551  // title, help, close
1552  final Group group3 = layout.createSequentialGroup();
1553  group3.addComponent(title);
1554  group3.addComponent(help);
1555  group3.addComponent(close);
1556  final Group group4 = layout.createParallelGroup();
1557  group4.addGroup(group3);
1558  group4.addGroup(content);
1559  group2.addGroup(group4);
1560  }
1561  }
1562  }
1563  group2.addGap(background.getDialogBorderRight());
1564  if (!unreferencedElements.isEmpty()) {
1565  throw new IOException("layout doesn't define elements "+unreferencedElements);
1566  }
1567 
1568  final Group group1 = layout.createParallelGroup();
1569  group1.addGroup(group2);
1570  group1.addComponent(background);
1571 
1572  layout.setHorizontalGroup(group1);
1573  }
1574 
1581  @Nullable
1582  private AbstractGUIElement getUnreferencedElement(@NotNull final String name, @NotNull final Collection<GUIElement> unreferencedElements) {
1583  final AbstractGUIElement component = definedGUIElements.lookupOptional(name);
1584  if (component == null) {
1585  return null;
1586  }
1587 
1588  return unreferencedElements.remove(component) ? component : null;
1589  }
1590 
1605  private void parseItem(@NotNull final Args args, @NotNull final TooltipManager tooltipManager, @NotNull final GUIElementListener elementListener, @NotNull final CommandQueue commandQueue, @NotNull final CommandExecutor commandExecutor, @NotNull final CrossfireServerConnection server, @NotNull final Shortcuts shortcuts, @NotNull final Image nextGroupFace, @NotNull final Image prevGroupFace) throws IOException, JXCSkinException {
1606  final String type = args.get();
1607  final String name = args.get();
1608  final AbstractGUIElement element;
1609  switch (type) {
1610  case "floor": {
1611  final int index = ExpressionParser.parseInt(args.get());
1612  if (defaultItemPainter == null) {
1613  throw new IOException("cannot use 'item floor' without 'def item' command");
1614  }
1615 
1616  final ItemPainter itemPainter = defaultItemPainter.newItemPainter();
1617  element = new GUIItemFloor(tooltipManager, elementListener, commandQueue, name, itemPainter, index, server, floorView, model.getItemSet(), facesManager, nextGroupFace, prevGroupFace, 0, guiFactory);
1618  break;
1619  }
1620 
1621  case "inventory": {
1622  final int index = ExpressionParser.parseInt(args.get());
1623  if (defaultItemPainter == null) {
1624  throw new IOException("cannot use 'item inventory' without 'def item' command");
1625  }
1626 
1627  final ItemPainter itemPainter = defaultItemPainter.newItemPainter();
1628  element = new GUIItemInventory(tooltipManager, elementListener, commandQueue, name, itemPainter, index, server, facesManager, floorView, inventoryView, 0, guiFactory);
1629  break;
1630  }
1631 
1632  case "shortcut":
1633  final ShortcutSlot shortcutSlot = parseShortcutSlot(args.get());
1634  final Color activateColor = ParseUtils.parseColorNull(args.get());
1635  final Image activateImage = imageParser.getImage(activateColor, args.getPrev());
1636  final Color immediateColor = ParseUtils.parseColorNull(args.get());
1637  final Image immediateImage = imageParser.getImage(immediateColor, args.getPrev());
1638  final Font font = definedFonts.lookup(args.get());
1639  element = new GUIItemShortcut(tooltipManager, elementListener, name, activateColor, activateImage, immediateColor, immediateImage, shortcutSlot, facesManager, commandExecutor, shortcuts, font, guiFactory);
1640  break;
1641 
1642  case "spelllist":
1643  final int index = ExpressionParser.parseInt(args.get());
1644  if (defaultItemPainter == null) {
1645  throw new IOException("cannot use 'item spelllist' without 'def item' command");
1646  }
1647 
1648  final ItemPainter itemPainter = defaultItemPainter.newItemPainter();
1649  element = new GUIItemSpell(tooltipManager, elementListener, commandQueue, name, itemPainter, index, facesManager, model.getSpellsManager(), spellView, 0, guiFactory);
1650  break;
1651 
1652  default:
1653  throw new IOException("undefined item type: "+type);
1654  }
1655  insertGuiElement(element);
1656  }
1657 
1665  private void parseKey(@NotNull final Args args, @Nullable final Gui gui, @NotNull final String line) throws IOException {
1666  final KeyBindings keyBindings = gui == null ? skin.getDefaultKeyBindings() : gui.getKeyBindings();
1667  try {
1668  keyBindings.parseKeyBinding(line.substring(4).trim(), true);
1669  } catch (final InvalidKeyBindingException ex) {
1670  throw new IOException("invalid key binding: "+ex.getMessage(), ex);
1671  }
1672 
1673  // consume all arguments to prevent syntax error
1674  while (args.hasMore()) {
1675  args.get();
1676  }
1677  }
1678 
1688  private void parseLabelHtml(@NotNull final Args args, @NotNull final TooltipManager tooltipManager, @NotNull final GUIElementListener elementListener, @NotNull final LineNumberReader lnr) throws IOException, JXCSkinException {
1689  final String name = args.get();
1690  final Font font = definedFonts.lookup(args.get());
1691  final Color color = ParseUtils.parseColor(args.get());
1692  final String text = ParseUtils.parseText(args, lnr);
1693  insertGuiElement(new GUIHTMLLabel(tooltipManager, elementListener, name, null, font, color, null, text, guiFactory));
1694  }
1695 
1705  private void parseLabelMulti(@NotNull final Args args, @NotNull final TooltipManager tooltipManager, @NotNull final GUIElementListener elementListener, @NotNull final LineNumberReader lnr) throws IOException, JXCSkinException {
1706  final String name = args.get();
1707  final Font font = definedFonts.lookup(args.get());
1708  final Color color = ParseUtils.parseColor(args.get());
1709  final String text = ParseUtils.parseText(args, lnr);
1710  insertGuiElement(new GUIMultiLineLabel(tooltipManager, elementListener, name, null, font, color, null, Alignment.LEFT, text, guiFactory));
1711  }
1712 
1722  private void parseLabelQuery(@NotNull final Args args, @NotNull final TooltipManager tooltipManager, @NotNull final GUIElementListener elementListener, @NotNull final CrossfireServerConnection server) throws IOException, JXCSkinException {
1723  final String name = args.get();
1724  final Font font = definedFonts.lookup(args.get());
1725  final Color color = ParseUtils.parseColor(args.get());
1726  insertGuiElement(new GUILabelQuery(tooltipManager, elementListener, name, server, font, color, null, guiFactory));
1727  }
1728 
1739  private void parseLabelMessage(@NotNull final Args args, @NotNull final TooltipManager tooltipManager, @NotNull final GUIElementListener elementListener, @NotNull final CrossfireServerConnection server, @NotNull final JXCWindowRenderer windowRenderer) throws IOException, JXCSkinException {
1740  final String name = args.get();
1741  final Font font = definedFonts.lookup(args.get());
1742  final Color color = ParseUtils.parseColor(args.get());
1743  insertGuiElement(new GUILabelMessage(tooltipManager, elementListener, name, server, windowRenderer, font, color, null, guiFactory));
1744  }
1745 
1755  private void parseLabelFailure(@NotNull final Args args, @NotNull final TooltipManager tooltipManager, @NotNull final GUIElementListener elementListener, @NotNull final CrossfireServerConnection server) throws IOException, JXCSkinException {
1756  final String name = args.get();
1757  final Font font = definedFonts.lookup(args.get());
1758  final Color color = ParseUtils.parseColor(args.get());
1759  insertGuiElement(new GUILabelFailure(tooltipManager, elementListener, name, server, font, color, null, guiFactory));
1760  }
1761 
1771  private void parseLabelText(@NotNull final Args args, @NotNull final TooltipManager tooltipManager, @NotNull final GUIElementListener elementListener, @NotNull final LineNumberReader lnr) throws IOException, JXCSkinException {
1772  final String name = args.get();
1773  final Font font = definedFonts.lookup(args.get());
1774  final Color color = ParseUtils.parseColor(args.get());
1775  final String text = ParseUtils.parseText(args, lnr);
1776  insertGuiElement(new GUIOneLineLabel(tooltipManager, elementListener, name, null, font, color, color, null, Alignment.LEFT, text, guiFactory));
1777  }
1778 
1787  private void parseLabelStat(@NotNull final Args args, @NotNull final TooltipManager tooltipManager, @NotNull final GUIElementListener elementListener) throws IOException, JXCSkinException {
1788  final String name = args.get();
1789  final Font textFont = definedFonts.lookup(args.get());
1790  final Color textColor = ParseUtils.parseColor(args.get());
1791  final Color textHighlightColor = ParseUtils.parseColor(args.get());
1792  final int stat = ParseUtils.parseStat(args.get());
1793  final Alignment alignment = NumberParser.parseEnum(Alignment.class, args.get(), "text alignment");
1794  final Color backgroundColor = args.hasMore() ? ParseUtils.parseColor(args.get()) : null;
1795  insertGuiElement(new GUILabelStats(tooltipManager, elementListener, name, textFont, textColor, textHighlightColor, backgroundColor, stat, alignment, model.getStats(), guiFactory));
1796  }
1797 
1806  private void parseLabelStat2(@NotNull final Args args, @NotNull final TooltipManager tooltipManager, @NotNull final GUIElementListener elementListener) throws IOException, JXCSkinException {
1807  final String name = args.get();
1808  final Font font = definedFonts.lookup(args.get());
1809  final Color colorNormal = ParseUtils.parseColor(args.get());
1810  final Color colorUpgradable = ParseUtils.parseColor(args.get());
1811  final Color colorDepleted = ParseUtils.parseColor(args.get());
1812  final Color colorBoosted = ParseUtils.parseColor(args.get());
1813  final Color colorBoostedUpgradable = ParseUtils.parseColor(args.get());
1814  final int statCurrent = ParseUtils.parseStat(args.get());
1815  final int statBase = ParseUtils.parseStat(args.get());
1816  final int statRace = ParseUtils.parseStat(args.get());
1817  final int statApplied = ParseUtils.parseStat(args.get());
1818  final Alignment alignment = NumberParser.parseEnum(Alignment.class, args.get(), "text alignment");
1819  insertGuiElement(new GUILabelStats2(tooltipManager, elementListener, name, font, colorNormal, colorUpgradable, colorDepleted, colorBoosted, colorBoostedUpgradable, null, statCurrent, statBase, statRace, statApplied, alignment, model.getStats(), guiFactory));
1820  }
1821 
1831  private void parseLabelNewchar(@NotNull final Args args, @NotNull final TooltipManager tooltipManager, @NotNull final GUIElementListener elementListener, @NotNull final CrossfireServerConnection server) throws IOException, JXCSkinException {
1832  final String name = args.get();
1833  final NewcharStat stat = NumberParser.parseEnum(NewcharStat.class, args.get(), "label stat");
1834  final NewcharType type = NumberParser.parseEnum(NewcharType.class, args.get(), "label type");
1835  final Font font = definedFonts.lookup(args.get());
1836  final Font fontError = definedFonts.lookup(args.get());
1837  final Color color = ParseUtils.parseColor(args.get());
1838  final Color colorError = ParseUtils.parseColor(args.get());
1839  insertGuiElement(new GUINewcharLabel(tooltipManager, elementListener, name, server, font, fontError, stat, type, newCharModel, color, colorError, guiFactory));
1840  }
1841 
1850  private void parseLabelSoundsCredits(@NotNull final Args args, @NotNull final TooltipManager tooltipManager, @NotNull final GUIElementListener elementListener) throws IOException, JXCSkinException {
1851  final String name = args.get();
1852  final Font font = definedFonts.lookup(args.get());
1853  final Color color = ParseUtils.parseColor(args.get());
1854  insertGuiElement(new GUIMultiLineLabel(tooltipManager, elementListener, name, null, font, color, null, Alignment.LEFT, soundsCredits, guiFactory));
1855  }
1856 
1864  private void parseLinkSize(@NotNull final Args args, @NotNull final Container gui) throws IOException, JXCSkinException {
1865  final String type = args.get();
1866  final List<Component> elements = new ArrayList<>();
1867  while (args.hasMore()) {
1868  elements.add(definedGUIElements.lookup(args.get()));
1869  }
1870  if (elements.size() < 2) {
1871  throw new IOException("'link_size' needs at least two gui elements");
1872  }
1873  final Component[] array = elements.toArray(new Component[elements.size()]);
1874  final GroupLayout layout = (GroupLayout)gui.getLayout();
1875  switch (type) {
1876  case "horizontal":
1877  layout.linkSize(SwingConstants.HORIZONTAL, array);
1878  break;
1879 
1880  case "vertical":
1881  layout.linkSize(SwingConstants.VERTICAL, array);
1882  break;
1883 
1884  case "both":
1885  layout.linkSize(SwingConstants.HORIZONTAL, array);
1886  layout.linkSize(SwingConstants.VERTICAL, array);
1887  break;
1888 
1889  default:
1890  throw new IOException("undefined type '"+type+"'");
1891  }
1892  }
1893 
1902  private void parseLogLabel(@NotNull final Args args, @NotNull final TooltipManager tooltipManager, @NotNull final GUIElementListener elementListener) throws IOException, JXCSkinException {
1903  final String name = args.get();
1904  final Image backgroundImage = args.get().equals("null") ? null : imageParser.getImage(args.getPrev());
1905  final Font fontPrint = definedFonts.lookup(args.get());
1906  final Font fontFixed = definedFonts.lookup(args.get());
1907  final Font fontFixedBold = definedFonts.lookup(args.get());
1908  final Font fontArcane = definedFonts.lookup(args.get());
1909  final Color defaultColor = ParseUtils.parseColor(args.get());
1910  final Color selectionColor = ParseUtils.parseColor(args.get());
1911  final Fonts fonts = new Fonts(fontPrint, fontFixed, fontFixedBold, fontArcane);
1912  insertGuiElement(new GUILabelLog(tooltipManager, elementListener, name, backgroundImage, fonts, defaultColor, selectionColor, guiFactory));
1913  }
1914 
1924  private void parseLogMessage(@NotNull final Args args, @NotNull final TooltipManager tooltipManager, @NotNull final GUIElementListener elementListener, @NotNull final CrossfireServerConnection server) throws IOException, JXCSkinException {
1925  final String name = args.get();
1926  final Image backgroundImage = args.get().equals("null") ? null : imageParser.getImage(args.getPrev());
1927  final Font fontPrint = definedFonts.lookup(args.get());
1928  final Font fontFixed = definedFonts.lookup(args.get());
1929  final Font fontFixedBold = definedFonts.lookup(args.get());
1930  final Font fontArcane = definedFonts.lookup(args.get());
1931  final Color defaultColor = ParseUtils.parseColor(args.get());
1932  final Color selectionColor = ParseUtils.parseColor(args.get());
1933  final Fonts fonts = new Fonts(fontPrint, fontFixed, fontFixedBold, fontArcane);
1934  insertGuiElement(new GUIMessageLog(tooltipManager, elementListener, name, server, backgroundImage, fonts, defaultColor, selectionColor, guiFactory));
1935  }
1936 
1943  private void parseLogColor(@NotNull final Args args) throws IOException, JXCSkinException {
1944  final String name = args.get();
1945  final int index = ExpressionParser.parseInt(args.get());
1946  final Color color = ParseUtils.parseColor(args.get());
1947  final Object element = definedGUIElements.lookup(name);
1948  if (!(element instanceof GUIMessageLog)) {
1949  throw new IOException("element '"+name+"' is not of type 'log'");
1950  }
1951  if (index < 0 || index >= MessageBufferUpdater.NUM_COLORS) {
1952  throw new IOException("invalid color index "+index);
1953  }
1954  ((GUIMessageLog)element).setColor(index, color);
1955  }
1956 
1963  private void parseLogFilter(@NotNull final Args args) throws IOException, JXCSkinException {
1964  final String name = args.get();
1965  final String type = args.get();
1966  final boolean add;
1967  switch (type) {
1968  case "only":
1969  add = true;
1970  break;
1971 
1972  case "not":
1973  add = false;
1974  break;
1975 
1976  default:
1977  throw new IOException("type '"+type+"' is invalid");
1978  }
1979  final MessageTypesBuilder builder = new MessageTypesBuilder(add);
1980  do {
1981  try {
1982  builder.addType(args.get());
1983  } catch (final UnknownMessageTypeException ex) {
1984  throw new IOException(ex);
1985  }
1986  } while (args.hasMore());
1987  final Object element = definedGUIElements.lookup(name);
1988  if (!(element instanceof GUIMessageLog)) {
1989  throw new IOException("element '"+name+"' is not of type 'log'");
1990  }
1991  ((GUIMessageLog)element).setTypes(builder.build());
1992  }
1993 
2002  private void parseMinimap(@NotNull final Args args, @NotNull final TooltipManager tooltipManager, @NotNull final GUIElementListener elementListener) throws IOException, JXCSkinException {
2003  final String name = args.get();
2004  final int w = ExpressionParser.parseInt(args.get());
2005  final int h = ExpressionParser.parseInt(args.get());
2006  final FacesProvider facesProvider = facesProviderFactory.getFacesProvider(4);
2007  if (facesProvider == null) {
2008  throw new IOException("cannot create faces with size 4");
2009  }
2010  insertGuiElement(new GUIMiniMap(avoidCopyArea, tooltipManager, elementListener, name, mapUpdaterState, facesProvider, darknessColors, w, h, guiFactory));
2011  }
2012 
2023  private void parseMap(@NotNull final Args args, @NotNull final TooltipManager tooltipManager, @NotNull final GUIElementListener elementListener, @NotNull final CrossfireServerConnection server, @NotNull final SmoothFaces smoothFaces) throws IOException, JXCSkinException {
2024  final String name = args.get();
2026  if (facesProvider == null) {
2027  throw new IOException("cannot create faces with size "+defaultTileSize);
2028  }
2029  insertGuiElement(new GUIMap(avoidCopyArea, tooltipManager, elementListener, name, mapUpdaterState, facesProvider, server, smoothFaces, darknessColors, guiFactory));
2030  }
2031 
2041  private void parseMapDirections(@NotNull final Args args, @NotNull final TooltipManager tooltipManager, @NotNull final GUIElementListener elementListener, @NotNull final SmoothFaces smoothFaces) throws IOException, JXCSkinException {
2042  final String name = args.get();
2044  if (facesProvider == null) {
2045  throw new IOException("cannot create faces with size "+defaultTileSize);
2046  }
2047  insertGuiElement(new GUIMapDirections(tooltipManager, elementListener, name, facesProvider, pendingDirections, guiFactory));
2048  }
2049 
2059  private void parseMetaList(@NotNull final Args args, @NotNull final TooltipManager tooltipManager, @NotNull final GUIElementListener elementListener, @NotNull final MetaserverModel metaserverModel) throws IOException, JXCSkinException {
2060  final String name = args.get();
2061  final int cellWidth = ExpressionParser.parseInt(args.get()); // XXX: should be derived from list's size
2062  final int cellHeight = (int)(ExpressionParser.parseInt(args.get())*fontScaleFactor+0.0F); // XXX: should be derived from list's size
2063  final Image image = args.get().equals("null") ? null : imageParser.getImage(args.getPrev());
2064  final Font font = definedFonts.lookup(args.get());
2065  final GUIText text = args.get().equals("null") ? null : guiElementParser.lookupTextElement(args.getPrev());
2066  final AbstractLabel label = args.get().equals("null") ? null : guiElementParser.lookupLabelElement(args.getPrev());
2067  final CommandList connectCommandList = skin.getCommandList(args.get());
2068  final String format = args.get();
2069  final String tooltip = args.get();
2070  insertGuiElement(new GUIMetaElementList(tooltipManager, elementListener, name, cellWidth, cellHeight, metaserverModel, image, font, format, tooltip, text, label, connectCommandList, guiFactory));
2071  }
2072 
2084  private void parsePicture(@NotNull final Args args, @NotNull final TooltipManager tooltipManager, @NotNull final GUIElementListener elementListener, @NotNull final LineNumberReader lnr, @NotNull final Gui gui, final boolean scaled) throws IOException, JXCSkinException {
2085  final String name = args.get();
2086  final BufferedImage image = scaled ? scaleImage(imageParser.getImage(args.get())) : imageParser.getImage(args.get());
2087  final float alpha = NumberParser.parseFloat(args.get());
2088  if (alpha < 0 || alpha > 1.0F) {
2089  throw new IOException("invalid alpha value: "+alpha);
2090  }
2091  final String text = ParseUtils.parseText(args, lnr).replaceAll("\n", "<br>");
2092  final GUIPicture picture = new GUIPicture(tooltipManager, elementListener, name, image, alpha, image.getWidth(), image.getHeight(), guiFactory, text);
2093  insertGuiElement(picture);
2094  if (name.equals("dialog_help")) {
2095  gui.setHelp(picture);
2096  }
2097  }
2098 
2108  private void parsePictureStat(@NotNull final Args args, @NotNull final TooltipManager tooltipManager, @NotNull final GUIElementListener elementListener, @NotNull final LineNumberReader lnr) throws IOException, JXCSkinException {
2109  final String name = args.get();
2110  final int stat = ParseUtils.parseStat(args.get());
2111  final BufferedImage imageInactive = args.get().equals("null") ? null : imageParser.getImage(args.getPrev());
2112  final BufferedImage imageActive = args.get().equals("null") ? null : imageParser.getImage(args.getPrev());
2113  if (imageInactive == null && imageActive == null) {
2114  throw new IOException("picture is never visible");
2115  }
2116  final String text = ParseUtils.parseText(args, lnr).replaceAll("\n", "<br>");
2117  final int preferredWidth;
2118  final int preferredHeight;
2119  if (imageInactive == null) {
2120  preferredWidth = imageActive.getWidth();
2121  preferredHeight = imageActive.getHeight();
2122  } else if (imageActive == null) {
2123  preferredWidth = imageInactive.getWidth();
2124  preferredHeight = imageInactive.getHeight();
2125  } else {
2126  preferredWidth = imageInactive.getWidth();
2127  preferredHeight = imageInactive.getHeight();
2128  if (preferredWidth != imageActive.getWidth() || preferredHeight != imageActive.getHeight()) {
2129  throw new IOException("pictures do not have the same size");
2130  }
2131  }
2132  insertGuiElement(new GUIPictureStat(tooltipManager, elementListener, name, stat, imageInactive, imageActive, preferredWidth, preferredHeight, model.getStats(), guiFactory, text));
2133  }
2134 
2145  private void parseQueryText(@NotNull final Args args, @NotNull final CrossfireServerConnection server, @NotNull final CommandCallback commandCallback, @NotNull final TooltipManager tooltipManager, @NotNull final GUIElementListener elementListener) throws IOException, JXCSkinException {
2146  final String name = args.get();
2147  final Image activeImage = imageParser.getImage(args.get());
2148  final Image inactiveImage = imageParser.getImage(args.get());
2149  final Font font = definedFonts.lookup(args.get());
2150  final Color inactiveColor = ParseUtils.parseColor(args.get());
2151  final Color activeColor = ParseUtils.parseColor(args.get());
2152  final int margin = ExpressionParser.parseInt(args.get());
2153  final boolean enableHistory = NumberParser.parseBoolean(args.get());
2154  final CommandHistory commandHistory = enableHistory ? commandHistoryFactory.getCommandHistory(name) : null;
2155  insertGuiElement(new GUIQueryText(server, commandHistory, commandCallback, tooltipManager, elementListener, name, newCharModel, activeImage, inactiveImage, font, inactiveColor, activeColor, margin, "", guiFactory));
2156  }
2157 
2165  private void parseSetForcedActive(@NotNull final Args args, @NotNull final Gui gui) throws IOException, JXCSkinException {
2166  final Object forcedActive = definedGUIElements.lookup(args.get());
2167  if (!(forcedActive instanceof ActivatableGUIElement)) {
2168  throw new IOException("argument to set_forced_active must be an activatable gui element");
2169  }
2170  gui.setForcedActive((ActivatableGUIElement)forcedActive);
2171  }
2172 
2179  private static void parseSetAutoSize(@NotNull final Gui gui, @NotNull final Args args) throws IOException {
2180  final Expression x = ExpressionParser.parseExpression(args.get());
2181  final Expression y = ExpressionParser.parseExpression(args.get());
2182  final Expression w = ExpressionParser.parseExpression(args.get());
2183  final Expression h = ExpressionParser.parseExpression(args.get());
2184  gui.setAutoSize(new Extent(x, y, w, h));
2185  }
2186 
2193  private void parseSetDefault(@NotNull final Args args) throws IOException, JXCSkinException {
2194  definedGUIElements.lookup(args.get()).setDefault(true);
2195  }
2196 
2203  private void parseSetInvisible(@NotNull final Args args) throws IOException, JXCSkinException {
2204  definedGUIElements.lookup(args.get()).setVisible(false);
2205  }
2206 
2213  private void parseHideInput(@NotNull final Args args) throws IOException, JXCSkinException {
2214  final GUIText element;
2215  try {
2216  element = (GUIText)definedGUIElements.lookup(args.get());
2217  } catch (final JXCSkinException ignored) {
2218  throw new JXCSkinException("can't use hide_input on a non text field "+args.getPrev());
2219  }
2220  element.setHideInput(true);
2221  }
2222 
2230  private void parseFocus(@NotNull final Args args, @NotNull final LineNumberReader lnr) throws IOException, JXCSkinException {
2231  if (!focusOrder.isEmpty()) {
2232  throw new IOException("focus must not be used more than once");
2233  }
2234 
2235  final String begin = args.get();
2236  if (!begin.equals("begin")) {
2237  throw new IOException("syntax error: expecting 'begin'");
2238  }
2239 
2240  final Collection<ActivatableGUIElement> tmp = new TreeSet<>(ELEMENT_COMPARATOR);
2241  while (true) {
2242  final String line = lnr.readLine();
2243  if (line == null) {
2244  throw new IOException("unterminated 'begin' block");
2245  }
2246 
2247  if (line.startsWith("#") || line.isEmpty()) {
2248  continue;
2249  }
2250 
2251  final String[] argsTmp;
2252  try {
2253  argsTmp = StringUtils.splitFields(line);
2254  } catch (final UnterminatedTokenException ex) {
2255  throw new JXCSkinException(ex.getMessage(), ex);
2256  }
2257  final Args args2 = new Args(argsTmp);
2258  final String cmd = args2.get();
2259  if (cmd.equals("end")) {
2260  if (args2.hasMore()) {
2261  throw new IOException("excess arguments");
2262  }
2263  break;
2264  }
2265 
2266  final AbstractGUIElement element;
2267  try {
2268  element = definedGUIElements.lookup(cmd);
2269  } catch (final JXCSkinException ignored) {
2270  throw new JXCSkinException("can't use hide_input on a non text field "+cmd);
2271  }
2272 
2273  if (args2.hasMore()) {
2274  throw new IOException("excess arguments");
2275  }
2276 
2277  if (!(element instanceof ActivatableGUIElement)) {
2278  throw new IOException("not an activatable element: "+element);
2279  }
2280  if (!tmp.add((ActivatableGUIElement)element)) {
2281  throw new IOException("duplicate element: "+element);
2282  }
2283  focusOrder.add((ActivatableGUIElement)element);
2284  }
2285  if (tmp.isEmpty()) {
2286  throw new IOException("focus block must not be empty");
2287  }
2288  }
2289 
2294  private static void parseSetModal(@NotNull final Gui gui) {
2295  gui.setModal(true);
2296  }
2297 
2302  private static void parseSetUserResizable(@NotNull final Gui gui) {
2303  gui.setUserResizable(true);
2304  }
2305 
2314  private void parseScrollbar(@NotNull final Args args, @NotNull final TooltipManager tooltipManager, @NotNull final GUIElementListener elementListener) throws IOException, JXCSkinException {
2315  final String name = args.get();
2316  final boolean proportionalSlider = NumberParser.parseBoolean(args.get());
2317  final Object element = definedGUIElements.lookup(args.get());
2318  final Color colorBackground = ParseUtils.parseColor(args.get());
2319  final Color colorForeground = ParseUtils.parseColor(args.get());
2320  if (!(element instanceof GUIScrollable2)) {
2321  throw new IOException("'"+element+"' is not a scrollable element");
2322  }
2323  insertGuiElement(new GUIScrollBar(tooltipManager, elementListener, name, proportionalSlider, (GUIScrollable2)element, colorBackground, colorForeground, guiFactory));
2324  }
2325 
2331  private void parseSkinName(@NotNull final Args args) throws IOException {
2332  final String newSkinName = args.get();
2333  final Resolution minResolution = parseResolution(args.get());
2334  final Resolution maxResolution = parseResolution(args.get());
2335  if (!newSkinName.matches("[-a-z_0-9]+")) {
2336  throw new IOException("invalid skin_name: "+newSkinName);
2337  }
2338  if (minResolution.getWidth() > maxResolution.getWidth() || minResolution.getHeight() > maxResolution.getHeight()) {
2339  throw new IOException("minimum resolution ("+minResolution+") must not exceed maximum resolution ("+maxResolution+")");
2340  }
2341 
2342  skin.setSkinName(newSkinName, minResolution, maxResolution);
2343  }
2344 
2354  private void parseText(@NotNull final Args args, @NotNull final CommandCallback commandCallback, @NotNull final TooltipManager tooltipManager, @NotNull final GUIElementListener elementListener) throws IOException, JXCSkinException {
2355  final String name = args.get();
2356  final Image activeImage = scaleImage(imageParser.getImage(args.get()));
2357  final Image inactiveImage = scaleImage(imageParser.getImage(args.get()));
2358  final Font font = definedFonts.lookup(args.get());
2359  final Color activeColor = ParseUtils.parseColor(args.get());
2360  final Color inactiveColor = ParseUtils.parseColor(args.get());
2361  final int margin = ExpressionParser.parseInt(args.get());
2362  final CommandList commandList = skin.getCommandList(args.get());
2363  final boolean enableHistory = NumberParser.parseBoolean(args.get());
2364  final CommandHistory commandHistory = enableHistory ? commandHistoryFactory.getCommandHistory(name) : null;
2365  insertGuiElement(new GUITextField(commandCallback, commandHistory, tooltipManager, elementListener, name, newCharModel, activeImage, inactiveImage, font, inactiveColor, activeColor, margin, "", commandList, guiFactory));
2366  }
2367 
2377  private void parseTextButton(@NotNull final Args args, @NotNull final TooltipManager tooltipManager, @NotNull final GUIElementListener elementListener, @NotNull final LineNumberReader lnr) throws IOException, JXCSkinException {
2378  if (textButtonFactory == null) {
2379  throw new IOException("missing 'def textbutton' command");
2380  }
2381 
2382  final String name = args.get();
2383  final boolean autoRepeat = NumberParser.parseBoolean(args.get());
2384  final CommandList commandList = skin.getCommandList(args.get());
2385  final String text = ParseUtils.parseText(args, lnr);
2386  assert textButtonFactory != null;
2387  insertGuiElement(textButtonFactory.newTextButton(tooltipManager, elementListener, name, text, autoRepeat, commandList));
2388  }
2389 
2399  private void parseTextGauge(@NotNull final Args args, @NotNull final TooltipManager tooltipManager, @NotNull final GUIElementListener elementListener, @NotNull final LineNumberReader lnr) throws IOException, JXCSkinException {
2400  if (dialogFactory == null) {
2401  throw new IOException("missing 'def dialog' command");
2402  }
2403 
2404  final String name = args.get();
2405  final Image positiveImage = scaleImage(imageParser.getImage(args.get()));
2406  final Image positiveLowImage = scaleImage(imageParser.getImage(args.get()));
2407  final Image negativeImage = args.get().equals("null") ? null : scaleImage(imageParser.getImage(args.getPrev()));
2408  final Image emptyImage = scaleImage(imageParser.getImage(args.get()));
2409  final GaugeUpdater gaugeUpdater = newGaugeUpdater(args.get());
2410  final Orientation orientation = ParseUtils.parseOrientation(args.get());
2411  final Color color = ParseUtils.parseColor(args.get());
2412  final Font font = definedFonts.lookup(args.get());
2413  final CommandList commandList = args.get().equals("null") ? null : skin.getCommandList(args.getPrev());
2414  final String tooltipFormat = ParseUtils.parseText(args, lnr);
2415  assert dialogFactory != null;
2416  final float alpha = dialogFactory.getFrameAlpha();
2417  final GUITextGauge element = new GUITextGauge(tooltipManager, elementListener, name, positiveImage, positiveLowImage, negativeImage, emptyImage, orientation, tooltipFormat.isEmpty() ? null : tooltipFormat, color, font, alpha, commandList, guiFactory, model.getStats());
2418  insertGuiElement(element);
2419  gaugeUpdater.setGauge(element);
2420  }
2421 
2430  private void parseTooltip(@NotNull final Args args, @NotNull final TooltipManager tooltipManager, @NotNull final GUIElementListener elementListener) throws IOException, JXCSkinException {
2431  final Font font = definedFonts.lookup(args.get());
2432  final GUIHTMLLabel tooltipLabel = new GUIHTMLLabel(tooltipManager, elementListener, "tooltip", null, font, Color.BLACK, Color.WHITE, "", guiFactory);
2433  tooltipLabel.setAutoResize(true);
2434  skin.setTooltipLabel(tooltipLabel);
2435  }
2436 
2446  private void parseVertical(@NotNull final Args args, @NotNull final Container gui, @NotNull final LineNumberReader lnr, final boolean isDialog) throws IOException, JXCSkinException {
2447  final GroupLayout layout = (GroupLayout)gui.getLayout();
2448  final String begin = args.get();
2449  if (!begin.equals("begin")) {
2450  throw new IOException("syntax error: expecting 'begin'");
2451  }
2452  final Collection<GUIElement> unreferencedElements = new TreeSet<>(ELEMENT_COMPARATOR);
2453  for (GUIElement element : definedGUIElements) {
2454  unreferencedElements.add(element);
2455  }
2456  if (!isDialog) {
2457  final Group content = parseBegin(args, layout, lnr, unreferencedElements, true);
2458  if (!unreferencedElements.isEmpty()) {
2459  throw new IOException("layout doesn't define elements "+unreferencedElements);
2460  }
2461  layout.setVerticalGroup(content);
2462  return;
2463  }
2464  final AbstractGUIElement background = getUnreferencedElement("dialog_background", unreferencedElements);
2465  if (background == null) {
2466  throw new AssertionError("element 'dialog_background' is missing");
2467  }
2468  final Group content = parseBegin(args, layout, lnr, unreferencedElements, true);
2469  final Component title = getUnreferencedElement("dialog_title", unreferencedElements);
2470  final Component close = getUnreferencedElement("dialog_close", unreferencedElements);
2471  final Component help = getUnreferencedElement("dialog_help", unreferencedElements);
2472  final Group group2 = layout.createSequentialGroup();
2473  group2.addGap(background.getDialogBorderTop());
2474  if (title == null) {
2475  if (help == null) {
2476  if (close == null) {
2477  // no title, no help, no close
2478  group2.addGroup(content);
2479  } else {
2480  // no title, no help, close
2481  final Group group3 = layout.createParallelGroup();
2482  group3.addComponent(close);
2483  group3.addGroup(content);
2484  group2.addGroup(group3);
2485  }
2486  } else {
2487  if (close == null) {
2488  // no title, help, no close
2489  final Group group3 = layout.createParallelGroup();
2490  group3.addComponent(help);
2491  group3.addGroup(content);
2492  group2.addGroup(group3);
2493  } else {
2494  // no title, help, close
2495  final Group group3 = layout.createParallelGroup();
2496  group3.addComponent(help);
2497  group3.addComponent(close);
2498  group3.addGroup(content);
2499  group2.addGroup(group3);
2500  }
2501  }
2502  } else {
2503  if (help == null) {
2504  //noinspection IfStatementWithIdenticalBranches
2505  if (close == null) {
2506  // title, no help, no close
2507  group2.addComponent(title);
2508  group2.addGroup(content);
2509  } else {
2510  // title, no help, close
2511  final Group group3 = layout.createParallelGroup();
2512  group3.addComponent(title);
2513  group3.addComponent(close);
2514  group2.addGroup(group3);
2515  group2.addGroup(content);
2516  }
2517  } else {
2518  //noinspection IfStatementWithIdenticalBranches
2519  if (close == null) {
2520  // title, help, no close
2521  final Group group3 = layout.createParallelGroup();
2522  group3.addComponent(title);
2523  group3.addComponent(help);
2524  group2.addGroup(group3);
2525  group2.addGroup(content);
2526  } else {
2527  // title, help, close
2528  final Group group3 = layout.createParallelGroup();
2529  group3.addComponent(title);
2530  group3.addComponent(help);
2531  group3.addComponent(close);
2532  group2.addGroup(group3);
2533  group2.addGroup(content);
2534  }
2535  }
2536  }
2537  group2.addGap(background.getDialogBorderBottom());
2538  if (!unreferencedElements.isEmpty()) {
2539  throw new IOException("layout doesn't define elements "+unreferencedElements);
2540  }
2541 
2542  final Group group1 = layout.createParallelGroup();
2543  group1.addGroup(group2);
2544  group1.addComponent(background);
2545 
2546  layout.setVerticalGroup(group1);
2547  }
2548 
2555  @NotNull
2556  private static Resolution parseResolution(@NotNull final String text) throws IOException {
2557  final Resolution resolution = Resolution.parse(text);
2558  if (resolution == null) {
2559  throw new IOException("invalid resolution: "+text);
2560  }
2561  return resolution;
2562  }
2563 
2573  private void parseCharacterList(@NotNull final Args args, @NotNull final TooltipManager tooltipManager, @NotNull final GUIElementListener elementListener, @NotNull final CharacterModel characterModel) throws IOException, JXCSkinException {
2574  final String name = args.get();
2575  final int cellWidth = ExpressionParser.parseInt(args.get());
2576  final int cellHeight = ExpressionParser.parseInt(args.get());
2577  final Font font = definedFonts.lookup(args.get());
2578  insertGuiElement(new GUICharacterList(tooltipManager, facesManager, elementListener, name, cellWidth, cellHeight, font, characterModel, guiFactory));
2579  }
2580 
2586  private void insertGuiElement(@NotNull final AbstractGUIElement guiElement) throws JXCSkinException {
2587  definedGUIElements.insert(guiElement.getName(), guiElement);
2588  skin.insertGuiElement(guiElement);
2589  }
2590 
2607  private void addCommand(@NotNull final String listName, @NotNull final Args args, @Nullable final AbstractGUIElement element, @NotNull final String command, @NotNull final GuiStateManager guiStateManager, @NotNull final CommandExecutor commandExecutor, @NotNull final LineNumberReader lnr, @NotNull final CommandQueue commandQueue, @NotNull final CrossfireServerConnection crossfireServerConnection, @NotNull final CommandCallback commandCallback, @NotNull final Macros macros) throws IOException, JXCSkinException {
2608  final CommandList commandList = skin.getCommandList(listName);
2609  commandList.add(commandParser.parseCommandArgs(args, element, command, guiStateManager, commandExecutor, lnr, commandQueue, crossfireServerConnection, commandCallback, macros));
2610  }
2611 
2619  @NotNull
2620  private GaugeUpdater newGaugeUpdater(@NotNull final String name) throws IOException {
2622  }
2623 
2636  @NotNull
2637  private Group parseBegin(@NotNull final Args beginArgs, @NotNull final GroupLayout layout, @NotNull final LineNumberReader lnr, @NotNull final Collection<GUIElement> unreferencedElements, final boolean topLevel) throws IOException, JXCSkinException {
2638  final String type = beginArgs.get();
2639  final Group group;
2640  switch (type) {
2641  case "seq":
2642  group = layout.createSequentialGroup();
2643  break;
2644 
2645  case "par":
2646  group = layout.createParallelGroup();
2647  break;
2648 
2649  default:
2650  throw new IOException("undefined type '"+type+"'");
2651  }
2652 
2653  int elements = 0;
2654  while (true) {
2655  final String line = lnr.readLine();
2656  if (line == null) {
2657  throw new IOException("unterminated 'begin' block");
2658  }
2659 
2660  if (line.startsWith("#") || line.isEmpty()) {
2661  continue;
2662  }
2663 
2664  final String[] argsTmp;
2665  try {
2666  argsTmp = StringUtils.splitFields(line);
2667  } catch (final UnterminatedTokenException ex) {
2668  throw new JXCSkinException(ex.getMessage(), ex);
2669  }
2670  final Args args = new Args(argsTmp);
2671  final String cmd = args.get();
2672  if (cmd.equals("end")) {
2673  if (args.hasMore()) {
2674  throw new IOException("excess arguments");
2675  }
2676  break;
2677  }
2678  elements++;
2679  switch (cmd) {
2680  case "begin":
2681  group.addGroup(parseBegin(args, layout, lnr, unreferencedElements, false));
2682  break;
2683 
2684  case "border_gap":
2685  if (!(group instanceof SequentialGroup)) {
2686  throw new IOException("'border_gap' cannot be used outside 'seq' groups");
2687  }
2688  ((SequentialGroup)group).addContainerGap();
2689  break;
2690 
2691  case "gap":
2692  if (args.hasMore()) {
2693  final int tmp = ExpressionParser.parseInt(args.get());
2694  if (args.hasMore()) {
2695  final int size = ExpressionParser.parseInt(args.get());
2696  final int max = args.hasMore() ? ExpressionParser.parseInt(args.get()) : Short.MAX_VALUE;
2697  group.addGap(tmp, size, max);
2698  } else {
2699  group.addGap(tmp);
2700  }
2701  } else {
2702  group.addGap(0, 1, Short.MAX_VALUE);
2703  }
2704  break;
2705 
2706  default:
2707  final AbstractGUIElement element = definedGUIElements.lookup(cmd);
2708  if (!unreferencedElements.remove(element)) {
2709  throw new IOException("layout defines element '"+element+"' more than once");
2710  }
2711  if (args.hasMore()) {
2712  final int tmp = ExpressionParser.parseInt(args.get());
2713  final int min;
2714  final int pref;
2715  final int max;
2716  if (args.hasMore()) {
2717  min = tmp;
2718  pref = ExpressionParser.parseInt(args.get());
2719  max = args.hasMore() ? ExpressionParser.parseInt(args.get()) : Short.MAX_VALUE;
2720  } else {
2721  min = tmp;
2722  pref = tmp;
2723  max = tmp;
2724  }
2725  group.addComponent(element, min, pref, max);
2726  } else {
2727  group.addComponent(element);
2728  }
2729  break;
2730  }
2731  if (args.hasMore()) {
2732  throw new IOException("excess arguments");
2733  }
2734  }
2735  if (topLevel) {
2736  if (elements < 1) {
2737  throw new IOException("begin...end block must have at least one element");
2738  }
2739  } else {
2740  if (elements < 2) {
2741  throw new IOException("begin...end block must have at least two elements");
2742  }
2743  }
2744  return group;
2745  }
2746 
2752  @NotNull
2753  private BufferedImage scaleImage(@NotNull final BufferedImage sourceImage) {
2754  final int height = (int)(sourceImage.getHeight()*fontScaleFactor+0.5F);
2755  final Image scaled = sourceImage.getScaledInstance(-1, height, Image.SCALE_SMOOTH);
2756  final BufferedImage bufferedScaled = new BufferedImage(scaled.getWidth(null), scaled.getHeight(null), BufferedImage.TYPE_INT_ARGB);
2757  bufferedScaled.getGraphics().drawImage(scaled, 0, 0, null);
2758  return bufferedScaled;
2759  }
2760 
2767  @NotNull
2768  private static ShortcutSlot parseShortcutSlot(final String s) throws JXCSkinException {
2769  try {
2770  return ShortcutSlot.valueOf(s);
2771  } catch (final IllegalArgumentException ex) {
2772  throw new JXCSkinException("invalid shortcut slot '"+s+"'", ex);
2773  }
2774  }
2775 
2776 }
com.realtime.crossfire.jxclient.util.ResourceUtils.PREV_GROUP_FACE
static final String PREV_GROUP_FACE
Definition: ResourceUtils.java:52
com.realtime.crossfire.jxclient
com.realtime.crossfire.jxclient.skin.io.JXCSkinLoader.parseLabelMulti
void parseLabelMulti(@NotNull final Args args, @NotNull final TooltipManager tooltipManager, @NotNull final GUIElementListener elementListener, @NotNull final LineNumberReader lnr)
Definition: JXCSkinLoader.java:1705
com.realtime.crossfire.jxclient.skin.skin
Definition: DefaultJXCSkin.java:23
com.realtime.crossfire.jxclient.gui.label.NewcharStat
Definition: NewcharStat.java:32
com.realtime.crossfire.jxclient.skin.io.JXCSkinLoader.scaleImage
BufferedImage scaleImage(@NotNull final BufferedImage sourceImage)
Definition: JXCSkinLoader.java:2753
com.realtime.crossfire.jxclient.skin.io.JXCSkinLoader.parseShortcutSlot
static ShortcutSlot parseShortcutSlot(final String s)
Definition: JXCSkinLoader.java:2768
com.realtime.crossfire.jxclient.skills.SkillSet.getNamedSkill
Skill getNamedSkill(@NotNull final String skillName, final int face)
Definition: SkillSet.java:161
com.realtime.crossfire.jxclient.skin.io.JXCSkinLoader.parseFill
void parseFill(@NotNull final Args args, @NotNull final TooltipManager tooltipManager, @NotNull final GUIElementListener elementListener)
Definition: JXCSkinLoader.java:1321
com.realtime.crossfire.jxclient.gui.label.AbstractLabel
Definition: AbstractLabel.java:43
com.realtime.crossfire.jxclient.gui.item.GUIItemFloor
Definition: GUIItemFloor.java:45
com.realtime.crossfire.jxclient.faces.FaceImagesUtils.newFaceImages
static FaceImages newFaceImages(@NotNull final ImageIcon originalImageIcon)
Definition: FaceImagesUtils.java:51
com.realtime.crossfire.jxclient.server.crossfire.Model.getStats
Stats getStats()
Definition: Model.java:107
com.realtime.crossfire.jxclient.skin.io.JXCSkinLoader.dialogFactory
DialogFactory dialogFactory
Definition: JXCSkinLoader.java:374
com.realtime.crossfire.jxclient.faces.SmoothFaces
Definition: SmoothFaces.java:33
com.realtime.crossfire.jxclient.shortcuts.Shortcuts
Definition: Shortcuts.java:43
com.realtime.crossfire.jxclient.gui.misc.GUILabelMessage
Definition: GUILabelMessage.java:44
com.realtime.crossfire.jxclient.skin.io.JXCSkinLoader.parseTooltip
void parseTooltip(@NotNull final Args args, @NotNull final TooltipManager tooltipManager, @NotNull final GUIElementListener elementListener)
Definition: JXCSkinLoader.java:2430
com.realtime.crossfire.jxclient.gui.list.GUISpellList
Definition: GUISpellList.java:45
com.realtime.crossfire.jxclient.skin.io.Args
Definition: Args.java:32
com.realtime.crossfire.jxclient.skin.factory.DialogFactory.newDialog
Iterable< AbstractGUIElement > newDialog(@NotNull final TooltipManager tooltipManager, @NotNull final JXCWindowRenderer windowRenderer, @NotNull final GUIElementListener elementListener, @NotNull final String title)
Definition: DialogFactory.java:218
com.realtime.crossfire.jxclient.server
com.realtime.crossfire.jxclient.skin.io.JXCSkinLoader.focusOrder
final List< ActivatableGUIElement > focusOrder
Definition: JXCSkinLoader.java:424
com.realtime.crossfire.jxclient.gui.label.GUIHTMLLabel
Definition: GUIHTMLLabel.java:49
com.realtime.crossfire.jxclient.skin.io.Args.get
String get()
Definition: Args.java:59
com.realtime.crossfire.jxclient.skin.io.GuiElementParser.lookupTextElement
GUIText lookupTextElement(@NotNull final String name)
Definition: GuiElementParser.java:61
com.realtime.crossfire.jxclient.gui.list.GUIFloorList
Definition: GUIFloorList.java:45
com.realtime.crossfire.jxclient.skin.skin.JXCSkinCache.lookup
T lookup(@NotNull final String name)
Definition: JXCSkinCache.java:92
com.realtime.crossfire.jxclient.skin.io.JXCSkinLoader.parseLabelNewchar
void parseLabelNewchar(@NotNull final Args args, @NotNull final TooltipManager tooltipManager, @NotNull final GUIElementListener elementListener, @NotNull final CrossfireServerConnection server)
Definition: JXCSkinLoader.java:1831
com.realtime.crossfire.jxclient.gui.gui.Gui
Definition: Gui.java:49
com.realtime.crossfire.jxclient.skin.io.JXCSkinLoader.spellSkillsView
final SpellSkillView spellSkillsView
Definition: JXCSkinLoader.java:261
com.realtime.crossfire.jxclient.faces.FacesProvider
Definition: FacesProvider.java:34
com.realtime.crossfire.jxclient.skin.io.JXCSkinLoader.parseDupGauge
void parseDupGauge(@NotNull final Args args, @NotNull final TooltipManager tooltipManager, @NotNull final GUIElementListener elementListener, @NotNull final LineNumberReader lnr)
Definition: JXCSkinLoader.java:1228
com.realtime.crossfire.jxclient.skin.skin.JXCSkinCache.clear
void clear()
Definition: JXCSkinCache.java:67
com.realtime.crossfire.jxclient.skin.io.JXCSkinLoader.parseCharacterList
void parseCharacterList(@NotNull final Args args, @NotNull final TooltipManager tooltipManager, @NotNull final GUIElementListener elementListener, @NotNull final CharacterModel characterModel)
Definition: JXCSkinLoader.java:2573
com.realtime.crossfire.jxclient.skin.io.JXCSkinLoader.defaultKeyBindings
final KeyBindings defaultKeyBindings
Definition: JXCSkinLoader.java:339
com.realtime.crossfire.jxclient.gui.textinput.GUITextField
Definition: GUITextField.java:43
com.realtime.crossfire.jxclient.skin.io.JXCSkinLoader.parseMetaList
void parseMetaList(@NotNull final Args args, @NotNull final TooltipManager tooltipManager, @NotNull final GUIElementListener elementListener, @NotNull final MetaserverModel metaserverModel)
Definition: JXCSkinLoader.java:2059
com.realtime.crossfire.jxclient.util.Resolution.getWidth
int getWidth()
Definition: Resolution.java:88
com.realtime.crossfire.jxclient.items.SpellSkillView
Definition: SpellSkillView.java:37
com.realtime.crossfire.jxclient.gui.commandlist.CommandList
Definition: CommandList.java:34
com.realtime.crossfire.jxclient.map
Definition: CfMap.java:23
com.realtime.crossfire.jxclient.server.crossfire.Model.getSpellsManager
SpellsManager getSpellsManager()
Definition: Model.java:122
com.realtime.crossfire.jxclient.window
Definition: DialogStateParser.java:23
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.util.ResourceUtils.ALL_SPELL_SKILLS_ICON
static final String ALL_SPELL_SKILLS_ICON
Definition: ResourceUtils.java:64
com.realtime.crossfire.jxclient.items.FloorView
Definition: FloorView.java:36
com.realtime.crossfire.jxclient.skin
com.realtime.crossfire.jxclient.skin.io.JXCSkinLoader.parseSetModal
static void parseSetModal(@NotNull final Gui gui)
Definition: JXCSkinLoader.java:2294
com.realtime.crossfire.jxclient.skin.events.PlayerLoginSkinEvent
Definition: PlayerLoginSkinEvent.java:36
com.realtime.crossfire.jxclient.skin.io.JXCSkinLoader.defaultItemPainter
ItemPainter defaultItemPainter
Definition: JXCSkinLoader.java:387
com.realtime.crossfire.jxclient.skin.io.JXCSkinLoader.parseEvent
void parseEvent(@NotNull final Args args, @NotNull final GuiStateManager guiStateManager, @NotNull final CrossfireServerConnection server)
Definition: JXCSkinLoader.java:1253
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.io.JXCSkinLoader.parseSkinName
void parseSkinName(@NotNull final Args args)
Definition: JXCSkinLoader.java:2331
com.realtime.crossfire.jxclient.skin.source
Definition: AbstractJXCSkinSource.java:23
com.realtime.crossfire.jxclient.skin.io.JXCSkinLoader.parsePicture
void parsePicture(@NotNull final Args args, @NotNull final TooltipManager tooltipManager, @NotNull final GUIElementListener elementListener, @NotNull final LineNumberReader lnr, @NotNull final Gui gui, final boolean scaled)
Definition: JXCSkinLoader.java:2084
com.realtime.crossfire.jxclient.metaserver
Definition: DefaultMetaserver.java:23
com.realtime.crossfire.jxclient.gui.gui.AbstractGUIElement.getDialogBorderBottom
int getDialogBorderBottom()
Definition: AbstractGUIElement.java:313
com.realtime.crossfire.jxclient.server.crossfire.Model.getQuestsManager
QuestsManager getQuestsManager()
Definition: Model.java:127
com.realtime.crossfire.jxclient.skin.io.JXCSkinLoader.keybindingsManager
final KeybindingsManager keybindingsManager
Definition: JXCSkinLoader.java:454
com.realtime.crossfire.jxclient.skin.io.ParseUtils
Definition: ParseUtils.java:42
com.realtime.crossfire.jxclient.skin.io.ParseUtils.parseOrientation
static Orientation parseOrientation(@NotNull final String name)
Definition: ParseUtils.java:73
com.realtime.crossfire.jxclient.skin.io.JXCSkinLoader.questView
final QuestsView questView
Definition: JXCSkinLoader.java:267
com.realtime.crossfire.jxclient.skin.io.JXCSkinLoader.textButtonFactory
TextButtonFactory textButtonFactory
Definition: JXCSkinLoader.java:368
com.realtime.crossfire.jxclient.skin.io.JXCSkinLoader.parseResolution
static Resolution parseResolution(@NotNull final String text)
Definition: JXCSkinLoader.java:2556
com.realtime.crossfire.jxclient.gui.map.GUIMiniMap
Definition: GUIMiniMap.java:44
com.realtime.crossfire.jxclient.gui.gui.AbstractGUIElement.getDialogBorderRight
int getDialogBorderRight()
Definition: AbstractGUIElement.java:305
com.realtime.crossfire.jxclient.gui.map
Definition: AbstractGUIMap.java:23
com.realtime.crossfire.jxclient.gui.gui.ActivatableGUIElement
Definition: ActivatableGUIElement.java:33
com.realtime.crossfire.jxclient.gui.list.GUIMetaElementList
Definition: GUIMetaElementList.java:45
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.skin.io.JXCSkinLoader.parseDialog
void parseDialog(@NotNull final Args args, @NotNull final TooltipManager tooltipManager, @NotNull final JXCWindowRenderer windowRenderer, @NotNull final GUIElementListener elementListener, @NotNull final LineNumberReader lnr, @NotNull final Gui gui, @NotNull final String dialogName)
Definition: JXCSkinLoader.java:1186
com.realtime.crossfire.jxclient.skin.io.JXCSkinLoader
Definition: JXCSkinLoader.java:182
com.realtime.crossfire.jxclient.skin.io.JXCSkinLoader.parseQueryText
void parseQueryText(@NotNull final Args args, @NotNull final CrossfireServerConnection server, @NotNull final CommandCallback commandCallback, @NotNull final TooltipManager tooltipManager, @NotNull final GUIElementListener elementListener)
Definition: JXCSkinLoader.java:2145
com.realtime.crossfire.jxclient.skin.io.JXCSkinLoader.ListType
Definition: JXCSkinLoader.java:189
com.realtime.crossfire.jxclient.settings.CommandHistory
Definition: CommandHistory.java:35
com.realtime.crossfire.jxclient.gui.gauge.GaugeUpdater
Definition: GaugeUpdater.java:33
com.realtime.crossfire.jxclient.gui.label
Definition: AbstractLabel.java:23
com.realtime.crossfire.jxclient.skin.skin.GuiFactory
Definition: GuiFactory.java:41
com.realtime.crossfire.jxclient.gui.log.GUILabelLog
Definition: GUILabelLog.java:38
com.realtime.crossfire.jxclient.gui.textinput
Definition: ActivateCommandInputCommand.java:23
com.realtime.crossfire.jxclient.util.NumberParser.parseFloat
static float parseFloat(@NotNull final String str)
Definition: NumberParser.java:95
com.realtime.crossfire.jxclient.gui.commandlist
Definition: CommandList.java:23
com.realtime.crossfire.jxclient.gui.gauge.GUIGauge
Definition: GUIGauge.java:47
com.realtime.crossfire.jxclient.skin.io.ImageParser.clear
void clear()
Definition: ImageParser.java:67
com.realtime.crossfire.jxclient.items.SpellsView
Definition: SpellsView.java:37
com.realtime.crossfire.jxclient.skills.Skill
Definition: Skill.java:35
com.realtime.crossfire.jxclient.skin.io.JXCSkinLoader.parseLabelQuery
void parseLabelQuery(@NotNull final Args args, @NotNull final TooltipManager tooltipManager, @NotNull final GUIElementListener elementListener, @NotNull final CrossfireServerConnection server)
Definition: JXCSkinLoader.java:1722
com.realtime.crossfire.jxclient.settings.CommandHistoryFactory.getCommandHistory
CommandHistory getCommandHistory(@NotNull final String ident)
Definition: CommandHistoryFactory.java:49
com.realtime.crossfire.jxclient.skin.io.JXCSkinLoader.ListType.SPELL_SKILLS
SPELL_SKILLS
Definition: JXCSkinLoader.java:214
com.realtime.crossfire.jxclient.gui.gui.ActivatableGUIElement.setNextActive
void setNextActive(@NotNull final ActivatableGUIElement next)
Definition: ActivatableGUIElement.java:154
com.realtime.crossfire.jxclient.protocol.MessageTypesBuilder.build
MessageTypes build()
Definition: MessageTypesBuilder.java:55
com.realtime.crossfire.jxclient.skin.io.JXCSkinLoader.parseSetForcedActive
void parseSetForcedActive(@NotNull final Args args, @NotNull final Gui gui)
Definition: JXCSkinLoader.java:2165
com.realtime.crossfire.jxclient.skin.factory.DialogFactory.getFrameAlpha
float getFrameAlpha()
Definition: DialogFactory.java:233
com.realtime.crossfire.jxclient.gui.list.GUIQuestList
Definition: GUIQuestList.java:43
com.realtime.crossfire.jxclient.faces
Definition: AbstractFaceQueue.java:23
com.realtime.crossfire.jxclient.gui.label.Alignment
Definition: Alignment.java:29
com.realtime.crossfire.jxclient.skin.io.JXCSkinLoader.parseComboBox
void parseComboBox(@NotNull final Args args, @NotNull final TooltipManager tooltipManager, @NotNull final GUIElementListener elementListener)
Definition: JXCSkinLoader.java:967
com.realtime.crossfire.jxclient.skin.skin.JXCSkinException
Definition: JXCSkinException.java:31
com.realtime.crossfire.jxclient.skin.io.JXCSkinLoader.parseLabelText
void parseLabelText(@NotNull final Args args, @NotNull final TooltipManager tooltipManager, @NotNull final GUIElementListener elementListener, @NotNull final LineNumberReader lnr)
Definition: JXCSkinLoader.java:1771
com.realtime.crossfire.jxclient.server.crossfire.Model.getExperienceTable
ExperienceTable getExperienceTable()
Definition: Model.java:112
com.realtime.crossfire.jxclient.util.UnterminatedTokenException
Definition: UnterminatedTokenException.java:31
com.realtime.crossfire.jxclient.gui.list.GUISpellSkillList
Definition: GUISpellSkillList.java:43
com.realtime.crossfire.jxclient.util.ResourceUtils.loadImage
static ImageIcon loadImage(@NotNull final String name)
Definition: ResourceUtils.java:79
com.realtime.crossfire.jxclient.gui.label.GUILabelStats2
Definition: GUILabelStats2.java:42
com.realtime.crossfire.jxclient.skin.io.JXCSkinLoader.parseFocus
void parseFocus(@NotNull final Args args, @NotNull final LineNumberReader lnr)
Definition: JXCSkinLoader.java:2230
com.realtime.crossfire.jxclient.gui.keybindings
Definition: InvalidKeyBindingException.java:23
com.realtime.crossfire.jxclient.gui.item.GUIItemShortcut
Definition: GUIItemShortcut.java:52
com.realtime.crossfire.jxclient.skin.skin.DefaultJXCSkin.addDialog
void addDialog(@NotNull final String dialogName)
Definition: DefaultJXCSkin.java:371
com.realtime.crossfire.jxclient.gui.button.ButtonImages
Definition: ButtonImages.java:35
com.realtime.crossfire.jxclient.skin.io.JXCSkinLoader.parseTextGauge
void parseTextGauge(@NotNull final Args args, @NotNull final TooltipManager tooltipManager, @NotNull final GUIElementListener elementListener, @NotNull final LineNumberReader lnr)
Definition: JXCSkinLoader.java:2399
com.realtime.crossfire.jxclient.gui.misc.GUISpinner
Definition: GUISpinner.java:53
com.realtime.crossfire.jxclient.skin.events.SkillAddedSkinEvent
Definition: SkillAddedSkinEvent.java:35
com.realtime.crossfire.jxclient.gui.map.GUIMapDirections
Definition: GUIMapDirections.java:46
com.realtime.crossfire.jxclient.gui.misc.GUIFill
Definition: GUIFill.java:41
com.realtime.crossfire.jxclient.protocol.MessageTypesBuilder.addType
void addType(@NotNull final String type)
Definition: MessageTypesBuilder.java:38
com.realtime.crossfire.jxclient.skin.io.ExpressionParser.parseInt
static int parseInt(@NotNull final String str)
Definition: ExpressionParser.java:68
com.realtime.crossfire.jxclient.gui.map.DarknessColors
Definition: DarknessColors.java:34
com.realtime.crossfire.jxclient.util.NumberParser.parseEnum
static< T extends Enum< T > T parseEnum(@NotNull final Class< T > class_, @NotNull final String name, @NotNull final String ident)
Definition: NumberParser.java:128
com.realtime.crossfire.jxclient.gui.list.GUIKnowledgeList
Definition: GUIKnowledgeList.java:42
com.realtime.crossfire.jxclient.gui.gauge
Definition: AbstractOrientation.java:23
com.realtime.crossfire.jxclient.skin.io.JXCSkinLoader.guiFactory
final GuiFactory guiFactory
Definition: JXCSkinLoader.java:285
com.realtime.crossfire.jxclient.gui.textinput.CommandCallback
Definition: CommandCallback.java:33
com.realtime.crossfire.jxclient.gui.gui.ActivatableGUIElement.setPrevActive
void setPrevActive(@NotNull final ActivatableGUIElement prev)
Definition: ActivatableGUIElement.java:162
com.realtime.crossfire.jxclient.protocol.MessageTypesBuilder
Definition: MessageTypesBuilder.java:10
com.realtime.crossfire.jxclient.gui.item.ItemPainter.newItemPainter
ItemPainter newItemPainter()
Definition: ItemPainter.java:236
com.realtime.crossfire.jxclient.util.StringUtils.splitFields
static String[] splitFields(@NotNull final String line)
Definition: StringUtils.java:65
com.realtime.crossfire.jxclient.settings
Definition: CommandHistory.java:23
com.realtime.crossfire.jxclient.skin.io.JXCSkinLoader.ListType.GROUND
GROUND
Definition: JXCSkinLoader.java:199
com.realtime.crossfire.jxclient.gui.log
Definition: Buffer.java:23
com.realtime.crossfire.jxclient.skin.factory.CheckBoxFactory
Definition: CheckBoxFactory.java:40
com.realtime.crossfire.jxclient.gui.misc.JXCWindowRenderer
Definition: JXCWindowRenderer.java:87
com.realtime.crossfire.jxclient.skin.io.JXCSkinLoader.addCommand
void addCommand(@NotNull final String listName, @NotNull final Args args, @Nullable final AbstractGUIElement element, @NotNull final String command, @NotNull final GuiStateManager guiStateManager, @NotNull final CommandExecutor commandExecutor, @NotNull final LineNumberReader lnr, @NotNull final CommandQueue commandQueue, @NotNull final CrossfireServerConnection crossfireServerConnection, @NotNull final CommandCallback commandCallback, @NotNull final Macros macros)
Definition: JXCSkinLoader.java:2607
com.realtime.crossfire.jxclient.protocol
Definition: MagicMap.java:23
com.realtime.crossfire.jxclient.server.crossfire.Model.getKnowledgeManager
KnowledgeManager getKnowledgeManager()
Definition: Model.java:132
com.realtime.crossfire.jxclient.skin.io.JXCSkinLoader.imageParser
ImageParser imageParser
Definition: JXCSkinLoader.java:399
com.realtime.crossfire.jxclient.skin.io.JXCSkinLoader.checkBoxFactory
CheckBoxFactory checkBoxFactory
Definition: JXCSkinLoader.java:380
com.realtime.crossfire.jxclient.gui.textinput.GUIQueryText
Definition: GUIQueryText.java:42
com.realtime.crossfire.jxclient.skin.factory.CheckBoxFactory.newCheckBox
AbstractGUIElement newCheckBox(@NotNull final TooltipManager tooltipManager, @NotNull final GUIElementListener elementListener, @NotNull final String name, @NotNull final CheckBoxOption option, @NotNull final String text)
Definition: CheckBoxFactory.java:98
com.realtime.crossfire.jxclient.skin.io.JXCSkinLoader.definedFonts
final JXCSkinCache< Font > definedFonts
Definition: JXCSkinLoader.java:362
com.realtime.crossfire.jxclient.skin.skin.JXCSkin
Definition: JXCSkin.java:42
com.realtime.crossfire.jxclient.guistate.GuiStateManager
Definition: GuiStateManager.java:34
com.realtime.crossfire.jxclient.skin.io.JXCSkinLoader.parseTextButton
void parseTextButton(@NotNull final Args args, @NotNull final TooltipManager tooltipManager, @NotNull final GUIElementListener elementListener, @NotNull final LineNumberReader lnr)
Definition: JXCSkinLoader.java:2377
com.realtime.crossfire.jxclient.skin.io.JXCSkinLoader.parseScrollbar
void parseScrollbar(@NotNull final Args args, @NotNull final TooltipManager tooltipManager, @NotNull final GUIElementListener elementListener)
Definition: JXCSkinLoader.java:2314
com.realtime.crossfire.jxclient.guistate
Definition: ClientSocketState.java:23
com.realtime.crossfire.jxclient.util.ResourceUtils.NEXT_GROUP_FACE
static final String NEXT_GROUP_FACE
Definition: ResourceUtils.java:46
com.realtime.crossfire.jxclient.skin.io.JXCSkinLoader.parseMap
void parseMap(@NotNull final Args args, @NotNull final TooltipManager tooltipManager, @NotNull final GUIElementListener elementListener, @NotNull final CrossfireServerConnection server, @NotNull final SmoothFaces smoothFaces)
Definition: JXCSkinLoader.java:2023
com.realtime.crossfire.jxclient.gui.list
Definition: CharacterCellRenderer.java:23
com.realtime.crossfire.jxclient.gui.log.MessageBufferUpdater.NUM_COLORS
static final int NUM_COLORS
Definition: MessageBufferUpdater.java:43
com.realtime.crossfire.jxclient.items.QuestsView
Definition: QuestsView.java:38
com.realtime.crossfire.jxclient.skin.io.JXCSkinLoader.ListType.INVENTORY
INVENTORY
Definition: JXCSkinLoader.java:194
com.realtime.crossfire.jxclient.skin.io.JXCSkinLoader.guiElementParser
GuiElementParser guiElementParser
Definition: JXCSkinLoader.java:411
com.realtime.crossfire.jxclient.skin.io.JXCSkinLoader.parseLinkSize
void parseLinkSize(@NotNull final Args args, @NotNull final Container gui)
Definition: JXCSkinLoader.java:1864
com.realtime.crossfire.jxclient.skin.io.JXCSkinLoader.floorView
final FloorView floorView
Definition: JXCSkinLoader.java:249
com.realtime.crossfire.jxclient.skin.io.JXCSkinLoader.load
JXCSkin load(@NotNull final JXCSkinSource skinSource, @NotNull final CrossfireServerConnection crossfireServerConnection, @NotNull final GuiStateManager guiStateManager, @NotNull final TooltipManager tooltipManager, @NotNull final JXCWindowRenderer windowRenderer, @NotNull final GUIElementListener elementListener, @NotNull final MetaserverModel metaserverModel, @NotNull final CharacterModel characterModel, @NotNull final CommandQueue commandQueue, @NotNull final Shortcuts shortcuts, @NotNull final CommandExecutor commandExecutor, @NotNull final CommandCallback commandCallback, @NotNull final Macros macros, @NotNull final SmoothFaces smoothFaces)
Definition: JXCSkinLoader.java:527
com.realtime.crossfire.jxclient.skin.events
Definition: ConnectionStateSkinEvent.java:23
com.realtime.crossfire.jxclient.gui.gauge.GUITextGauge
Definition: GUITextGauge.java:44
com.realtime.crossfire.jxclient.skin.skin.DefaultJXCSkin.getDialog
Gui getDialog(@NotNull final String name)
Definition: DefaultJXCSkin.java:292
com.realtime.crossfire.jxclient.skin.io.JXCSkinLoader.parseLogMessage
void parseLogMessage(@NotNull final Args args, @NotNull final TooltipManager tooltipManager, @NotNull final GUIElementListener elementListener, @NotNull final CrossfireServerConnection server)
Definition: JXCSkinLoader.java:1924
com.realtime.crossfire.jxclient.skin.io.JXCSkinLoader.parseButton
void parseButton(@NotNull final Args args, @NotNull final TooltipManager tooltipManager, @NotNull final GUIElementListener elementListener, @NotNull final LineNumberReader lnr)
Definition: JXCSkinLoader.java:892
com.realtime.crossfire.jxclient.skin.io.JXCSkinLoader.parseLabelSoundsCredits
void parseLabelSoundsCredits(@NotNull final Args args, @NotNull final TooltipManager tooltipManager, @NotNull final GUIElementListener elementListener)
Definition: JXCSkinLoader.java:1850
com.realtime.crossfire.jxclient.skin.io.JXCSkinLoader.ListType.SPELL
SPELL
Definition: JXCSkinLoader.java:204
com.realtime.crossfire.jxclient.skin.io.JXCSkinLoader.load
void load(@NotNull final JXCSkinSource skinSource, @NotNull final String dialogName, @NotNull final CrossfireServerConnection server, @NotNull final GuiStateManager guiStateManager, @NotNull final TooltipManager tooltipManager, @NotNull final JXCWindowRenderer windowRenderer, @NotNull final GUIElementListener elementListener, @NotNull final MetaserverModel metaserverModel, @NotNull final CharacterModel characterModel, @NotNull final CommandQueue commandQueue, @Nullable final Gui gui, @NotNull final Shortcuts shortcuts, @NotNull final CommandExecutor commandExecutor, @NotNull final CommandCallback commandCallback, @NotNull final Macros macros, @NotNull final Image nextGroupFace, @NotNull final Image prevGroupFace, @NotNull final SmoothFaces smoothFaces)
Definition: JXCSkinLoader.java:619
com.realtime.crossfire.jxclient.skin.factory
Definition: CheckBoxFactory.java:23
com.realtime.crossfire.jxclient.skin.skin.DefaultJXCSkin.addInitEvent
void addInitEvent(@NotNull final CommandList commandList)
Definition: DefaultJXCSkin.java:399
com.realtime.crossfire.jxclient.skin.io.JXCSkinLoader.parseLogFilter
void parseLogFilter(@NotNull final Args args)
Definition: JXCSkinLoader.java:1963
com.realtime.crossfire.jxclient.skin.io.JXCSkinLoader.facesManager
final FacesManager facesManager
Definition: JXCSkinLoader.java:303
com.realtime.crossfire.jxclient.skin.io.JXCSkinLoader.parseHideInput
void parseHideInput(@NotNull final Args args)
Definition: JXCSkinLoader.java:2213
com.realtime.crossfire.jxclient.gui.item.GUIItemSpell
Definition: GUIItemSpell.java:49
com.realtime.crossfire.jxclient.gui.list.GUIKnowledgeTypeList
Definition: GUIKnowledgeTypeList.java:41
com.realtime.crossfire.jxclient.skills
Definition: Skill.java:23
com.realtime.crossfire.jxclient.skin.io.JXCSkinLoader.pendingDirections
final PendingDirections pendingDirections
Definition: JXCSkinLoader.java:291
com.realtime.crossfire.jxclient.skin.io.JXCSkinLoader.mapUpdaterState
final MapUpdaterState mapUpdaterState
Definition: JXCSkinLoader.java:333
com.realtime.crossfire.jxclient.skin.io.JXCSkinLoader.parseCommandList
void parseCommandList(@NotNull final Args args, @NotNull final GuiStateManager guiStateManager, @NotNull final LineNumberReader lnr, @NotNull final CommandExecutor commandExecutor, @NotNull final CommandQueue commandQueue, @NotNull final CrossfireServerConnection server, @NotNull final CommandCallback commandCallback, @NotNull final Macros macros)
Definition: JXCSkinLoader.java:1022
com.realtime.crossfire.jxclient.server.crossfire.CrossfireServerConnection
Definition: CrossfireServerConnection.java:37
com.realtime.crossfire.jxclient.skin.io.JXCSkinLoader.ListType.KNOWLEDGE_TYPES
KNOWLEDGE_TYPES
Definition: JXCSkinLoader.java:219
com.realtime.crossfire.jxclient.skin.io.JXCSkinLoader.load
void load(@NotNull final JXCSkinSource skinSource, @NotNull final String dialogName, @NotNull final String resourceName, @NotNull final InputStream inputStream, @NotNull final CrossfireServerConnection server, @NotNull final GuiStateManager guiStateManager, @NotNull final TooltipManager tooltipManager, @NotNull final JXCWindowRenderer windowRenderer, @NotNull final GUIElementListener elementListener, @NotNull final MetaserverModel metaserverModel, @NotNull final CharacterModel characterModel, @NotNull final CommandQueue commandQueue, @Nullable final Gui gui, @NotNull final Shortcuts shortcuts, @NotNull final CommandExecutor commandExecutor, @NotNull final CommandCallback commandCallback, @NotNull final Macros macros, @NotNull final Image nextGroupFace, @NotNull final Image prevGroupFace, @NotNull final SmoothFaces smoothFaces)
Definition: JXCSkinLoader.java:671
com.realtime.crossfire.jxclient.map.MapUpdaterState
Definition: MapUpdaterState.java:49
com.realtime.crossfire.jxclient.skin.skin.JXCSkinCache.insert
void insert(@NotNull final String name, @NotNull final T t)
Definition: JXCSkinCache.java:77
com.realtime.crossfire.jxclient.util.NumberParser.parseBoolean
static boolean parseBoolean(@NotNull final String str)
Definition: NumberParser.java:109
com.realtime.crossfire.jxclient.gui.keybindings.KeyBindings.parseKeyBinding
void parseKeyBinding(@NotNull final String line, final boolean isDefault)
Definition: KeyBindings.java:261
com.realtime.crossfire.jxclient.server.crossfire.Model
Definition: Model.java:43
com.realtime.crossfire.jxclient.skin.source.JXCSkinSource
Definition: JXCSkinSource.java:34
com.realtime.crossfire.jxclient.skin.io.JXCSkinLoader.parseDef
void parseDef(@NotNull final Args args, @NotNull final LineNumberReader lnr)
Definition: JXCSkinLoader.java:1082
com.realtime.crossfire.jxclient.skin.io.JXCSkinLoader.guiManager
final GuiManager guiManager
Definition: JXCSkinLoader.java:320
com.realtime.crossfire.jxclient.skin.io.JXCSkinLoader.parseLabelStat
void parseLabelStat(@NotNull final Args args, @NotNull final TooltipManager tooltipManager, @NotNull final GUIElementListener elementListener)
Definition: JXCSkinLoader.java:1787
com.realtime.crossfire.jxclient.gui.gauge.GUIDupGauge
Definition: GUIDupGauge.java:47
com.realtime.crossfire.jxclient.gui.label.NewcharType
Definition: NewcharType.java:29
com.realtime.crossfire.jxclient.settings.Macros
Definition: Macros.java:38
com.realtime.crossfire.jxclient.skin.factory.TextButtonFactory
Definition: TextButtonFactory.java:42
com.realtime.crossfire.jxclient.gui.scrollable.GUIScrollable2
Definition: GUIScrollable2.java:33
com.realtime.crossfire.jxclient.gui.label.GUILabelStats
Definition: GUILabelStats.java:43
com.realtime.crossfire.jxclient.util.ResourceUtils
Definition: ResourceUtils.java:34
com.realtime.crossfire.jxclient.util.StringUtils
Definition: StringUtils.java:34
com.realtime.crossfire.jxclient.server.crossfire.Model.getSkillSet
SkillSet getSkillSet()
Definition: Model.java:102
com.realtime.crossfire.jxclient.skin.io.JXCSkinLoader.insertGuiElement
void insertGuiElement(@NotNull final AbstractGUIElement guiElement)
Definition: JXCSkinLoader.java:2586
com.realtime.crossfire.jxclient.gui
com.realtime.crossfire.jxclient.gui.keybindings.InvalidKeyBindingException
Definition: InvalidKeyBindingException.java:31
com.realtime.crossfire.jxclient.queue.CommandQueue
Definition: CommandQueue.java:38
com.realtime.crossfire.jxclient.gui.button.GUISelectableButton
Definition: GUISelectableButton.java:42
com.realtime.crossfire.jxclient.skin.io.JXCSkinLoader.skin
DefaultJXCSkin skin
Definition: JXCSkinLoader.java:430
com.realtime.crossfire.jxclient.skin.io.JXCSkinLoader.parseSetDefault
void parseSetDefault(@NotNull final Args args)
Definition: JXCSkinLoader.java:2193
com.realtime.crossfire.jxclient.skin.io.JXCSkinLoader.newCharModel
final NewCharModel newCharModel
Definition: JXCSkinLoader.java:237
com.realtime.crossfire.jxclient.gui.item.ItemPainter
Definition: ItemPainter.java:41
com.realtime.crossfire.jxclient.skin.io.ParseUtils.parseText
static String parseText(@NotNull final Args args, @NotNull final LineNumberReader lnr)
Definition: ParseUtils.java:180
com.realtime.crossfire.jxclient.skin.skin.DefaultJXCSkin.setTooltipLabel
void setTooltipLabel(@Nullable final AbstractLabel tooltipLabel)
Definition: DefaultJXCSkin.java:423
com.realtime.crossfire.jxclient.gui.label.Alignment.LEFT
LEFT
Definition: Alignment.java:34
com.realtime.crossfire.jxclient.gui.label.GUIMultiLineLabel
Definition: GUIMultiLineLabel.java:46
com.realtime.crossfire.jxclient.skin.io.JXCSkinLoader.commandHistoryFactory
final CommandHistoryFactory commandHistoryFactory
Definition: JXCSkinLoader.java:314
com.realtime.crossfire.jxclient.skin.io.JXCSkinLoader.ELEMENT_COMPARATOR
static final Comparator< GUIElement > ELEMENT_COMPARATOR
Definition: JXCSkinLoader.java:444
com.realtime.crossfire.jxclient.skin.skin.JXCSkinCache
Definition: JXCSkinCache.java:40
com.realtime.crossfire.jxclient.skin.io.ParseUtils.parseColor
static Color parseColor(@NotNull final String name)
Definition: ParseUtils.java:90
com.realtime.crossfire.jxclient.gui.combobox.GUIStartingMapsComboBox
Definition: GUIStartingMapsComboBox.java:47
com.realtime.crossfire.jxclient.gui.log.Fonts
Definition: Fonts.java:32
com.realtime.crossfire.jxclient.skin.io.GuiElementParser
Definition: GuiElementParser.java:38
com.realtime.crossfire.jxclient.skin.io.JXCSkinLoader.fontScaleFactor
final float fontScaleFactor
Definition: JXCSkinLoader.java:350
com.realtime.crossfire.jxclient.skin.io.JXCSkinLoader.JXCSkinLoader
JXCSkinLoader(@NotNull final Model model, @NotNull final InventoryView inventoryView, @NotNull final FloorView floorView, @NotNull final SpellsView spellView, @NotNull final SpellSkillView spellSkillsView, @NotNull final FacesManager facesManager, @NotNull final MapUpdaterState mapUpdaterState, @NotNull final KeyBindings defaultKeyBindings, @NotNull final OptionManager optionManager, final int defaultTileSize, @NotNull final KeybindingsManager keybindingsManager, @NotNull final QuestsView questView, @NotNull final CommandHistoryFactory commandHistoryFactory, @NotNull final KnowledgeView knowledgeView, @NotNull final KnowledgeTypeView knowledgeTypeView, final boolean avoidCopyArea, @NotNull final GuiManager guiManager, @NotNull final GuiFactory guiFactory, @NotNull final PendingDirections pendingDirections, @NotNull final String soundsCredits, final float fontScaleFactor)
Definition: JXCSkinLoader.java:481
com.realtime.crossfire.jxclient.skin.io.JXCSkinLoader.optionManager
final OptionManager optionManager
Definition: JXCSkinLoader.java:345
com.realtime.crossfire.jxclient.skin.io.JXCSkinLoader.parseItem
void parseItem(@NotNull final Args args, @NotNull final TooltipManager tooltipManager, @NotNull final GUIElementListener elementListener, @NotNull final CommandQueue commandQueue, @NotNull final CommandExecutor commandExecutor, @NotNull final CrossfireServerConnection server, @NotNull final Shortcuts shortcuts, @NotNull final Image nextGroupFace, @NotNull final Image prevGroupFace)
Definition: JXCSkinLoader.java:1605
com.realtime.crossfire.jxclient.skin.io.JXCSkinLoader.parseCommandListAdd
void parseCommandListAdd(@NotNull final Args args, @NotNull final GuiStateManager guiStateManager, @NotNull final LineNumberReader lnr, @NotNull final CommandExecutor commandExecutor, @NotNull final CommandQueue commandQueue, @NotNull final CrossfireServerConnection server, @NotNull final CommandCallback commandCallback, @NotNull final Macros macros)
Definition: JXCSkinLoader.java:1045
com.realtime.crossfire.jxclient.skin.events.ConnectionStateSkinEvent
Definition: ConnectionStateSkinEvent.java:35
com.realtime.crossfire.jxclient.skin.io.GaugeUpdaterParser.parseGaugeUpdater
GaugeUpdater parseGaugeUpdater(@NotNull final String name, @NotNull final ExperienceTable experienceTable)
Definition: GaugeUpdaterParser.java:82
com.realtime.crossfire.jxclient.skin.io.JXCSkinLoader.newGaugeUpdater
GaugeUpdater newGaugeUpdater(@NotNull final String name)
Definition: JXCSkinLoader.java:2620
com.realtime.crossfire.jxclient.skin.io.CommandParser
Definition: CommandParser.java:94
com.realtime.crossfire.jxclient.gui.combobox.GUIRacesComboBox
Definition: GUIRacesComboBox.java:46
com.realtime.crossfire.jxclient.skin.io.JXCSkinLoader.parseLabelMessage
void parseLabelMessage(@NotNull final Args args, @NotNull final TooltipManager tooltipManager, @NotNull final GUIElementListener elementListener, @NotNull final CrossfireServerConnection server, @NotNull final JXCWindowRenderer windowRenderer)
Definition: JXCSkinLoader.java:1739
com.realtime.crossfire.jxclient.skin.io.JXCSkinLoader.parseLogLabel
void parseLogLabel(@NotNull final Args args, @NotNull final TooltipManager tooltipManager, @NotNull final GUIElementListener elementListener)
Definition: JXCSkinLoader.java:1902
com.realtime.crossfire.jxclient.util
Definition: Codec.java:23
com.realtime.crossfire.jxclient.gui.button
Definition: AbstractButton.java:23
com.realtime.crossfire.jxclient.gui.log.MessageBufferUpdater
Definition: MessageBufferUpdater.java:38
com.realtime.crossfire.jxclient.gui.combobox
Definition: GUICharOptionsComboBox.java:23
com.realtime.crossfire.jxclient.gui.commands.CommandCheckBoxOption
Definition: CommandCheckBoxOption.java:34
com.realtime.crossfire.jxclient.server.crossfire
Definition: AbstractCrossfireServerConnection.java:23
com.realtime.crossfire.jxclient.skin.io.GaugeUpdaterParser
Definition: GaugeUpdaterParser.java:42
com.realtime.crossfire.jxclient.protocol.UnknownMessageTypeException
Definition: UnknownMessageTypeException.java:31
com.realtime.crossfire.jxclient.gui.textinput.CommandExecutor
Definition: CommandExecutor.java:31
com.realtime.crossfire.jxclient.gui.gui.TooltipManager
Definition: TooltipManager.java:33
com.realtime.crossfire.jxclient.map.PendingDirections
Definition: PendingDirections.java:40
com.realtime.crossfire.jxclient.gui.textinput.GUIText.setHideInput
void setHideInput(final boolean hideInput)
Definition: GUIText.java:518
com.realtime.crossfire.jxclient.account
Definition: CharacterInformation.java:23
com.realtime.crossfire.jxclient.skin.io.JXCSkinLoader.spellView
final SpellsView spellView
Definition: JXCSkinLoader.java:255
com.realtime.crossfire.jxclient.skin.io.JXCSkinLoader.defaultTileSize
final int defaultTileSize
Definition: JXCSkinLoader.java:308
com.realtime.crossfire.jxclient.gui.gui.GUIElement
Definition: GUIElement.java:33
com.realtime.crossfire.jxclient.gui.commandlist.CommandList.add
void add(@NotNull final GUICommand guiCommand)
Definition: CommandList.java:60
com.realtime.crossfire.jxclient.skin.io.JXCSkinLoader.parseSpinner
void parseSpinner(@NotNull final Args args, @NotNull final TooltipManager tooltipManager, @NotNull final GUIElementListener elementListener)
Definition: JXCSkinLoader.java:1003
com.realtime.crossfire.jxclient.skin.io.JXCSkinLoader.parseText
void parseText(@NotNull final Args args, @NotNull final CommandCallback commandCallback, @NotNull final TooltipManager tooltipManager, @NotNull final GUIElementListener elementListener)
Definition: JXCSkinLoader.java:2354
com.realtime.crossfire.jxclient.skin.io.JXCSkinLoader.parseList
void parseList(@NotNull final Args args, final ListType type, @NotNull final TooltipManager tooltipManager, @NotNull final GUIElementListener elementListener, @NotNull final CommandQueue commandQueue, @NotNull final CrossfireServerConnection server, @NotNull final Image nextGroupFace, @NotNull final Image prevGroupFace)
Definition: JXCSkinLoader.java:1399
com.realtime.crossfire.jxclient.skin.io.JXCSkinLoader.parseLabelFailure
void parseLabelFailure(@NotNull final Args args, @NotNull final TooltipManager tooltipManager, @NotNull final GUIElementListener elementListener, @NotNull final CrossfireServerConnection server)
Definition: JXCSkinLoader.java:1755
com.realtime.crossfire.jxclient.skin.events.SkillRemovedSkinEvent
Definition: SkillRemovedSkinEvent.java:35
com.realtime.crossfire.jxclient.gui.label.NewCharModel
Definition: NewCharModel.java:43
com.realtime.crossfire.jxclient.shortcuts
Definition: Shortcut.java:23
com.realtime.crossfire.jxclient.skin.io.JXCSkinLoader.parseLogColor
void parseLogColor(@NotNull final Args args)
Definition: JXCSkinLoader.java:1943
com.realtime.crossfire.jxclient.gui.gui.AbstractGUIElement.getDialogBorderTop
int getDialogBorderTop()
Definition: AbstractGUIElement.java:289
com.realtime.crossfire.jxclient.gui.combobox.GUICharOptionsComboBox
Definition: GUICharOptionsComboBox.java:47
com.realtime.crossfire.jxclient.skin.io.JXCSkinLoader.parseMapDirections
void parseMapDirections(@NotNull final Args args, @NotNull final TooltipManager tooltipManager, @NotNull final GUIElementListener elementListener, @NotNull final SmoothFaces smoothFaces)
Definition: JXCSkinLoader.java:2041
com.realtime.crossfire.jxclient.settings.CommandHistoryFactory
Definition: CommandHistoryFactory.java:33
com.realtime.crossfire.jxclient.skin.io.JXCSkinLoader.parseCheckbox
void parseCheckbox(@NotNull final Args args, @NotNull final TooltipManager tooltipManager, @NotNull final GUIElementListener elementListener, @NotNull final LineNumberReader lnr)
Definition: JXCSkinLoader.java:947
com.realtime.crossfire.jxclient.skin.io.JXCSkinLoader.facesProviderFactory
final FacesProviderFactory facesProviderFactory
Definition: JXCSkinLoader.java:327
com.realtime.crossfire.jxclient.skin.io.ImageParser
Definition: ImageParser.java:42
com.realtime.crossfire.jxclient.faces.FacesManager
Definition: FacesManager.java:40
com.realtime.crossfire.jxclient.gui.gui
Definition: AbstractGUIElement.java:23
com.realtime.crossfire.jxclient.skin.io.JXCSkinLoader.parseSelectableButton
void parseSelectableButton(@NotNull final Args args, @NotNull final TooltipManager tooltipManager, @NotNull final GUIElementListener elementListener, @NotNull final LineNumberReader lnr)
Definition: JXCSkinLoader.java:928
com.realtime.crossfire.jxclient.queue
Definition: CommandQueue.java:23
com.realtime.crossfire.jxclient.gui.misc.GUIPictureStat
Definition: GUIPictureStat.java:45
com.realtime.crossfire.jxclient.skin.skin.DefaultJXCSkin.getCommandList
CommandList getCommandList(@NotNull final String name)
Definition: DefaultJXCSkin.java:304
com.realtime.crossfire.jxclient.gui.label.GUILabelQuery
Definition: GUILabelQuery.java:39
com.realtime.crossfire.jxclient.skin.io.ImageParser.getImage
Image getImage(@Nullable final Color color, @NotNull final String name)
Definition: ImageParser.java:79
com.realtime.crossfire.jxclient.skin.io.JXCSkinLoader.parseSetUserResizable
static void parseSetUserResizable(@NotNull final Gui gui)
Definition: JXCSkinLoader.java:2302
com.realtime.crossfire.jxclient.skin.events.MapScrollSkinEvent
Definition: MapScrollSkinEvent.java:35
com.realtime.crossfire.jxclient.skin.io.JXCSkinLoader.soundsCredits
final String soundsCredits
Definition: JXCSkinLoader.java:297
com.realtime.crossfire
com.realtime.crossfire.jxclient.settings.options
Definition: CheckBoxOption.java:23
com.realtime.crossfire.jxclient.gui.button.GUIButton
Definition: GUIButton.java:43
com.realtime.crossfire.jxclient.skin.io.ExpressionParser
Definition: ExpressionParser.java:35
com.realtime.crossfire.jxclient.util.Resolution.parse
static Resolution parse(@NotNull final String str)
Definition: Resolution.java:67
com.realtime.crossfire.jxclient.gui.textinput.GUIText
Definition: GUIText.java:61
com.realtime
com.realtime.crossfire.jxclient.gui.list.GUIInventoryList
Definition: GUIInventoryList.java:44
com.realtime.crossfire.jxclient.skin.io.JXCSkinLoader.gaugeUpdaterParser
GaugeUpdaterParser gaugeUpdaterParser
Definition: JXCSkinLoader.java:356
com.realtime.crossfire.jxclient.skin.io.JXCSkinLoader.model
final Model model
Definition: JXCSkinLoader.java:231
com.realtime.crossfire.jxclient.skin.io.JXCSkinLoader.parseGauge
void parseGauge(@NotNull final Args args, @NotNull final TooltipManager tooltipManager, @NotNull final GUIElementListener elementListener, @NotNull final LineNumberReader lnr)
Definition: JXCSkinLoader.java:1353
com.realtime.crossfire.jxclient.gui.scrollable
Definition: GUIScrollable.java:23
com.realtime.crossfire.jxclient.skin.io.JXCSkinLoader.inventoryView
final InventoryView inventoryView
Definition: JXCSkinLoader.java:243
com.realtime.crossfire.jxclient.shortcuts.ShortcutSlot
Definition: ShortcutSlot.java:8
com.realtime.crossfire.jxclient.util.Resolution
Definition: Resolution.java:36
com.realtime.crossfire.jxclient.gui.label.GUIHTMLLabel.setAutoResize
void setAutoResize(final boolean autoResize)
Definition: GUIHTMLLabel.java:102
com.realtime.crossfire.jxclient.skin.io.CommandParser.parseCommandArgs
GUICommand parseCommandArgs(@NotNull final Args args, @Nullable final AbstractGUIElement element, @NotNull final String command, @NotNull final GuiStateManager guiStateManager, @NotNull final CommandExecutor commandExecutor, @NotNull final LineNumberReader lnr, @NotNull final CommandQueue commandQueue, @NotNull final CrossfireServerConnection crossfireServerConnection, @NotNull final CommandCallback commandCallback, @NotNull final Macros macros)
Definition: CommandParser.java:171
com.realtime.crossfire.jxclient.skin.skin.DefaultJXCSkin.getDialogToLoad
String getDialogToLoad()
Definition: DefaultJXCSkin.java:380
com.realtime.crossfire.jxclient.gui.textinput.GUICommandText
Definition: GUICommandText.java:44
com.realtime.crossfire.jxclient.skin.io.JXCSkinLoader.definedGUIElements
final JXCSkinCache< AbstractGUIElement > definedGUIElements
Definition: JXCSkinLoader.java:417
com.realtime.crossfire.jxclient.skin.io.JXCSkinLoader.parseCommandText
void parseCommandText(@NotNull final Args args, @NotNull final CommandCallback commandCallback, @NotNull final TooltipManager tooltipManager, @NotNull final GUIElementListener elementListener, @NotNull final CommandExecutor commandExecutor, @NotNull final CrossfireServerConnection crossfireServerConnection)
Definition: JXCSkinLoader.java:1062
com.realtime.crossfire.jxclient.skin.io.JXCSkinLoader.parseDialogHide
static void parseDialogHide(@NotNull final Args args, @NotNull final Gui gui)
Definition: JXCSkinLoader.java:1213
com
com.realtime.crossfire.jxclient.skin.io.ExpressionParser.parseExpression
static Expression parseExpression(@NotNull final String str)
Definition: ExpressionParser.java:80
com.realtime.crossfire.jxclient.skin.skin.Dialogs
Definition: Dialogs.java:39
com.realtime.crossfire.jxclient.gui.map.GUIMap
Definition: GUIMap.java:48
com.realtime.crossfire.jxclient.skin.io.JXCSkinLoader.parseLabelHtml
void parseLabelHtml(@NotNull final Args args, @NotNull final TooltipManager tooltipManager, @NotNull final GUIElementListener elementListener, @NotNull final LineNumberReader lnr)
Definition: JXCSkinLoader.java:1688
com.realtime.crossfire.jxclient.gui.list.GUICharacterList
Definition: GUICharacterList.java:41
com.realtime.crossfire.jxclient.skin.io.ParseUtils.parseColorNull
static Color parseColorNull(@NotNull final String name)
Definition: ParseUtils.java:104
com.realtime.crossfire.jxclient.skin.io.ParseUtils.parseStat
static int parseStat(@NotNull final String name)
Definition: ParseUtils.java:56
com.realtime.crossfire.jxclient.items
Definition: AbstractItemView.java:23
com.realtime.crossfire.jxclient.gui.item
Definition: GUIItem.java:23
com.realtime.crossfire.jxclient.skin.io.FontParser.getFont
Font getFont(@NotNull final String name)
Definition: FontParser.java:59
com.realtime.crossfire.jxclient.skin.io.JXCSkinLoader.parseFont
void parseFont(@NotNull final Args args)
Definition: JXCSkinLoader.java:1337
com.realtime.crossfire.jxclient.skin.io.JXCSkinLoader.getUnreferencedElement
AbstractGUIElement getUnreferencedElement(@NotNull final String name, @NotNull final Collection< GUIElement > unreferencedElements)
Definition: JXCSkinLoader.java:1582
com.realtime.crossfire.jxclient.gui.keybindings.KeyBindings
Definition: KeyBindings.java:47
com.realtime.crossfire.jxclient.settings.options.CheckBoxOption
Definition: CheckBoxOption.java:32
com.realtime.crossfire.jxclient.skin.io.JXCSkinLoader.knowledgeView
final KnowledgeView knowledgeView
Definition: JXCSkinLoader.java:273
com.realtime.crossfire.jxclient.faces.FacesProviderFactory
Definition: FacesProviderFactory.java:34
com.realtime.crossfire.jxclient.skin.io.JXCSkinLoader.parseKey
void parseKey(@NotNull final Args args, @Nullable final Gui gui, @NotNull final String line)
Definition: JXCSkinLoader.java:1665
com.realtime.crossfire.jxclient.skin.io.JXCSkinLoader.parsePictureStat
void parsePictureStat(@NotNull final Args args, @NotNull final TooltipManager tooltipManager, @NotNull final GUIElementListener elementListener, @NotNull final LineNumberReader lnr)
Definition: JXCSkinLoader.java:2108
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.io.JXCSkinLoader.parseSetAutoSize
static void parseSetAutoSize(@NotNull final Gui gui, @NotNull final Args args)
Definition: JXCSkinLoader.java:2179
com.realtime.crossfire.jxclient.skin.io.JXCSkinLoader.parseBegin
Group parseBegin(@NotNull final Args beginArgs, @NotNull final GroupLayout layout, @NotNull final LineNumberReader lnr, @NotNull final Collection< GUIElement > unreferencedElements, final boolean topLevel)
Definition: JXCSkinLoader.java:2637
com.realtime.crossfire.jxclient.gui.gui.RendererGuiState
Definition: RendererGuiState.java:31
com.realtime.crossfire.jxclient.skin.io.JXCSkinLoader.parseIgnore
void parseIgnore(@NotNull final Args args)
Definition: JXCSkinLoader.java:1380
com.realtime.crossfire.jxclient.gui.gui.Expression
Definition: Expression.java:31
com.realtime.crossfire.jxclient.skin.skin.DefaultJXCSkin.insertGuiElement
void insertGuiElement(@NotNull final GUIElement guiElement)
Definition: DefaultJXCSkin.java:363
com.realtime.crossfire.jxclient.skin.io.JXCSkinLoader.parseLabelStat2
void parseLabelStat2(@NotNull final Args args, @NotNull final TooltipManager tooltipManager, @NotNull final GUIElementListener elementListener)
Definition: JXCSkinLoader.java:1806
com.realtime.crossfire.jxclient.util.NumberParser
Definition: NumberParser.java:32
com.realtime.crossfire.jxclient.skin.io.FontParser
Definition: FontParser.java:36
com.realtime.crossfire.jxclient.skin.io.ParseUtils.parseCheckBoxOption
static CheckBoxOption parseCheckBoxOption(@NotNull final String name, @NotNull final OptionManager optionManager)
Definition: ParseUtils.java:222
com.realtime.crossfire.jxclient.gui.gui.AbstractGUIElement
Definition: AbstractGUIElement.java:37
com.realtime.crossfire.jxclient.gui.combobox.GUIClassesComboBox
Definition: GUIClassesComboBox.java:46
com.realtime.crossfire.jxclient.skin.io.GuiElementParser.lookupLabelElement
AbstractLabel lookupLabelElement(@NotNull final String name)
Definition: GuiElementParser.java:77
com.realtime.crossfire.jxclient.skin.factory.DialogFactory
Definition: DialogFactory.java:44
com.realtime.crossfire.jxclient.skin.io.JXCSkinLoader.parseVertical
void parseVertical(@NotNull final Args args, @NotNull final Container gui, @NotNull final LineNumberReader lnr, final boolean isDialog)
Definition: JXCSkinLoader.java:2446
com.realtime.crossfire.jxclient.gui.label.GUINewcharLabel
Definition: GUINewcharLabel.java:42
com.realtime.crossfire.jxclient.skin.events.CrossfireMagicmapSkinEvent
Definition: CrossfireMagicmapSkinEvent.java:35
com.realtime.crossfire.jxclient.skin.io.JXCSkinLoader.parseHorizontal
void parseHorizontal(@NotNull final Args args, @NotNull final Container gui, @NotNull final LineNumberReader lnr, final boolean isDialog)
Definition: JXCSkinLoader.java:1457
com.realtime.crossfire.jxclient.gui.commands
Definition: AccountCreateCharacterCommand.java:23
com.realtime.crossfire.jxclient.gui.misc
Definition: GUICheckBox.java:23
com.realtime.crossfire.jxclient.faces.FaceImagesUtils
Definition: FaceImagesUtils.java:36
com.realtime.crossfire.jxclient.settings.options.OptionManager
Definition: OptionManager.java:36
com.realtime.crossfire.jxclient.items.KnowledgeTypeView
Definition: KnowledgeTypeView.java:13
com.realtime.crossfire.jxclient.skin.io.JXCSkinLoader.darknessColors
final DarknessColors darknessColors
Definition: JXCSkinLoader.java:437
com.realtime.crossfire.jxclient.skin.skin.DefaultJXCSkin.getDefaultKeyBindings
KeyBindings getDefaultKeyBindings()
Definition: DefaultJXCSkin.java:316
com.realtime.crossfire.jxclient.skin.io.JXCSkinLoader.avoidCopyArea
final boolean avoidCopyArea
Definition: JXCSkinLoader.java:279
com.realtime.crossfire.jxclient.gui.misc.GUIPicture
Definition: GUIPicture.java:42
com.realtime.crossfire.jxclient.gui.gauge.Orientation
Definition: Orientation.java:29
com.realtime.crossfire.jxclient.skin.io.JXCSkinLoader.knowledgeTypeView
final KnowledgeTypeView knowledgeTypeView
Definition: JXCSkinLoader.java:270
com.realtime.crossfire.jxclient.faces.FacesProviderFactory.getFacesProvider
FacesProvider getFacesProvider(final int size)
Definition: FacesProviderFactory.java:71
com.realtime.crossfire.jxclient.server.crossfire.Model.getItemSet
ItemSet getItemSet()
Definition: Model.java:147
com.realtime.crossfire.jxclient.gui.gauge.GaugeUpdater.setGauge
void setGauge(@NotNull final GUIGaugeListener gauge)
Definition: GaugeUpdater.java:71
com.realtime.crossfire.jxclient.gui.log.GUIMessageLog
Definition: GUIMessageLog.java:40
com.realtime.crossfire.jxclient.metaserver.MetaserverModel
Definition: MetaserverModel.java:40
com.realtime.crossfire.jxclient.items.InventoryView
Definition: InventoryView.java:38
com.realtime.crossfire.jxclient.skin.io.JXCSkinLoader.ListType.KNOWLEDGE_LIST
KNOWLEDGE_LIST
Definition: JXCSkinLoader.java:224
com.realtime.crossfire.jxclient.skin.skin.DefaultJXCSkin.addSkinEvent
void addSkinEvent(@NotNull final SkinEvent skinEvent)
Definition: DefaultJXCSkin.java:437
com.realtime.crossfire.jxclient.skin.io.JXCSkinLoader.parseSetInvisible
void parseSetInvisible(@NotNull final Args args)
Definition: JXCSkinLoader.java:2203
com.realtime.crossfire.jxclient.skin.io.JXCSkinLoader.ListType.QUEST
QUEST
Definition: JXCSkinLoader.java:209
com.realtime.crossfire.jxclient.skin.io.JXCSkinLoader.fontParser
FontParser fontParser
Definition: JXCSkinLoader.java:405
com.realtime.crossfire.jxclient.skin.io.GuiElementParser.lookupLabelLogElement
GUILabelLog lookupLabelLogElement(@NotNull final String name)
Definition: GuiElementParser.java:93
com.realtime.crossfire.jxclient.window.GuiManager
Definition: GuiManager.java:63
com.realtime.crossfire.jxclient.gui.item.GUIItemInventory
Definition: GUIItemInventory.java:46
com.realtime.crossfire.jxclient.skin.factory.TextButtonFactory.newTextButton
AbstractGUIElement newTextButton(@NotNull final TooltipManager tooltipManager, @NotNull final GUIElementListener elementListener, @NotNull final String name, @NotNull final String text, final boolean autoRepeat, @NotNull final CommandList commandList)
Definition: TextButtonFactory.java:134
com.realtime.crossfire.jxclient.faces.FaceImages
Definition: FaceImages.java:32
com.realtime.crossfire.jxclient.skin.io.JXCSkinLoader.parseMinimap
void parseMinimap(@NotNull final Args args, @NotNull final TooltipManager tooltipManager, @NotNull final GUIElementListener elementListener)
Definition: JXCSkinLoader.java:2002
com.realtime.crossfire.jxclient.gui.label.GUIOneLineLabel
Definition: GUIOneLineLabel.java:43
com.realtime.crossfire.jxclient.gui.gui.GUIElementListener
Definition: GUIElementListener.java:32
com.realtime.crossfire.jxclient.skin.io.Args.hasMore
boolean hasMore()
Definition: Args.java:81
com.realtime.crossfire.jxclient.account.CharacterModel
Definition: CharacterModel.java:40
com.realtime.crossfire.jxclient.gui.gui.Extent
Definition: Extent.java:32
com.realtime.crossfire.jxclient.gui.gui.AbstractGUIElement.getDialogBorderLeft
int getDialogBorderLeft()
Definition: AbstractGUIElement.java:297
com.realtime.crossfire.jxclient.util.Resolution.getHeight
int getHeight()
Definition: Resolution.java:96
com.realtime.crossfire.jxclient.gui.label.GUILabelFailure
Definition: GUILabelFailure.java:39
com.realtime.crossfire.jxclient.skin.io.JXCSkinLoader.commandParser
CommandParser commandParser
Definition: JXCSkinLoader.java:393
com.realtime.crossfire.jxclient.gui.keybindings.KeybindingsManager
Definition: KeybindingsManager.java:40
com.realtime.crossfire.jxclient.gui.misc.GUIScrollBar
Definition: GUIScrollBar.java:43
com.realtime.crossfire.jxclient.items.KnowledgeView
Definition: KnowledgeView.java:15