00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 package com.realtime.crossfire.jxclient.main;
00023
00024 import com.realtime.crossfire.jxclient.account.CharacterModel;
00025 import com.realtime.crossfire.jxclient.faces.SmoothFaces;
00026 import com.realtime.crossfire.jxclient.gui.gui.ActivatableGUIElement;
00027 import com.realtime.crossfire.jxclient.gui.gui.GUIElementListener;
00028 import com.realtime.crossfire.jxclient.gui.gui.Gui;
00029 import com.realtime.crossfire.jxclient.gui.gui.GuiUtils;
00030 import com.realtime.crossfire.jxclient.gui.gui.TooltipManager;
00031 import com.realtime.crossfire.jxclient.gui.label.JXCWindowRenderer;
00032 import com.realtime.crossfire.jxclient.gui.textinput.CommandCallback;
00033 import com.realtime.crossfire.jxclient.gui.textinput.CommandExecutor;
00034 import com.realtime.crossfire.jxclient.gui.textinput.GUICommandFactory;
00035 import com.realtime.crossfire.jxclient.guistate.GuiStateManager;
00036 import com.realtime.crossfire.jxclient.metaserver.MetaserverModel;
00037 import com.realtime.crossfire.jxclient.queue.CommandQueue;
00038 import com.realtime.crossfire.jxclient.server.crossfire.CrossfireServerConnection;
00039 import com.realtime.crossfire.jxclient.settings.Macros;
00040 import com.realtime.crossfire.jxclient.shortcuts.Shortcuts;
00041 import com.realtime.crossfire.jxclient.skin.io.JXCSkinLoader;
00042 import com.realtime.crossfire.jxclient.skin.skin.GuiFactory;
00043 import com.realtime.crossfire.jxclient.skin.skin.JXCSkin;
00044 import com.realtime.crossfire.jxclient.skin.skin.JXCSkinException;
00045 import com.realtime.crossfire.jxclient.skin.source.JXCSkinClassSource;
00046 import com.realtime.crossfire.jxclient.skin.source.JXCSkinDirSource;
00047 import com.realtime.crossfire.jxclient.skin.source.JXCSkinSource;
00048 import com.realtime.crossfire.jxclient.spells.CurrentSpellManager;
00049 import com.realtime.crossfire.jxclient.util.Resolution;
00050 import java.awt.Component;
00051 import java.io.File;
00052 import org.jetbrains.annotations.NotNull;
00053 import org.jetbrains.annotations.Nullable;
00054
00059 public class SkinLoader {
00060
00064 @NotNull
00065 private final CommandCallback commandCallback;
00066
00070 @NotNull
00071 private final MetaserverModel metaserverModel;
00072
00076 @NotNull
00077 private final CharacterModel characterModel;
00078
00082 @NotNull
00083 private final SmoothFaces smoothFaces;
00084
00088 @NotNull
00089 private final GUICommandFactory guiCommandFactory;
00090
00094 @NotNull
00095 private final CurrentSpellManager currentSpellManager = new CurrentSpellManager();
00096
00100 @Nullable
00101 private final Resolution resolution;
00102
00106 @NotNull
00107 private final Macros macros;
00108
00112 @NotNull
00113 private final JXCWindowRenderer windowRenderer;
00114
00118 @NotNull
00119 private final CrossfireServerConnection server;
00120
00124 @NotNull
00125 private final GuiStateManager guiStateManager;
00126
00130 @NotNull
00131 private final TooltipManager tooltipManager;
00132
00136 @NotNull
00137 private final CommandQueue commandQueue;
00138
00142 @NotNull
00143 private final JXCSkinLoader skinLoader;
00144
00148 @NotNull
00149 private final CommandExecutor commandExecutor;
00150
00154 @NotNull
00155 private final Shortcuts shortcuts;
00156
00176 public SkinLoader(@NotNull final CommandCallback commandCallback, @NotNull final MetaserverModel metaserverModel, @Nullable final Resolution resolution, @NotNull final Macros macros, @NotNull final JXCWindowRenderer windowRenderer, @NotNull final CrossfireServerConnection server, @NotNull final GuiStateManager guiStateManager, @NotNull final TooltipManager tooltipManager, @NotNull final CommandQueue commandQueue, @NotNull final JXCSkinLoader skinLoader, @NotNull final CommandExecutor commandExecutor, @NotNull final Shortcuts shortcuts, @NotNull final CharacterModel characterModel, @NotNull final SmoothFaces smoothFaces, @NotNull final GUICommandFactory guiCommandFactory) {
00177 this.commandCallback = commandCallback;
00178 this.metaserverModel = metaserverModel;
00179 this.resolution = resolution;
00180 this.macros = macros;
00181 this.windowRenderer = windowRenderer;
00182 this.server = server;
00183 this.guiStateManager = guiStateManager;
00184 this.tooltipManager = tooltipManager;
00185 this.commandQueue = commandQueue;
00186 this.skinLoader = skinLoader;
00187 this.commandExecutor = commandExecutor;
00188 this.shortcuts = shortcuts;
00189 this.characterModel = characterModel;
00190 this.smoothFaces = smoothFaces;
00191 this.guiCommandFactory = guiCommandFactory;
00192 }
00193
00200 @NotNull
00201 public JXCSkin loadSkin(@NotNull final String skinName) throws JXCSkinException {
00202
00203 final File dir = new File(skinName);
00204 final JXCSkinSource skinSource;
00205 if (dir.exists() && dir.isDirectory()) {
00206 skinSource = new JXCSkinDirSource(dir);
00207 } else {
00208
00209 skinSource = new JXCSkinClassSource("com/realtime/crossfire/jxclient/skins/"+skinName);
00210 }
00211 final GuiFactory guiFactory = new GuiFactory(guiCommandFactory);
00212 final GUIElementListener elementListener = new GUIElementListener() {
00213
00214 @Override
00215 public void raiseDialog(@NotNull final Component component) {
00216 final Gui gui = GuiUtils.getGui(component);
00217 if (gui != null) {
00218 windowRenderer.raiseDialog(gui);
00219 }
00220 }
00221
00222 @Override
00223 public void activeChanged(@NotNull final ActivatableGUIElement element, final boolean active) {
00224 final Gui gui = GuiUtils.getGui(element);
00225 if (gui != null) {
00226 gui.setActiveElement(element, active);
00227 }
00228 }
00229
00230 @Override
00231 public boolean isActive(@NotNull final ActivatableGUIElement element) {
00232 final Gui gui = GuiUtils.getGui(element);
00233 return gui != null && gui.isActiveElement(element);
00234 }
00235
00236 };
00237
00238 final JXCSkin skin = skinLoader.load(skinSource, server, guiStateManager, tooltipManager, windowRenderer, elementListener, metaserverModel, characterModel, commandQueue, shortcuts, commandExecutor, currentSpellManager, commandCallback, macros, guiFactory, smoothFaces);
00239 if (resolution != null) {
00240 if (skin.getMinResolution().getWidth() > resolution.getWidth() || skin.getMinResolution().getHeight() > resolution.getHeight()) {
00241 throw new JXCSkinException("resolution "+resolution+" is not supported by this skin");
00242 }
00243 if (resolution.getWidth() > skin.getMaxResolution().getWidth() || resolution.getHeight() > skin.getMaxResolution().getHeight()) {
00244 throw new JXCSkinException("resolution "+resolution+" is not supported by this skin");
00245 }
00246 }
00247
00248 return skin;
00249 }
00250
00251 }