/* * Copyright (C) 2012 The Android Open Source Project * * Licensed under the Eclipse Public License, Version 1.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.eclipse.org/org/documents/epl-v10.php * * 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.android.ide.eclipse.adt.internal.editors.layout.configuration; import com.android.annotations.NonNull; import com.android.annotations.Nullable; import com.android.ide.eclipse.adt.internal.editors.layout.gle2.RenderPreviewMode; import com.android.ide.eclipse.adt.internal.wizards.newxmlfile.AddTranslationDialog; import org.eclipse.core.resources.IProject; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.graphics.Rectangle; import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.MenuItem; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.ToolItem; import java.util.List; /** * The {@linkplain LocaleMenuListener} class is responsible for generating the locale * menu in the {@link ConfigurationChooser}. */ class LocaleMenuListener extends SelectionAdapter { private static final int ACTION_SET_LOCALE = 1; private static final int ACTION_ADD_TRANSLATION = 2; private final ConfigurationChooser mConfigChooser; private final int mAction; private final Locale mLocale; LocaleMenuListener( @NonNull ConfigurationChooser configChooser, int action, @Nullable Locale locale) { mConfigChooser = configChooser; mAction = action; mLocale = locale; } @Override public void widgetSelected(SelectionEvent e) { switch (mAction) { case ACTION_SET_LOCALE: { mConfigChooser.selectLocale(mLocale); mConfigChooser.onLocaleChange(); break; } case ACTION_ADD_TRANSLATION: { IProject project = mConfigChooser.getProject(); Shell shell = mConfigChooser.getShell(); AddTranslationDialog dialog = new AddTranslationDialog(shell, project); dialog.open(); break; } default: assert false : mAction; } } static void show(final ConfigurationChooser chooser, ToolItem combo) { Menu menu = new Menu(chooser.getShell(), SWT.POP_UP); Configuration configuration = chooser.getConfiguration(); List<Locale> locales = chooser.getLocaleList(); Locale current = configuration.getLocale(); for (Locale locale : locales) { String title = ConfigurationChooser.getLocaleLabel(chooser, locale, false); MenuItem item = new MenuItem(menu, SWT.CHECK); item.setText(title); Image image = locale.getFlagImage(); item.setImage(image); boolean selected = current == locale; if (selected) { item.setSelection(true); } LocaleMenuListener listener = new LocaleMenuListener(chooser, ACTION_SET_LOCALE, locale); item.addSelectionListener(listener); } if (locales.size() > 1) { @SuppressWarnings("unused") MenuItem separator = new MenuItem(menu, SWT.SEPARATOR); ConfigurationMenuListener.addTogglePreviewModeAction(menu, "Preview All Locales", chooser, RenderPreviewMode.LOCALES); } @SuppressWarnings("unused") MenuItem separator = new MenuItem(menu, SWT.SEPARATOR); MenuItem item = new MenuItem(menu, SWT.PUSH); item.setText("Add New Translation..."); LocaleMenuListener listener = new LocaleMenuListener(chooser, ACTION_ADD_TRANSLATION, null); item.addSelectionListener(listener); Rectangle bounds = combo.getBounds(); Point location = new Point(bounds.x, bounds.y + bounds.height); location = combo.getParent().toDisplay(location); menu.setLocation(location.x, location.y); menu.setVisible(true); } }