package ddddbb.game; import java.awt.Container; import java.awt.Dimension; import java.util.prefs.BackingStoreException; import java.util.prefs.Preferences; import ddddbb.gen.BoolModel; import ddddbb.gen.DoubleModel; import ddddbb.gen.IntModel; public class PersistentPreferences { public static class User extends PersistentPreferences { public User(Settings ss,Container window) { super(ss, window, "4dbb", new String[] { "barEyeFocusDelta", "eyesDistHalf", "screenEyeDist", "brightness", "xdpcm", "ydpcm", "resolutionUnit", "lengthUnit", "mouseRotSens", "mouseTransSens", "viewType", "orientation3d", "orientation4d", "perspective", "drawTetrahedral", "soundOn", }); } } private static String widthKey = "applicationWidth"; private static String heightKey = "applicationHeight"; public final String node; public final String[] keys; private final Settings ss; private final Container window; protected PersistentPreferences(Settings ss, Container window, String node, String[] keys) { this.ss = ss; this.window = window; this.node = node; this.keys = keys; checkPrefKeys(ss, keys); } public static void checkPrefKeys(Settings ss, String[] keys) { for (int i=0;i<keys.length;i++) { try { @SuppressWarnings("unused") Object setting = ss.getClass().getField(keys[i]).get(ss); return; } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (SecurityException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (NoSuchFieldException e) { e.printStackTrace(); } } assert false; } private void put(Preferences prefs, String field) { Object setting; try { setting = ss.getClass().getField(field).get(ss); if (setting instanceof DoubleModel) { DoubleModel dm = (DoubleModel) setting; prefs.put(field, Double.toString(dm.getDouble())); //if (Main.debug.isSelected()) System.out.println(field +":" +prefs.get(field, "undefined")); } if (setting instanceof BoolModel) { BoolModel bm = (BoolModel) setting; prefs.put(field, Boolean.toString(bm.isSelected())); } if (setting instanceof IntModel) { IntModel im = (IntModel) setting; prefs.put(field, Integer.toString(im.selInt())); } } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (SecurityException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (NoSuchFieldException e) { e.printStackTrace(); } } private void get(Preferences prefs, String field) { Object setting; try { setting = ss.getClass().getField(field).get(ss); if (setting instanceof DoubleModel) { DoubleModel dm = (DoubleModel) setting; double d = Double.parseDouble(prefs.get(field,Double.toString(dm.getDouble()))); dm.setDouble(d); } if (setting instanceof BoolModel) { BoolModel bm = (BoolModel) setting; boolean b = Boolean.parseBoolean(prefs.get(field, Boolean.toString(bm.isSelected()))); bm.setSelected(b); } if (setting instanceof IntModel) { IntModel im = (IntModel) setting; int i = Integer.parseInt(prefs.get(field, Integer.toString(im.selInt()))); im.setSelInt(i); } } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (SecurityException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (NoSuchFieldException e) { e.printStackTrace(); } } public void save() throws BackingStoreException { Preferences prefs = Preferences.userRoot().node(node); for (int i=0;i<keys.length;i++) { put(prefs, keys[i]); } prefs.put(widthKey,Integer.toString(window.getWidth())); prefs.put(heightKey,Integer.toString(window.getHeight())); prefs.flush(); } public void load() { Preferences prefs = Preferences.userRoot().node(node); for (int i=0;i<keys.length;i++) { get(prefs, keys[i]); } int w = Integer.parseInt(prefs.get(widthKey, Integer.toString(Settings.defaultWidth))); int h = Integer.parseInt(prefs.get(heightKey, Integer.toString(Settings.defaultHeight))); window.setPreferredSize(new Dimension(w,h)); } // public static void main(String[] args) throws BackingStoreException { // Settings ss = new Settings(); // assert ss != null; // PersistentPreferences prefs = new PersistentPreferences.Screen(ss); // // prefs.load(); // } }