/* | |
* 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.localization.translators.preferences.ui; | |
import java.net.MalformedURLException; | |
import java.net.URL; | |
import org.eclipse.core.runtime.preferences.IEclipsePreferences; | |
import org.eclipse.core.runtime.preferences.InstanceScope; | |
import org.eclipse.jface.preference.IPreferenceStore; | |
import org.eclipse.jface.preference.PreferencePage; | |
import org.eclipse.swt.SWT; | |
import org.eclipse.swt.events.ModifyEvent; | |
import org.eclipse.swt.events.ModifyListener; | |
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.Composite; | |
import org.eclipse.swt.widgets.Control; | |
import org.eclipse.swt.widgets.Group; | |
import org.eclipse.swt.widgets.Label; | |
import org.eclipse.swt.widgets.Link; | |
import org.eclipse.swt.widgets.Text; | |
import org.eclipse.ui.IWorkbench; | |
import org.eclipse.ui.IWorkbenchPreferencePage; | |
import org.eclipse.ui.PartInitException; | |
import org.eclipse.ui.PlatformUI; | |
import org.eclipse.ui.browser.IWebBrowser; | |
import org.eclipse.ui.browser.IWorkbenchBrowserSupport; | |
import org.osgi.service.prefs.BackingStoreException; | |
import com.motorola.studio.android.common.log.StudioLogger; | |
import com.motorola.studio.android.localization.translators.GoogleTranslatorConstants; | |
import com.motorola.studio.android.localization.translators.TranslationPlugin; | |
import com.motorola.studio.android.localization.translators.i18n.TranslateNLS; | |
public class TranslationPreferencePage extends PreferencePage implements IWorkbenchPreferencePage | |
{ | |
private final String GOOGLE_APIS_CONSOLE_LINK = "http://code.google.com/apis/console/"; //$NON-NLS-1$ | |
private Text apiKeyText; | |
private String apiKeyValue; | |
public void init(IWorkbench workbench) | |
{ | |
noDefaultAndApplyButton(); | |
} | |
@Override | |
public boolean performOk() | |
{ | |
InstanceScope scope = (InstanceScope) InstanceScope.INSTANCE; | |
IEclipsePreferences prefs = scope.getNode(TranslationPlugin.PLUGIN_ID); | |
if (apiKeyValue.trim().length() == 0) | |
{ | |
prefs.remove(GoogleTranslatorConstants.API_KEY_VALUE_PREFERENCE); | |
} | |
else | |
{ | |
prefs.put(GoogleTranslatorConstants.API_KEY_VALUE_PREFERENCE, apiKeyValue.trim()); | |
} | |
try | |
{ | |
prefs.flush(); | |
} | |
catch (BackingStoreException e) | |
{ | |
//do nothing | |
} | |
return super.performOk(); | |
} | |
@Override | |
protected Control createContents(Composite parent) | |
{ | |
Composite entryTable = new Composite(parent, SWT.NULL); | |
GridData data = new GridData(SWT.FILL, SWT.TOP, true, false); | |
entryTable.setLayoutData(data); | |
GridLayout layout = new GridLayout(); | |
entryTable.setLayout(layout); | |
layout = new GridLayout(2, false); | |
layout = new GridLayout(2, false); | |
Group translatorAPIGroup = new Group(entryTable, SWT.NONE); | |
translatorAPIGroup.setLayout(layout); | |
translatorAPIGroup.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false)); | |
translatorAPIGroup.setText(TranslateNLS.AndroidPreferencePage_googleApiKey_GroupLabel); | |
Link noteLabel = new Link(translatorAPIGroup, SWT.WRAP); | |
noteLabel.setText(TranslateNLS.bind(TranslateNLS.AndroidPreferencePage_googleApiKey_Note, | |
GOOGLE_APIS_CONSOLE_LINK)); | |
data = new GridData(SWT.FILL, SWT.CENTER, true, false, 2, 1); | |
data.widthHint = 450; | |
noteLabel.setLayoutData(data); | |
noteLabel.addSelectionListener(new SelectionAdapter() | |
{ | |
/* (non-Javadoc) | |
* @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent) | |
*/ | |
@Override | |
public void widgetSelected(SelectionEvent e) | |
{ | |
IWorkbenchBrowserSupport browserSupport = | |
PlatformUI.getWorkbench().getBrowserSupport(); | |
/* | |
* open the browser | |
*/ | |
IWebBrowser browser; | |
try | |
{ | |
browser = | |
browserSupport.createBrowser(IWorkbenchBrowserSupport.LOCATION_BAR | |
| IWorkbenchBrowserSupport.NAVIGATION_BAR | |
| IWorkbenchBrowserSupport.AS_EXTERNAL, "MOTODEV", null, null); //$NON-NLS-1$ | |
browser.openURL(new URL(GOOGLE_APIS_CONSOLE_LINK)); | |
} | |
catch (PartInitException ex) | |
{ | |
StudioLogger.error("Error opening the Google APIs Console link: " //$NON-NLS-1$ | |
+ ex.getMessage()); | |
} | |
catch (MalformedURLException ex) | |
{ | |
StudioLogger.error("Error opening the Google APIs Console link: " //$NON-NLS-1$ | |
+ ex.getMessage()); | |
} | |
} | |
}); | |
Label apiKeyLabel = new Label(translatorAPIGroup, SWT.NONE); | |
apiKeyLabel.setText(TranslateNLS.AndroidPreferencePage_googleApiKey_Label); | |
data = new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1); | |
apiKeyLabel.setLayoutData(data); | |
apiKeyText = new Text(translatorAPIGroup, SWT.BORDER); | |
apiKeyValue = getApiKey(); | |
apiKeyText.setText(apiKeyValue); | |
apiKeyText.setToolTipText(TranslateNLS.AndroidPreferencePage_googleApiKey_Tooltip); | |
data = new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1); | |
apiKeyText.setLayoutData(data); | |
apiKeyText.addModifyListener(new ModifyListener() | |
{ | |
public void modifyText(ModifyEvent e) | |
{ | |
apiKeyValue = apiKeyText.getText(); | |
} | |
}); | |
return entryTable; | |
} | |
/** | |
* get the apikey | |
* @return the apikey or an empty string for the default one | |
*/ | |
private static String getApiKey() | |
{ | |
String apiKey = ""; //$NON-NLS-1$ | |
IPreferenceStore prefStore = TranslationPlugin.getDefault().getPreferenceStore(); | |
if (!prefStore.isDefault(GoogleTranslatorConstants.API_KEY_VALUE_PREFERENCE)) | |
{ | |
apiKey = prefStore.getString(GoogleTranslatorConstants.API_KEY_VALUE_PREFERENCE); | |
if (apiKey == null) | |
{ | |
apiKey = ""; //$NON-NLS-1$ | |
} | |
} | |
return apiKey; | |
} | |
} |