summaryrefslogtreecommitdiff
path: root/src/plugins/preflighting.ui/src/com/motorolamobility/preflighting/ui/CommandLinePreferencePage.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/preflighting.ui/src/com/motorolamobility/preflighting/ui/CommandLinePreferencePage.java')
-rw-r--r--src/plugins/preflighting.ui/src/com/motorolamobility/preflighting/ui/CommandLinePreferencePage.java216
1 files changed, 216 insertions, 0 deletions
diff --git a/src/plugins/preflighting.ui/src/com/motorolamobility/preflighting/ui/CommandLinePreferencePage.java b/src/plugins/preflighting.ui/src/com/motorolamobility/preflighting/ui/CommandLinePreferencePage.java
new file mode 100644
index 0000000..af54d1d
--- /dev/null
+++ b/src/plugins/preflighting.ui/src/com/motorolamobility/preflighting/ui/CommandLinePreferencePage.java
@@ -0,0 +1,216 @@
+/*
+* 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);
+ }
+
+ }
+}