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