[yocto] [RFC v1 5/5] plugins/sdk.ide: Enable the usage of profiles in the project properties
Timo Mueller
mail at timomueller.eu
Fri Feb 8 05:28:20 PST 2013
From: Timo Mueller <timo.mueller at bmw-carit.de>
UI elements are added to the project properties in order to use
profile capabilites with a project.
Signed-off-by: Timo Mueller <timo.mueller at bmw-carit.de>
---
.../src/org/yocto/sdk/ide/YoctoProfileSetting.java | 3 +
.../yocto/sdk/ide/YoctoProjectSpecificSetting.java | 9 +++
.../preferences/YoctoSDKProjectPropertyPage.java | 94 +++++++++++++++++-----
3 files changed, 86 insertions(+), 20 deletions(-)
diff --git a/plugins/org.yocto.sdk.ide/src/org/yocto/sdk/ide/YoctoProfileSetting.java b/plugins/org.yocto.sdk.ide/src/org/yocto/sdk/ide/YoctoProfileSetting.java
index 738dba7..cc3e167 100644
--- a/plugins/org.yocto.sdk.ide/src/org/yocto/sdk/ide/YoctoProfileSetting.java
+++ b/plugins/org.yocto.sdk.ide/src/org/yocto/sdk/ide/YoctoProfileSetting.java
@@ -28,6 +28,7 @@ import org.eclipse.swt.widgets.Listener;
import org.yocto.sdk.ide.preferences.PreferenceConstants;
import org.yocto.sdk.ide.preferences.ProfileNameInputValidator;
import org.yocto.sdk.ide.preferences.YoctoSDKPreferencePage;
+import org.yocto.sdk.ide.preferences.YoctoSDKProjectPropertyPage;
public class YoctoProfileSetting {
private static final String PROFILES_TITLE = "Preferences.Profiles.Title";
@@ -91,6 +92,8 @@ public class YoctoProfileSetting {
if (preferencePage instanceof YoctoSDKPreferencePage) {
((YoctoSDKPreferencePage) preferencePage).switchProfile(selectedItem);
+ } else if (preferencePage instanceof YoctoSDKProjectPropertyPage) {
+ ((YoctoSDKProjectPropertyPage) preferencePage).switchProfile(selectedItem);
}
}
};
diff --git a/plugins/org.yocto.sdk.ide/src/org/yocto/sdk/ide/YoctoProjectSpecificSetting.java b/plugins/org.yocto.sdk.ide/src/org/yocto/sdk/ide/YoctoProjectSpecificSetting.java
index 25d4de4..13acb8e 100644
--- a/plugins/org.yocto.sdk.ide/src/org/yocto/sdk/ide/YoctoProjectSpecificSetting.java
+++ b/plugins/org.yocto.sdk.ide/src/org/yocto/sdk/ide/YoctoProjectSpecificSetting.java
@@ -19,6 +19,7 @@ import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Group;
+import org.yocto.sdk.ide.preferences.YoctoSDKProjectPropertyPage;
public class YoctoProjectSpecificSetting {
private static final String PROJECT_SPECIFIC_TITLE = "Preferences.Profile.ProjectSpecific.Title";
@@ -58,10 +59,18 @@ public class YoctoProjectSpecificSetting {
if (btnUseProjectSpecificSettingsCheckbox.getSelection()){
yoctoConfigurationsSetting.setUIFormEnabledState(false);
yoctoUISetting.setUIFormEnabledState(true);
+
+ if (preferencePage instanceof YoctoSDKProjectPropertyPage) {
+ ((YoctoSDKProjectPropertyPage) preferencePage).switchToProjectSpecificProfile();
+ }
} else {
yoctoConfigurationsSetting.setUIFormEnabledState(true);
yoctoConfigurationsSetting.setButtonsEnabledState(false);
yoctoUISetting.setUIFormEnabledState(false);
+
+ if (preferencePage instanceof YoctoSDKProjectPropertyPage) {
+ ((YoctoSDKProjectPropertyPage) preferencePage).switchToSelectedProfile();
+ }
}
}
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
index 56cc4cb..eef56c1 100644
--- 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
@@ -21,6 +21,10 @@ import org.eclipse.swt.widgets.Control;
import org.eclipse.ui.IWorkbenchPropertyPage;
import org.eclipse.ui.dialogs.PropertyPage;
import org.yocto.sdk.ide.YoctoGeneralException;
+import org.yocto.sdk.ide.YoctoProfileElement;
+import org.yocto.sdk.ide.YoctoProfileSetting;
+import org.yocto.sdk.ide.YoctoProjectSpecificSetting;
+import org.yocto.sdk.ide.YoctoSDKPlugin;
import org.yocto.sdk.ide.YoctoSDKUtils;
import org.yocto.sdk.ide.YoctoSDKUtils.SDKCheckRequestFrom;
import org.yocto.sdk.ide.YoctoUIElement;
@@ -29,21 +33,56 @@ import org.yocto.sdk.ide.YoctoUISetting;
public class YoctoSDKProjectPropertyPage extends PropertyPage implements
IWorkbenchPropertyPage {
+ private YoctoProfileSetting yoctoProfileSetting;
+ private YoctoProjectSpecificSetting yoctoProjectSpecificSetting;
private YoctoUISetting yoctoUISetting;
private IProject project = null;
@Override
protected Control createContents(Composite parent) {
- YoctoUIElement uiElement = loadUIElement();
- this.yoctoUISetting = new YoctoUISetting(uiElement);
+ IProject project = getProject();
+
+ YoctoProfileElement globalProfileElement= YoctoSDKUtils.getProfilesFromDefaultStore();
+ YoctoProfileElement profileElement = YoctoSDKUtils.getProfilesFromProjectPreferences(project);
+
+ String selectedProfile = profileElement.getSelectedProfile();
+ if (!globalProfileElement.contains(selectedProfile)) {
+ selectedProfile = globalProfileElement.getSelectedProfile();
+ }
+
+ yoctoProfileSetting = new YoctoProfileSetting(
+ new YoctoProfileElement(globalProfileElement.getProfilesAsString(), selectedProfile), this);
+ boolean useProjectSpecificSetting = YoctoSDKUtils.getUseProjectSpecificOptionFromProjectPreferences(project);
+
+ if (useProjectSpecificSetting) {
+ yoctoUISetting = new YoctoUISetting(YoctoSDKUtils.getElemFromProjectPreferences(project));
+ } else {
+ yoctoUISetting = new YoctoUISetting(YoctoSDKUtils.getElemFromStore(YoctoSDKPlugin.getProfilePreferenceStore(selectedProfile)));
+ }
+
+ yoctoProjectSpecificSetting = new YoctoProjectSpecificSetting(yoctoProfileSetting, yoctoUISetting, this);
initializeDialogUnits(parent);
final Composite result = new Composite(parent, SWT.NONE);
+ yoctoProfileSetting.createComposite(result);
+ yoctoProjectSpecificSetting.createComposite(result);
+
try {
yoctoUISetting.createComposite(result);
- yoctoUISetting
- .validateInput(SDKCheckRequestFrom.Preferences, false);
+
+ if (useProjectSpecificSetting) {
+ yoctoProfileSetting.setUIFormEnabledState(false);
+ yoctoProjectSpecificSetting.setUseProjectSpecificSettings(true);
+ yoctoUISetting.setUIFormEnabledState(true);
+ yoctoUISetting.validateInput(SDKCheckRequestFrom.Preferences, false);
+ } else {
+ yoctoProfileSetting.setUIFormEnabledState(true);
+ yoctoProfileSetting.setButtonsEnabledState(false);
+ yoctoProjectSpecificSetting.setUseProjectSpecificSettings(false);
+ yoctoUISetting.setUIFormEnabledState(false);
+ }
+
Dialog.applyDialogFont(result);
return result;
} catch (YoctoGeneralException e) {
@@ -67,19 +106,6 @@ public class YoctoSDKProjectPropertyPage extends PropertyPage implements
return project;
}
- private YoctoUIElement loadUIElement() {
- YoctoUIElement uiElement = YoctoSDKUtils.getElemFromProjectEnv(getProject());
-
- if (uiElement.getStrToolChainRoot().isEmpty()
- || uiElement.getStrTarget().isEmpty()) {
- // No project environment has been set yet, use the Preference
- // values
- uiElement = YoctoSDKUtils.getElemFromDefaultStore();
- }
-
- return uiElement;
- }
-
/*
* @see PreferencePage#performDefaults()
*/
@@ -87,6 +113,7 @@ public class YoctoSDKProjectPropertyPage extends PropertyPage implements
protected void performDefaults() {
YoctoUIElement defaultElement = YoctoSDKUtils.getDefaultElemFromDefaultStore();
yoctoUISetting.setCurrentInput(defaultElement);
+ yoctoProjectSpecificSetting.setUseProjectSpecificSettings(true);
super.performDefaults();
}
@@ -96,10 +123,20 @@ public class YoctoSDKProjectPropertyPage extends PropertyPage implements
@Override
public boolean performOk() {
try {
- yoctoUISetting.validateInput(SDKCheckRequestFrom.Preferences, true);
+ IProject project = getProject();
- YoctoUIElement elem = yoctoUISetting.getCurrentInput();
- YoctoSDKUtils.saveElemToProjectEnv(elem, getProject());
+ if (yoctoProjectSpecificSetting.isUsingProjectSpecificSettings()) {
+ yoctoUISetting.validateInput(SDKCheckRequestFrom.Preferences, true);
+
+ YoctoSDKUtils.saveUseProjectSpecificOptionToProjectPreferences(project, true);
+ YoctoSDKUtils.saveProfilesToProjectPreferences(yoctoProfileSetting.getCurrentInput(), project);
+ YoctoSDKUtils.saveElemToProjectPreferences(yoctoUISetting.getCurrentInput(), project);
+ } else {
+ YoctoSDKUtils.saveUseProjectSpecificOptionToProjectPreferences(project, false);
+ YoctoSDKUtils.saveProfilesToProjectPreferences(yoctoProfileSetting.getCurrentInput(), project);
+ }
+
+ YoctoSDKUtils.saveElemToProjectEnv(yoctoUISetting.getCurrentInput(), getProject());
return super.performOk();
} catch (YoctoGeneralException e) {
@@ -108,4 +145,21 @@ public class YoctoSDKProjectPropertyPage extends PropertyPage implements
return false;
}
}
+
+ public void switchProfile(String selectedProfile)
+ {
+ YoctoUIElement profileElement = YoctoSDKUtils.getElemFromStore(YoctoSDKPlugin.getProfilePreferenceStore(selectedProfile));
+ yoctoUISetting.setCurrentInput(profileElement);
+ }
+
+ public void switchToProjectSpecificProfile()
+ {
+ YoctoUIElement profileElement = YoctoSDKUtils.getElemFromProjectPreferences(getProject());
+ yoctoUISetting.setCurrentInput(profileElement);
+ }
+
+ public void switchToSelectedProfile()
+ {
+ switchProfile(yoctoProfileSetting.getCurrentInput().getSelectedProfile());
+ }
}
--
1.7.11.7
More information about the yocto
mailing list