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