[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