/*******************************************************************************
* Copyright (c) Gil Barash - chookapp@yahoo.com
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Gil Barash - initial API and implementation
*******************************************************************************/
package com.chookapp.org.bracketeer.preferences;
import java.io.IOException;
import java.util.ArrayList;
import org.eclipse.jface.preference.FieldEditor;
import org.eclipse.jface.preference.IPersistentPreferenceStore;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Spinner;
import org.eclipse.wb.swt.FieldLayoutPreferencePage;
import com.chookapp.org.bracketeer.Activator;
public abstract class ChangingFieldsPrefPage extends FieldLayoutPreferencePage
{
protected ArrayList<String> _prefNames;
private IPreferenceStore _tempPrefs;
private IPreferenceStore _realPrefs;
protected ChangingFieldsPrefPage()
{
_prefNames = new ArrayList<String>();
_tempPrefs = new NonPersistantPreferencesStore();
// If we want to re-enable design mode, we should comment out this line
_realPrefs = Activator.getDefault().getPreferenceStore();
setPreferenceStore(_tempPrefs);
}
@Override
protected void addField(FieldEditor editor)
{
super.addField(editor);
_prefNames.add(editor.getPreferenceName());
}
@Override
protected void initialize()
{
for(String attr : _prefNames)
{
_tempPrefs.setDefault(attr, _realPrefs.getDefaultString(attr));
_tempPrefs.setValue(attr, _realPrefs.getString(attr));
}
super.initialize();
}
@Override
public boolean performOk()
{
super.performOk();
for(String attr : _prefNames)
{
_realPrefs.setValue(attr, _tempPrefs.getString(attr));
}
if (_realPrefs.needsSaving()
&& _realPrefs instanceof IPersistentPreferenceStore) {
try {
((IPersistentPreferenceStore) _realPrefs).save();
} catch (IOException e) {
Activator.log(e);
}
}
return true;
}
@Override
protected void performDefaults()
{
super.performDefaults();
for(String attr : _prefNames)
{
_tempPrefs.setValue(attr, _realPrefs.getDefaultString(attr));
}
updateAll();
}
protected void setEnable(Composite comp, boolean enable)
{
Control[] controls = comp.getChildren();
if( controls == null )
return;
for (Control c : controls)
{
if( c instanceof Composite && !(c instanceof Spinner))
setEnable((Composite)c, enable);
else
c.setEnabled(enable);
}
}
protected abstract void updateAll();
}