/*
* Carrot2 project.
*
* Copyright (C) 2002-2016, Dawid Weiss, Stanisław Osiński.
* All rights reserved.
*
* Refer to the full license file "carrot2.LICENSE"
* in the root folder of the repository checkout or at:
* http://www.carrot2.org/carrot2.LICENSE
*/
package org.carrot2.workbench.core.preferences;
import java.util.*;
import org.carrot2.workbench.core.WorkbenchCorePlugin;
import org.carrot2.workbench.core.ui.SearchEditor;
import org.eclipse.jface.preference.*;
import org.eclipse.jface.util.PropertyChangeEvent;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.*;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPreferencePage;
/**
* Global preferences for the workbench.
*/
public class WorkbenchPreferencesPage extends FieldEditorPreferencePage implements
IWorkbenchPreferencePage
{
public static final String ID = "org.carrot2.workbench.core.preferences.WorkbenchPreferencesPage";
private Collection<BooleanFieldEditor> editors = new ArrayList<BooleanFieldEditor>();
public WorkbenchPreferencesPage()
{
super(GRID);
setPreferenceStore(WorkbenchCorePlugin.getDefault().getPreferenceStore());
}
/**
* We skip field editor creation and override {@link #createContents(Composite)}.
*/
protected void createFieldEditors()
{
// Empty.
}
/**
* 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.
*/
protected Control createContents(Composite p)
{
final Composite parent = createSpacerComposite(p);
/*
* Panels.
*/
Group g = createOptionGroup(parent, "Visible editor panels");
Composite spacer = createSpacerComposite(g);
for (SearchEditor.PanelName s : EnumSet.allOf(SearchEditor.PanelName.class))
{
final BooleanFieldEditor editor =
new BooleanFieldEditor(s.prefKeyVisibility, s.name, spacer);
editors.add(editor);
addField(editor);
}
/*
* Auto-update.
*/
g = createOptionGroup(parent, "Editor auto-update");
spacer = createSpacerComposite(g);
final BooleanFieldEditor autoUpdateEditor = new BooleanFieldEditor(PreferenceConstants.AUTO_UPDATE,
"Automatically re-process after attributes change", spacer);
autoUpdateEditor.fillIntoGrid(spacer, 2);
addField(autoUpdateEditor);
final IntegerFieldEditor delayEditor = new IntegerFieldEditor(PreferenceConstants.AUTO_UPDATE_DELAY,
"Auto-update after (milliseconds)", spacer);
delayEditor.setEmptyStringAllowed(false);
delayEditor.setValidRange(0, 5000);
delayEditor.setValidateStrategy(StringFieldEditor.VALIDATE_ON_KEY_STROKE);
delayEditor.fillIntoGrid(spacer, 2);
addField(delayEditor);
/*
* Search result view.
*/
g = createOptionGroup(parent, "Search result display");
spacer = createSpacerComposite(g);
final IntegerFieldEditor maxFieldLength =
new IntegerFieldEditor(PreferenceConstants.MAX_FIELD_LENGTH, "Maximum snippet/title length", spacer);
maxFieldLength.setEmptyStringAllowed(false);
maxFieldLength.setValidRange(0, 100000);
maxFieldLength.setValidateStrategy(StringFieldEditor.VALIDATE_ON_KEY_STROKE);
maxFieldLength.fillIntoGrid(spacer, 2);
addField(maxFieldLength);
initialize();
checkState();
return parent;
}
/*
* Create option group.
*/
private Group createOptionGroup(Composite parent, String groupTitle)
{
final Group g = new Group(parent, SWT.LEFT);
final GridLayout gl = new GridLayout(1, false);
g.setLayout(gl);
g.setText(groupTitle);
g.setFont(parent.getFont());
final GridData gd = new GridData(GridData.FILL_HORIZONTAL);
g.setLayoutData(gd);
return g;
}
/*
* Create spacer composite.
*/
private static Composite createSpacerComposite(Composite parent) {
Composite g = new Composite(parent, SWT.NONE);
g.setLayout(new GridLayout(1, false));
g.setFont(parent.getFont());
GridData gd = new GridData(GridData.FILL_HORIZONTAL);
gd.horizontalSpan = 1;
gd.grabExcessHorizontalSpace = true;
g.setLayoutData(gd);
return g;
}
/**
* Overriden to invoke {@link FieldEditorPreferencePage#checkState()} when value of
* any editor is changed.
*/
@Override
public void propertyChange(PropertyChangeEvent event)
{
super.propertyChange(event);
if (event.getProperty().equals(FieldEditor.VALUE))
{
checkState();
}
}
public void init(IWorkbench workbench)
{
// empty.
}
/*
*
*/
@Override
protected void checkState()
{
super.checkState();
if (isValid())
{
boolean oneSet = false;
for (BooleanFieldEditor editor : editors)
{
oneSet |= editor.getBooleanValue();
}
if (!oneSet)
{
setErrorMessage("At least one panel must be visible");
setValid(false);
}
else
{
setErrorMessage(null);
}
}
}
}