/******************************************************************************* * Copyright (c) 2000, 2016 IBM Corporation and others. * 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: * IBM Corporation - initial API and implementation *******************************************************************************/ package org.eclipse.help.ui.internal.preferences; import java.util.Iterator; import org.eclipse.core.runtime.Platform; import org.eclipse.core.runtime.preferences.DefaultScope; import org.eclipse.core.runtime.preferences.IEclipsePreferences; import org.eclipse.core.runtime.preferences.InstanceScope; import org.eclipse.help.internal.base.HelpBasePlugin; import org.eclipse.help.internal.base.IHelpBaseConstants; import org.eclipse.help.internal.browser.BrowserManager; import org.eclipse.help.ui.internal.HelpUIPlugin; import org.eclipse.help.ui.internal.IHelpUIConstants; import org.eclipse.help.ui.internal.Messages; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.preference.IPreferenceNode; import org.eclipse.jface.preference.IPreferencePage; import org.eclipse.jface.preference.PreferenceManager; import org.eclipse.jface.preference.PreferencePage; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchPreferencePage; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.dialogs.PreferenceLinkArea; import org.eclipse.ui.preferences.IWorkbenchPreferenceContainer; import org.osgi.service.prefs.BackingStoreException; /** * Preference page for selecting default web browser. */ public class HelpPreferencePage extends PreferencePage implements IWorkbenchPreferencePage { private static final String WBROWSER_PAGE_ID = "org.eclipse.ui.browser.preferencePage";//$NON-NLS-1$ private Combo useExternalCombo; private Combo searchLocationCombo; private Combo openModeCombo; private Combo dialogHelpCombo; private Combo windowHelpCombo; /** * Creates preference page controls on demand. * * @param parent * the parent for the preference page */ @Override protected Control createContents(Composite parent) { PlatformUI.getWorkbench().getHelpSystem().setHelp(parent, IHelpUIConstants.PREF_PAGE_HELP); Composite mainComposite = new Composite(parent, SWT.NONE); GridData data = new GridData(); data.verticalAlignment = GridData.FILL; data.horizontalAlignment = GridData.FILL; mainComposite.setLayoutData(data); GridLayout layout = new GridLayout(); layout.marginHeight = 0; layout.marginWidth = 0; mainComposite.setLayout(layout); Label description = new Label(mainComposite, SWT.NONE); description.setText(Messages.select_browser); createOpenModesPrefs(mainComposite); createDynamicHelpArea(mainComposite); createSpacer(mainComposite); Dialog.applyDialogFont(mainComposite); return mainComposite; } private void createOpenModesPrefs(Composite parent) { Group group = new Group(parent, SWT.NONE); GridLayout layout = new GridLayout(); group.setLayout(layout); group.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false)); group.setText(Messages.HelpPreferencePage_openModeGroup); createSearchLocation(group); createHelpViewOpenPrefs(group); createOpenContents(group); createLinkArea(group); } private void createDynamicHelpArea(Composite parent) { Group group = new Group(parent, SWT.NONE); GridLayout layout = new GridLayout(); group.setLayout(layout); group.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false)); group.setText(Messages.HelpPreferencePage_contextHelpGroup); createWindowContextPrefs(group); createDialogContextPrefs(group); } private void createSearchLocation(Composite mainComposite) { Label searchLocationLabel = new Label(mainComposite, SWT.NONE); searchLocationLabel.setText(Messages.HelpPreferencePage_searchLocation); searchLocationLabel.setLayoutData(createLabelData()); searchLocationCombo = new Combo(mainComposite, SWT.READ_ONLY); searchLocationCombo.add(Messages.HelpPreferencePage_view); searchLocationCombo.add(Messages.HelpPreferencePage_openInBrowser); searchLocationCombo.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false)); boolean searchFromBrowser = Platform.getPreferencesService().getBoolean (HelpBasePlugin.PLUGIN_ID, IHelpBaseConstants.P_KEY_SEARCH_FROM_BROWSER, false, null); searchLocationCombo.setText(searchFromBrowser ? Messages.HelpPreferencePage_openInBrowser : Messages.HelpPreferencePage_view); } private void createOpenContents(Composite mainComposite) { if (BrowserManager.getInstance().isEmbeddedBrowserPresent()) { Label isExternalLabel = new Label(mainComposite, SWT.NONE); isExternalLabel.setText(Messages.HelpPreferencePage_openContents); isExternalLabel.setLayoutData(createLabelData()); useExternalCombo = new Combo(mainComposite, SWT.READ_ONLY); useExternalCombo.add(Messages.HelpPreferencePage_helpBrowser); useExternalCombo.add(Messages.HelpPreferencePage_externalBrowser); useExternalCombo.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false)); boolean useExternal = Platform.getPreferencesService().getBoolean (HelpBasePlugin.PLUGIN_ID, IHelpBaseConstants.P_KEY_ALWAYS_EXTERNAL_BROWSER, false, null); useExternalCombo.setText(useExternal ? Messages.HelpPreferencePage_externalBrowser : Messages.HelpPreferencePage_helpBrowser); } } private void createLinkArea(Composite parent) { IPreferenceNode node = getPreferenceNode(WBROWSER_PAGE_ID); if (node != null) { PreferenceLinkArea linkArea = new PreferenceLinkArea(parent, SWT.WRAP, WBROWSER_PAGE_ID, Messages.HelpPreferencePage_message, (IWorkbenchPreferenceContainer) getContainer(), null); GridData data = new GridData(GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL); linkArea.getControl().setLayoutData(data); } } private void createHelpViewOpenPrefs(Group group) { if (PlatformUI.getWorkbench().getBrowserSupport() .isInternalWebBrowserAvailable()) { Label ohelpDescription = new Label(group, SWT.NONE); ohelpDescription.setText(Messages.HelpPreferencePage_olabel); ohelpDescription.setLayoutData(createLabelData()); openModeCombo = new Combo(group, SWT.READ_ONLY); openModeCombo.add(Messages.HelpPreferencePage_openInPlace); openModeCombo.add(Messages.HelpPreferencePage_openInEditor); openModeCombo.add(Messages.HelpPreferencePage_openInBrowser); openModeCombo.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false)); String openMode = Platform.getPreferencesService().getString (HelpBasePlugin.PLUGIN_ID, IHelpBaseConstants.P_KEY_HELP_VIEW_OPEN_MODE, IHelpBaseConstants.P_IN_PLACE, null); openModeCombo.setText(openModeToString(openMode)); } } private void createDialogContextPrefs(Group group) { Label dhelpDescription = new Label(group, SWT.NONE); dhelpDescription.setText(Messages.HelpPreferencePage_dlabel); dhelpDescription.setLayoutData(createLabelData()); dialogHelpCombo = new Combo(group, SWT.READ_ONLY); dialogHelpCombo.add(Messages.HelpPreferencePage_tray); dialogHelpCombo.add(Messages.HelpPreferencePage_infopop); dialogHelpCombo.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false)); boolean dinfopop = Platform.getPreferencesService().getBoolean (HelpBasePlugin.PLUGIN_ID, IHelpBaseConstants.P_KEY_DIALOG_INFOPOP, false, null); dialogHelpCombo.setText(dinfopop ? Messages.HelpPreferencePage_infopop : Messages.HelpPreferencePage_tray); } private void createWindowContextPrefs(Group group) { Label whelpDescription = new Label(group, SWT.NONE); whelpDescription.setText(Messages.HelpPreferencePage_wlabel); whelpDescription.setLayoutData(createLabelData()); windowHelpCombo = new Combo(group, SWT.READ_ONLY); windowHelpCombo.add(Messages.HelpPreferencePage_view); windowHelpCombo.add(Messages.HelpPreferencePage_infopop); windowHelpCombo.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false)); boolean winfopop = Platform.getPreferencesService().getBoolean (HelpBasePlugin.PLUGIN_ID, IHelpBaseConstants.P_KEY_WINDOW_INFOPOP, false, null); windowHelpCombo.setText(winfopop ? Messages.HelpPreferencePage_infopop : Messages.HelpPreferencePage_view); } private GridData createLabelData () { GridData data = new GridData(SWT.FILL, SWT.CENTER, true, false); data.verticalIndent = 5; return data; } private IPreferenceNode getPreferenceNode(String pageId) { Iterator<IPreferenceNode> iterator = PlatformUI.getWorkbench().getPreferenceManager() .getElements(PreferenceManager.PRE_ORDER).iterator(); while (iterator.hasNext()) { IPreferenceNode next = iterator.next(); if (next.getId().equals(pageId)) return next; } return null; } /** * @see IWorkbenchPreferencePage */ @Override public void init(IWorkbench workbench) { } /** * Performs special processing when this page's Defaults button has been * pressed. * <p> * This is a framework hook method for sublcasses to do special things when * the Defaults button has been pressed. Subclasses may override, but should * call <code>super.performDefaults</code>. * </p> */ @Override protected void performDefaults() { IEclipsePreferences defaults = DefaultScope.INSTANCE.getNode(HelpBasePlugin.PLUGIN_ID); if (useExternalCombo != null) { boolean useExternal = defaults.getBoolean( IHelpBaseConstants.P_KEY_ALWAYS_EXTERNAL_BROWSER, false); useExternalCombo.setText(useExternal ? Messages.HelpPreferencePage_externalBrowser : Messages.HelpPreferencePage_helpBrowser); } boolean searchFromBrowser = defaults.getBoolean(IHelpBaseConstants.P_KEY_SEARCH_FROM_BROWSER, false); searchLocationCombo.setText(searchFromBrowser ? Messages.HelpPreferencePage_openInBrowser : Messages.HelpPreferencePage_view); boolean winfopop = defaults.getBoolean(IHelpBaseConstants.P_KEY_WINDOW_INFOPOP, false); windowHelpCombo.setText(winfopop ? Messages.HelpPreferencePage_infopop : Messages.HelpPreferencePage_view); boolean dinfopop = defaults.getBoolean(IHelpBaseConstants.P_KEY_DIALOG_INFOPOP, false); dialogHelpCombo.setText(dinfopop ? Messages.HelpPreferencePage_infopop : Messages.HelpPreferencePage_tray); if (openModeCombo !=null) { String openMode = defaults.get( IHelpBaseConstants.P_KEY_HELP_VIEW_OPEN_MODE, IHelpBaseConstants.P_IN_PLACE); openModeCombo.setText(openModeToString(openMode)); } super.performDefaults(); } /** * @see IPreferencePage */ @Override public boolean performOk() { IEclipsePreferences pref = InstanceScope.INSTANCE.getNode(HelpBasePlugin.PLUGIN_ID); if (useExternalCombo != null) { boolean isExternalBrowser = useExternalCombo.getText().equals(Messages.HelpPreferencePage_externalBrowser); pref.putBoolean(IHelpBaseConstants.P_KEY_ALWAYS_EXTERNAL_BROWSER, isExternalBrowser); BrowserManager.getInstance().setAlwaysUseExternal( isExternalBrowser); } pref.putBoolean(IHelpBaseConstants.P_KEY_SEARCH_FROM_BROWSER, searchLocationCombo.getText().equals(Messages.HelpPreferencePage_openInBrowser)); pref.putBoolean(IHelpBaseConstants.P_KEY_WINDOW_INFOPOP, windowHelpCombo.getText().equals(Messages.HelpPreferencePage_infopop)); pref.putBoolean(IHelpBaseConstants.P_KEY_DIALOG_INFOPOP, dialogHelpCombo.getText().equals(Messages.HelpPreferencePage_infopop)); if (openModeCombo!=null) { pref.put(IHelpBaseConstants.P_KEY_HELP_VIEW_OPEN_MODE, openModeFromString(openModeCombo.getText())); } try { pref.flush(); } catch (BackingStoreException e) { HelpUIPlugin.logError("Failed to save preferences", e); //$NON-NLS-1$ } return true; } private String openModeToString(String openMode) { if (IHelpBaseConstants.P_IN_BROWSER.equals(openMode)) { return Messages.HelpPreferencePage_openInBrowser; } else if (IHelpBaseConstants.P_IN_EDITOR.equals(openMode)) { return Messages.HelpPreferencePage_openInEditor; } else { return Messages.HelpPreferencePage_openInPlace; } } private String openModeFromString(String openMode) { if (Messages.HelpPreferencePage_openInBrowser.equals(openMode)) { return IHelpBaseConstants.P_IN_BROWSER; } else if (Messages.HelpPreferencePage_openInEditor.equals(openMode)) { return IHelpBaseConstants.P_IN_EDITOR; } else { return IHelpBaseConstants.P_IN_PLACE; } } /** * Creates a horizontal spacer line that fills the width of its container. * * @param parent * the parent control */ private void createSpacer(Composite parent) { Label spacer = new Label(parent, SWT.NONE); GridData data = new GridData(); data.horizontalAlignment = GridData.FILL; data.verticalAlignment = GridData.BEGINNING; spacer.setLayoutData(data); } }