From 41ac47d732eed8392d60d0f6773e5a279d49b999 Mon Sep 17 00:00:00 2001 From: Adrian Dudau Date: Thu, 12 Dec 2013 13:36:50 +0100 Subject: initial commit of Enea Linux 3.1 Migrated from the internal git server on the dora-enea branch Signed-off-by: Adrian Dudau --- .../sdk/ide/preferences/PreferenceConstants.java | 43 +++ .../sdk/ide/preferences/PreferenceInitializer.java | 44 +++ .../ide/preferences/ProfileNameInputValidator.java | 63 +++++ .../ide/preferences/YoctoSDKPreferencePage.java | 307 +++++++++++++++++++++ .../preferences/YoctoSDKProjectPropertyPage.java | 202 ++++++++++++++ 5 files changed, 659 insertions(+) create mode 100644 plugins/org.yocto.sdk.ide/src/org/yocto/sdk/ide/preferences/PreferenceConstants.java create mode 100644 plugins/org.yocto.sdk.ide/src/org/yocto/sdk/ide/preferences/PreferenceInitializer.java create mode 100644 plugins/org.yocto.sdk.ide/src/org/yocto/sdk/ide/preferences/ProfileNameInputValidator.java create mode 100644 plugins/org.yocto.sdk.ide/src/org/yocto/sdk/ide/preferences/YoctoSDKPreferencePage.java create mode 100644 plugins/org.yocto.sdk.ide/src/org/yocto/sdk/ide/preferences/YoctoSDKProjectPropertyPage.java (limited to 'plugins/org.yocto.sdk.ide/src/org/yocto/sdk/ide/preferences') diff --git a/plugins/org.yocto.sdk.ide/src/org/yocto/sdk/ide/preferences/PreferenceConstants.java b/plugins/org.yocto.sdk.ide/src/org/yocto/sdk/ide/preferences/PreferenceConstants.java new file mode 100644 index 0000000..0ebbe99 --- /dev/null +++ b/plugins/org.yocto.sdk.ide/src/org/yocto/sdk/ide/preferences/PreferenceConstants.java @@ -0,0 +1,43 @@ +/******************************************************************************* + * Copyright (c) 2010 Intel Corporation. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Intel - initial API and implementation + *******************************************************************************/ +package org.yocto.sdk.ide.preferences; + +/** + * Constant definitions for plug-in preferences + */ +public class PreferenceConstants { + + public static final String TOOLCHAIN_ROOT = "toolChainRoot"; + + public static final String TARGET_MODE = "TargetMode"; + + public static final String SDK_MODE = "SDKMode"; + + public static final String TARGET_ARCH_INDEX = "targeArchIndex"; + + public static final String TOOLCHAIN_TRIPLET = "toolchainTriplet"; + + public static final String QEMU_KERNEL = "QemuKernel"; + + public static final String QEMU_OPTION = "QemuOption"; + + public static final String SYSROOT = "Sysroot"; + + public static final String IP_ADDR = "IPAddr"; + + public static final String STANDARD_PROFILE_NAME = "Standard Profile"; + + public static final String PROFILES = "profiles"; + + public static final String SELECTED_PROFILE = "selectedProfile"; + + public static final String PROJECT_SPECIFIC_PROFILE = "##PROJECT_SPECIFIC_PROFILE##"; +} diff --git a/plugins/org.yocto.sdk.ide/src/org/yocto/sdk/ide/preferences/PreferenceInitializer.java b/plugins/org.yocto.sdk.ide/src/org/yocto/sdk/ide/preferences/PreferenceInitializer.java new file mode 100644 index 0000000..40f37d0 --- /dev/null +++ b/plugins/org.yocto.sdk.ide/src/org/yocto/sdk/ide/preferences/PreferenceInitializer.java @@ -0,0 +1,44 @@ +/******************************************************************************* + * Copyright (c) 2010 Intel Corporation. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Intel - initial API and implementation + *******************************************************************************/ +package org.yocto.sdk.ide.preferences; + +import org.eclipse.core.runtime.preferences.AbstractPreferenceInitializer; +import org.eclipse.jface.preference.IPreferenceStore; + +import org.yocto.sdk.ide.YoctoSDKPlugin; + +import static org.yocto.sdk.ide.preferences.PreferenceConstants.*; + +/** + * Class used to initialize default preference values. + */ +public class PreferenceInitializer extends AbstractPreferenceInitializer { + /* + * (non-Javadoc) + * + * @see org.eclipse.core.runtime.preferences.AbstractPreferenceInitializer#initializeDefaultPreferences() + */ + public void initializeDefaultPreferences() { + IPreferenceStore store = YoctoSDKPlugin.getDefault().getPreferenceStore(); + store.setDefault(TOOLCHAIN_ROOT, ""); + store.setDefault(SDK_MODE, true); + store.setDefault(TARGET_MODE, false); + store.setDefault(TARGET_ARCH_INDEX, -1); + store.setDefault(IP_ADDR, ""); + store.setDefault(QEMU_KERNEL, ""); + store.setDefault(QEMU_OPTION, ""); + store.setDefault(SYSROOT, ""); + store.setDefault(TOOLCHAIN_TRIPLET, ""); + store.setDefault(PROFILES, "\"" + STANDARD_PROFILE_NAME + "\""); + store.setDefault(SELECTED_PROFILE, STANDARD_PROFILE_NAME); + } + +} diff --git a/plugins/org.yocto.sdk.ide/src/org/yocto/sdk/ide/preferences/ProfileNameInputValidator.java b/plugins/org.yocto.sdk.ide/src/org/yocto/sdk/ide/preferences/ProfileNameInputValidator.java new file mode 100644 index 0000000..38e38b1 --- /dev/null +++ b/plugins/org.yocto.sdk.ide/src/org/yocto/sdk/ide/preferences/ProfileNameInputValidator.java @@ -0,0 +1,63 @@ +/******************************************************************************* + * Copyright (c) 2012 BMW Car IT GmbH. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * BMW Car IT - initial API and implementation + *******************************************************************************/ +package org.yocto.sdk.ide.preferences; + +import org.eclipse.jface.dialogs.IInputValidator; +import org.yocto.sdk.ide.YoctoProfileElement; +import org.yocto.sdk.ide.YoctoSDKMessages; + +public class ProfileNameInputValidator implements IInputValidator { + private static final String WARNING_CONTAINS_COMMA = "Preferences.Profile.Validator.InvalidName.Comma"; + private static final String WARNING_CONTAINS_DOUBLEQUOTE = "Preferences.Profile.Validator.InvalidName.Quote"; + private static final String PROFILE_NAME_IS_EMPTY = "Preferences.Profile.Validator.InvalidName.Empty"; + private static final String WARNING_ALREADY_EXISTS = "Preferences.Profile.Validator.InvalidName.Exists"; + + private final String selectedItem; + private final YoctoProfileElement profileSetting; + + public ProfileNameInputValidator(YoctoProfileElement profileSetting) { + this(profileSetting, ""); + } + + public ProfileNameInputValidator(YoctoProfileElement profileSetting, String selectedItem) { + this.selectedItem = selectedItem; + this.profileSetting = profileSetting; + } + + @Override + public String isValid(String newText) { + if (newText.contains(",")) { + return YoctoSDKMessages.getString(WARNING_CONTAINS_COMMA); + } + + if (newText.contains("\"")) { + return YoctoSDKMessages.getString(WARNING_CONTAINS_DOUBLEQUOTE); + } + + if (newText.isEmpty()) { + return YoctoSDKMessages.getString(PROFILE_NAME_IS_EMPTY); + } + + if (selectedItemEquals(newText)) { + return null; + } + + if (profileSetting.contains(newText)) { + return YoctoSDKMessages.getString(WARNING_ALREADY_EXISTS); + } + + return null; + } + + private boolean selectedItemEquals(String newText) { + return !selectedItem.isEmpty() && newText.equals(selectedItem); + } +} diff --git a/plugins/org.yocto.sdk.ide/src/org/yocto/sdk/ide/preferences/YoctoSDKPreferencePage.java b/plugins/org.yocto.sdk.ide/src/org/yocto/sdk/ide/preferences/YoctoSDKPreferencePage.java new file mode 100644 index 0000000..4e6ca2a --- /dev/null +++ b/plugins/org.yocto.sdk.ide/src/org/yocto/sdk/ide/preferences/YoctoSDKPreferencePage.java @@ -0,0 +1,307 @@ +/******************************************************************************* + * Copyright (c) 2010 Intel Corporation. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Intel - initial API and implementation + *******************************************************************************/ +package org.yocto.sdk.ide.preferences; + +import java.util.HashSet; + +import org.eclipse.core.resources.IProject; +import org.eclipse.core.resources.ResourcesPlugin; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.jface.dialogs.Dialog; +import org.eclipse.jface.dialogs.IDialogConstants; +import org.eclipse.jface.dialogs.InputDialog; +import org.eclipse.jface.dialogs.MessageDialog; +import org.eclipse.jface.preference.IPreferenceStore; +import org.eclipse.jface.preference.PreferencePage; +import org.eclipse.swt.SWT; +import org.eclipse.swt.layout.GridLayout; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Control; +import org.eclipse.swt.widgets.Event; +import org.eclipse.swt.widgets.Listener; +import org.eclipse.ui.IWorkbench; +import org.eclipse.ui.IWorkbenchPreferencePage; +import org.yocto.sdk.ide.YoctoProfileElement; +import org.yocto.sdk.ide.YoctoProfileSetting; +import org.yocto.sdk.ide.YoctoSDKChecker.SDKCheckRequestFrom; +import org.yocto.sdk.ide.YoctoSDKChecker.SDKCheckResults; +import org.yocto.sdk.ide.natures.YoctoSDKProjectNature; +import org.yocto.sdk.ide.utils.ProjectPreferenceUtils; +import org.yocto.sdk.ide.utils.YoctoSDKUtils; +import org.yocto.sdk.ide.YoctoSDKMessages; +import org.yocto.sdk.ide.YoctoSDKPlugin; +import org.yocto.sdk.ide.YoctoUIElement; +import org.yocto.sdk.ide.YoctoUISetting; + +public class YoctoSDKPreferencePage extends PreferencePage implements IWorkbenchPreferencePage { + + private static final String NEW_DIALOG_TITLE = "Preferences.Profile.New.Dialog.Title"; + private static final String NEW_DIALOG_MESSAGE = "Preferences.Profile.New.Dialog.Message"; + private static final String UPDATE_DIALOG_TITLE = "Preferences.Profile.Update.Dialog.Title"; + private static final String UPDATE_DIALOG_MESSAGE = "Preferences.Profile.Update.Dialog.Message"; + private static final String REVALIDATION_MESSAGE = "Poky.SDK.Revalidation.Message"; + + private YoctoProfileSetting yoctoProfileSetting; + private YoctoUISetting yoctoUISetting; + + private Listener changeListener; + + public YoctoSDKPreferencePage() { + //super(GRID); + IPreferenceStore defaultStore = YoctoSDKPlugin.getDefault().getPreferenceStore(); + String profiles = defaultStore.getString(PreferenceConstants.PROFILES); + String selectedProfile = defaultStore.getString(PreferenceConstants.SELECTED_PROFILE); + + if (profiles.isEmpty()) { + profiles = defaultStore.getDefaultString(PreferenceConstants.PROFILES); + selectedProfile = defaultStore.getDefaultString(PreferenceConstants.SELECTED_PROFILE); + } + + setPreferenceStore(YoctoSDKPlugin.getProfilePreferenceStore(selectedProfile)); + //setDescription(YoctoSDKMessages.getString(PREFERENCES_Yocto_CONFIG)); + YoctoUIElement elem = YoctoSDKUtils.getElemFromStore(getPreferenceStore()); + this.yoctoUISetting = new YoctoUISetting(elem); + + YoctoProfileElement profileElement = new YoctoProfileElement(profiles, selectedProfile); + this.yoctoProfileSetting = new YoctoProfileSetting(profileElement, this, true); + + changeListener = new Listener() { + @Override + public void handleEvent(Event event) { + setErrorMessage(null); + setMessage(YoctoSDKMessages.getString(REVALIDATION_MESSAGE), INFORMATION); + } + }; + } + + /* + * @see IWorkbenchPreferencePage#init(IWorkbench) + */ + public void init(IWorkbench workbench) { + } + + protected Control createContents(Composite parent) { + initializeDialogUnits(parent); + final Composite composite= new Composite(parent, SWT.NONE); + composite.setLayout(new GridLayout(2, false)); + + yoctoProfileSetting.createComposite(composite); + yoctoUISetting.createComposite(composite); + + composite.addListener(SWT.Modify, changeListener); + composite.addListener(SWT.Selection, changeListener); + + SDKCheckResults result = yoctoUISetting.validateInput(SDKCheckRequestFrom.Preferences, false); + if (result != SDKCheckResults.SDK_PASS) { + } + + Dialog.applyDialogFont(composite); + return composite; + } + + /* + * @see IPreferencePage#performOk() + */ + public boolean performOk() { + clearMessages(); + + SDKCheckResults result = yoctoUISetting.validateInput(SDKCheckRequestFrom.Preferences, false); + if (result != SDKCheckResults.SDK_PASS) { + setErrorMessage(result.getMessage()); + return false; + } + + YoctoUIElement savedElement = YoctoSDKUtils.getElemFromStore(getPreferenceStore()); + YoctoUIElement modifiedElement = yoctoUISetting.getCurrentInput(); + + YoctoProfileElement savedProfileElement = YoctoSDKUtils.getProfilesFromDefaultStore(); + YoctoProfileElement profileElement = yoctoProfileSetting.getCurrentInput(); + + if (savedElement.equals(modifiedElement) && + profileElement.getSelectedProfile().equals(savedProfileElement.getSelectedProfile())) { + return true; + } + + HashSet yoctoProjects = getAffectedProjects(profileElement.getSelectedProfile()); + + if (!yoctoProjects.isEmpty()) { + boolean deleteConfirmed = + MessageDialog.openConfirm(null, YoctoSDKMessages.getString(UPDATE_DIALOG_TITLE), + YoctoSDKMessages.getFormattedString(UPDATE_DIALOG_MESSAGE, profileElement.getSelectedProfile())); + + if (!deleteConfirmed) { + return false; + } + } + + saveElemToStore(modifiedElement, getPreferenceStore()); + YoctoSDKUtils.saveProfilesToDefaultStore(profileElement); + + updateProjects(yoctoProjects, modifiedElement); + + return super.performOk(); + } + + private void clearMessages() { + setErrorMessage(null); + setMessage(null); + setTitle(getTitle()); + } + + /* + * @see PreferencePage#performDefaults() + */ + protected void performDefaults() { + YoctoUIElement defaultElement = YoctoSDKUtils.getDefaultElemFromDefaultStore(); + yoctoUISetting.setCurrentInput(defaultElement); + super.performDefaults(); + } + + public void performSaveAs() { + YoctoProfileElement profileElement = yoctoProfileSetting.getCurrentInput(); + YoctoUIElement uiElement = yoctoUISetting.getCurrentInput(); + + SDKCheckResults result = yoctoUISetting.validateInput(SDKCheckRequestFrom.Preferences, true); + if (result != SDKCheckResults.SDK_PASS) { + setErrorMessage(result.getMessage()); + return; + } + + InputDialog profileNameDialog = + new InputDialog(null, + YoctoSDKMessages.getString(NEW_DIALOG_TITLE), + YoctoSDKMessages.getString(NEW_DIALOG_MESSAGE), + null, + new ProfileNameInputValidator(profileElement)); + + int returnCode = profileNameDialog.open(); + if (returnCode == IDialogConstants.CANCEL_ID) { + return; + } + + profileElement.addProfile(profileNameDialog.getValue()); + yoctoProfileSetting.addProfile(profileNameDialog.getValue()); + + yoctoUISetting.setCurrentInput(uiElement); + performOk(); + } + + public void switchProfile(String selectedProfile) { + setPreferenceStore(YoctoSDKPlugin.getProfilePreferenceStore(selectedProfile)); + YoctoUIElement profileElement = YoctoSDKUtils.getElemFromStore(getPreferenceStore()); + yoctoUISetting.setCurrentInput(profileElement); + } + + public void renameProfile(String oldProfileName, String newProfileName) { + YoctoUIElement oldProfileElement = YoctoSDKUtils.getElemFromStore(YoctoSDKPlugin.getProfilePreferenceStore(oldProfileName)); + saveElemToStore(oldProfileElement, YoctoSDKPlugin.getProfilePreferenceStore(newProfileName)); + + renameProfileInAffectedProjects(oldProfileName, newProfileName); + } + + public void deleteProfile(String selectedProfile) + { + resetProfileInAffectedProjects(selectedProfile); + } + + /* Save IDE wide POKY Preference settings to a specific preference store */ + private void saveElemToStore(YoctoUIElement elem, IPreferenceStore store) { + store.setValue(PreferenceConstants.TARGET_ARCH_INDEX, elem.getIntTargetIndex()); + + if (elem.getEnumPokyMode() == YoctoUIElement.PokyMode.POKY_SDK_MODE) { + store.setValue(PreferenceConstants.SDK_MODE, IPreferenceStore.TRUE); + } else { + store.setValue(PreferenceConstants.SDK_MODE, IPreferenceStore.FALSE); + } + store.setValue(PreferenceConstants.QEMU_KERNEL, elem.getStrQemuKernelLoc()); + store.setValue(PreferenceConstants.QEMU_OPTION, elem.getStrQemuOption()); + store.setValue(PreferenceConstants.SYSROOT, elem.getStrSysrootLoc()); + if (elem.getEnumDeviceMode() == YoctoUIElement.DeviceMode.QEMU_MODE) { + store.setValue(PreferenceConstants.TARGET_MODE, IPreferenceStore.TRUE); + } else { + store.setValue(PreferenceConstants.TARGET_MODE, IPreferenceStore.FALSE); + } + store.setValue(PreferenceConstants.TOOLCHAIN_ROOT, elem.getStrToolChainRoot()); + store.setValue(PreferenceConstants.TOOLCHAIN_TRIPLET, elem.getStrTarget()); + } + + private void resetProfileInAffectedProjects(String usedProfile) + { + HashSet yoctoProjects = getAffectedProjects(usedProfile); + YoctoProfileElement profileElement = YoctoSDKUtils.getProfilesFromDefaultStore(); + profileElement.setSelectedProfile(PreferenceConstants.STANDARD_PROFILE_NAME); + + for (IProject project : yoctoProjects) + { + ProjectPreferenceUtils.saveProfiles(profileElement, project); + YoctoUIElement elem = YoctoSDKUtils.getElemFromStore( + YoctoSDKPlugin.getProfilePreferenceStore(PreferenceConstants.STANDARD_PROFILE_NAME)); + ProjectPreferenceUtils.saveElemToProjectEnv(elem, project); + } + } + + private void renameProfileInAffectedProjects(String oldProfileName, String newProfileName) { + HashSet yoctoProjects = getAffectedProjects(oldProfileName); + YoctoProfileElement profileElement = YoctoSDKUtils.getProfilesFromDefaultStore(); + profileElement.setSelectedProfile(newProfileName); + + for (IProject project : yoctoProjects) + { + ProjectPreferenceUtils.saveProfiles(profileElement, project); + } + } + + private void updateProjects(HashSet yoctoProjects, YoctoUIElement elem) { + for (IProject project : yoctoProjects) + { + ProjectPreferenceUtils.saveElemToProjectEnv(elem, project); + } + } + + private HashSet getAffectedProjects(String usedProfile) + { + HashSet yoctoProjects = new HashSet(); + + IProject[] projects = ResourcesPlugin.getWorkspace().getRoot().getProjects(); + + for (IProject project : projects) + { + try + { + if (!project.hasNature(YoctoSDKProjectNature.YoctoSDK_NATURE_ID)) { + continue; + } + } catch (CoreException e) + { + // project is closed or does not exist so don't update + continue; + } + + if (!projectUsesProfile(project, usedProfile)) { + continue; + } + + yoctoProjects.add(project); + } + return yoctoProjects; + } + + private boolean projectUsesProfile(IProject project, String profile) + { + YoctoProfileElement profileElement = ProjectPreferenceUtils.getProfiles(project); + + if (!profileElement.getSelectedProfile().equals(profile)) { + return false; + } + + return true; + } +} diff --git a/plugins/org.yocto.sdk.ide/src/org/yocto/sdk/ide/preferences/YoctoSDKProjectPropertyPage.java b/plugins/org.yocto.sdk.ide/src/org/yocto/sdk/ide/preferences/YoctoSDKProjectPropertyPage.java new file mode 100644 index 0000000..a85cbd9 --- /dev/null +++ b/plugins/org.yocto.sdk.ide/src/org/yocto/sdk/ide/preferences/YoctoSDKProjectPropertyPage.java @@ -0,0 +1,202 @@ +/******************************************************************************* + * Copyright (c) 2012 BMW Car IT GmbH. + * Copyright (c) 2010 Intel. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * BMW Car IT GmbH - initial implementation + * Intel - initial API implementation (copied from YoctoSDKPreferencePage) + *******************************************************************************/ +package org.yocto.sdk.ide.preferences; + +import org.eclipse.core.resources.IProject; +import org.eclipse.core.runtime.IAdaptable; +import org.eclipse.jface.dialogs.Dialog; +import org.eclipse.swt.SWT; +import org.eclipse.swt.layout.GridLayout; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Control; +import org.eclipse.swt.widgets.Event; +import org.eclipse.swt.widgets.Listener; +import org.eclipse.ui.IWorkbenchPropertyPage; +import org.eclipse.ui.dialogs.PropertyPage; +import org.yocto.sdk.ide.YoctoProfileElement; +import org.yocto.sdk.ide.YoctoProfileSetting; +import org.yocto.sdk.ide.YoctoProjectSpecificSetting; +import org.yocto.sdk.ide.YoctoSDKChecker; +import org.yocto.sdk.ide.YoctoSDKChecker.SDKCheckRequestFrom; +import org.yocto.sdk.ide.YoctoSDKChecker.SDKCheckResults; +import org.yocto.sdk.ide.YoctoSDKMessages; +import org.yocto.sdk.ide.YoctoSDKPlugin; +import org.yocto.sdk.ide.YoctoUIElement; +import org.yocto.sdk.ide.YoctoUISetting; +import org.yocto.sdk.ide.utils.ProjectPreferenceUtils; +import org.yocto.sdk.ide.utils.YoctoSDKUtils; + +public class YoctoSDKProjectPropertyPage extends PropertyPage implements + IWorkbenchPropertyPage { + + private static final String REVALIDATION_MESSAGE = "Poky.SDK.Revalidation.Message"; + + private YoctoProfileSetting yoctoProfileSetting; + private YoctoProjectSpecificSetting yoctoProjectSpecificSetting; + private YoctoUISetting yoctoUISetting; + private IProject project = null; + + private Listener changeListener; + + public YoctoSDKProjectPropertyPage() { + changeListener = new Listener() { + @Override + public void handleEvent(Event event) { + if (getErrorMessage() != null) { + setErrorMessage(null); + setMessage(YoctoSDKMessages.getString(REVALIDATION_MESSAGE), INFORMATION); + } + } + }; + } + + @Override + protected Control createContents(Composite parent) { + IProject project = getProject(); + + YoctoProfileElement globalProfileElement= YoctoSDKUtils.getProfilesFromDefaultStore(); + YoctoProfileElement profileElement = ProjectPreferenceUtils.getProfiles(project); + + String selectedProfile = profileElement.getSelectedProfile(); + if (!globalProfileElement.contains(selectedProfile)) { + selectedProfile = globalProfileElement.getSelectedProfile(); + } + + yoctoProfileSetting = new YoctoProfileSetting( + new YoctoProfileElement(globalProfileElement.getProfilesAsString(), selectedProfile), this, false); + boolean useProjectSpecificSetting = ProjectPreferenceUtils.getUseProjectSpecificOption(project); + + if (useProjectSpecificSetting) { + yoctoUISetting = new YoctoUISetting(ProjectPreferenceUtils.getElem(project)); + } else { + yoctoUISetting = new YoctoUISetting(YoctoSDKUtils.getElemFromStore(YoctoSDKPlugin.getProfilePreferenceStore(selectedProfile))); + } + + yoctoProjectSpecificSetting = new YoctoProjectSpecificSetting(yoctoProfileSetting, yoctoUISetting, this); + + initializeDialogUnits(parent); + final Composite composite = new Composite(parent, SWT.NONE); + composite.setLayout(new GridLayout(2, false)); + + yoctoProfileSetting.createComposite(composite); + yoctoProjectSpecificSetting.createComposite(composite); + yoctoUISetting.createComposite(composite); + + if (useProjectSpecificSetting) { + yoctoProfileSetting.setUIFormEnabledState(false); + yoctoProjectSpecificSetting.setUseProjectSpecificSettings(true); + yoctoUISetting.setUIFormEnabledState(true); + + SDKCheckResults result = yoctoUISetting.validateInput(SDKCheckRequestFrom.Preferences, false); + if (result != SDKCheckResults.SDK_PASS) { + setErrorMessage(result.getMessage()); + } + } else { + yoctoProfileSetting.setUIFormEnabledState(true); + yoctoProjectSpecificSetting.setUseProjectSpecificSettings(false); + yoctoUISetting.setUIFormEnabledState(false); + } + + composite.addListener(SWT.Modify, changeListener); + composite.addListener(SWT.Selection, changeListener); + + Dialog.applyDialogFont(composite); + return composite; + } + + private IProject getProject() { + if (project != null) { + return project; + } + + IAdaptable adaptable = getElement(); + if (adaptable == null) { + throw new IllegalStateException("Project can only be retrieved after properties page has been set up."); + } + + project = (IProject) adaptable.getAdapter(IProject.class); + return project; + } + + /* + * @see PreferencePage#performDefaults() + */ + @Override + protected void performDefaults() { + YoctoUIElement defaultElement = YoctoSDKUtils.getDefaultElemFromDefaultStore(); + yoctoUISetting.setCurrentInput(defaultElement); + yoctoProjectSpecificSetting.setUseProjectSpecificSettings(true); + super.performDefaults(); + } + + /* + * @see IPreferencePage#performOk() + */ + @Override + public boolean performOk() { + clearMessages(); + + IProject project = getProject(); + + if (yoctoProjectSpecificSetting.isUsingProjectSpecificSettings()) { + SDKCheckResults result = yoctoUISetting.validateInput(SDKCheckRequestFrom.Preferences, false); + if (result != SDKCheckResults.SDK_PASS) { + setErrorMessage(result.getMessage()); + return false; + } + + ProjectPreferenceUtils.saveUseProjectSpecificOption(project, true); + ProjectPreferenceUtils.saveProfiles(yoctoProfileSetting.getCurrentInput(), project); + ProjectPreferenceUtils.saveElem(yoctoUISetting.getCurrentInput(), project); + } else { + ProjectPreferenceUtils.saveUseProjectSpecificOption(project, false); + ProjectPreferenceUtils.saveProfiles(yoctoProfileSetting.getCurrentInput(), project); + } + + ProjectPreferenceUtils.saveElemToProjectEnv(yoctoUISetting.getCurrentInput(), getProject()); + + return super.performOk(); + } + + private void clearMessages() { + setErrorMessage(null); + setMessage(null); + setTitle(getTitle()); + } + + public void switchProfile(String selectedProfile) + { + YoctoUIElement profileElement = YoctoSDKUtils.getElemFromStore(YoctoSDKPlugin.getProfilePreferenceStore(selectedProfile)); + yoctoUISetting.setCurrentInput(profileElement); + } + + public void switchToProjectSpecificProfile() + { + YoctoUIElement profileElement = ProjectPreferenceUtils.getElem(getProject()); + SDKCheckResults result = YoctoSDKChecker.checkYoctoSDK(profileElement); + + if ((result != SDKCheckResults.SDK_PASS)) { + /* Project specific profile has not yet been defined, + * leave settings from previously selected profile + */ + return; + } + + yoctoUISetting.setCurrentInput(profileElement); + } + + public void switchToSelectedProfile() + { + switchProfile(yoctoProfileSetting.getCurrentInput().getSelectedProfile()); + } +} -- cgit v1.2.3-54-g00ecf