/* * Copyright 2008-2012 Amazon Technologies, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at: * * http://aws.amazon.com/apache2.0 * * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES * OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and * limitations under the License. */ package com.amazonaws.eclipse.core.ui.preferences; import org.eclipse.jface.preference.FileFieldEditor; import org.eclipse.jface.preference.PreferencePage; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Link; import org.eclipse.swt.widgets.Listener; /** * Abstract base class containing common logic for all AWS Toolkit preference * pages to share. */ public abstract class AwsToolkitPreferencePage extends PreferencePage { /** The layout column width for this page's field editors */ protected static final int LAYOUT_COLUMN_WIDTH = 3; /** * Constructs a new AwsToolkitPreferencePage. * * @param name * The title of this preference page. */ public AwsToolkitPreferencePage(String name) { super(name); } /** * Convenience method for creating a new Group with the specified label and * parent. * * @param groupText * The label for this new group. * @param parent * The parent for the new UI widget. * * @return The new Group widget. */ protected static Group newGroup(String groupText, Composite parent) { Group group = new Group(parent, SWT.NONE); group.setLayout(new GridLayout()); group.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false)); group.setText(groupText); return group; } /** * Creates a new label with the specified text. * * @param labelText * The text for the label. * @param composite * The parent composite. * * @return The new Label. */ protected static Label newLabel(String labelText, Composite composite) { Label label = new Label(composite, SWT.WRAP); label.setText(labelText); GridData data = new GridData(SWT.FILL, SWT.FILL, false, false); data.horizontalSpan = LAYOUT_COLUMN_WIDTH; data.widthHint = 500; // SWT won't wrap without a widthHint label.setLayoutData(data); return label; } /** * Convenience method for creating a new Link widget. * * @param linkListener * The lister to add to the new Link. * @param linkText * The text for the new Link. * @param composite * The parent for the new Link. */ protected static Link newLink(Listener linkListener, String linkText, Composite composite) { Link link = new Link(composite, SWT.WRAP); link.setText(linkText); link.addListener(SWT.Selection, linkListener); GridData data = new GridData(SWT.FILL, SWT.FILL, false, false); data.horizontalSpan = LAYOUT_COLUMN_WIDTH; data.widthHint = 500; link.setLayoutData(data); return link; } /** * Creates a thin, empty composite to help space components vertically. * * @param parent * The composite this spacer is being added to. */ protected static void createSpacer(Composite parent) { Composite spacer = new Composite(parent, SWT.NONE); GridData data = new GridData(GridData.FILL_HORIZONTAL); data.heightHint = 5; data.horizontalSpan = LAYOUT_COLUMN_WIDTH; spacer.setLayoutData(data); } /** * Tweaks the specified GridLayout to restore various settings. This method * is intended to be run after FieldEditors have been added to the parent * component so that anything they changed in the layout can be fixed. * * @param layout * The layout to tweak. */ protected static void tweakLayout(GridLayout layout) { layout.numColumns = LAYOUT_COLUMN_WIDTH; layout.marginWidth = 10; layout.marginHeight = 8; } /** * Creates a new ObfuscatingStringFieldEditor based on the specified * parameters. * * @param preferenceKey * The key for the preference managed by this field editor. * @param label * The label for this field editor. * @param parent * The parent for this field editor. * * @return The new FieldEditor. */ protected ObfuscatingStringFieldEditor newStringFieldEditor(String preferenceKey, String label, Composite parent) { ObfuscatingStringFieldEditor fieldEditor = new ObfuscatingStringFieldEditor(preferenceKey, label, parent); fieldEditor.setPage(this); fieldEditor.setPreferenceStore(this.getPreferenceStore()); fieldEditor.load(); fieldEditor.fillIntoGrid(parent, LAYOUT_COLUMN_WIDTH); return fieldEditor; } /** * Creates a new FileFieldEditor based on the specified parameters. * * @param preferenceKey * The key for the preference managed by this field editor. * @param label * The label for this field editor. * @param parent * The parent for this field editor. * * @return The new FieldEditor. */ protected FileFieldEditor newFileFieldEditor(String preferenceKey, String label, Composite parent) { FileFieldEditor fieldEditor = new FileFieldEditor(preferenceKey, label, parent); fieldEditor.setPage(this); fieldEditor.setPreferenceStore(this.getPreferenceStore()); fieldEditor.load(); fieldEditor.fillIntoGrid(parent, LAYOUT_COLUMN_WIDTH); return fieldEditor; } }