Merge remote-tracking branch 'origin/master' into micropeak-logging
[fw/altos] / altoslib / AltosPreferences.java
index ef30f8e92fd81549ddb016ef1783c6610725435b..e50b9b5cf05a9a856b1b60fb3af6fe604ac3db39 100644 (file)
@@ -19,7 +19,6 @@ package org.altusmetrum.AltosLib;
 
 import java.io.*;
 import java.util.*;
-import javax.swing.filechooser.FileSystemView;
 
 public class AltosPreferences {
        public static AltosPreferencesBackend backend = null;
@@ -137,16 +136,15 @@ public class AltosPreferences {
 
        public static int launcher_channel;
 
-       public static void init() {
-               //preferences = Preferences.userRoot().node("/org/altusmetrum/altosui");
+       public static void init(AltosPreferencesBackend in_backend) {
+               backend = in_backend;
 
                /* Initialize logdir from preferences */
                String logdir_string = backend.getString(logdirPreference, null);
                if (logdir_string != null)
                        logdir = new File(logdir_string);
                else {
-                       /* Use the file system view default directory */
-                       logdir = new File(FileSystemView.getFileSystemView().getDefaultDirectory(), logdirName);
+                       logdir = new File(backend.homeDirectory(), logdirName);
                        if (!logdir.exists())
                                logdir.mkdirs();
                }
@@ -179,8 +177,6 @@ public class AltosPreferences {
                AltosConvert.imperial_units = backend.getBoolean(unitsPreference, false);
        }
 
-       static { init(); }
-
        public static void flush_preferences() {
                backend.flush();
        }
@@ -371,6 +367,8 @@ public class AltosPreferences {
                set_common_frequencies(new_frequencies);
        }
 
+       static LinkedList<AltosUnitsListener> units_listeners;
+
        public static boolean imperial_units() {
                synchronized(backend) {
                        return AltosConvert.imperial_units;
@@ -383,5 +381,24 @@ public class AltosPreferences {
                        backend.putBoolean(unitsPreference, imperial_units);
                        flush_preferences();
                }
+               if (units_listeners != null) {
+                       for (AltosUnitsListener l : units_listeners) {
+                               l.units_changed(imperial_units);
+                       }
+               }
+       }
+
+       public static void register_units_listener(AltosUnitsListener l) {
+               synchronized(backend) {
+                       if (units_listeners == null)
+                               units_listeners = new LinkedList<AltosUnitsListener>();
+                       units_listeners.add(l);
+               }
+       }
+
+       public static void unregister_units_listener(AltosUnitsListener l) {
+               synchronized(backend) {
+                       units_listeners.remove(l);
+               }
        }
 }