| Index: editor/tools/plugins/com.google.dart.tools.deploy/src/com/google/dart/tools/ui/theme/mapper/ThemePreferenceMapper.java
|
| diff --git a/editor/tools/plugins/com.google.dart.tools.deploy/src/com/google/dart/tools/ui/theme/mapper/ThemePreferenceMapper.java b/editor/tools/plugins/com.google.dart.tools.deploy/src/com/google/dart/tools/ui/theme/mapper/ThemePreferenceMapper.java
|
| index 56e596721dfdef137879c9544a44123afe67aaae..eff2f1d39f732458b1c14d80765129d3cc0998a6 100644
|
| --- a/editor/tools/plugins/com.google.dart.tools.deploy/src/com/google/dart/tools/ui/theme/mapper/ThemePreferenceMapper.java
|
| +++ b/editor/tools/plugins/com.google.dart.tools.deploy/src/com/google/dart/tools/ui/theme/mapper/ThemePreferenceMapper.java
|
| @@ -13,10 +13,13 @@
|
| */
|
| package com.google.dart.tools.ui.theme.mapper;
|
|
|
| +import com.google.dart.tools.deploy.Activator;
|
| import com.google.dart.tools.ui.theme.ColorThemeSetting;
|
| +import com.google.dart.tools.ui.theme.preferences.PreviewPreferences;
|
|
|
| import org.eclipse.core.runtime.preferences.IEclipsePreferences;
|
| import org.eclipse.core.runtime.preferences.InstanceScope;
|
| +import org.eclipse.ui.preferences.WorkingCopyManager;
|
| import org.osgi.service.prefs.BackingStoreException;
|
|
|
| import java.util.Map;
|
| @@ -27,22 +30,17 @@ import java.util.Map;
|
| * @see com.github.eclipsecolortheme.mapper.ThemePreferenceMapper
|
| */
|
| public abstract class ThemePreferenceMapper {
|
| +
|
| /** The associated Eclipse preferences. */
|
| protected IEclipsePreferences preferences;
|
|
|
| - /**
|
| - * Creates a new mapper.
|
| - */
|
| - public ThemePreferenceMapper() {
|
| - }
|
| + /** Copy of the preferences used to update the preview. */
|
| + private IEclipsePreferences previewPreferences;
|
|
|
| /**
|
| * Creates a new mapper.
|
| - *
|
| - * @param plugin The ID of the Eclipse plugin whose preferences should be altered.
|
| */
|
| - public ThemePreferenceMapper(String plugin) {
|
| - setPluginId(plugin);
|
| + public ThemePreferenceMapper() {
|
| }
|
|
|
| /**
|
| @@ -59,6 +57,10 @@ public abstract class ThemePreferenceMapper {
|
| preferences.flush();
|
| }
|
|
|
| + public IEclipsePreferences getPreviewPreferences() {
|
| + return previewPreferences;
|
| + }
|
| +
|
| /**
|
| * Maps the {@code theme} to the associated Eclipse preferences.
|
| *
|
| @@ -66,13 +68,36 @@ public abstract class ThemePreferenceMapper {
|
| */
|
| public abstract void map(Map<String, ColorThemeSetting> theme);
|
|
|
| + public void previewRun(Runnable runnable) {
|
| + IEclipsePreferences prefs = preferences;
|
| + try {
|
| + preferences = previewPreferences;
|
| + runnable.run();
|
| + } catch (Throwable ex) {
|
| + // TODO(messick): Add proper error handling.
|
| + ex.printStackTrace();
|
| + } finally {
|
| + preferences = prefs;
|
| + }
|
| + }
|
| +
|
| /**
|
| * Sets the plugin ID and loads preferences.
|
| *
|
| * @param plugin The ID of the Eclipse plugin whose preferences should be altered.
|
| */
|
| - public void setPluginId(String plugin) {
|
| + public void setPluginId(String plugin, WorkingCopyManager manager) {
|
| preferences = InstanceScope.INSTANCE.getNode(plugin);
|
| + previewPreferences = new PreviewPreferences();
|
| + try {
|
| + String[] keys = preferences.keys();
|
| + for (String key : keys) {
|
| + previewPreferences.put(key, preferences.get(key, null));
|
| + }
|
| + } catch (BackingStoreException ex) {
|
| + Activator.logError(ex);
|
| + }
|
| + preferences = manager.getWorkingCopy(preferences);
|
| }
|
|
|
| /**
|
|
|