/******************************************************************************* * Copyright (c) 2006 Sybase, Inc. 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: * Sybase, Inc. - initial API and implementation *******************************************************************************/ package org.eclipse.jst.pagedesigner.ui.dialogs; import org.eclipse.jface.preference.PreferencePage; import org.eclipse.jst.jsf.common.ui.internal.dialogfield.ColorButtonDialogField; import org.eclipse.jst.jsf.common.ui.internal.dialogfield.DialogField; import org.eclipse.jst.jsf.common.ui.internal.dialogfield.IDialogFieldApplyListener; import org.eclipse.swt.SWT; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Label; import org.eclipse.wst.css.core.internal.util.declaration.CSSPropertyContext; import org.eclipse.wst.xml.core.internal.provisional.document.IDOMElement; /** * @author mengbo * @version 1.5 */ public class TextPreferencePage extends PreferencePage { private CSSPropertyContext _style; private StyleCombo _fontFamilyCombo, _fontSizeNumberCombo, _fontSizeUnitCombo, _fontWeightCombo, _fontStyleCombo, _fontVariantCombo, _fontLineHeightNumberCombo, _fontLineHeightUnitCombo, _textTransformCombo; private ColorButtonDialogField _colorField; private Button _textDecorationUnderlineButton, _textDecorationOverlineButton, _textDecorationLineThroughButton, _textDecorationBlinkButton, _textDecorationNoneButton; /** * @param element * @param style */ public TextPreferencePage(IDOMElement element, CSSPropertyContext style) { super(); _style = style; // Set the preference store for the preference page. // IPreferenceStore store = // JMTIntegrationPlugin.getDefault().getPreferenceStore(); // setPreferenceStore(store); setTitle(DialogsMessages.getString("TextPreferencePage.Title")); //$NON-NLS-1$ } /** * @see org.eclipse.jface.preference. * PreferencePage#createContents(Composite) */ protected Control createContents(Composite parent) { GridLayout layout; GridData data; Composite top = new Composite(parent, SWT.NONE); layout = new GridLayout(5, false); data = new GridData(GridData.FILL_BOTH); top.setLayout(layout); top.setLayoutData(data); Label fontLabel = new Label(top, SWT.NONE); fontLabel.setText(DialogsMessages.getString("TextPreferencePage.Font")); //$NON-NLS-1$ data = new GridData(GridData.HORIZONTAL_ALIGN_END); fontLabel.setLayoutData(data); _fontFamilyCombo = new StyleCombo(top, SWT.NONE); _fontFamilyCombo.setItems(IStyleConstants.FONT_FAMILY); data = new GridData(GridData.FILL_HORIZONTAL); data.horizontalSpan = 4; _fontFamilyCombo.setLayoutData(data); _fontFamilyCombo.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { _style.setFontFamily(_fontFamilyCombo.getText()); } }); Label sizeLabel = new Label(top, SWT.NONE); sizeLabel.setText(DialogsMessages.getString("TextPreferencePage.Size")); //$NON-NLS-1$ data = new GridData(GridData.HORIZONTAL_ALIGN_END); sizeLabel.setLayoutData(data); _fontSizeNumberCombo = new StyleCombo(top, SWT.NONE); _fontSizeNumberCombo.setItems(IStyleConstants.FONT_SIZE_NUMBER); data = new GridData(GridData.FILL_HORIZONTAL); _fontSizeNumberCombo.setLayoutData(data); _fontSizeNumberCombo.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { _fontSizeUnitCombo.setEnabled(true); try { Integer.valueOf(_fontSizeNumberCombo.getText()); } catch (NumberFormatException ex) { _fontSizeUnitCombo.setEnabled(false); } String size = _fontSizeNumberCombo.getText(); if (_fontSizeUnitCombo.isEnabled()) { size += _fontSizeUnitCombo.getText(); } _style.setFontSize(size); } }); _fontSizeUnitCombo = new StyleCombo(top, SWT.READ_ONLY); _fontSizeUnitCombo.setItems(IStyleConstants.SIZE_UNIT); data = new GridData(GridData.FILL_HORIZONTAL); _fontSizeUnitCombo.setLayoutData(data); _fontSizeUnitCombo.select(0); _fontSizeUnitCombo.setEnabled(false); _fontSizeUnitCombo.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { String size = _fontSizeNumberCombo.getText(); if (_fontSizeUnitCombo.isEnabled()) { size += _fontSizeUnitCombo.getText(); } _style.setFontSize(size); } }); Label weightLabel = new Label(top, SWT.NONE); weightLabel.setText(DialogsMessages .getString("TextPreferencePage.Weight")); //$NON-NLS-1$ data = new GridData(GridData.HORIZONTAL_ALIGN_END); weightLabel.setLayoutData(data); _fontWeightCombo = new StyleCombo(top, SWT.NONE); _fontWeightCombo.setItems(IStyleConstants.FONT_WEIGHT); data = new GridData(GridData.FILL_HORIZONTAL); _fontWeightCombo.setLayoutData(data); _fontWeightCombo.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { String weight = _fontWeightCombo.getText(); _style.setFontWeight(weight); } }); Label stylesLabel = new Label(top, SWT.NONE); stylesLabel.setText(DialogsMessages .getString("TextPreferencePage.Style")); //$NON-NLS-1$ data = new GridData(GridData.HORIZONTAL_ALIGN_END); stylesLabel.setLayoutData(data); _fontStyleCombo = new StyleCombo(top, SWT.NONE); _fontStyleCombo.setItems(IStyleConstants.FONT_STYLE); data = new GridData(GridData.FILL_HORIZONTAL); _fontStyleCombo.setLayoutData(data); _fontStyleCombo.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { String style = _fontStyleCombo.getText(); _style.setFontStyle(style); } }); new Label(top, SWT.NONE); Label variantLabel = new Label(top, SWT.NONE); variantLabel.setText(DialogsMessages .getString("TextPreferencePage.Variant")); //$NON-NLS-1$ data = new GridData(GridData.HORIZONTAL_ALIGN_END); variantLabel.setLayoutData(data); _fontVariantCombo = new StyleCombo(top, SWT.NONE); _fontVariantCombo.setItems(IStyleConstants.FONT_VARIANT); data = new GridData(GridData.FILL_HORIZONTAL); _fontVariantCombo.setLayoutData(data); _fontVariantCombo.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { String variant = _fontVariantCombo.getText(); _style.setFontVariant(variant); } }); Label lineHeightLabel = new Label(top, SWT.NONE); lineHeightLabel.setText(DialogsMessages .getString("TextPreferencePage.LineHeight")); //$NON-NLS-1$ data = new GridData(GridData.HORIZONTAL_ALIGN_END); lineHeightLabel.setLayoutData(data); _fontLineHeightNumberCombo = new StyleCombo(top, SWT.NONE); _fontLineHeightNumberCombo.setItems(IStyleConstants.NORMAL); data = new GridData(GridData.FILL_HORIZONTAL); _fontLineHeightNumberCombo.setLayoutData(data); _fontLineHeightNumberCombo.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { _fontLineHeightUnitCombo.setEnabled(true); try { Integer.valueOf(_fontLineHeightNumberCombo.getText()); } catch (NumberFormatException ex) { _fontLineHeightUnitCombo.setEnabled(false); } String height = _fontLineHeightNumberCombo.getText(); if (_fontLineHeightUnitCombo.isEnabled()) { height += _fontLineHeightUnitCombo.getText(); } _style.setLineHeight(height); } }); _fontLineHeightUnitCombo = new StyleCombo(top, SWT.READ_ONLY); _fontLineHeightUnitCombo.setItems(IStyleConstants.SIZE_UNIT); data = new GridData(GridData.FILL_HORIZONTAL); _fontLineHeightUnitCombo.setLayoutData(data); _fontLineHeightUnitCombo.select(0); _fontLineHeightUnitCombo.setEnabled(false); _fontLineHeightUnitCombo.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { String height = _fontLineHeightNumberCombo.getText(); if (_fontLineHeightUnitCombo.isEnabled()) { height += _fontLineHeightUnitCombo.getText(); } _style.setLineHeight(height); } }); Label caseLabel = new Label(top, SWT.NONE); caseLabel.setText(DialogsMessages.getString("TextPreferencePage.Case")); //$NON-NLS-1$ data = new GridData(GridData.HORIZONTAL_ALIGN_END); caseLabel.setLayoutData(data); _textTransformCombo = new StyleCombo(top, SWT.NONE); _textTransformCombo.setItems(IStyleConstants.FONT_TEXTTRANSFORM); data = new GridData(GridData.FILL_HORIZONTAL); _textTransformCombo.setLayoutData(data); _textTransformCombo.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { String textTransform = _textTransformCombo.getText(); _style.setTextTransform(textTransform); } }); Label decorationLabel = new Label(top, SWT.NONE); decorationLabel.setText(DialogsMessages .getString("TextPreferencePage.Decoration")); //$NON-NLS-1$ data = new GridData(GridData.HORIZONTAL_ALIGN_END); decorationLabel.setLayoutData(data); Composite decorationComposite = new Composite(top, SWT.NONE); data = new GridData(GridData.FILL_HORIZONTAL); data.horizontalSpan = 4; decorationComposite.setLayoutData(data); layout = new GridLayout(5, true); layout.marginWidth = 0; decorationComposite.setLayout(layout); _textDecorationUnderlineButton = new Button(decorationComposite, SWT.CHECK); _textDecorationUnderlineButton .setText(IStyleConstants.TEXT_DECORATION[0]); _textDecorationUnderlineButton .addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { if (_textDecorationUnderlineButton.getSelection()) { _textDecorationNoneButton.setSelection(false); } _style.setTextDecoration(getTextDecoration()); } }); _textDecorationOverlineButton = new Button(decorationComposite, SWT.CHECK); _textDecorationOverlineButton .setText(IStyleConstants.TEXT_DECORATION[1]); _textDecorationOverlineButton .addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { if (_textDecorationOverlineButton.getSelection()) { _textDecorationNoneButton.setSelection(false); } _style.setTextDecoration(getTextDecoration()); } }); _textDecorationLineThroughButton = new Button(decorationComposite, SWT.CHECK); _textDecorationLineThroughButton .setText(IStyleConstants.TEXT_DECORATION[2]); _textDecorationLineThroughButton .addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { if (_textDecorationLineThroughButton.getSelection()) { _textDecorationNoneButton.setSelection(false); } _style.setTextDecoration(getTextDecoration()); } }); _textDecorationBlinkButton = new Button(decorationComposite, SWT.CHECK); _textDecorationBlinkButton.setText(IStyleConstants.TEXT_DECORATION[3]); _textDecorationBlinkButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { if (_textDecorationBlinkButton.getSelection()) { _textDecorationNoneButton.setSelection(false); } _style.setTextDecoration(getTextDecoration()); } }); _textDecorationNoneButton = new Button(decorationComposite, SWT.CHECK); _textDecorationNoneButton.setText(IStyleConstants.TEXT_DECORATION[4]); _textDecorationNoneButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { if (_textDecorationNoneButton.getSelection()) { _textDecorationUnderlineButton.setSelection(false); _textDecorationOverlineButton.setSelection(false); _textDecorationLineThroughButton.setSelection(false); _textDecorationBlinkButton.setSelection(false); } _style.setTextDecoration(getTextDecoration()); } }); _colorField = new ColorButtonDialogField(SWT.BORDER, new ColorUtil()); _colorField.setLabelText(DialogsMessages .getString("TextPreferencePage.Color")); //$NON-NLS-1$ data = new GridData(GridData.HORIZONTAL_ALIGN_END); _colorField.getLabelControl(null, top).setLayoutData(data); data = new GridData(); data.horizontalAlignment = GridData.FILL; data.grabExcessHorizontalSpace = false; _colorField.getComboControl(null, top).setLayoutData(data); data = new GridData(); _colorField.getChangeControl(null, top).setLayoutData(data); _colorField .setDialogFieldApplyListener(new IDialogFieldApplyListener() { public void dialogFieldApplied(DialogField field) { String color = _colorField.getText(); _style.setColor(color); } }); initializeControls(); return top; } private void initializeControls() { // font-family String fontFamily = _style.getFontFamily(); if (!isEmptyString(fontFamily)) { int index = _fontFamilyCombo.indexOf(fontFamily); if (index != -1) { _fontFamilyCombo.select(index); } else { _fontFamilyCombo.setText(fontFamily); } } // font-size String fontSize = _style.getFontSize(); if (!isEmptyString(fontSize)) { int index = _fontSizeNumberCombo.indexOf(fontSize); if (index != -1) { _fontSizeNumberCombo.select(index); } else { _fontSizeNumberCombo.setText(fontSize); } } // font-weight String fontWeight = _style.getFontWeight(); if (!isEmptyString(fontWeight)) { int index = _fontWeightCombo.indexOf(fontWeight); if (index != -1) { _fontWeightCombo.select(index); } else { _fontWeightCombo.setText(fontWeight); } } // font-style String fontStyle = _style.getFontStyle(); if (!isEmptyString(fontStyle)) { int index = _fontStyleCombo.indexOf(fontStyle); if (index != -1) { _fontStyleCombo.select(index); } else { _fontStyleCombo.setText(fontStyle); } } // font-variant String fontVariant = _style.getFontVariant(); if (!isEmptyString(fontVariant)) { int index = _fontVariantCombo.indexOf(fontVariant); if (index != -1) { _fontVariantCombo.select(index); } else { _fontVariantCombo.setText(fontVariant); } } // line-height String lineHeight = _style.getLineHeight(); if (!isEmptyString(lineHeight)) { int index = _fontLineHeightNumberCombo.indexOf(lineHeight); if (index != -1) { _fontLineHeightNumberCombo.select(index); } else { _fontLineHeightNumberCombo.setText(lineHeight); } } // text-transform String textTransform = _style.getTextTransform(); if (!isEmptyString(textTransform)) { int index = _textTransformCombo.indexOf(textTransform); if (index != -1) { _textTransformCombo.select(index); } else { _textTransformCombo.setText(textTransform); } } // text-decoration String textDecoration = _style.getTextDecoration(); if (!isEmptyString(textDecoration)) { int index = textDecoration .indexOf(IStyleConstants.TEXT_DECORATION[0]); if (index != -1) { _textDecorationUnderlineButton.setSelection(true); } else { _textDecorationUnderlineButton.setSelection(false); } index = textDecoration.indexOf(IStyleConstants.TEXT_DECORATION[1]); if (index != -1) { _textDecorationOverlineButton.setSelection(true); } else { _textDecorationOverlineButton.setSelection(false); } index = textDecoration.indexOf(IStyleConstants.TEXT_DECORATION[2]); if (index != -1) { _textDecorationLineThroughButton.setSelection(true); } else { _textDecorationLineThroughButton.setSelection(false); } index = textDecoration.indexOf(IStyleConstants.TEXT_DECORATION[3]); if (index != -1) { _textDecorationBlinkButton.setSelection(true); } else { _textDecorationBlinkButton.setSelection(false); } index = textDecoration.indexOf(IStyleConstants.TEXT_DECORATION[4]); if (index != -1) { _textDecorationNoneButton.setSelection(true); } else { _textDecorationNoneButton.setSelection(false); } } // color String color = _style.getColor(); if (!isEmptyString(color)) { _colorField.setTextWithoutUpdate(color); } } private String getTextDecoration() { StringBuffer textDecoration = new StringBuffer(); if (_textDecorationUnderlineButton.getSelection()) { textDecoration.append(_textDecorationUnderlineButton.getText()) .append(' '); } if (_textDecorationOverlineButton.getSelection()) { textDecoration.append(_textDecorationOverlineButton.getText()) .append(' '); } if (_textDecorationLineThroughButton.getSelection()) { textDecoration.append(_textDecorationLineThroughButton.getText()) .append(' '); } if (_textDecorationBlinkButton.getSelection()) { textDecoration.append(_textDecorationBlinkButton.getText()).append( ' '); } if (_textDecorationNoneButton.getSelection()) { textDecoration.append(_textDecorationNoneButton.getText()).append( ' '); } return textDecoration.toString().trim(); } public void setVisible(boolean visible) { super.setVisible(visible); getApplyButton().setVisible(false); getDefaultsButton().setVisible(false); } private boolean isEmptyString(String str) { if (str == null || str.length() == 0) { return true; } return false; } }