/*******************************************************************************
* Copyright (c) 2007, 2011 David Green 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:
* David Green - initial API and implementation
*******************************************************************************/
package org.eclipse.mylyn.internal.wikitext.ui.editor.preferences;
import java.util.Map;
import org.eclipse.jface.layout.GridDataFactory;
import org.eclipse.jface.layout.GridLayoutFactory;
import org.eclipse.jface.preference.FieldEditorPreferencePage;
import org.eclipse.mylyn.internal.wikitext.ui.WikiTextUiPlugin;
import org.eclipse.mylyn.internal.wikitext.ui.viewer.CssStyleManager;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.ScrolledComposite;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Layout;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPreferencePage;
import org.eclipse.ui.PlatformUI;
/**
* This class represents a preference page that is contributed to the Preferences dialog. By subclassing
* <samp>FieldEditorPreferencePage</samp>, we can use the field support built into JFace that allows us to create a page
* that is small and knows how to save, restore and apply itself.
* <p>
* This page is used to modify preferences only. They are stored in the preference store that belongs to the main
* plug-in class. That way, preferences can be accessed directly via the preference store.
*
* @author David Green
* @author Hiroyuki Inaba fix for bug 265079: Dialog font not apply WikiText preference pages
*/
public class EditorPreferencePage extends FieldEditorPreferencePage implements IWorkbenchPreferencePage {
public EditorPreferencePage() {
super(GRID);
setPreferenceStore(WikiTextUiPlugin.getDefault().getPreferenceStore());
setDescription(Messages.EditorPreferencePage_introInfo);
}
@Override
public Control createContents(Composite parent) {
ScrolledComposite scrolledComposite = new ScrolledComposite(parent, SWT.H_SCROLL | SWT.V_SCROLL) {
@Override
public Point computeSize(int hint, int hint2, boolean changed) {
return new Point(64, 64);
}
};
scrolledComposite.setExpandHorizontal(true);
scrolledComposite.setExpandVertical(true);
Composite body = new Composite(scrolledComposite, SWT.NONE);
scrolledComposite.setContent(body);
GridLayoutFactory.fillDefaults().margins(0, 0).numColumns(1).applyTo(body);
Control contents = super.createContents(body);
GridDataFactory.fillDefaults().grab(true, true).applyTo(contents);
scrolledComposite.setMinSize(body.computeSize(SWT.DEFAULT, SWT.DEFAULT, true));
return scrolledComposite;
}
/**
* Creates the field editors. Field editors are abstractions of the common GUI blocks needed to manipulate various
* types of preferences. Each field editor knows how to save and restore itself.
*/
@Override
public void createFieldEditors() {
Preferences prefs = new Preferences();
Layout fieldEditorParentLayout = getFieldEditorParent().getLayout();
if (fieldEditorParentLayout instanceof GridLayout) {
GridLayout layout = (GridLayout) fieldEditorParentLayout;
layout.marginRight = 5;
}
Group blockGroup = new Group(getFieldEditorParent(), SWT.NULL);
blockGroup.setText(Messages.EditorPreferencePage_blockModifiers);
blockGroup.setLayoutData(GridDataFactory.fillDefaults().grab(true, false).span(2, 1).create());
CssStyleManager cssStyleManager = new CssStyleManager(getFont());
for (Map.Entry<String, String> ent : prefs.getCssByBlockModifierType().entrySet()) {
String preferenceKey = Preferences.toPreferenceKey(ent.getKey(), true);
addField(new CssStyleFieldEditor(cssStyleManager, preferenceKey, ent.getKey(), blockGroup));
}
// bug 260427
Layout layout = blockGroup.getLayout();
if (layout instanceof GridLayout) {
GridLayout gridLayout = (GridLayout) layout;
gridLayout.marginWidth = 5;
gridLayout.marginHeight = 5;
}
Group phraseModifierGroup = new Group(getFieldEditorParent(), SWT.NULL);
phraseModifierGroup.setText(Messages.EditorPreferencePage_phraseModifiers);
phraseModifierGroup.setLayoutData(GridDataFactory.fillDefaults().grab(true, false).span(2, 1).create());
for (Map.Entry<String, String> ent : prefs.getCssByPhraseModifierType().entrySet()) {
String preferenceKey = Preferences.toPreferenceKey(ent.getKey(), false);
addField(new CssStyleFieldEditor(cssStyleManager, preferenceKey, ent.getKey(), phraseModifierGroup));
}
// bug 260427
layout = phraseModifierGroup.getLayout();
if (layout instanceof GridLayout) {
GridLayout gridLayout = (GridLayout) layout;
gridLayout.marginWidth = 5;
gridLayout.marginHeight = 5;
}
applyDialogFont(getFieldEditorParent());
blockGroup.setFont(getFieldEditorParent().getFont());
phraseModifierGroup.setFont(getFieldEditorParent().getFont());
PlatformUI.getWorkbench()
.getHelpSystem()
.setHelp(getControl(), "org.eclipse.mylyn.wikitext.help.ui.preferences"); //$NON-NLS-1$
}
/*
* (non-Javadoc)
*
* @see
* org.eclipse.ui.IWorkbenchPreferencePage#init(org.eclipse.ui.IWorkbench)
*/
public void init(IWorkbench workbench) {
}
}