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()));
+ }
+
+}