package net.jeeeyul.eclipse.themes.ui.preference.actions;
import java.io.IOException;
import java.util.List;
import java.util.Properties;
import net.jeeeyul.eclipse.themes.SharedImages;
import net.jeeeyul.eclipse.themes.ui.preference.JThemePreferenceStore;
import net.jeeeyul.eclipse.themes.ui.preference.internal.IPreferenceFilter;
import net.jeeeyul.eclipse.themes.ui.preference.internal.JTPUtil;
import net.jeeeyul.eclipse.themes.ui.preference.internal.JTPreferencePage;
import net.jeeeyul.eclipse.themes.ui.preference.preset.internal.UserPreset;
import net.jeeeyul.eclipse.themes.ui.preference.preset.internal.UserPresetDialog;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.preference.PreferenceStore;
import org.eclipse.swt.widgets.Display;
/**
* Saves a current preference settings to {@link UserPreset}.
*
* @author Jeeeyul
*/
public class AddUserPresetAction extends AbstractPreferenceAction {
/**
* @param page
*/
public AddUserPresetAction(JTPreferencePage page) {
super(page);
setText("Save as new preset");
setImageDescriptor(SharedImages.getImageDescriptor(SharedImages.ADD));
}
@Override
public void run() {
UserPresetDialog dialog = new UserPresetDialog(Display.getDefault().getActiveShell());
if (dialog.open() == IDialogConstants.OK_ID) {
String name = dialog.getSelectedPresetName();
UserPreset userPreset = new UserPreset(name);
Properties presetProps = userPreset.getProperties();
JThemePreferenceStore store = new JThemePreferenceStore(new PreferenceStore());
getPage().saveTo(store);
List<String> presetKeys = JTPUtil.listPreferenceKeys(IPreferenceFilter.FILTER_PRESET);
for (String key : presetKeys) {
presetProps.setProperty(key, store.getString(key));
}
try {
userPreset.save();
} catch (IOException e) {
e.printStackTrace();
}
getPage().getPresetManager().invalidateUserPreset();
}
}
}