| /******************************************************************************* |
| * Copyright (c) 2005, 2007 BEA Systems, Inc. |
| * 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: |
| * wharley@bea.com - initial API and implementation |
| *******************************************************************************/ |
| |
| package org.eclipse.jdt.apt.ui.internal.preferences; |
| |
| import java.io.IOException; |
| import java.util.Map.Entry; |
| |
| import org.eclipse.jdt.apt.core.internal.util.FactoryContainer; |
| import org.eclipse.jdt.apt.core.internal.util.FactoryPath; |
| import org.eclipse.jdt.apt.ui.internal.util.ExceptionHandler; |
| import org.eclipse.jdt.apt.ui.internal.util.IAptHelpContextIds; |
| import org.eclipse.jdt.internal.ui.wizards.dialogfields.DialogField; |
| import org.eclipse.jdt.internal.ui.wizards.dialogfields.IDialogFieldListener; |
| import org.eclipse.jdt.internal.ui.wizards.dialogfields.SelectionButtonDialogField; |
| import org.eclipse.jface.dialogs.Dialog; |
| import org.eclipse.jface.viewers.ListViewer; |
| import org.eclipse.swt.SWT; |
| import org.eclipse.swt.layout.GridData; |
| import org.eclipse.swt.widgets.Composite; |
| import org.eclipse.swt.widgets.Control; |
| import org.eclipse.swt.widgets.Label; |
| import org.eclipse.swt.widgets.Shell; |
| import org.eclipse.ui.PlatformUI; |
| |
| /** |
| * Dialog to display "advanced options" on a FactoryPathEntry, |
| * typically in the context of the factory path config UI. |
| * Advanced options are those which do not normally need to |
| * be configured, and which may require deeper-than-usual |
| * understanding of the annotation processing architecture. |
| */ |
| public class AdvancedFactoryPathOptionsDialog extends Dialog { |
| |
| private final static int LIST_WIDTH= 70; // width (in chars) of factory list |
| private final static int LIST_HEIGHT= 10; // number of lines in factory list |
| |
| private class FieldAdapter implements IDialogFieldListener { |
| public void dialogFieldChanged(DialogField field) { |
| } |
| } |
| |
| // shallow copies, because they are not changed by this code |
| private final FactoryContainer _fc; |
| private final FactoryPath.Attributes _attr; |
| |
| // Dialog controls |
| private SelectionButtonDialogField _batchModeField; |
| private ListViewer _contentsField; |
| |
| public AdvancedFactoryPathOptionsDialog( |
| Shell parent, FactoryContainer fc, FactoryPath.Attributes attr) { |
| super(parent); |
| setShellStyle(getShellStyle() | SWT.RESIZE); |
| _fc= fc; |
| _attr= attr; |
| } |
| |
| protected void configureShell(Shell shell) { |
| super.configureShell(shell); |
| shell.setText(Messages.AdvancedFactoryPathOptionsDialog_advancedOptions); |
| PlatformUI.getWorkbench().getHelpSystem().setHelp(shell, IAptHelpContextIds.ADVANCED_FACTORYPATH_OPTIONS_DIALOG); |
| } |
| |
| protected Control createDialogArea(Composite parent) { |
| Composite dlgArea= (Composite) super.createDialogArea(parent); |
| |
| // Set up "batch mode" checkbox. |
| FieldAdapter adapter = new FieldAdapter(); |
| _batchModeField = new SelectionButtonDialogField(SWT.CHECK); |
| _batchModeField.setSelection(_attr.runInBatchMode()); |
| _batchModeField.setLabelText(Messages.AdvancedFactoryPathOptionsDialog_batchMode); |
| _batchModeField.setDialogFieldListener(adapter); |
| _batchModeField.doFillIntoGrid(dlgArea, 2); |
| // Plugins can't run in APT compatibility mode. |
| boolean isPlugin = _fc.getType() == FactoryContainer.FactoryType.PLUGIN; |
| _batchModeField.setEnabled(!isPlugin); |
| |
| DialogField.createEmptySpace(dlgArea, 1); |
| |
| // Set up label for processor contents list |
| Label description= new Label(dlgArea, SWT.WRAP); |
| description.setText(Messages.AdvancedFactoryPathOptionsDialog_label_processorsInThisContainer); |
| GridData gdLabel= new GridData(GridData.HORIZONTAL_ALIGN_FILL); |
| gdLabel.horizontalSpan= 2; |
| description.setLayoutData(gdLabel); |
| |
| // Set up processor contents list |
| _contentsField= new ListViewer(dlgArea, SWT.SINGLE | SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL); |
| GridData data = new GridData(SWT.FILL, SWT.FILL, true, true); |
| data.heightHint = convertHeightInCharsToPixels(LIST_HEIGHT); |
| data.widthHint = convertWidthInCharsToPixels(LIST_WIDTH); |
| _contentsField.getList().setLayoutData(data); |
| _contentsField.getList().setFont(parent.getFont()); |
| try { |
| for (Entry<String, String> entry : _fc.getFactoryNames().entrySet()) { |
| String name = entry.getKey(); |
| _contentsField.add(name); |
| //TODO: display the processor type (i.e., entry.getValue()) |
| } |
| } |
| catch (IOException e) { |
| final String message = "Unable to load factory names from container [" + _fc.getId() + "]"; //$NON-NLS-1$ //$NON-NLS-2$ |
| ExceptionHandler.log(e, message); |
| } |
| _contentsField.setSelection(null, false); |
| |
| applyDialogFont(dlgArea); |
| return dlgArea; |
| } |
| |
| /** |
| * Return a new Attributes representing the original value updated |
| * with any changes made by the user. Changes will be included even |
| * if the dialog was cancelled, so this should only be called if the |
| * dialog returned OK. |
| */ |
| public FactoryPath.Attributes getResult() { |
| boolean batchMode = _batchModeField.isSelected(); |
| return new FactoryPath.Attributes(_attr.isEnabled(), batchMode); |
| } |
| } |