| /* |
| * Copyright (C) 2012 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| package com.motorola.studio.android.devices.services.lang.model; |
| |
| import java.util.List; |
| |
| 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.Combo; |
| import org.eclipse.swt.widgets.Composite; |
| import org.eclipse.swt.widgets.Label; |
| |
| import com.motorola.studio.android.devices.services.i18n.ServicesNLS; |
| |
| /** |
| * Composite containing the current language in use and two combo boxes where |
| * the user can choose a language and country |
| */ |
| public class LocationComposite extends Composite |
| { |
| // id for listeners |
| static final int LOCATION_CHANGE = 1234; |
| |
| // selected language |
| private String language = ""; |
| |
| // selected country |
| private String country = ""; |
| |
| // language combobox |
| private Combo comboLanguage = null; |
| |
| // country combobox |
| private Combo comboCountry = null; |
| |
| /** |
| * Constructor |
| * |
| * @param parent the parent composite |
| */ |
| public LocationComposite(Composite parent) |
| { |
| this(parent, null, null); |
| } |
| |
| /** |
| * Constructor |
| * |
| * @param parent the parent composite |
| * @param currentLanguageId the id of the current language in use by given emulator instance. |
| * @param currentCountryId the id of the current country in use by given emulator instance. |
| */ |
| public LocationComposite(Composite parent, String currentLanguageId, String currentCountryId) |
| { |
| super(parent, SWT.NONE); |
| |
| Label label; |
| GridLayout gridLayout = new GridLayout(); |
| gridLayout.numColumns = 2; |
| this.setLayout(gridLayout); |
| |
| /* |
| * Language label and combobox |
| */ |
| label = new Label(this, SWT.LEFT); |
| label.setText(ServicesNLS.UI_Language); |
| |
| comboLanguage = new Combo(this, SWT.DROP_DOWN | SWT.READ_ONLY); |
| comboLanguage.addSelectionListener(new SelectionAdapter() |
| { |
| @Override |
| public void widgetSelected(SelectionEvent event) |
| { |
| language = comboLanguage.getText(); |
| notifyListeners(LOCATION_CHANGE, null); |
| } |
| }); |
| if ((currentLanguageId != null) && (!currentLanguageId.equals(""))) |
| { |
| fillComboBoxAndSelectCurrentLanguage(currentLanguageId); |
| } |
| else |
| { |
| comboLanguage.setItems(getLanguagesList()); |
| } |
| language = comboLanguage.getText(); |
| comboLanguage.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false)); |
| comboLanguage.setVisibleItemCount(20); |
| |
| /* |
| * Country label and combobox |
| */ |
| label = new Label(this, SWT.LEFT); |
| label.setText(ServicesNLS.UI_Country); |
| |
| comboCountry = new Combo(this, SWT.DROP_DOWN | SWT.READ_ONLY); |
| comboCountry.addSelectionListener(new SelectionAdapter() |
| { |
| @Override |
| public void widgetSelected(SelectionEvent event) |
| { |
| country = comboCountry.getText(); |
| notifyListeners(LOCATION_CHANGE, null); |
| } |
| }); |
| if ((currentCountryId != null) && (!currentCountryId.equals(""))) |
| { |
| fillComboBoxAndSelectCurrentCountry(currentCountryId); |
| } |
| else |
| { |
| comboCountry.setItems(getCountriesList()); |
| } |
| country = comboCountry.getText(); |
| comboCountry.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false)); |
| comboCountry.setVisibleItemCount(20); |
| } |
| |
| /* |
| * Sets an array of languages in the language combo box and select that item which is |
| * the current in use by emulator instance. <p> |
| * |
| * There are some needed explanations here: <p> |
| * |
| * 1. The currentLanguageId parameter was obtained through an ADB shell command sent |
| * to emulator. The ID returned is a String similar to "pt", "en", "fr" for Portuguese, |
| * English and French respectively. For more details, please see: <br> |
| * com.motorola.studio.android.adt.DDMSUtils.getCurrentEmulatorLanguageAndCountry |
| * method. <p> |
| * |
| * 2. The currentLanguageId parameter is passed to getLanguagesList method in order to |
| * be returned an array of Strings holding all languages available and, at the |
| * length-plus-one position of this array, the number representing the index of |
| * array regarding the current language name in use by emulator. <p> |
| * |
| * 3. The language combo box is filled with all languages contained in langNamesAndIndex |
| * array. Then the number, held at last position of array, is passed as parameter to |
| * select() method of the combo box. Thus, the current language appears as selected |
| * when combo box is rendered. <p> |
| * |
| * @param currentLanguageId The ID of the current language in use by emulator |
| * instance. |
| */ |
| private void fillComboBoxAndSelectCurrentLanguage(String currentLanguageId) |
| { |
| String[] langNamesAndIndex = getLanguagesList(currentLanguageId); |
| int index = langNamesAndIndex.length - 1; |
| int currentLanguageIndex = Integer.parseInt(langNamesAndIndex[index]); |
| comboLanguage.setItems(langNamesAndIndex); |
| comboLanguage.remove(index); |
| comboLanguage.select(currentLanguageIndex); |
| } |
| |
| /* |
| * Sets an array of countries in the country combo box and select that item which is |
| * the current in use by emulator instance. <p> |
| * |
| * There are some needed explanations here: <p> |
| * |
| * 1. The currentCountryId parameter was obtained through an ADB shell command sent |
| * to emulator. The ID returned is a String similar to "it", "us", "ru" for Italy, |
| * USA and Russia respectively. For more details, please see: <br> |
| * com.motorola.studio.android.adt.DDMSUtils.getCurrentEmulatorLanguageAndCountry |
| * method. <p> |
| * |
| * 2. The currentCountryId parameter is passed to getCountriesList method in order to |
| * be returned an array of Strings holding all country available and, at the |
| * length-plus-one position of this array, the number representing the index of |
| * array regarding the current country name in use by emulator. <p> |
| * |
| * 3. The country combo box is filled with all countries contained in countryNamesAndIndex |
| * array. Then the number, held at last position of array, is passed as parameter to |
| * select() method of the combo box. Thus, the current country appears as selected |
| * when combo box is rendered. <p> |
| * |
| * @param currentCountryId The ID of the current country in use by emulator |
| * instance. |
| */ |
| private void fillComboBoxAndSelectCurrentCountry(String currentCountryId) |
| { |
| String[] countryNamesAndIndex = getCountriesList(currentCountryId); |
| int index = countryNamesAndIndex.length - 1; |
| int currentCountryIndex = Integer.parseInt(countryNamesAndIndex[index]); |
| comboCountry.setItems(countryNamesAndIndex); |
| comboCountry.remove(index); |
| comboCountry.select(currentCountryIndex); |
| } |
| |
| /* |
| * Get the list of languages to be used to populate the combobox |
| * |
| * @return the list of languages to be used to populate the combobox |
| */ |
| private String[] getLanguagesList() |
| { |
| List<Language> languageObjs = Language.getLanguageList(); |
| String[] languages = new String[languageObjs.size()]; |
| |
| int i = 0; |
| for (Language language : languageObjs) |
| { |
| languages[i] = language.getName(); |
| i++; |
| } |
| return languages; |
| } |
| |
| /* |
| * Get the list of languages to be used to populate the combo box. Also, |
| * returns the index of the current language at last position of the array. |
| * |
| * @param currentlanguageId |
| * @return An array of Strings containing the list of languages and the |
| * current language index. |
| */ |
| private String[] getLanguagesList(String currentlanguageId) |
| { |
| List<Language> languageObjs = Language.getLanguageList(); |
| int size = languageObjs.size(); |
| String[] langNamesAndIndex = new String[size + 1]; |
| String languageIndex = null; |
| int i = 0; |
| for (Language language : languageObjs) |
| { |
| String name = language.getName(); |
| String id = language.getId(); |
| if (id.equalsIgnoreCase(currentlanguageId)) |
| { |
| languageIndex = String.valueOf(i); |
| langNamesAndIndex[size] = languageIndex; |
| } |
| langNamesAndIndex[i] = name; |
| i++; |
| } |
| return langNamesAndIndex; |
| } |
| |
| /* |
| * Get the list of countries to be used to populate the combobox |
| * |
| * @return the list of countries to be used to populate the combobox |
| */ |
| private String[] getCountriesList() |
| { |
| List<Country> countryObjs = Country.getCountryList(); |
| String[] countries = new String[countryObjs.size()]; |
| int i = 0; |
| for (Country country : countryObjs) |
| { |
| countries[i] = country.getName(); |
| i++; |
| } |
| return countries; |
| } |
| |
| /* |
| * Get the list of countries to be used to populate the combo box. Also, |
| * returns the index of the current country at last position of the array. |
| * |
| * @param currentCountryId |
| * @return An array of Strings containing the list of countries and the |
| * current country index. |
| */ |
| private String[] getCountriesList(String currentCountryId) |
| { |
| List<Country> countryObjs = Country.getCountryList(); |
| int size = countryObjs.size(); |
| String[] countryNamesAndIndex = new String[size + 1]; |
| String countryIndex = null; |
| int i = 0; |
| for (Country country : countryObjs) |
| { |
| String name = country.getName(); |
| String id = country.getId(); |
| if (id.equalsIgnoreCase(currentCountryId)) |
| { |
| countryIndex = String.valueOf(i); |
| countryNamesAndIndex[size] = countryIndex; |
| } |
| countryNamesAndIndex[i] = name; |
| i++; |
| } |
| return countryNamesAndIndex; |
| } |
| |
| /** |
| * Get the selected language |
| * |
| * @return selected language name |
| */ |
| public String getLanguage() |
| { |
| return language; |
| } |
| |
| /** |
| * Get the selected country |
| * |
| * @return selected country name |
| */ |
| public String getCountry() |
| { |
| return country; |
| } |
| } |