/*******************************************************************************
* Copyright (c) 2004, 2006 Subclipse project 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:
* Subclipse project committers - initial API and implementation
* Karel Brezina, Cloudsmith - copied from org.tigris.subversion.subclipse.ui.console.ConsolePreferencesPage and modified for Buckminster needs
******************************************************************************/
package org.eclipse.buckminster.ui.prefs;
import org.eclipse.buckminster.runtime.IBuckminsterPreferenceConstants;
import org.eclipse.buckminster.ui.Messages;
import org.eclipse.buckminster.ui.UiPlugin;
import org.eclipse.jface.preference.BooleanFieldEditor;
import org.eclipse.jface.preference.ColorFieldEditor;
import org.eclipse.jface.preference.FieldEditorPreferencePage;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.preference.IntegerFieldEditor;
import org.eclipse.jface.util.PropertyChangeEvent;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.FocusAdapter;
import org.eclipse.swt.events.FocusEvent;
import org.eclipse.swt.events.FocusListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPreferencePage;
public class ConsolePreferencePage extends FieldEditorPreferencePage implements IWorkbenchPreferencePage {
private ColorFieldEditor messageColorEditor;
private ColorFieldEditor errorColorEditor;
private BooleanFieldEditor showOnMessage;
private BooleanFieldEditor showOnError;
private BooleanFieldEditor restrictOutput;
private IntegerFieldEditor highWaterMark;
public ConsolePreferencePage() {
super(GRID);
setDescription(Messages.buckminster_console_preferences);
setPreferenceStore(UiPlugin.getDefault().getBuckminsterPreferenceStore());
}
/*
* (non-Javadoc)
*
* @see
* org.eclipse.ui.IWorkbenchPreferencePage#init(org.eclipse.ui.IWorkbench)
*/
@Override
public void init(IWorkbench workbench) {
}
@Override
public void propertyChange(PropertyChangeEvent event) {
super.propertyChange(event);
highWaterMark.setEnabled(restrictOutput.getBooleanValue(), getFieldEditorParent());
}
@Override
protected void createFieldEditors() {
Composite composite = getFieldEditorParent();
IPreferenceStore store = getPreferenceStore();
createVerticalSeparator(composite);
restrictOutput = new BooleanFieldEditor(IBuckminsterPreferenceConstants.PREF_CONSOLE_LIMIT_OUTPUT, Messages.limit_console_output, composite);
addField(restrictOutput);
highWaterMark = new IntegerFieldEditor(IBuckminsterPreferenceConstants.PREF_CONSOLE_HIGH_WATER_MARK,
Messages.console_buffer_size_bracket_characters_bracket_with_colon, composite);
highWaterMark.setValidRange(1001, Integer.MAX_VALUE - 1);
addField(highWaterMark);
highWaterMark.setEnabled(store.getBoolean(IBuckminsterPreferenceConstants.PREF_CONSOLE_LIMIT_OUTPUT), composite);
FocusListener focusListener = new FocusAdapter() {
@Override
public void focusGained(FocusEvent e) {
((Text) e.getSource()).selectAll();
}
@Override
public void focusLost(FocusEvent e) {
((Text) e.getSource()).setText(((Text) e.getSource()).getText());
}
};
highWaterMark.getTextControl(composite).addFocusListener(focusListener);
createVerticalSeparator(composite);
showOnMessage = new BooleanFieldEditor(IBuckminsterPreferenceConstants.PREF_CONSOLE_SHOW_ON_MESSAGE,
Messages.show_SVN_console_automatically_when_command_is_run, composite);
addField(showOnMessage);
showOnError = new BooleanFieldEditor(IBuckminsterPreferenceConstants.PREF_CONSOLE_SHOW_ON_ERROR,
Messages.show_SVN_console_automatically_when_an_error_is_encountered, composite);
addField(showOnError);
createVerticalSeparator(composite);
createLabel(composite, Messages.console_text_color_settings_with_colon);
messageColorEditor = createColorFieldEditor(IBuckminsterPreferenceConstants.PREF_CONSOLE_MESSAGE_COLOR, Messages.message_with_colon,
composite);
addField(messageColorEditor);
errorColorEditor = createColorFieldEditor(IBuckminsterPreferenceConstants.PREF_CONSOLE_ERROR_COLOR, Messages.error_with_colon, composite);
addField(errorColorEditor);
}
/**
* Creates a new color field editor.
*/
private ColorFieldEditor createColorFieldEditor(String preferenceName, String label, Composite parent) {
ColorFieldEditor editor = new ColorFieldEditor(preferenceName, label, parent);
editor.setPage(this);
editor.setPreferenceStore(getPreferenceStore());
return editor;
}
/**
* Utility method that creates a label instance and sets the default layout
* data.
*
* @param parent
* the parent for the new label
* @param text
* the text for the new label
* @return the new label
*/
private Label createLabel(Composite parent, String text) {
Label label = new Label(parent, SWT.LEFT);
label.setText(text);
GridData data = new GridData();
data.horizontalSpan = 2;
data.horizontalAlignment = GridData.FILL;
label.setLayoutData(data);
return label;
}
private Label createVerticalSeparator(Composite parent) {
Label label = new Label(parent, SWT.NONE);
GridData data = new GridData();
data.horizontalSpan = 2;
data.horizontalAlignment = GridData.FILL;
data.heightHint = 5;
label.setLayoutData(data);
return label;
}
}