diff --git a/launch/org.eclipse.cdt.launchbar.ui/plugin.xml b/launch/org.eclipse.cdt.launchbar.ui/plugin.xml index 923d75543e1..a0c63afd83c 100644 --- a/launch/org.eclipse.cdt.launchbar.ui/plugin.xml +++ b/launch/org.eclipse.cdt.launchbar.ui/plugin.xml @@ -43,5 +43,20 @@ name="Configure Active Launch Configuration"> + + + + + + + + diff --git a/launch/org.eclipse.cdt.launchbar.ui/src/org/eclipse/cdt/launchbar/ui/internal/Activator.java b/launch/org.eclipse.cdt.launchbar.ui/src/org/eclipse/cdt/launchbar/ui/internal/Activator.java index 3bac94a2831..e377f4ac085 100644 --- a/launch/org.eclipse.cdt.launchbar.ui/src/org/eclipse/cdt/launchbar/ui/internal/Activator.java +++ b/launch/org.eclipse.cdt.launchbar.ui/src/org/eclipse/cdt/launchbar/ui/internal/Activator.java @@ -49,6 +49,9 @@ public class Activator extends AbstractUIPlugin { public static final String CMD_STOP = "org.eclipse.cdt.launchbar.ui.command.stop"; public static final String CMD_CONFIG = "org.eclipse.cdt.launchbar.ui.command.configureActiveLaunch"; + // Preference ids + public static final String PREF_ENABLE_LAUNCHBAR = "enableLaunchBar"; + // The shared instance private static Activator plugin; diff --git a/launch/org.eclipse.cdt.launchbar.ui/src/org/eclipse/cdt/launchbar/ui/internal/LaunchBarInjector.java b/launch/org.eclipse.cdt.launchbar.ui/src/org/eclipse/cdt/launchbar/ui/internal/LaunchBarInjector.java index 2dcc1ff85de..8302931e891 100644 --- a/launch/org.eclipse.cdt.launchbar.ui/src/org/eclipse/cdt/launchbar/ui/internal/LaunchBarInjector.java +++ b/launch/org.eclipse.cdt.launchbar.ui/src/org/eclipse/cdt/launchbar/ui/internal/LaunchBarInjector.java @@ -24,6 +24,9 @@ import org.eclipse.e4.ui.model.application.ui.basic.MWindow; import org.eclipse.e4.ui.model.application.ui.menu.MMenuFactory; import org.eclipse.e4.ui.model.application.ui.menu.MToolControl; import org.eclipse.e4.ui.workbench.UIEvents; +import org.eclipse.jface.preference.IPreferenceStore; +import org.eclipse.jface.util.IPropertyChangeListener; +import org.eclipse.jface.util.PropertyChangeEvent; import org.osgi.service.event.Event; import org.osgi.service.event.EventHandler; @@ -37,16 +40,9 @@ public class LaunchBarInjector { @Execute void execute() { - // Inject the toolbar into all top trims - for (MWindow window : application.getChildren()) { - if (window instanceof MTrimmedWindow) { - for (MTrimBar trimBar : ((MTrimmedWindow) window).getTrimBars()) { - if (trimBar.getSide() == SideValue.TOP) { - injectLaunchBar(trimBar); - } - } - } - } + IPreferenceStore store = Activator.getDefault().getPreferenceStore(); + boolean enabled = store.getBoolean(Activator.PREF_ENABLE_LAUNCHBAR); + injectIntoAll(enabled); // Watch for new trimmed windows and inject there too. eventBroker.subscribe(UIEvents.TrimmedWindow.TOPIC_TRIMBARS, new EventHandler() { @@ -57,23 +53,74 @@ public class LaunchBarInjector { Object newValue = event.getProperty(UIEvents.EventTags.NEW_VALUE); if (newValue instanceof MTrimBar) { MTrimBar trimBar = (MTrimBar) newValue; - if (trimBar.getSide() == SideValue.TOP) - injectLaunchBar(trimBar); + if (trimBar.getSide() == SideValue.TOP) { + IPreferenceStore store = Activator.getDefault().getPreferenceStore(); + boolean enabled = store.getBoolean(Activator.PREF_ENABLE_LAUNCHBAR); + injectLaunchBar(trimBar, enabled); + } + } + } + }); + + // Watch for preference changes + Activator.getDefault().getPreferenceStore().addPropertyChangeListener(new IPropertyChangeListener() { + @Override + public void propertyChange(PropertyChangeEvent event) { + if (event.getProperty().equals(Activator.PREF_ENABLE_LAUNCHBAR)) { + boolean enabled = Boolean.parseBoolean(event.getNewValue().toString()); + injectIntoAll(enabled); } } }); } - - void injectLaunchBar(MTrimBar trimBar) { - // Skip if we're already there - for (MTrimElement trimElement : trimBar.getChildren()) - if (LaunchBarControl.ID.equals(trimElement.getElementId())) - return; - MToolControl launchBar = MMenuFactory.INSTANCE.createToolControl(); - launchBar.setElementId(LaunchBarControl.ID); - launchBar.setContributionURI(LaunchBarControl.CLASS_URI); - trimBar.getChildren().add(0, launchBar); + private void injectIntoAll(boolean enabled) { + // Inject the toolbar into all top trims + for (MWindow window : application.getChildren()) { + if (window instanceof MTrimmedWindow) { + for (MTrimBar trimBar : ((MTrimmedWindow) window).getTrimBars()) { + if (trimBar.getSide() == SideValue.TOP) { + injectLaunchBar(trimBar, enabled); + } + } + } + } } + private void injectLaunchBar(MTrimBar trimBar, boolean enabled) { + // are we enabled or not + + // Search for control in trimbar + MTrimElement launchBarElement = null; + for (MTrimElement trimElement : trimBar.getChildren()) { + if (LaunchBarControl.ID.equals(trimElement.getElementId())) { + launchBarElement = trimElement; + break; + } + } + + if (launchBarElement != null) { + if (!enabled) { + // remove it if we're disabled + trimBar.getChildren().remove(launchBarElement); + for (MTrimElement trimElement : trimBar.getChildren()) { + if (LaunchBarControl.ID.equals(trimElement.getElementId())) { + launchBarElement = trimElement; + break; + } + } + } + // either way, we're done + return; + } + + if (enabled) { + // Add it + MToolControl launchBar = MMenuFactory.INSTANCE.createToolControl(); + launchBar.setElementId(LaunchBarControl.ID); + launchBar.setContributionURI(LaunchBarControl.CLASS_URI); + trimBar.getChildren().add(0, launchBar); + } + } + } diff --git a/launch/org.eclipse.cdt.launchbar.ui/src/org/eclipse/cdt/launchbar/ui/internal/LaunchBarPreferenceInitializer.java b/launch/org.eclipse.cdt.launchbar.ui/src/org/eclipse/cdt/launchbar/ui/internal/LaunchBarPreferenceInitializer.java new file mode 100644 index 00000000000..b87682ce21a --- /dev/null +++ b/launch/org.eclipse.cdt.launchbar.ui/src/org/eclipse/cdt/launchbar/ui/internal/LaunchBarPreferenceInitializer.java @@ -0,0 +1,14 @@ +package org.eclipse.cdt.launchbar.ui.internal; + +import org.eclipse.core.runtime.preferences.AbstractPreferenceInitializer; +import org.eclipse.jface.preference.IPreferenceStore; + +public class LaunchBarPreferenceInitializer extends AbstractPreferenceInitializer { + + @Override + public void initializeDefaultPreferences() { + IPreferenceStore store = Activator.getDefault().getPreferenceStore(); + store.setDefault(Activator.PREF_ENABLE_LAUNCHBAR, true); + } + +} diff --git a/launch/org.eclipse.cdt.launchbar.ui/src/org/eclipse/cdt/launchbar/ui/internal/LaunchBarPreferencePage.java b/launch/org.eclipse.cdt.launchbar.ui/src/org/eclipse/cdt/launchbar/ui/internal/LaunchBarPreferencePage.java new file mode 100644 index 00000000000..ea42453a471 --- /dev/null +++ b/launch/org.eclipse.cdt.launchbar.ui/src/org/eclipse/cdt/launchbar/ui/internal/LaunchBarPreferencePage.java @@ -0,0 +1,26 @@ +package org.eclipse.cdt.launchbar.ui.internal; + +import org.eclipse.jface.preference.BooleanFieldEditor; +import org.eclipse.jface.preference.FieldEditorPreferencePage; +import org.eclipse.ui.IWorkbench; +import org.eclipse.ui.IWorkbenchPreferencePage; + +public class LaunchBarPreferencePage extends FieldEditorPreferencePage implements + IWorkbenchPreferencePage { + + public LaunchBarPreferencePage() { + super(GRID); + } + + @Override + public void init(IWorkbench workbench) { + setPreferenceStore(Activator.getDefault().getPreferenceStore()); + setDescription("Preferences for the Launch Bar."); + } + + @Override + protected void createFieldEditors() { + addField(new BooleanFieldEditor(Activator.PREF_ENABLE_LAUNCHBAR, "Enable the Launch Bar (may require restart).", getFieldEditorParent())); + } + +}