3m9 compatible;
[phpeclipse.git] / net.sourceforge.phpeclipse / src / net / sourceforge / phpdt / internal / ui / preferences / OverlayPreferenceStore.java
index a8d3a8a..a6003a9 100644 (file)
@@ -1,7 +1,13 @@
-/*
- * (c) Copyright IBM Corp. 2000, 2001.
- * All Rights Reserved.
- */
+/*******************************************************************************
+ * Copyright (c) 2000, 2003 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
  
 package net.sourceforge.phpdt.internal.ui.preferences;
 
@@ -10,6 +16,8 @@ import org.eclipse.jface.preference.PreferenceStore;
 import org.eclipse.jface.util.IPropertyChangeListener;
 import org.eclipse.jface.util.PropertyChangeEvent;
 
+import org.eclipse.jface.text.Assert;
+
 /**
  * An overlaying preference store.
  */
@@ -19,7 +27,7 @@ public class OverlayPreferenceStore  implements IPreferenceStore {
        public static final class TypeDescriptor {
                private TypeDescriptor() {
                }
-       };
+       }
        
        public static final TypeDescriptor BOOLEAN= new TypeDescriptor();
        public static final TypeDescriptor DOUBLE= new TypeDescriptor();
@@ -37,7 +45,7 @@ public class OverlayPreferenceStore  implements IPreferenceStore {
                        fDescriptor= descriptor;
                        fKey= key;
                }
-       };
+       }
        
        private class PropertyListener implements IPropertyChangeListener {
                                
@@ -49,7 +57,7 @@ public class OverlayPreferenceStore  implements IPreferenceStore {
                        if (key != null)
                                propagateProperty(fParent, key, fStore); 
                }
-       };
+       }
        
        
        private IPreferenceStore fParent;
@@ -57,6 +65,7 @@ public class OverlayPreferenceStore  implements IPreferenceStore {
        private OverlayKey[] fOverlayKeys;
        
        private PropertyListener fPropertyListener;
+       private boolean fLoaded;
        
        
        public OverlayPreferenceStore(IPreferenceStore parent, OverlayKey[] overlayKeys) {
@@ -186,6 +195,9 @@ public class OverlayPreferenceStore  implements IPreferenceStore {
        public void load() {
                for (int i= 0; i < fOverlayKeys.length; i++)
                        loadProperty(fParent, fOverlayKeys[i], fStore, true);
+               
+               fLoaded= true;
+               
        }
        
        public void loadDefaults() {
@@ -443,4 +455,32 @@ public class OverlayPreferenceStore  implements IPreferenceStore {
                if (covers(name))
                        fStore.setValue(name, value);
        }
-}
\ No newline at end of file
+
+       /**
+        * The keys to add to the list of overlay keys.
+        * <p>
+        * Note: This method must be called before {@link #load()} is called. 
+        * </p>
+        * 
+        * @param keys
+        * @since 3.0
+        */
+       public void addKeys(OverlayKey[] keys) {
+               Assert.isTrue(!fLoaded);
+               Assert.isNotNull(keys);
+               
+               int overlayKeysLength= fOverlayKeys.length;
+               OverlayKey[] result= new OverlayKey[keys.length + overlayKeysLength];
+
+               for (int i= 0, length= overlayKeysLength; i < length; i++)
+                       result[i]= fOverlayKeys[i];
+               
+               for (int i= 0, length= keys.length; i < length; i++)
+                       result[overlayKeysLength + i]= keys[i];
+               
+               fOverlayKeys= result;
+               
+               if (fLoaded)
+                       load();
+       }
+}