/******************************************************************************* * Copyright © 2008, 2013 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.eclipse.edt.ide.rui.visualeditor.internal.preferences; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.Iterator; import java.util.List; import org.eclipse.edt.ide.core.EDTCoreIDEPlugin; import org.eclipse.edt.ide.rui.internal.nls.ILocalesListViewer; import org.eclipse.edt.ide.rui.internal.nls.Locale; import org.eclipse.edt.ide.rui.internal.nls.LocaleUtility; import org.eclipse.edt.ide.rui.internal.nls.LocalesList; import org.eclipse.edt.ide.rui.preferences.IRUIPreferenceConstants; import org.eclipse.edt.ide.rui.visualeditor.internal.editor.EvHelp; import org.eclipse.edt.ide.rui.visualeditor.internal.nl.Messages; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Group; /** * Preference page fragment containing the RUI Visual Editor NLS Settings * * @author gslade * @since 7.5.1 * */ public class EvPreferencePageLanguage extends Composite implements IEvPreferencePage, ILocalesListViewer { protected Combo _handlerLocaleCombo = null; protected LocalesList _localesList = LocalesList.getLocalesList(); protected Combo _runtimeMessageLocaleCombo = null; IPreferenceStore _baseEGLStore = EDTCoreIDEPlugin.getPlugin().getPreferenceStore(); HashMap _handlerLocaleDisplayToCode = new HashMap(); /** * @param parent * @param style */ public EvPreferencePageLanguage( Composite parent, int style ) { super( parent, style ); LocalesList.getLocalesList().addChangeListener(this); GridLayout gridLayout = new GridLayout(); setLayout( gridLayout ); createRuntimeMessagesNLSGroup( parent ); createHandlerNLSGoup( parent ); Dialog.applyDialogFont( parent ); EvHelp.setHelp( this, EvHelp.PREFERENCES_LANGUAGE ); } /** * */ protected void createHandlerNLSGoup( Composite parent ) { Group runtimeGroup = new Group( this, SWT.NULL ); runtimeGroup.setText( Messages.NL_Rich_UI_handler_locale ); GridData layoutData = new GridData( GridData.GRAB_HORIZONTAL | GridData.FILL_HORIZONTAL ); runtimeGroup.setLayoutData( layoutData ); GridLayout layout = new GridLayout(); runtimeGroup.setLayout( layout ); _handlerLocaleCombo = new Combo( runtimeGroup, SWT.READ_ONLY ); layoutData = new GridData( GridData.GRAB_HORIZONTAL | GridData.FILL_HORIZONTAL ); _handlerLocaleCombo.setLayoutData( layoutData ); populateCombo(); /** * set the value */ String localeCode = _baseEGLStore.getString( IRUIPreferenceConstants.PREFERENCE_HANDLER_LOCALE ); if( localeCode == null || localeCode.length() == 0 ) { localeCode = LocaleUtility.getDefaultHandlerLocale().getCode(); } String displayString = ""; //$NON-NLS-1$ for( Iterator iterator = _localesList.getLocales().iterator(); iterator.hasNext() && displayString.equals( "" ); ) { //$NON-NLS-1$ Locale locale = (Locale)iterator.next(); if( locale.getCode().equals( localeCode ) ) { displayString = buildHandlerLocaleDisplayString(locale); } } _handlerLocaleCombo.setText( displayString ); } /** * */ private void populateCombo() { /** * populate the combo */ List descriptions = new ArrayList(); for( Iterator iterator = _localesList.getLocales().iterator(); iterator.hasNext(); ) { Locale locale = (Locale)iterator.next(); String displayString = buildHandlerLocaleDisplayString(locale); descriptions.add( displayString ); _handlerLocaleDisplayToCode.put(displayString, locale.getCode()); } String[] listArray = (String[])descriptions.toArray( new String[descriptions.size()] ); Arrays.sort( listArray ); _handlerLocaleCombo.setItems( listArray ); } private String buildHandlerLocaleDisplayString(Locale locale) { return locale.getDescription() + " (" + locale.getCode() + ")"; } /** * */ protected void createRuntimeMessagesNLSGroup( Composite parent ) { Group runtimeGroup = new Group( this, SWT.NULL ); runtimeGroup.setText( Messages.NL_Runtime_messages_locale ); GridData layoutData = new GridData( GridData.GRAB_HORIZONTAL | GridData.FILL_HORIZONTAL ); runtimeGroup.setLayoutData( layoutData ); GridLayout layout = new GridLayout(); runtimeGroup.setLayout( layout ); _runtimeMessageLocaleCombo = new Combo( runtimeGroup, SWT.READ_ONLY ); layoutData = new GridData( GridData.GRAB_HORIZONTAL | GridData.FILL_HORIZONTAL ); _runtimeMessageLocaleCombo.setLayoutData( layoutData ); /** * populate the combo */ _runtimeMessageLocaleCombo.setItems( LocaleUtility.getRuntimeDescriptionsArray() ); /** * set the value */ String runtimeLocale = _baseEGLStore.getString( IRUIPreferenceConstants.PREFERENCE_RUNTIME_MESSAGES_LOCALE ); if( runtimeLocale == null || runtimeLocale.length() == 0 ) { runtimeLocale = LocaleUtility.getDefaultRuntimeLocale().getCode(); } _runtimeMessageLocaleCombo.setText( LocaleUtility.getRuntimeDescriptionForCode( runtimeLocale ) ); } /** * Returns the help ID for this page. */ public String getHelpID(){ return EvHelp.PREFERENCES_LANGUAGE; } /** * */ public void performDefaults() { String defaultRuntimeLocaleCode = LocaleUtility.getDefaultRuntimeLocale().getCode();; String defaultRuntimeLocaleDescription = LocaleUtility.getRuntimeDescriptionForCode(defaultRuntimeLocaleCode); _runtimeMessageLocaleCombo.setText( defaultRuntimeLocaleDescription ); String defaultHandlerLocaleCode = LocaleUtility.getDefaultHandlerLocale().getCode();; String defaultHandlerLocaleDescription = LocaleUtility.getHandlerDescriptionForCode(defaultHandlerLocaleCode); Locale dummy = new Locale(defaultHandlerLocaleCode, defaultHandlerLocaleDescription, ""); _handlerLocaleCombo.setText( buildHandlerLocaleDisplayString(dummy) ); } /** * */ public void performOK() { String runtimeLocaleCode = LocaleUtility.getRuntimeCodeForDescription( _runtimeMessageLocaleCombo.getText() ); if( runtimeLocaleCode != null ) _baseEGLStore.setValue( IRUIPreferenceConstants.PREFERENCE_RUNTIME_MESSAGES_LOCALE, runtimeLocaleCode ); String displayString = _handlerLocaleCombo.getText(); String code = (String)_handlerLocaleDisplayToCode.get(displayString); if ( code == null ) { code = ""; } _baseEGLStore.setValue( IRUIPreferenceConstants.PREFERENCE_HANDLER_LOCALE, code ); } public void dispose() { LocalesList.getLocalesList().removeChangeListener(this); super.dispose(); } public void addLocale(Locale locale) { refreshHandlerLocaleCombo(); } private void refreshHandlerLocaleCombo() { if (! _handlerLocaleCombo.isDisposed()) { String currentSelection = _handlerLocaleCombo.getText(); populateCombo(); _handlerLocaleCombo.setText(currentSelection); } } public void removeLocale(Locale locale) { refreshHandlerLocaleCombo(); } public void updateLocale(Locale locale) { refreshHandlerLocaleCombo(); } public void clear() { } }