Crossfire JXClient, Trunk
JXCWindow.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.main;
24 
45 import java.awt.Dimension;
46 import java.awt.Insets;
47 import java.awt.event.ComponentEvent;
48 import java.awt.event.ComponentListener;
49 import java.awt.event.KeyEvent;
50 import java.awt.event.KeyListener;
51 import java.awt.event.WindowAdapter;
52 import java.awt.event.WindowEvent;
53 import java.awt.event.WindowFocusListener;
54 import java.awt.event.WindowListener;
55 import java.io.IOException;
56 import javax.swing.JFrame;
57 import javax.swing.SwingUtilities;
58 import javax.swing.WindowConstants;
59 import org.jetbrains.annotations.NotNull;
60 import org.jetbrains.annotations.Nullable;
61 
67 public class JXCWindow {
68 
72  public static final boolean DISABLE_START_GUI = true;
73 
77  @NotNull
78  private final Exiter exiter;
79 
83  @NotNull
84  private final GuiManager guiManager;
85 
89  @NotNull
91 
95  @NotNull
96  private final CommandQueue commandQueue;
97 
101  @NotNull
102  private final KeyHandler keyHandler;
103 
107  @NotNull
109 
113  @NotNull
115 
119  @NotNull
120  private final JFrame frame = new JFrame("");
121 
133  @NotNull
134  @SuppressWarnings("FieldCanBeLocal")
135  private final WindowFocusListener windowFocusListener = new WindowAdapter() {
136 
137  @Override
138  @SuppressWarnings("MethodDoesntCallSuperMethod")
139  public void windowLostFocus(final WindowEvent e) {
142  }
143  }
144 
145  };
146 
150  @NotNull
152 
153  @Override
154  public void delinvReceived(final int tag) {
155  // ignore
156  }
157 
158  @Override
159  public void delitemReceived(final int @NotNull [] tags) {
160  // ignore
161  }
162 
163  @Override
164  public void addItemReceived(final int location, final int tag, final int flags, final int weight, final int faceNum, @NotNull final String name, @NotNull final String namePl, final int anim, final int animSpeed, final int nrof, final int type) {
165  // ignore
166  }
167 
168  @Override
169  public void playerReceived(final int tag, final int weight, final int faceNum, @NotNull final String name) {
170  SwingUtilities.invokeLater(guiManager::playerReceived);
171  }
172 
173  @Override
174  public void upditemReceived(final int flags, final int tag, final int valLocation, final int valFlags, final int valWeight, final int valFaceNum, @NotNull final String valName, @NotNull final String valNamePl, final int valAnim, final int valAnimSpeed, final int valNrof) {
175  // ignore
176  }
177 
178  };
179 
183  @NotNull
184  @SuppressWarnings("FieldCanBeLocal")
185  private final WindowListener windowListener = new WindowAdapter() {
186 
187  @Override
188  @SuppressWarnings("MethodDoesntCallSuperMethod")
189  public void windowClosing(@NotNull final WindowEvent e) {
190  if (!guiManager.openQuitDialog()) {
191  exiter.terminate();
192  }
193  }
194 
195  @Override
196  @SuppressWarnings("MethodDoesntCallSuperMethod")
197  public void windowClosed(@NotNull final WindowEvent e) {
198  if (!frame.isVisible()) {
199  exiter.terminate();
200  }
201  }
202 
203  };
204 
208  @NotNull
209  @SuppressWarnings("FieldCanBeLocal")
210  private final KeyListener keyListener = new KeyListener() {
211 
212  @Override
213  public void keyTyped(@NotNull final KeyEvent e) {
214  // ignore
215  }
216 
217  @Override
218  public void keyPressed(@NotNull final KeyEvent e) {
220  }
221 
222  @Override
223  public void keyReleased(@NotNull final KeyEvent e) {
225  }
226 
227  };
228 
233  @NotNull
235 
236  @Override
237  public void commandQueryReceived(@NotNull final String prompt, final int queryType) {
238  SwingUtilities.invokeLater(() -> guiManager.openQueryDialog(prompt, queryType));
239  }
240 
241  };
242 
247  @NotNull
248  @SuppressWarnings("FieldCanBeLocal")
250 
251  @Override
252  public void start() {
255  if (DISABLE_START_GUI) {
256  exiter.terminate();
257  }
258  }
259 
260  @Override
261  public void metaserver() {
264  }
265 
266  @Override
267  public void preConnecting(@NotNull final String serverInfo) {
268  // ignore
269  }
270 
271  @Override
272  public void connecting(@NotNull final String serverInfo) {
275  }
276 
277  @Override
278  public void connecting(@NotNull final ClientSocketState clientSocketState, @NotNull final String param) {
279  // ignore
280  }
281 
282  @Override
283  public void connected() {
284  // ignore
285  }
286 
287  @Override
288  public void connectFailed(@NotNull final String reason) {
289  // ignore
290  }
291 
292  };
293 
298  @NotNull
299  @SuppressWarnings("FieldCanBeLocal")
301 
302  @Override
303  public void markSent(final int tag) {
304  // ignore
305  }
306 
307  @Override
308  public void replySent() {
310  }
311 
312  };
313 
317  @NotNull
318  @SuppressWarnings("FieldCanBeLocal")
320 
321  @Override
322  public void manageAccount() {
323  SwingUtilities.invokeLater(guiManager::manageAccount);
324  }
325 
326  @Override
327  public void addAccount(@NotNull final CharacterInformation characterInformation) {
328  SwingUtilities.invokeLater(() -> characterModel.add(characterInformation));
329  }
330 
331  @Override
332  public void startAccountList(@NotNull final String accountName) {
333  SwingUtilities.invokeLater(() -> {
335  guiManager.setAccountName(accountName);
336  });
337  }
338 
339  @Override
340  public void endAccountList(final int count) {
341  SwingUtilities.invokeLater(() -> {
343  guiManager.showCharacters(count);
344  });
345  }
346 
347  @Override
348  public void startPlaying() {
349  SwingUtilities.invokeLater(guiManager::hideAccountWindows);
350  }
351 
352  @Override
353  public void selectCharacter(@NotNull final String accountName, @NotNull final String characterName) {
354  SwingUtilities.invokeLater(() -> guiManager.selectCharacter(accountName, characterName));
355  }
356 
357  };
358 
375  public JXCWindow(@NotNull final Exiter exiter, @NotNull final CrossfireServerConnection server, @NotNull final OptionManager optionManager, @NotNull final GuiStateManager guiStateManager, @NotNull final JXCWindowRenderer windowRenderer, @NotNull final CommandQueue commandQueue, @NotNull final GuiManager guiManager, @NotNull final KeyHandler keyHandler, @NotNull final CharacterModel characterModel, @NotNull final JXCConnection connection, @Nullable final Resolution resolution, final boolean fullScreen, @NotNull final JXCSkin skin) {
376  this.exiter = exiter;
377  this.server = server;
378  this.optionManager = optionManager;
379  this.commandQueue = commandQueue;
380  this.guiManager = guiManager;
381  this.keyHandler = keyHandler;
382  this.characterModel = characterModel;
383  frame.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
384  try {
385  frame.setIconImage(ResourceUtils.loadImage(ResourceUtils.APPLICATION_ICON).getImage());
386  } catch (final IOException ex) {
387  System.err.println("Cannot find application icon: "+ex.getMessage());
388  }
389  frame.setFocusTraversalKeysEnabled(false);
390  frame.addWindowFocusListener(windowFocusListener);
391  frame.addWindowListener(windowListener);
392  frame.addComponentListener(new ComponentListener() {
393 
394  @Override
395  public void componentResized(final ComponentEvent e) {
396  final int width = frame.getContentPane().getWidth();
397  final int height = frame.getContentPane().getHeight();
398  guiManager.updateWindowSize(width, height);
399  }
400 
401  @Override
402  public void componentMoved(final ComponentEvent e) {
403  // ignore
404  }
405 
406  @Override
407  public void componentShown(final ComponentEvent e) {
408  // ignore
409  }
410 
411  @Override
412  public void componentHidden(final ComponentEvent e) {
413  // ignore
414  }
415 
416  });
419  guiStateManager.addGuiStateListener(guiStateListener);
420  frame.addKeyListener(keyListener);
421  connection.setFrame(frame);
422 
425  keyHandler.setDefaultKeyBindings(skin.getDefaultKeyBindings());
426 
427  final Resolution minResolution = skin.getMinResolution();
428  final Dimension minSize = minResolution.asDimension();
429  final Dimension maxSize = skin.getMaxResolution().asDimension();
430  final Insets insets = frame.getInsets();
431  minSize.width += insets.left+insets.right;
432  minSize.height += insets.top+insets.bottom;
433  maxSize.width += insets.left+insets.right;
434  maxSize.height += insets.top+insets.bottom;
435  frame.setMinimumSize(minSize);
436  frame.setMaximumSize(maxSize);
437 
438  if (!fullScreen || !windowRenderer.setFullScreenMode(frame, resolution)) {
439  windowRenderer.setWindowMode(frame, resolution, minResolution, minSize.equals(maxSize));
440  }
441 
442  guiManager.setSkin(skin);
443  guiManager.updateWindowSize(frame.getWidth(), frame.getHeight());
444  DialogStateParser.load(skin, windowRenderer);
445  }
446 
450  public void term() {
451  guiManager.term();
453  }
454 
455 }
com.realtime.crossfire.jxclient
com.realtime.crossfire.jxclient.skin.skin
Definition: DefaultJXCSkin.java:23
com.realtime.crossfire.jxclient.main.JXCWindow.server
final CrossfireServerConnection server
Definition: JXCWindow.java:90
com.realtime.crossfire.jxclient.window.GuiManager.openQueryDialog
void openQueryDialog(@NotNull final String prompt, final int queryType)
Definition: GuiManager.java:559
com.realtime.crossfire.jxclient.server
com.realtime.crossfire.jxclient.window.KeyHandler.isRunningUsingCtrl
boolean isRunningUsingCtrl
Definition: KeyHandler.java:87
com.realtime.crossfire.jxclient.main.JXCWindow.keyHandler
final KeyHandler keyHandler
Definition: JXCWindow.java:102
com.realtime.crossfire.jxclient.guistate.ClientSocketState
Definition: ClientSocketState.java:30
com.realtime.crossfire.jxclient.window
Definition: DialogStateParser.java:23
com.realtime.crossfire.jxclient.skin
com.realtime.crossfire.jxclient.main.JXCWindow.guiStateListener
final GuiStateListener guiStateListener
Definition: JXCWindow.java:249
com.realtime.crossfire.jxclient.window.GuiManager.selectCharacter
void selectCharacter(@NotNull final String accountName, @NotNull final String characterName)
Definition: GuiManager.java:1112
com.realtime.crossfire.jxclient.main.JXCWindow.windowFocusListener
final WindowFocusListener windowFocusListener
Definition: JXCWindow.java:135
com.realtime.crossfire.jxclient.main.JXCWindow.term
void term()
Definition: JXCWindow.java:450
com.realtime.crossfire.jxclient.main.JXCWindow.frame
final JFrame frame
Definition: JXCWindow.java:120
com.realtime.crossfire.jxclient.settings.options.OptionManager.loadOptions
void loadOptions()
Definition: OptionManager.java:109
com.realtime.crossfire.jxclient.main.JXCWindow.optionManager
final OptionManager optionManager
Definition: JXCWindow.java:108
com.realtime.crossfire.jxclient.window.JXCConnection
Definition: JXCConnection.java:41
com.realtime.crossfire.jxclient.server.crossfire.CrossfireServerConnection.addSentPacketListener
void addSentPacketListener(@NotNull SentPacketListener listener)
com.realtime.crossfire.jxclient.account.CharacterInformation
Definition: CharacterInformation.java:32
com.realtime.crossfire.jxclient.server.crossfire.CrossfireAccountListener
Definition: CrossfireAccountListener.java:34
com.realtime.crossfire.jxclient.window.KeyHandler
Definition: KeyHandler.java:45
com.realtime.crossfire.jxclient.util.ResourceUtils.loadImage
static ImageIcon loadImage(@NotNull final String name)
Definition: ResourceUtils.java:79
com.realtime.crossfire.jxclient.window.KeyHandler.keyReleased
void keyReleased(@NotNull final KeyEvent e)
Definition: KeyHandler.java:274
com.realtime.crossfire.jxclient.main.JXCWindow.accountListener
final CrossfireAccountListener accountListener
Definition: JXCWindow.java:319
com.realtime.crossfire.jxclient.window.GuiManager.updateWindowSize
void updateWindowSize(final int width, final int height)
Definition: GuiManager.java:1051
com.realtime.crossfire.jxclient.server.crossfire.CrossfireQueryListener
Definition: CrossfireQueryListener.java:33
com.realtime.crossfire.jxclient.server.crossfire.CrossfireServerConnection.removeCrossfireQueryListener
void removeCrossfireQueryListener(@NotNull CrossfireQueryListener listener)
com.realtime.crossfire.jxclient.settings
Definition: CommandHistory.java:23
com.realtime.crossfire.jxclient.gui.misc.JXCWindowRenderer
Definition: JXCWindowRenderer.java:87
com.realtime.crossfire.jxclient.settings.options.OptionManager.saveOptions
void saveOptions()
Definition: OptionManager.java:131
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.guistate
Definition: ClientSocketState.java:23
com.realtime.crossfire.jxclient.server.crossfire.CrossfireServerConnection.addCrossfireAccountListener
void addCrossfireAccountListener(@NotNull CrossfireAccountListener listener)
com.realtime.crossfire.jxclient.main.JXCWindow.JXCWindow
JXCWindow(@NotNull final Exiter exiter, @NotNull final CrossfireServerConnection server, @NotNull final OptionManager optionManager, @NotNull final GuiStateManager guiStateManager, @NotNull final JXCWindowRenderer windowRenderer, @NotNull final CommandQueue commandQueue, @NotNull final GuiManager guiManager, @NotNull final KeyHandler keyHandler, @NotNull final CharacterModel characterModel, @NotNull final JXCConnection connection, @Nullable final Resolution resolution, final boolean fullScreen, @NotNull final JXCSkin skin)
Definition: JXCWindow.java:375
com.realtime.crossfire.jxclient.util.ResourceUtils.APPLICATION_ICON
static final String APPLICATION_ICON
Definition: ResourceUtils.java:58
com.realtime.crossfire.jxclient.main.JXCWindow.commandQueue
final CommandQueue commandQueue
Definition: JXCWindow.java:96
com.realtime.crossfire.jxclient.guistate.GuiStateListener
Definition: GuiStateListener.java:32
com.realtime.crossfire.jxclient.server.crossfire.CrossfireServerConnection.removeCrossfireUpdateItemListener
void removeCrossfireUpdateItemListener(@NotNull CrossfireUpdateItemListener crossfireUpdateItemListener)
com.realtime.crossfire.jxclient.server.crossfire.CrossfireServerConnection
Definition: CrossfireServerConnection.java:37
com.realtime.crossfire.jxclient.main.JXCWindow.windowListener
final WindowListener windowListener
Definition: JXCWindow.java:185
com.realtime.crossfire.jxclient.window.KeyHandler.keyPressed
void keyPressed(@NotNull final KeyEvent e)
Definition: KeyHandler.java:260
com.realtime.crossfire.jxclient.main.JXCWindow.exiter
final Exiter exiter
Definition: JXCWindow.java:78
com.realtime.crossfire.jxclient.util.ResourceUtils
Definition: ResourceUtils.java:34
com.realtime.crossfire.jxclient.gui
com.realtime.crossfire.jxclient.queue.CommandQueue
Definition: CommandQueue.java:38
com.realtime.crossfire.jxclient.main.JXCWindow
Definition: JXCWindow.java:67
com.realtime.crossfire.jxclient.window.DialogStateParser
Definition: DialogStateParser.java:47
com.realtime.crossfire.jxclient.queue.CommandQueue.stopRunning
boolean stopRunning()
Definition: CommandQueue.java:269
com.realtime.crossfire.jxclient.main.JXCWindow.sentPacketListener
final SentPacketListener sentPacketListener
Definition: JXCWindow.java:300
com.realtime.crossfire.jxclient.util.Resolution.equals
boolean equals(@Nullable final Object obj)
Definition: Resolution.java:111
com.realtime.crossfire.jxclient.window.KeyHandler.setDefaultKeyBindings
void setDefaultKeyBindings(@NotNull final KeyBindings defaultKeyBindings)
Definition: KeyHandler.java:109
com.realtime.crossfire.jxclient.window.GuiManager.setAccountName
void setAccountName(@NotNull final String accountName)
Definition: GuiManager.java:1100
com.realtime.crossfire.jxclient.account.CharacterModel.add
void add(@NotNull final CharacterInformation characterInformation)
Definition: CharacterModel.java:124
com.realtime.crossfire.jxclient.util
Definition: Codec.java:23
com.realtime.crossfire.jxclient.server.crossfire
Definition: AbstractCrossfireServerConnection.java:23
com.realtime.crossfire.jxclient.window.GuiManager.showCharacters
void showCharacters(final int count)
Definition: GuiManager.java:466
com.realtime.crossfire.jxclient.account
Definition: CharacterInformation.java:23
com.realtime.crossfire.jxclient.server.crossfire.CrossfireServerConnection.addCrossfireQueryListener
void addCrossfireQueryListener(@NotNull CrossfireQueryListener listener)
com.realtime.crossfire.jxclient.window.GuiManager.openQuitDialog
boolean openQuitDialog()
Definition: GuiManager.java:494
com.realtime.crossfire.jxclient.main.JXCWindow.DISABLE_START_GUI
static final boolean DISABLE_START_GUI
Definition: JXCWindow.java:72
com.realtime.crossfire.jxclient.queue
Definition: CommandQueue.java:23
com.realtime.crossfire.jxclient.util.Resolution.asDimension
Dimension asDimension()
Definition: Resolution.java:138
com.realtime.crossfire
com.realtime.crossfire.jxclient.settings.options
Definition: CheckBoxOption.java:23
com.realtime
com.realtime.crossfire.jxclient.util.Resolution
Definition: Resolution.java:36
com.realtime.crossfire.jxclient.server.crossfire.CrossfireServerConnection.addCrossfireUpdateItemListener
void addCrossfireUpdateItemListener(@NotNull CrossfireUpdateItemListener crossfireUpdateItemListener)
com
com.realtime.crossfire.jxclient.window.DialogStateParser.load
static void load(@NotNull final JXCSkin skin, @NotNull final JXCWindowRenderer windowRenderer)
Definition: DialogStateParser.java:66
com.realtime.crossfire.jxclient.window.GuiManager.closeQueryDialog
void closeQueryDialog()
Definition: GuiManager.java:706
com.realtime.crossfire.jxclient.main.JXCWindow.guiManager
final GuiManager guiManager
Definition: JXCWindow.java:84
com.realtime.crossfire.jxclient.window.GuiManager.term
void term()
Definition: GuiManager.java:961
com.realtime.crossfire.jxclient.server.crossfire.CrossfireUpdateItemListener
Definition: CrossfireUpdateItemListener.java:32
com.realtime.crossfire.jxclient.window.GuiManager.setSkin
void setSkin(@NotNull final JXCSkin skin)
Definition: GuiManager.java:917
com.realtime.crossfire.jxclient.main.JXCWindow.characterModel
final CharacterModel characterModel
Definition: JXCWindow.java:114
com.realtime.crossfire.jxclient.main.Exiter.terminate
void terminate()
Definition: Exiter.java:42
com.realtime.crossfire.jxclient.main.JXCWindow.crossfireUpdateItemListener
final CrossfireUpdateItemListener crossfireUpdateItemListener
Definition: JXCWindow.java:151
com.realtime.crossfire.jxclient.account.CharacterModel.commit
void commit()
Definition: CharacterModel.java:140
com.realtime.crossfire.jxclient.gui.misc
Definition: GUICheckBox.java:23
com.realtime.crossfire.jxclient.account.CharacterModel.begin
void begin()
Definition: CharacterModel.java:133
com.realtime.crossfire.jxclient.settings.options.OptionManager
Definition: OptionManager.java:36
com.realtime.crossfire.jxclient.main.Exiter
Definition: Exiter.java:31
com.realtime.crossfire.jxclient.main.JXCWindow.crossfireQueryListener
final CrossfireQueryListener crossfireQueryListener
Definition: JXCWindow.java:234
com.realtime.crossfire.jxclient.window.GuiManager
Definition: GuiManager.java:63
com.realtime.crossfire.jxclient.window.GuiManager.unsetSkin
void unsetSkin()
Definition: GuiManager.java:900
com.realtime.crossfire.jxclient.account.CharacterModel
Definition: CharacterModel.java:40
com.realtime.crossfire.jxclient.main.JXCWindow.keyListener
final KeyListener keyListener
Definition: JXCWindow.java:210
com.realtime.crossfire.jxclient.server.crossfire.SentPacketListener
Definition: SentPacketListener.java:31