Java tutorial
/******************************************************************************* * Copyright (c) 2000, 2005 IBM Corporation 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: * IBM Corporation - initial API and implementation *******************************************************************************/ package org.cfeclipse.cfml.preferences; import java.util.ArrayList; import java.util.List; import org.cfeclipse.cfml.editors.CFConfiguration; import org.cfeclipse.cfml.editors.CFDocumentSetupParticipant; import org.cfeclipse.cfml.editors.CFMLEditor; import org.cfeclipse.cfml.editors.ColorManager; import org.cfeclipse.cfml.editors.ICFDocument; import org.cfeclipse.cfml.editors.formatters.CFMLFormatter; import org.cfeclipse.cfml.editors.formatters.FormattingPreferences; import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.jface.resource.JFaceResources; import org.eclipse.jface.text.source.SourceViewer; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Font; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.ui.editors.text.EditorsUI; import org.eclipse.ui.texteditor.ChainedPreferenceStore; /* * The page to configure the code formatter options. */ public class CodeFormatterPreferencePage extends AbstractCFEditorPreferencePage { private SourceViewer fPreviewViewer; private CFPreviewerUpdater fPreviewerUpdater; private CFMLEditor fEditor; @SuppressWarnings("unchecked") protected OverlayPreferenceStore createOverlayStore() { List overlayKeys = new ArrayList(); overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, EditorPreferenceConstants.FORMATTER_WRAP_LONG)); overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, EditorPreferenceConstants.FORMATTER_ALIGN)); overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.INT, EditorPreferenceConstants.FORMATTER_MAX_LINE_LENGTH)); overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, EditorPreferenceConstants.P_INSERT_SPACES_FOR_TABS)); overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.INT, EditorPreferenceConstants.P_TAB_WIDTH)); overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, EditorPreferenceConstants.FORMATTER_CLOSE_TAGS)); overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, EditorPreferenceConstants.FORMATTER_CONDENSE_TAGS)); overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, EditorPreferenceConstants.FORMATTER_COLLAPSE_WHITESPACE)); overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, EditorPreferenceConstants.FORMATTER_INDENT_ALL_ELEMENTS)); overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, EditorPreferenceConstants.FORMATTER_TIDY_TAGS)); overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, EditorPreferenceConstants.FORMATTER_FORMAT_CFSCRIPT)); overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, EditorPreferenceConstants.FORMATTER_FORMAT_JS)); overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, EditorPreferenceConstants.FORMATTER_SCRIPT_BRACES_ON_OWN_LINE)); overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, EditorPreferenceConstants.FORMATTER_FORMAT_SQL)); overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, EditorPreferenceConstants.FORMATTER_FORMAT_CSS)); overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING, EditorPreferenceConstants.FORMATTER_CLOSE_TAGS_LIST)); overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING, EditorPreferenceConstants.FORMATTER_IGNORED_TAGS)); overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, EditorPreferenceConstants.FORMATTER_CHANGE_TAG_CASE)); overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, EditorPreferenceConstants.FORMATTER_CHANGE_TAG_CASE_UPPER)); overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, EditorPreferenceConstants.FORMATTER_CHANGE_TAG_CASE_LOWER)); OverlayPreferenceStore.OverlayKey[] keys = new OverlayPreferenceStore.OverlayKey[overlayKeys.size()]; overlayKeys.toArray(keys); return new OverlayPreferenceStore(getPreferenceStore(), keys); } /* * @see PreferencePage#createControl(Composite) */ public void createControl(Composite parent) { super.createControl(parent); //TODO set help //WorkbenchHelp.setHelp(getControl(), "ANT_FORMATTER_PREFERENCE_PAGE"); } protected Control createContents(Composite parent) { initializeDialogUnits(parent); getOverlayStore().load(); getOverlayStore().start(); int numColumns = 2; Composite result = new Composite(parent, SWT.NONE); GridLayout layout = new GridLayout(); layout.marginHeight = 0; layout.marginWidth = 0; result.setLayout(layout); // Group indentationGroup= createGroup(numColumns, result, CFMLPreferencesMessages.CFMLCodeFormatterPreferencePage_0); // // String labelText= CFMLPreferencesMessages.CFMLCodeFormatterPreferencePage_1; // String[] errorMessages= new String[]{CFMLPreferencesMessages.CFMLCodeFormatterPreferencePage_2, CFMLPreferencesMessages.CFMLCodeFormatterPreferencePage_3}; // addTextField(indentationGroup, labelText, EditorPreferenceConstants.P_TAB_WIDTH, 3, 0, errorMessages); // // labelText= CFMLPreferencesMessages.CFMLCodeFormatterPreferencePage_4; // addCheckBox(indentationGroup, labelText, EditorPreferenceConstants.P_INSERT_SPACES_FOR_TABS, 1); Group wrappingGroup = createGroup(numColumns, result, CFMLPreferencesMessages.CFMLCodeFormatterPreferencePage_6); String labelText = CFMLPreferencesMessages.CFMLCodeFormatterPreferencePage_7; String[] errorMessages = new String[] { CFMLPreferencesMessages.CFMLCodeFormatterPreferencePage_8, CFMLPreferencesMessages.CFMLCodeFormatterPreferencePage_9 }; addTextField(wrappingGroup, labelText, EditorPreferenceConstants.FORMATTER_MAX_LINE_LENGTH, 3, 0, errorMessages); labelText = CFMLPreferencesMessages.CFMLCodeFormatterPreferencePage_10; addCheckBox(wrappingGroup, labelText, EditorPreferenceConstants.FORMATTER_WRAP_LONG, 1); labelText = CFMLPreferencesMessages.CFMLCodeFormatterPreferencePage_19; addCheckBox(wrappingGroup, labelText, EditorPreferenceConstants.FORMATTER_CONDENSE_TAGS, 1); // labelText= CFMLPreferencesMessages.CFMLCodeFormatterPreferencePage_5; // addCheckBox(wrappingGroup, labelText, EditorPreferenceConstants.FORMATTER_ALIGN, 1); labelText = CFMLPreferencesMessages.CFMLCodeFormatterPreferencePage_11; addCheckBox(wrappingGroup, labelText, EditorPreferenceConstants.FORMATTER_CLOSE_TAGS, 1); labelText = CFMLPreferencesMessages.CFMLCodeFormatterPreferencePage_CloseTagList; addExpandableTextField(wrappingGroup, labelText, EditorPreferenceConstants.FORMATTER_CLOSE_TAGS_LIST, 80, 0, null); labelText = CFMLPreferencesMessages.CFMLCodeFormatterPreferencePage_IgnoredTags; addExpandableTextField(wrappingGroup, labelText, EditorPreferenceConstants.FORMATTER_IGNORED_TAGS, 80, 0, null); labelText = CFMLPreferencesMessages.CFMLCodeFormatterPreferencePage_FormatCFScript; addCheckBox(wrappingGroup, labelText, EditorPreferenceConstants.FORMATTER_FORMAT_CFSCRIPT, 1); labelText = CFMLPreferencesMessages.CFMLCodeFormatterPreferencePage_FormatJS; addCheckBox(wrappingGroup, labelText, EditorPreferenceConstants.FORMATTER_FORMAT_JS, 1); labelText = CFMLPreferencesMessages.CFMLCodeFormatterPreferencePage_BracesOnOwnLine; addCheckBox(wrappingGroup, labelText, EditorPreferenceConstants.FORMATTER_SCRIPT_BRACES_ON_OWN_LINE, 1); labelText = CFMLPreferencesMessages.CFMLCodeFormatterPreferencePage_12; addCheckBox(wrappingGroup, labelText, EditorPreferenceConstants.FORMATTER_FORMAT_SQL, 1); labelText = CFMLPreferencesMessages.CFMLCodeFormatterPreferencePage_FormatCSS; addCheckBox(wrappingGroup, labelText, EditorPreferenceConstants.FORMATTER_FORMAT_CSS, 1); labelText = CFMLPreferencesMessages.CFMLCodeFormatterPreferencePage_13; addCheckBox(wrappingGroup, labelText, EditorPreferenceConstants.FORMATTER_COLLAPSE_WHITESPACE, 1); labelText = CFMLPreferencesMessages.CFMLCodeFormatterPreferencePage_14; addCheckBox(wrappingGroup, labelText, EditorPreferenceConstants.FORMATTER_INDENT_ALL_ELEMENTS, 1); labelText = CFMLPreferencesMessages.CFMLCodeFormatterPreferencePage_15; addCheckBox(wrappingGroup, labelText, EditorPreferenceConstants.FORMATTER_TIDY_TAGS, 1); labelText = CFMLPreferencesMessages.CFMLCodeFormatterPreferencePage_16; addCheckBox(wrappingGroup, labelText, EditorPreferenceConstants.FORMATTER_CHANGE_TAG_CASE, 1); labelText = CFMLPreferencesMessages.CFMLCodeFormatterPreferencePage_17; addRadioButton(wrappingGroup, labelText, EditorPreferenceConstants.FORMATTER_CHANGE_TAG_CASE_LOWER, 15); labelText = CFMLPreferencesMessages.CFMLCodeFormatterPreferencePage_18; addRadioButton(wrappingGroup, labelText, EditorPreferenceConstants.FORMATTER_CHANGE_TAG_CASE_UPPER, 15); Label label = new Label(result, SWT.LEFT); label.setText(CFMLPreferencesMessages.CFMLEditorPreferencePage_9); label.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); Control previewer = createPreviewer(result); GridData gd = new GridData(GridData.FILL_BOTH); gd.widthHint = convertWidthInCharsToPixels(20); gd.heightHint = convertHeightInCharsToPixels(5); previewer.setLayoutData(gd); initializeFields(); applyDialogFont(result); return result; } private Control createPreviewer(Composite parent) { fPreviewViewer = new SourceViewer(parent, null, null, false, SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL); fEditor = new CFMLEditor(); ColorManager colorMan = new ColorManager(); CFConfiguration configuration = new CFConfiguration(colorMan, fEditor); fPreviewViewer.configure(configuration); fPreviewViewer.setEditable(false); Font font = JFaceResources.getFont(JFaceResources.TEXT_FONT); fPreviewViewer.getTextWidget().setFont(font); IPreferenceStore store = new ChainedPreferenceStore( new IPreferenceStore[] { getOverlayStore(), EditorsUI.getPreferenceStore() }); fPreviewerUpdater = new CFPreviewerUpdater(fPreviewViewer, configuration, store); String content = loadPreviewContentFromFile("FormatPreviewCode.txt"); //$NON-NLS-1$ content = formatContent(content, store); //IDocument document = new Document(content); ICFDocument document = new ICFDocument(content); new CFDocumentSetupParticipant().setup(document); fPreviewViewer.setDocument(document); return fPreviewViewer.getControl(); } private String formatContent(String content, IPreferenceStore preferenceStore) { FormattingPreferences prefs = new FormattingPreferences(); prefs.setPreferenceStore(preferenceStore); return CFMLFormatter.format(content, prefs); } /* (non-Javadoc) * @see org.cfeclipse.cfml.preferences.AbstractCFEditorPreferencePage#handleDefaults() */ protected void handleDefaults() { } /* (non-Javadoc) * @see org.eclipse.jface.dialogs.IDialogPage#dispose() */ public void dispose() { super.dispose(); if (fPreviewerUpdater != null) { fPreviewerUpdater.dispose(); } } }