EOS 2  1.1.0
Einfache Objektbasierte Sprache
GuiConfiguration.java
gehe zur Dokumentation dieser Datei
1 package de.lathanda.eos.common.gui;
2 
3 import java.awt.Toolkit;
4 import java.io.File;
5 import java.io.FileInputStream;
6 import java.io.FileOutputStream;
7 import java.io.IOException;
8 import java.io.InputStream;
9 import java.io.OutputStream;
10 import java.util.LinkedList;
11 import java.util.Properties;
12 
13 import de.lathanda.eos.base.ResourceLoader;
14 import de.lathanda.eos.base.util.ErrorBehavior;
15 import de.lathanda.eos.base.util.GuiToolkit;
16 
22 public class GuiConfiguration {
23 
24 
28  public static final GuiConfiguration def = new GuiConfiguration();
32  private Properties configuration;
36  private boolean dirty;
40  private int fontsize;
44  private int dpi;
48  private double unit;
52  private String language;
56  private ErrorBehavior errorBehavior;
60  private int errorNumber;
61 
62  private GuiConfiguration() {
63  try {
64  load();
65  } catch (Exception e) {
66  setDefault();
67  }
68  }
69 
78  private void load() throws IOException {
79  String home = System.getProperty("user.home");
80  File file = new File(home + "/.eos/guiconfig.ini");
81  if (file.exists()) {
82  try (InputStream in = new FileInputStream(file)) {
83  load(in);
84  }
85  } else {
86  try (InputStream in = ResourceLoader.getResourceAsStream("guiconfig.ini")) {
87  load(in);
88  }
89  }
90  }
91 
100  public void save() throws IOException {
101  String home = System.getProperty("user.home");
102  File dir = new File(home + "/.eos");
103  File file = new File(home + "/.eos/guiconfig.ini");
104  if (!(dir.exists() && dir.isDirectory())) {
105  dir.mkdir();
106  }
107  save(new FileOutputStream(file));
108  }
109 
115  private void load(InputStream in) throws IOException {
116  configuration = new Properties();
117  configuration.load(in);
118  fontsize = Integer.valueOf(configuration.getProperty("fontsize"));
119  errorBehavior = ErrorBehavior.decode(Integer.valueOf(configuration.getProperty("errorbehavior")));
120  errorNumber = Integer.valueOf(configuration.getProperty("errornumber"));
121  dpi = Integer.valueOf(configuration.getProperty("dpi", "0"));
122  unit = Double.valueOf(configuration.getProperty("unit", "1"));
123  language = configuration.getProperty("language","eos2");
124  if (dpi == 0) {
125  dpi = Toolkit.getDefaultToolkit().getScreenResolution();
126  }
127  GuiToolkit.setScreenResolution(dpi);
128  dirty = false;
129  }
130 
136  private void save(OutputStream out) throws IOException {
137  configuration.setProperty("fontsize", Integer.toString(fontsize));
138  configuration.setProperty("errorbehavior", Integer.toString(errorBehavior.encode()));
139  configuration.setProperty("errornumber", Integer.toString(errorNumber));
140  configuration.setProperty("dpi", Integer.toString(dpi));
141  configuration.setProperty("unit", Double.toString(unit));
142  configuration.setProperty("language", language);
143  configuration.store(out, "EOS Configuration");
144  dirty = false;
145  }
146 
151  public void cleanup() throws Throwable {
152  if (dirty) {
153  save();
154  }
155  }
156 
160  private void setDefault() {
161  fontsize = 12;
162  errorBehavior = ErrorBehavior.WARN;
163  errorNumber = 1;
164  dirty = false;
165  }
166 
167  public int getFontsize() {
168  return fontsize;
169  }
170 
171  public void setFontsize(int fontsize) {
172  if (this.fontsize != fontsize) {
173  this.fontsize = fontsize;
175  }
176  }
177  public String getLanguage() {
178  return language;
179  }
180  public void setLanguage(String language) {
181  this.language = language;
182  }
183 
184  public int getNumberOfShownErrors() {
185  return errorNumber;
186  }
187 
188  public void setNumberOfShownErrors(int errorNumber) {
189  this.errorNumber = errorNumber;
190  dirty = false;
191  }
192 
194  return errorBehavior;
195  }
196 
197  public void setErrorBehavior(ErrorBehavior errorBehavior) {
198  if (this.errorBehavior != errorBehavior) {
199  this.errorBehavior = errorBehavior;
201  }
202  }
203 
204  public int getDpi() {
205  return dpi;
206  }
207 
208  public void setDpi(int dpi) {
209  if (dpi != this.dpi) {
210  this.dpi = dpi;
212  dirty = true;
213  }
214  }
215 
216  public double getUnit() {
217  return unit;
218  }
219 
220  public void setUnit(double unit) {
221  if (unit != this.unit) {
222  this.unit = unit;
223  GuiToolkit.setUnit(unit);
224  dirty = true;
225  }
226  }
227 
232  private LinkedList<GuiConfigurationListener> configurationListener = new LinkedList<>();
233 
238  public synchronized void addConfigurationListener(GuiConfigurationListener cf) {
239  configurationListener.add(cf);
240  }
241 
247  configurationListener.remove(cf);
248  }
249 
253  public synchronized void fireFontsizeChanged() {
254  dirty = true;
255  configurationListener.forEach(cf -> cf.fontsizeChanged(fontsize));
256  }
257 
261  public synchronized void fireErrorBehaviorChanged() {
262  dirty = true;
263  configurationListener.forEach(cf -> cf.errorBehaviorChanged(errorBehavior));
264  }
265 
273  public interface GuiConfigurationListener {
278  public default void fontsizeChanged(int fontsize) {
279  }
280 
285  public default void errorBehaviorChanged(ErrorBehavior errorBehavior) {
286  }
287  }
288 }
static void setUnit(double unit)
Definition: GuiToolkit.java:86
static void setScreenResolution(int dpi)
Definition: GuiToolkit.java:76
synchronized void removeConfigurationListener(GuiConfigurationListener cf)
synchronized void addConfigurationListener(GuiConfigurationListener cf)
void setErrorBehavior(ErrorBehavior errorBehavior)
static ErrorBehavior decode(int value)
Impressum