blob: 2bc5417b0449e110310ac944c07ee6df5dd0f963 [file] [log] [blame]
/*
* 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);
}
}