/** * Copyright (c) 2009, 2010 Mark Feber, MulgaSoft * * 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 */ package com.mulgasoft.emacsplus.preferences; import org.eclipse.jface.preference.FieldEditor; import org.eclipse.jface.preference.FieldEditorPreferencePage; import org.eclipse.jface.preference.StringFieldEditor; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Label; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchPreferencePage; import com.mulgasoft.emacsplus.EmacsPlusUtils; /** * Abstract base class for Emacs+ preference pages * * @author Mark Feber - initial API and implementation */ public abstract class EmacsPlusPreferenceBase extends FieldEditorPreferencePage implements IWorkbenchPreferencePage{ public EmacsPlusPreferenceBase(int style) { super(style); } /** * @see org.eclipse.ui.IWorkbenchPreferencePage#init(org.eclipse.ui.IWorkbench) */ public void init(IWorkbench workbench) { } /** * Creates a tab of one horizontal spans. * * @param parent * the parent in which the tab should be created */ void addSpace() { addField(new SpacerFieldEditor(getFieldEditorParent())); } public class SpacerFieldEditor extends LabelFieldEditor { // Implemented as an empty label field editor. public SpacerFieldEditor(Composite parent) { super(EmacsPlusUtils.EMPTY_STR, parent); //$NON-NLS-1$ } } /** * A field editor for displaying labels not associated with other widgets. */ class LabelFieldEditor extends FieldEditor { private Label label; // All labels can use the same preference name since they don't // store any preference. public LabelFieldEditor(String value, Composite parent) { super("label", value, parent); //$NON-NLS-1$ } // Adjusts the field editor to be displayed correctly // for the given number of columns. protected void adjustForNumColumns(int numColumns) { ((GridData) label.getLayoutData()).horizontalSpan = numColumns; } // Fills the field editor's controls into the given parent. protected void doFillIntoGrid(Composite parent, int numColumns) { label = getLabelControl(parent); GridData gridData = new GridData(); gridData.horizontalSpan = numColumns; gridData.horizontalAlignment = GridData.FILL; gridData.grabExcessHorizontalSpace = false; gridData.verticalAlignment = GridData.CENTER; gridData.grabExcessVerticalSpace = false; label.setLayoutData(gridData); } // Returns the number of controls in the field editor. public int getNumberOfControls() { return 1; } // Labels do not persist any preferences, so these methods are empty. protected void doLoad() { } protected void doLoadDefault() { } protected void doStore() { } } class RectangleFieldEditor extends StringFieldEditor { public RectangleFieldEditor(String name, String labelText, int width, int strategy, Composite parent) { super(name, labelText, width, strategy, parent); } @Override protected boolean doCheckState() { return super.doCheckState() && PrefVars.PRect.parseRect(getStringValue()) != null; } } }