23 package com.realtime.crossfire.jxclient.window;
30 import java.io.BufferedReader;
31 import java.io.BufferedWriter;
32 import java.io.IOException;
33 import java.io.Writer;
34 import java.nio.charset.StandardCharsets;
35 import java.nio.file.Files;
36 import java.nio.file.NoSuchFileException;
37 import java.nio.file.Path;
38 import java.util.LinkedList;
39 import java.util.List;
40 import java.util.regex.Pattern;
41 import org.jetbrains.annotations.NotNull;
53 private static final Pattern
PATTERN = Pattern.compile(
" ");
67 final String skinName = skin.getSkinName();
68 final Path dialogsFile;
71 }
catch (
final IOException ex) {
72 System.err.println(skin.getSkinName()+
": "+ex.getMessage());
77 try (BufferedReader br = Files.newBufferedReader(dialogsFile, StandardCharsets.UTF_8)) {
79 final String line = br.readLine();
84 final String[] tmp =
PATTERN.split(line, -1);
85 if (tmp.length != 6) {
86 throw new IOException(
"syntax error: "+line);
100 throw new IOException(
"syntax error: "+line);
105 dialog = skin.getDialog(tmp[1]);
107 throw new IOException(
"no such dialog: "+tmp[1], ex);
116 x = Integer.parseInt(tmp[2]);
117 y = Integer.parseInt(tmp[3]);
118 w = Integer.parseInt(tmp[4]);
119 h = Integer.parseInt(tmp[5]);
120 }
catch (
final NumberFormatException ex) {
121 throw new IOException(
"syntax error: "+line, ex);
124 dialog.
setBounds(x, y, w, h, windowRenderer.getWindowWidth(), windowRenderer.getWindowHeight());
128 windowRenderer.openDialog(dialog,
false);
130 windowRenderer.closeDialog(dialog);
134 }
catch (
final NoSuchFileException ignored) {
136 }
catch (
final IOException ex) {
137 System.err.println(dialogsFile+
": "+ex.getMessage());
147 final Path dialogsFile;
150 }
catch (
final IOException ex) {
151 System.err.println(skin.getSkinName()+
": "+ex.getMessage());
155 final Path dir = dialogsFile.getParent();
158 Files.createDirectories(dir);
159 }
catch (
final IOException ex) {
160 System.err.println(skin.getSkinName()+
": cannot create directory: "+ex);
164 final List<Gui> openDialogs =
new LinkedList<>();
165 for (
Gui dialog : windowRenderer.getOpenDialogs()) {
166 openDialogs.add(0, dialog);
170 try (BufferedWriter bw = Files.newBufferedWriter(dialogsFile, StandardCharsets.UTF_8)) {
171 for (
Gui dialog : openDialogs) {
175 for (
Gui dialog : skin) {
176 if (!windowRenderer.isDialogOpen(dialog)) {
181 }
catch (
final IOException ex) {
182 System.err.println(dialogsFile+
": "+ex.getMessage());
193 private static void saveDialog(@NotNull
final Gui dialog, @NotNull
final String type, @NotNull
final Writer bw)
throws IOException {
194 if (dialog.isAutoSize()) {
198 if (!dialog.isSaveDialog()) {
202 final int w = dialog.getComponent().getWidth();
207 final int h = dialog.getComponent().getHeight();
214 bw.write(dialog.getComponent().getName());
216 bw.write(Integer.toString(dialog.getComponent().getX()));
218 bw.write(Integer.toString(dialog.getComponent().getY()));
220 bw.write(Integer.toString(dialog.getComponent().getWidth()));
222 bw.write(Integer.toString(dialog.getComponent().getHeight()));