blob: 016fe7484022e962370fd24ed3d7d86f2b892eb3 [file] [log] [blame]
package org.eclipse.dltk.ui.text.folding;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.dltk.compiler.util.Util;
import org.eclipse.dltk.ui.PreferenceConstants;
import org.eclipse.dltk.ui.preferences.ImprovedAbstractConfigurationBlock;
import org.eclipse.dltk.ui.preferences.OverlayPreferenceStore;
import org.eclipse.dltk.ui.preferences.PreferencesMessages;
import org.eclipse.dltk.ui.preferences.FieldValidators.MinimumNumberValidator;
import org.eclipse.dltk.ui.util.PixelConverter;
import org.eclipse.dltk.ui.util.SWTFactory;
import org.eclipse.jface.dialogs.ControlEnableState;
import org.eclipse.jface.preference.PreferencePage;
import org.eclipse.osgi.util.NLS;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.TabFolder;
import org.eclipse.swt.widgets.TabItem;
import org.eclipse.swt.widgets.Text;
/**
*/
public class DefaultFoldingPreferenceConfigurationBlock extends
ImprovedAbstractConfigurationBlock {
private static int DEFAULT_MIN_LINES = 2;
private IFoldingPreferenceBlock documentationBlock;
private IFoldingPreferenceBlock sourceCodeBlock;
public DefaultFoldingPreferenceConfigurationBlock(
OverlayPreferenceStore store, PreferencePage page) {
super(store, page);
documentationBlock = createDocumentationBlock(store, page);
sourceCodeBlock = createSourceCodeBlock(store, page);
}
private Composite foldingOptionsComposite;
public Control createControl(Composite parent) {
Composite composite = SWTFactory.createComposite(parent, parent
.getFont(), 1, 1, GridData.FILL_BOTH);
Button enableFolding = SWTFactory.createCheckButton(composite,
PreferencesMessages.FoldingConfigurationBlock_enable);
foldingOptionsComposite = SWTFactory.createComposite(composite,
composite.getFont(), 1, 1, GridData.FILL_BOTH);
((GridLayout) foldingOptionsComposite.getLayout()).marginHeight = 0;
((GridLayout) foldingOptionsComposite.getLayout()).marginWidth = 0;
createMinLines(foldingOptionsComposite);
TabFolder tabFolder = new TabFolder(foldingOptionsComposite, SWT.NONE);
tabFolder.setLayoutData(new GridData(GridData.FILL_BOTH));
TabItem comments = new TabItem(tabFolder, SWT.NONE);
comments
.setText(PreferencesMessages.FoldingConfigurationBlock_docTabName);
comments.setControl(documentationBlock.createControl((tabFolder)));
if (sourceCodeBlock != null) {
TabItem blocks = new TabItem(tabFolder, SWT.NONE);
blocks
.setText(PreferencesMessages.FoldingConfigurationBlock_srcTabName);
blocks.setControl(sourceCodeBlock.createControl(tabFolder));
}
enableFolding.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
if (((Button) e.widget).getSelection()) {
enableFoldingControls();
} else {
disableFoldingControls();
}
}
});
bindControl(enableFolding, PreferenceConstants.EDITOR_FOLDING_ENABLED);
createAdditionalTabs(tabFolder);
return composite;
}
private ControlEnableState fBlockEnableState;
@Override
public void dispose() {
documentationBlock.dispose();
if (sourceCodeBlock != null) {
sourceCodeBlock.dispose();
}
}
protected void createAdditionalTabs(TabFolder tabFolder) {
// empty implementation
}
protected IFoldingPreferenceBlock createDocumentationBlock(
OverlayPreferenceStore store, PreferencePage page) {
return new DocumentationFoldingPreferenceBlock(store, page);
}
protected List createOverlayKeys() {
ArrayList keys = new ArrayList();
keys.add(new OverlayPreferenceStore.OverlayKey(
OverlayPreferenceStore.BOOLEAN,
PreferenceConstants.EDITOR_FOLDING_ENABLED));
keys.add(new OverlayPreferenceStore.OverlayKey(
OverlayPreferenceStore.INT,
PreferenceConstants.EDITOR_FOLDING_LINES_LIMIT));
return keys;
}
protected IFoldingPreferenceBlock createSourceCodeBlock(
OverlayPreferenceStore store, PreferencePage page) {
return new SourceCodeFoldingPreferenceBlock(store, page);
}
protected int defaultMinLines() {
return DEFAULT_MIN_LINES;
}
@Override
protected void initializeFields() {
super.initializeFields();
documentationBlock.initialize();
if (sourceCodeBlock != null) {
sourceCodeBlock.initialize();
}
if (getBoolean(PreferenceConstants.EDITOR_FOLDING_ENABLED)) {
enableFoldingControls();
} else {
disableFoldingControls();
}
}
private void createMinLines(Composite parent) {
Composite composite = SWTFactory.createComposite(parent, parent
.getFont(), 2, 1, GridData.FILL);
((GridLayout) composite.getLayout()).marginWidth = 0;
int minLines = defaultMinLines();
SWTFactory
.createLabel(
composite,
NLS
.bind(
PreferencesMessages.FoldingConfigurationBlock_minLinesToEnableFolding,
new Integer(minLines)), 0, 1);
Text textBox = SWTFactory.createText(composite, SWT.BORDER, 1,
Util.EMPTY_STRING);
textBox.setTextLimit(4);
((GridData) textBox.getLayoutData()).widthHint = new PixelConverter(
composite).convertWidthInCharsToPixels(4 + 1);
bindControl(textBox, PreferenceConstants.EDITOR_FOLDING_LINES_LIMIT,
new MinimumNumberValidator(minLines));
}
protected void enableFoldingControls() {
if (fBlockEnableState != null) {
fBlockEnableState.restore();
fBlockEnableState = null;
}
}
protected void disableFoldingControls() {
if (fBlockEnableState == null) {
fBlockEnableState = ControlEnableState
.disable(foldingOptionsComposite);
}
}
}