[yocto] [RFC v1 3/5] plugins/sdk.ide: Enable project specific yocto settings

Timo Mueller mail at timomueller.eu
Fri Feb 8 05:28:18 PST 2013


From: Timo Mueller <timo.mueller at bmw-carit.de>

Until now only global target profiles could be used to configure a
project. Now a project can have its own specific settings which are
not affected by global changes to the profile.

Signed-off-by: Timo Mueller <timo.mueller at bmw-carit.de>
---
 .../yocto/sdk/ide/YoctoProjectSpecificSetting.java | 80 ++++++++++++++++++++++
 .../org/yocto/sdk/ide/YoctoSDKMessages.properties  |  3 +
 .../src/org/yocto/sdk/ide/YoctoSDKUtils.java       | 39 +++++++++++
 .../sdk/ide/preferences/PreferenceConstants.java   |  2 +
 4 files changed, 124 insertions(+)
 create mode 100644 plugins/org.yocto.sdk.ide/src/org/yocto/sdk/ide/YoctoProjectSpecificSetting.java

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
new file mode 100644
index 0000000..25d4de4
--- /dev/null
+++ b/plugins/org.yocto.sdk.ide/src/org/yocto/sdk/ide/YoctoProjectSpecificSetting.java
@@ -0,0 +1,80 @@
+/*******************************************************************************
+ * 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;
+
+import org.eclipse.jface.preference.PreferencePage;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Group;
+
+public class YoctoProjectSpecificSetting {
+	private static final String PROJECT_SPECIFIC_TITLE = "Preferences.Profile.ProjectSpecific.Title";
+	private static final String PROJECT_SPECIFIC_GROUP_TITLE = "Preferences.Profile.ProjectSpecific.Group.Title";
+
+	private YoctoProfileSetting yoctoConfigurationsSetting;
+	private YoctoUISetting yoctoUISetting;
+
+	private Button btnUseProjectSpecificSettingsCheckbox;
+	private PreferencePage preferencePage;
+
+	public YoctoProjectSpecificSetting(YoctoProfileSetting yoctoConfigurationsSetting,
+						YoctoUISetting yoctoUISetting, PreferencePage preferencePage) {
+		this.yoctoConfigurationsSetting = yoctoConfigurationsSetting;
+		this.yoctoUISetting = yoctoUISetting;
+		this.preferencePage = preferencePage;
+	}
+
+	public void createComposite(Composite composite) {
+		GridData gd = new GridData(SWT.FILL, SWT.CENTER, true, false);
+		GridLayout layout = new GridLayout(2, false);
+		composite.setLayout(layout);
+
+		Group storeYoctoConfigurationsGroup = new Group (composite, SWT.NONE);
+		layout = new GridLayout(2, false);
+		storeYoctoConfigurationsGroup.setLayout(layout);
+		gd = new GridData(SWT.FILL, SWT.CENTER, true, false);
+		gd.horizontalSpan = 2;
+		storeYoctoConfigurationsGroup.setLayoutData(gd);
+		storeYoctoConfigurationsGroup.setText(YoctoSDKMessages.getString(PROJECT_SPECIFIC_GROUP_TITLE));
+
+		btnUseProjectSpecificSettingsCheckbox = new Button(storeYoctoConfigurationsGroup, SWT.CHECK);
+		btnUseProjectSpecificSettingsCheckbox.setText(YoctoSDKMessages.getString(PROJECT_SPECIFIC_TITLE));
+		btnUseProjectSpecificSettingsCheckbox.addSelectionListener(new SelectionListener() {
+			@Override
+			public void widgetSelected(SelectionEvent e) {
+				if (btnUseProjectSpecificSettingsCheckbox.getSelection()){
+					yoctoConfigurationsSetting.setUIFormEnabledState(false);
+					yoctoUISetting.setUIFormEnabledState(true);
+				} else {
+					yoctoConfigurationsSetting.setUIFormEnabledState(true);
+					yoctoConfigurationsSetting.setButtonsEnabledState(false);
+					yoctoUISetting.setUIFormEnabledState(false);
+				}
+			}
+
+			@Override
+			public void widgetDefaultSelected(SelectionEvent e) {}
+		});
+	}
+
+	public void setUseProjectSpecificSettings(boolean isUsingProjectSpecificSettings) {
+		btnUseProjectSpecificSettingsCheckbox.setSelection(isUsingProjectSpecificSettings);
+	}
+
+	public boolean isUsingProjectSpecificSettings() {
+		return btnUseProjectSpecificSettingsCheckbox.getSelection();
+	}
+}
diff --git a/plugins/org.yocto.sdk.ide/src/org/yocto/sdk/ide/YoctoSDKMessages.properties b/plugins/org.yocto.sdk.ide/src/org/yocto/sdk/ide/YoctoSDKMessages.properties
index f631112..bfdde41 100644
--- a/plugins/org.yocto.sdk.ide/src/org/yocto/sdk/ide/YoctoSDKMessages.properties
+++ b/plugins/org.yocto.sdk.ide/src/org/yocto/sdk/ide/YoctoSDKMessages.properties
@@ -64,6 +64,9 @@ Preferences.Profile.Remove.Dialog.Message = Do you really want to the remove the
 Preferences.Profile.Standard.Modification.Title = Modify standard target profile
 Preferences.Profile.Standard.Modification.Message = Standard target profile cannot be removed or renamed.
 
+Preferences.Profile.ProjectSpecific.Title = Use project specific settings
+Preferences.Profile.ProjectSpecific.Group.Title = Project specific settings:
+
 Console.SDK.Name = Yocto Project Console
 
 LaunchConfig.Type.Name = org.eclipse.ui.externaltools.ProgramLaunchConfigurationType
diff --git a/plugins/org.yocto.sdk.ide/src/org/yocto/sdk/ide/YoctoSDKUtils.java b/plugins/org.yocto.sdk.ide/src/org/yocto/sdk/ide/YoctoSDKUtils.java
index 857928c..11d68e0 100644
--- a/plugins/org.yocto.sdk.ide/src/org/yocto/sdk/ide/YoctoSDKUtils.java
+++ b/plugins/org.yocto.sdk.ide/src/org/yocto/sdk/ide/YoctoSDKUtils.java
@@ -820,4 +820,43 @@ public class YoctoSDKUtils {
 
 		return new YoctoProfileElement(profiles, selectedProfile);
 	}
+
+	public static boolean getUseProjectSpecificOptionFromProjectPreferences(IProject project)
+	{
+		IScopeContext projectScope = new ProjectScope(project);
+		IEclipsePreferences projectNode = projectScope.getNode(PROJECT_SCOPE);
+		if (projectNode == null) {
+			return false;
+		}
+
+		String useProjectSpecificSettingString = projectNode.get(PreferenceConstants.PROJECT_SPECIFIC_PROFILE, IPreferenceStore.FALSE);
+
+		if (useProjectSpecificSettingString.equals(IPreferenceStore.FALSE)) {
+			return false;
+		}
+
+		return true;
+	}
+
+	public static void saveUseProjectSpecificOptionToProjectPreferences(IProject project, boolean useProjectSpecificSetting)
+	{
+		IScopeContext projectScope = new ProjectScope(project);
+		IEclipsePreferences projectNode = projectScope.getNode(PROJECT_SCOPE);
+		if (projectNode == null) {
+			return;
+		}
+
+		if (useProjectSpecificSetting) {
+			projectNode.put(PreferenceConstants.PROJECT_SPECIFIC_PROFILE, IPreferenceStore.TRUE);
+		} else {
+			projectNode.put(PreferenceConstants.PROJECT_SPECIFIC_PROFILE, IPreferenceStore.FALSE);
+		}
+
+		try {
+			projectNode.flush();
+		} catch (BackingStoreException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+	}
 }
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
index 814397a..0ebbe99 100644
--- 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
@@ -38,4 +38,6 @@ public class PreferenceConstants {
 	public static final String PROFILES = "profiles";
 
 	public static final String SELECTED_PROFILE = "selectedProfile";
+
+	public static final String PROJECT_SPECIFIC_PROFILE = "##PROJECT_SPECIFIC_PROFILE##";
 }
-- 
1.7.11.7




More information about the yocto mailing list