1fe51dba2aa25e559786e5da315d4db714ffe7559Tor Norbye/* 2fe51dba2aa25e559786e5da315d4db714ffe7559Tor Norbye * Copyright (C) 2012 The Android Open Source Project 3fe51dba2aa25e559786e5da315d4db714ffe7559Tor Norbye * 4fe51dba2aa25e559786e5da315d4db714ffe7559Tor Norbye * Licensed under the Eclipse Public License, Version 1.0 (the "License"); 5fe51dba2aa25e559786e5da315d4db714ffe7559Tor Norbye * you may not use this file except in compliance with the License. 6fe51dba2aa25e559786e5da315d4db714ffe7559Tor Norbye * You may obtain a copy of the License at 7fe51dba2aa25e559786e5da315d4db714ffe7559Tor Norbye * 8fe51dba2aa25e559786e5da315d4db714ffe7559Tor Norbye * http://www.eclipse.org/org/documents/epl-v10.php 9fe51dba2aa25e559786e5da315d4db714ffe7559Tor Norbye * 10fe51dba2aa25e559786e5da315d4db714ffe7559Tor Norbye * Unless required by applicable law or agreed to in writing, software 11fe51dba2aa25e559786e5da315d4db714ffe7559Tor Norbye * distributed under the License is distributed on an "AS IS" BASIS, 12fe51dba2aa25e559786e5da315d4db714ffe7559Tor Norbye * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13fe51dba2aa25e559786e5da315d4db714ffe7559Tor Norbye * See the License for the specific language governing permissions and 14fe51dba2aa25e559786e5da315d4db714ffe7559Tor Norbye * limitations under the License. 15fe51dba2aa25e559786e5da315d4db714ffe7559Tor Norbye */ 16fe51dba2aa25e559786e5da315d4db714ffe7559Tor Norbye 17fe51dba2aa25e559786e5da315d4db714ffe7559Tor Norbyepackage com.android.ide.eclipse.adt.internal.editors.layout.configuration; 18fe51dba2aa25e559786e5da315d4db714ffe7559Tor Norbye 19fe51dba2aa25e559786e5da315d4db714ffe7559Tor Norbyeimport com.android.annotations.NonNull; 20fe51dba2aa25e559786e5da315d4db714ffe7559Tor Norbyeimport com.android.annotations.Nullable; 21fe51dba2aa25e559786e5da315d4db714ffe7559Tor Norbyeimport com.android.ide.eclipse.adt.internal.wizards.newxmlfile.AddTranslationDialog; 22fe51dba2aa25e559786e5da315d4db714ffe7559Tor Norbye 23fe51dba2aa25e559786e5da315d4db714ffe7559Tor Norbyeimport org.eclipse.core.resources.IProject; 24fe51dba2aa25e559786e5da315d4db714ffe7559Tor Norbyeimport org.eclipse.swt.SWT; 25fe51dba2aa25e559786e5da315d4db714ffe7559Tor Norbyeimport org.eclipse.swt.events.SelectionAdapter; 26fe51dba2aa25e559786e5da315d4db714ffe7559Tor Norbyeimport org.eclipse.swt.events.SelectionEvent; 27fe51dba2aa25e559786e5da315d4db714ffe7559Tor Norbyeimport org.eclipse.swt.graphics.Image; 28fe51dba2aa25e559786e5da315d4db714ffe7559Tor Norbyeimport org.eclipse.swt.graphics.Point; 29fe51dba2aa25e559786e5da315d4db714ffe7559Tor Norbyeimport org.eclipse.swt.graphics.Rectangle; 30fe51dba2aa25e559786e5da315d4db714ffe7559Tor Norbyeimport org.eclipse.swt.widgets.Menu; 31fe51dba2aa25e559786e5da315d4db714ffe7559Tor Norbyeimport org.eclipse.swt.widgets.MenuItem; 32fe51dba2aa25e559786e5da315d4db714ffe7559Tor Norbyeimport org.eclipse.swt.widgets.Shell; 33fe51dba2aa25e559786e5da315d4db714ffe7559Tor Norbyeimport org.eclipse.swt.widgets.ToolItem; 34fe51dba2aa25e559786e5da315d4db714ffe7559Tor Norbye 35fe51dba2aa25e559786e5da315d4db714ffe7559Tor Norbyeimport java.util.List; 36fe51dba2aa25e559786e5da315d4db714ffe7559Tor Norbye 37fe51dba2aa25e559786e5da315d4db714ffe7559Tor Norbye/** 38fe51dba2aa25e559786e5da315d4db714ffe7559Tor Norbye * The {@linkplain LocaleMenuListener} class is responsible for generating the locale 39fe51dba2aa25e559786e5da315d4db714ffe7559Tor Norbye * menu in the {@link ConfigurationChooser}. 40fe51dba2aa25e559786e5da315d4db714ffe7559Tor Norbye */ 41fe51dba2aa25e559786e5da315d4db714ffe7559Tor Norbyeclass LocaleMenuListener extends SelectionAdapter { 42fe51dba2aa25e559786e5da315d4db714ffe7559Tor Norbye private static final int ACTION_SET_LOCALE = 1; 43fe51dba2aa25e559786e5da315d4db714ffe7559Tor Norbye private static final int ACTION_ADD_TRANSLATION = 2; 44fe51dba2aa25e559786e5da315d4db714ffe7559Tor Norbye 45fe51dba2aa25e559786e5da315d4db714ffe7559Tor Norbye private final ConfigurationChooser mConfigChooser; 46fe51dba2aa25e559786e5da315d4db714ffe7559Tor Norbye private final int mAction; 47fe51dba2aa25e559786e5da315d4db714ffe7559Tor Norbye private final Locale mLocale; 48fe51dba2aa25e559786e5da315d4db714ffe7559Tor Norbye 49fe51dba2aa25e559786e5da315d4db714ffe7559Tor Norbye LocaleMenuListener( 50fe51dba2aa25e559786e5da315d4db714ffe7559Tor Norbye @NonNull ConfigurationChooser configChooser, 51fe51dba2aa25e559786e5da315d4db714ffe7559Tor Norbye int action, 52fe51dba2aa25e559786e5da315d4db714ffe7559Tor Norbye @Nullable Locale locale) { 53fe51dba2aa25e559786e5da315d4db714ffe7559Tor Norbye mConfigChooser = configChooser; 54fe51dba2aa25e559786e5da315d4db714ffe7559Tor Norbye mAction = action; 55fe51dba2aa25e559786e5da315d4db714ffe7559Tor Norbye mLocale = locale; 56fe51dba2aa25e559786e5da315d4db714ffe7559Tor Norbye } 57fe51dba2aa25e559786e5da315d4db714ffe7559Tor Norbye 58fe51dba2aa25e559786e5da315d4db714ffe7559Tor Norbye @Override 59fe51dba2aa25e559786e5da315d4db714ffe7559Tor Norbye public void widgetSelected(SelectionEvent e) { 60fe51dba2aa25e559786e5da315d4db714ffe7559Tor Norbye switch (mAction) { 61fe51dba2aa25e559786e5da315d4db714ffe7559Tor Norbye case ACTION_SET_LOCALE: { 62fe51dba2aa25e559786e5da315d4db714ffe7559Tor Norbye mConfigChooser.selectLocale(mLocale); 63fe51dba2aa25e559786e5da315d4db714ffe7559Tor Norbye mConfigChooser.onLocaleChange(); 64fe51dba2aa25e559786e5da315d4db714ffe7559Tor Norbye break; 65fe51dba2aa25e559786e5da315d4db714ffe7559Tor Norbye } 66fe51dba2aa25e559786e5da315d4db714ffe7559Tor Norbye case ACTION_ADD_TRANSLATION: { 67fe51dba2aa25e559786e5da315d4db714ffe7559Tor Norbye IProject project = mConfigChooser.getProject(); 68fe51dba2aa25e559786e5da315d4db714ffe7559Tor Norbye Shell shell = mConfigChooser.getShell(); 69fe51dba2aa25e559786e5da315d4db714ffe7559Tor Norbye AddTranslationDialog dialog = new AddTranslationDialog(shell, project); 70fe51dba2aa25e559786e5da315d4db714ffe7559Tor Norbye dialog.open(); 71fe51dba2aa25e559786e5da315d4db714ffe7559Tor Norbye break; 72fe51dba2aa25e559786e5da315d4db714ffe7559Tor Norbye } 73fe51dba2aa25e559786e5da315d4db714ffe7559Tor Norbye default: assert false : mAction; 74fe51dba2aa25e559786e5da315d4db714ffe7559Tor Norbye } 75fe51dba2aa25e559786e5da315d4db714ffe7559Tor Norbye } 76fe51dba2aa25e559786e5da315d4db714ffe7559Tor Norbye 77fe51dba2aa25e559786e5da315d4db714ffe7559Tor Norbye static void show(final ConfigurationChooser chooser, ToolItem combo) { 78fe51dba2aa25e559786e5da315d4db714ffe7559Tor Norbye Menu menu = new Menu(chooser.getShell(), SWT.POP_UP); 79fe51dba2aa25e559786e5da315d4db714ffe7559Tor Norbye Configuration configuration = chooser.getConfiguration(); 80fe51dba2aa25e559786e5da315d4db714ffe7559Tor Norbye List<Locale> locales = chooser.getLocaleList(); 81fe51dba2aa25e559786e5da315d4db714ffe7559Tor Norbye Locale current = configuration.getLocale(); 82fe51dba2aa25e559786e5da315d4db714ffe7559Tor Norbye 83fe51dba2aa25e559786e5da315d4db714ffe7559Tor Norbye for (Locale locale : locales) { 84fe51dba2aa25e559786e5da315d4db714ffe7559Tor Norbye String title = ConfigurationChooser.getLocaleLabel(chooser, locale, false); 85fe51dba2aa25e559786e5da315d4db714ffe7559Tor Norbye MenuItem item = new MenuItem(menu, SWT.CHECK); 86fe51dba2aa25e559786e5da315d4db714ffe7559Tor Norbye item.setText(title); 87fe51dba2aa25e559786e5da315d4db714ffe7559Tor Norbye Image image = locale.getFlagImage(); 88fe51dba2aa25e559786e5da315d4db714ffe7559Tor Norbye item.setImage(image); 89fe51dba2aa25e559786e5da315d4db714ffe7559Tor Norbye 90fe51dba2aa25e559786e5da315d4db714ffe7559Tor Norbye boolean selected = current == locale; 91fe51dba2aa25e559786e5da315d4db714ffe7559Tor Norbye if (selected) { 92fe51dba2aa25e559786e5da315d4db714ffe7559Tor Norbye item.setSelection(true); 93fe51dba2aa25e559786e5da315d4db714ffe7559Tor Norbye } 94fe51dba2aa25e559786e5da315d4db714ffe7559Tor Norbye 95fe51dba2aa25e559786e5da315d4db714ffe7559Tor Norbye LocaleMenuListener listener = new LocaleMenuListener(chooser, ACTION_SET_LOCALE, 96fe51dba2aa25e559786e5da315d4db714ffe7559Tor Norbye locale); 97fe51dba2aa25e559786e5da315d4db714ffe7559Tor Norbye item.addSelectionListener(listener); 98fe51dba2aa25e559786e5da315d4db714ffe7559Tor Norbye } 99fe51dba2aa25e559786e5da315d4db714ffe7559Tor Norbye 100fe51dba2aa25e559786e5da315d4db714ffe7559Tor Norbye @SuppressWarnings("unused") 101fe51dba2aa25e559786e5da315d4db714ffe7559Tor Norbye MenuItem separator = new MenuItem(menu, SWT.SEPARATOR); 102fe51dba2aa25e559786e5da315d4db714ffe7559Tor Norbye 103fe51dba2aa25e559786e5da315d4db714ffe7559Tor Norbye MenuItem item = new MenuItem(menu, SWT.PUSH); 104fe51dba2aa25e559786e5da315d4db714ffe7559Tor Norbye item.setText("Add New Translation..."); 105fe51dba2aa25e559786e5da315d4db714ffe7559Tor Norbye LocaleMenuListener listener = new LocaleMenuListener(chooser, 106fe51dba2aa25e559786e5da315d4db714ffe7559Tor Norbye ACTION_ADD_TRANSLATION, null); 107fe51dba2aa25e559786e5da315d4db714ffe7559Tor Norbye item.addSelectionListener(listener); 108fe51dba2aa25e559786e5da315d4db714ffe7559Tor Norbye 109fe51dba2aa25e559786e5da315d4db714ffe7559Tor Norbye Rectangle bounds = combo.getBounds(); 110fe51dba2aa25e559786e5da315d4db714ffe7559Tor Norbye Point location = new Point(bounds.x, bounds.y + bounds.height); 111fe51dba2aa25e559786e5da315d4db714ffe7559Tor Norbye location = combo.getParent().toDisplay(location); 112fe51dba2aa25e559786e5da315d4db714ffe7559Tor Norbye menu.setLocation(location.x, location.y); 113fe51dba2aa25e559786e5da315d4db714ffe7559Tor Norbye menu.setVisible(true); 114fe51dba2aa25e559786e5da315d4db714ffe7559Tor Norbye } 115fe51dba2aa25e559786e5da315d4db714ffe7559Tor Norbye} 116