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);
89 final boolean open =
switch (tmp[0]) {
91 case "close" ->
false;
92 default ->
throw new IOException(
"syntax error: "+line);
97 dialog = skin.getDialog(tmp[1]);
99 throw new IOException(
"no such dialog: "+tmp[1], ex);
108 x = Integer.parseInt(tmp[2]);
109 y = Integer.parseInt(tmp[3]);
110 w = Integer.parseInt(tmp[4]);
111 h = Integer.parseInt(tmp[5]);
112 }
catch (
final NumberFormatException ex) {
113 throw new IOException(
"syntax error: "+line, ex);
116 dialog.
setBounds(x, y, w, h, windowRenderer.getWindowWidth(), windowRenderer.getWindowHeight());
120 windowRenderer.openDialog(dialog,
false);
122 windowRenderer.closeDialog(dialog);
126 }
catch (
final NoSuchFileException ignored) {
128 }
catch (
final IOException ex) {
129 System.err.println(dialogsFile+
": "+ex.getMessage());
139 final Path dialogsFile;
142 }
catch (
final IOException ex) {
143 System.err.println(skin.getSkinName()+
": "+ex.getMessage());
147 final Path dir = dialogsFile.getParent();
150 Files.createDirectories(dir);
151 }
catch (
final IOException ex) {
152 System.err.println(skin.getSkinName()+
": cannot create directory: "+ex);
156 final List<Gui> openDialogs =
new LinkedList<>();
157 for (
Gui dialog : windowRenderer.getOpenDialogs()) {
158 openDialogs.add(0, dialog);
162 try (BufferedWriter bw = Files.newBufferedWriter(dialogsFile, StandardCharsets.UTF_8)) {
163 for (
Gui dialog : openDialogs) {
167 for (
Gui dialog : skin) {
168 if (!windowRenderer.isDialogOpen(dialog)) {
173 }
catch (
final IOException ex) {
174 System.err.println(dialogsFile+
": "+ex.getMessage());
185 private static void saveDialog(@NotNull
final Gui dialog, @NotNull
final String type, @NotNull
final Writer bw)
throws IOException {
186 if (dialog.isAutoSize()) {
190 if (!dialog.isSaveDialog()) {
194 final int w = dialog.getComponent().getWidth();
199 final int h = dialog.getComponent().getHeight();
206 bw.write(dialog.getComponent().getName());
208 bw.write(Integer.toString(dialog.getComponent().getX()));
210 bw.write(Integer.toString(dialog.getComponent().getY()));
212 bw.write(Integer.toString(dialog.getComponent().getWidth()));
214 bw.write(Integer.toString(dialog.getComponent().getHeight()));