| /******************************************************************************* |
| * Copyright (c) 2001, 2004 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 |
| * Jens Lukowski/Innoopract - initial renaming/restructuring |
| * |
| *******************************************************************************/ |
| package org.eclipse.wst.xml.ui.internal.preferences; |
| |
| import org.eclipse.core.resources.ResourcesPlugin; |
| import org.eclipse.swt.SWT; |
| 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.Combo; |
| import org.eclipse.swt.widgets.Composite; |
| import org.eclipse.wst.sse.core.internal.encoding.CommonCharsetNames; |
| import org.eclipse.wst.xml.ui.internal.XMLUIMessages; |
| |
| /** |
| * WorkbenchDefaultEncodingSettings is an extension of EncodingSettings. This |
| * composite contains EncodingSettings for users to select the encoding they |
| * desire as well as a checkbox for users to select to use the default |
| * workbench encoding instead. |
| * |
| * @see org.eclipse.wst.xml.ui.internal.preferences.EncodingSettings |
| */ |
| public class WorkbenchDefaultEncodingSettings extends Composite { |
| |
| private final static int INDENT = 15; |
| private static final String WORKBENCH_DEFAULT = ""; //$NON-NLS-1$ |
| private EncodingSettings fEncodingSettings; |
| private String fNonDefaultIANA = null; |
| private Button fUseDefaultButton; |
| |
| public WorkbenchDefaultEncodingSettings(Composite parent) { |
| super(parent, SWT.NONE); |
| createControls(); |
| } |
| |
| private void createControls() { |
| GridLayout layout = new GridLayout(); |
| layout.numColumns = 1; |
| layout.marginWidth = 0; |
| setLayout(layout); |
| GridData data = new GridData(); |
| data.verticalAlignment = GridData.FILL; |
| data.horizontalAlignment = GridData.FILL; |
| data.grabExcessHorizontalSpace = true; |
| setLayoutData(data); |
| |
| Composite defaultEncodingComposite = new Composite(this, SWT.NONE); |
| layout = new GridLayout(); |
| layout.marginWidth = 0; |
| layout.marginHeight = 0; |
| data = new GridData(GridData.FILL_BOTH); |
| defaultEncodingComposite.setLayout(layout); |
| defaultEncodingComposite.setLayoutData(data); |
| |
| fUseDefaultButton = new Button(defaultEncodingComposite, SWT.CHECK); |
| fUseDefaultButton.setText(XMLUIMessages.WorkbenchDefaultEncodingSettings_0); |
| |
| fUseDefaultButton.addSelectionListener(new SelectionAdapter() { |
| public void widgetSelected(SelectionEvent e) { |
| handleUseDefaultButtonSelected(); |
| } |
| }); |
| |
| fEncodingSettings = new EncodingSettings(this); |
| ((GridLayout) fEncodingSettings.getLayout()).marginWidth = 0; |
| ((GridData) fEncodingSettings.getLayoutData()).horizontalIndent = INDENT; |
| |
| } |
| |
| private Combo getEncodingCombo() { |
| return fEncodingSettings.getEncodingCombo(); |
| } |
| |
| /** |
| * <code>getIANATag</code> Get the IANA tag equivalent of the selected |
| * descriptive encoding name. Returns empty string if using workbench |
| * encoding. |
| * |
| * @return a <code>String</code> value |
| */ |
| public String getIANATag() { |
| if (!isDefault()) { |
| return fEncodingSettings.getIANATag(); |
| } |
| return WORKBENCH_DEFAULT; |
| } |
| |
| private String getWorkbenchEncoding() { |
| return ResourcesPlugin.getEncoding(); |
| } |
| |
| void handleUseDefaultButtonSelected() { |
| if (fUseDefaultButton.getSelection()) { |
| fNonDefaultIANA = fEncodingSettings.getIANATag(); |
| String workbenchValue = getWorkbenchEncoding(); |
| workbenchValue = CommonCharsetNames.getIanaPreferredCharsetName(workbenchValue); |
| fEncodingSettings.setIANATag(workbenchValue); |
| } |
| else if (fNonDefaultIANA != null) { |
| fEncodingSettings.setIANATag(fNonDefaultIANA); |
| } |
| getEncodingCombo().setEnabled(!fUseDefaultButton.getSelection()); |
| fEncodingSettings.setEnabled(!fUseDefaultButton.getSelection()); |
| } |
| |
| private boolean isDefault() { |
| return fUseDefaultButton.getSelection(); |
| } |
| |
| /** |
| * <code>setEncoding</code> Set the selection in the combo to the |
| * descriptive encoding name. Selects use workbench encoding if ianaTag is |
| * null or empty string. |
| * |
| */ |
| public void setIANATag(String ianaTag) { |
| if ((ianaTag == null) || ianaTag.equals(WORKBENCH_DEFAULT)) { |
| fUseDefaultButton.setSelection(true); |
| handleUseDefaultButtonSelected(); |
| } |
| else { |
| fUseDefaultButton.setSelection(false); |
| handleUseDefaultButtonSelected(); |
| if (!isDefault()) { |
| fEncodingSettings.setIANATag(ianaTag); |
| } |
| } |
| } |
| } |