/* | |
* 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.motorolamobility.preflighting.ui; | |
import java.util.ArrayList; | |
import java.util.List; | |
import org.eclipse.core.runtime.IStatus; | |
import org.eclipse.jface.dialogs.IMessageProvider; | |
import org.eclipse.jface.preference.IPreferenceStore; | |
import org.eclipse.jface.preference.PreferencePage; | |
import org.eclipse.swt.SWT; | |
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.Label; | |
import org.eclipse.swt.widgets.TabFolder; | |
import org.eclipse.swt.widgets.TabItem; | |
import org.eclipse.ui.IWorkbench; | |
import org.eclipse.ui.IWorkbenchPreferencePage; | |
import org.eclipse.ui.PlatformUI; | |
import com.motorolamobility.preflighting.core.logging.PreflightingLogger; | |
import com.motorolamobility.preflighting.ui.i18n.PreflightingUiNLS; | |
import com.motorolamobility.preflighting.ui.tabs.AbstractAppValidatorTabComposite; | |
import com.motorolamobility.preflighting.ui.tabs.CheckersTabComposite; | |
import com.motorolamobility.preflighting.ui.tabs.DevicesTabComposite; | |
import com.motorolamobility.preflighting.ui.tabs.GeneralSettingsComposite; | |
import com.motorolamobility.preflighting.ui.tabs.UIChangedListener; | |
public class CommandLinePreferencePage extends PreferencePage implements IWorkbenchPreferencePage | |
{ | |
private final String PREFERENCE_PAGE_HELP = PreflightingUIPlugin.PREFLIGHTING_UI_PLUGIN_ID | |
+ ".preference-appvalidator-commandline"; //$NON-NLS-1$ | |
private List<AbstractAppValidatorTabComposite> pagesComposite; | |
public CommandLinePreferencePage() | |
{ | |
setPreferenceStore(PreflightingUIPlugin.getDefault().getPreferenceStore()); | |
} | |
public void init(IWorkbench workbench) | |
{ | |
//do nothing | |
} | |
/* (non-Javadoc) | |
* @see org.eclipse.jface.preference.PreferencePage#performOk() | |
*/ | |
@Override | |
public boolean performOk() | |
{ | |
/* | |
* Workaround to make it work on MacOS | |
* | |
* On MacOS, the TableViewer cell doesn't lose the focus when the | |
* user clicks "Apply" or "OK". This way, the editor's setValue method | |
* is not called, and the cell value is not updated in the model. | |
* Given that, the last modification would not be persisted. | |
* | |
* This forces the focus change and consequently updates the model | |
* before continuing. | |
*/ | |
getShell().setFocus(); | |
getControl().setFocus(); | |
StringBuilder commandLine = new StringBuilder(); | |
for (AbstractAppValidatorTabComposite composite : pagesComposite) | |
{ | |
composite.performOk(getPreferenceStore()); | |
commandLine.append(composite.commandLineBuilder() + " "); //$NON-NLS-1$ | |
} | |
getPreferenceStore().setValue(PreflightingUIPlugin.COMMAND_LINE_PREFERENCE_KEY, | |
commandLine.toString().trim()); | |
getPreferenceStore().setValue(PreflightingUIPlugin.ERRORS_TO_WARNINGS_PREFERENCE_KEY, | |
Boolean.getBoolean(PreflightingUIPlugin.ECLIPSE_PROBLEM_TO_WARNING_VALUE)); | |
PreflightingLogger.debug("App Validator command line: " + commandLine); | |
return super.performOk(); | |
} | |
/** | |
* | |
*/ | |
/* (non-Javadoc) | |
* @see org.eclipse.jface.preference.PreferencePage#performDefaults() | |
*/ | |
@Override | |
protected void performDefaults() | |
{ | |
for (AbstractAppValidatorTabComposite composite : pagesComposite) | |
{ | |
composite.performDefaults(); | |
} | |
super.performDefaults(); | |
} | |
/* (non-Javadoc) | |
* @see org.eclipse.jface.preference.PreferencePage#isValid() | |
*/ | |
@Override | |
protected Control createContents(Composite parent) | |
{ | |
PlatformUI.getWorkbench().getHelpSystem().setHelp(parent, PREFERENCE_PAGE_HELP); | |
pagesComposite = new ArrayList<AbstractAppValidatorTabComposite>(); | |
IPreferenceStore prefStore = PreflightingUIPlugin.getDefault().getPreferenceStore(); | |
if ((!prefStore.contains(PreflightingUIPlugin.OUTPUT_LIMIT_VALUE)) | |
&& prefStore.contains(PreflightingUIPlugin.COMMAND_LINE_PREFERENCE_KEY) | |
&& (!(prefStore.getString(PreflightingUIPlugin.COMMAND_LINE_PREFERENCE_KEY)) | |
.equals(PreflightingUIPlugin.DEFAULT_BACKWARD_COMMANDLINE))) | |
{ | |
Label backLabel = new Label(parent, SWT.WRAP); | |
GridData layoutData = new GridData(SWT.FILL, SWT.TOP, true, false); | |
layoutData.widthHint = 450; | |
backLabel.setLayoutData(layoutData); | |
backLabel.setText("You have previously set the following App Validator parameters:\n" | |
+ prefStore.getString(PreflightingUIPlugin.COMMAND_LINE_PREFERENCE_KEY)); | |
} | |
Composite mainComposite = new Composite(parent, SWT.NONE); | |
mainComposite.setLayout(new GridLayout(1, false)); | |
GridData mainData = new GridData(SWT.FILL, SWT.TOP, true, false); | |
mainComposite.setLayoutData(mainData); | |
TabFolder tabFolder = new TabFolder(mainComposite, SWT.TOP); | |
tabFolder.setLayoutData(new GridData(GridData.FILL_BOTH)); | |
TabItem generalSettingsTab = new TabItem(tabFolder, SWT.NONE); | |
generalSettingsTab | |
.setText(PreflightingUiNLS.CommandLinePreferencePage_GeneralSettingTabName); | |
AbstractAppValidatorTabComposite genSettingsComposite = | |
new GeneralSettingsComposite(tabFolder, SWT.NONE); | |
generalSettingsTab.setControl(genSettingsComposite); | |
genSettingsComposite.addUIChangedListener(new UIChangedListener() | |
{ | |
public void uiChanged(AbstractAppValidatorTabComposite composite) | |
{ | |
validateUI(composite); | |
} | |
}); | |
pagesComposite.add(genSettingsComposite); | |
TabItem checkersSettingsTab = new TabItem(tabFolder, SWT.NONE); | |
checkersSettingsTab.setText(PreflightingUiNLS.CommandLinePreferencePage_Checkers_Tab); | |
AbstractAppValidatorTabComposite checkersTabComposite = | |
new CheckersTabComposite(tabFolder, SWT.NONE, getPreferenceStore()); | |
checkersSettingsTab.setControl(checkersTabComposite); | |
checkersTabComposite.addUIChangedListener(new UIChangedListener() | |
{ | |
public void uiChanged(AbstractAppValidatorTabComposite composite) | |
{ | |
validateUI(composite); | |
} | |
}); | |
pagesComposite.add(checkersTabComposite); | |
TabItem devicesSettingTab = new TabItem(tabFolder, SWT.NONE); | |
devicesSettingTab.setText(PreflightingUiNLS.CommandLinePreferencePage_Devices_Tab); | |
AbstractAppValidatorTabComposite devicesTabComposite = | |
new DevicesTabComposite(tabFolder, SWT.NONE, getPreferenceStore()); | |
devicesSettingTab.setControl(devicesTabComposite); | |
pagesComposite.add(devicesTabComposite); | |
setValid(((GeneralSettingsComposite) genSettingsComposite).canFinish()); | |
return mainComposite; | |
} | |
public void validateUI(AbstractAppValidatorTabComposite composite) | |
{ | |
IStatus status = composite.isValid(); | |
if (status.getSeverity() == IStatus.ERROR) | |
{ | |
setValid(false); | |
setMessage(status.getMessage(), IMessageProvider.ERROR); | |
} | |
else if (status.getSeverity() == IStatus.WARNING) | |
{ | |
setMessage(status.getMessage(), IMessageProvider.WARNING); | |
} | |
else | |
{ | |
setValid(true); | |
setMessage(null); | |
} | |
} | |
} |