summaryrefslogtreecommitdiffstats
path: root/plugins/org.yocto.sdk.ide/src/org/yocto/sdk/ide/preferences/YoctoSDKProjectPropertyPage.java
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/org.yocto.sdk.ide/src/org/yocto/sdk/ide/preferences/YoctoSDKProjectPropertyPage.java')
-rw-r--r--plugins/org.yocto.sdk.ide/src/org/yocto/sdk/ide/preferences/YoctoSDKProjectPropertyPage.java202
1 files changed, 202 insertions, 0 deletions
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 @@
1/*******************************************************************************
2 * Copyright (c) 2012 BMW Car IT GmbH.
3 * Copyright (c) 2010 Intel.
4 * All rights reserved. This program and the accompanying materials
5 * are made available under the terms of the Eclipse Public License v1.0
6 * which accompanies this distribution, and is available at
7 * http://www.eclipse.org/legal/epl-v10.html
8 *
9 * Contributors:
10 * BMW Car IT GmbH - initial implementation
11 * Intel - initial API implementation (copied from YoctoSDKPreferencePage)
12 *******************************************************************************/
13package org.yocto.sdk.ide.preferences;
14
15import org.eclipse.core.resources.IProject;
16import org.eclipse.core.runtime.IAdaptable;
17import org.eclipse.jface.dialogs.Dialog;
18import org.eclipse.swt.SWT;
19import org.eclipse.swt.layout.GridLayout;
20import org.eclipse.swt.widgets.Composite;
21import org.eclipse.swt.widgets.Control;
22import org.eclipse.swt.widgets.Event;
23import org.eclipse.swt.widgets.Listener;
24import org.eclipse.ui.IWorkbenchPropertyPage;
25import org.eclipse.ui.dialogs.PropertyPage;
26import org.yocto.sdk.ide.YoctoProfileElement;
27import org.yocto.sdk.ide.YoctoProfileSetting;
28import org.yocto.sdk.ide.YoctoProjectSpecificSetting;
29import org.yocto.sdk.ide.YoctoSDKChecker;
30import org.yocto.sdk.ide.YoctoSDKChecker.SDKCheckRequestFrom;
31import org.yocto.sdk.ide.YoctoSDKChecker.SDKCheckResults;
32import org.yocto.sdk.ide.YoctoSDKMessages;
33import org.yocto.sdk.ide.YoctoSDKPlugin;
34import org.yocto.sdk.ide.YoctoUIElement;
35import org.yocto.sdk.ide.YoctoUISetting;
36import org.yocto.sdk.ide.utils.ProjectPreferenceUtils;
37import org.yocto.sdk.ide.utils.YoctoSDKUtils;
38
39public class YoctoSDKProjectPropertyPage extends PropertyPage implements
40 IWorkbenchPropertyPage {
41
42 private static final String REVALIDATION_MESSAGE = "Poky.SDK.Revalidation.Message";
43
44 private YoctoProfileSetting yoctoProfileSetting;
45 private YoctoProjectSpecificSetting yoctoProjectSpecificSetting;
46 private YoctoUISetting yoctoUISetting;
47 private IProject project = null;
48
49 private Listener changeListener;
50
51 public YoctoSDKProjectPropertyPage() {
52 changeListener = new Listener() {
53 @Override
54 public void handleEvent(Event event) {
55 if (getErrorMessage() != null) {
56 setErrorMessage(null);
57 setMessage(YoctoSDKMessages.getString(REVALIDATION_MESSAGE), INFORMATION);
58 }
59 }
60 };
61 }
62
63 @Override
64 protected Control createContents(Composite parent) {
65 IProject project = getProject();
66
67 YoctoProfileElement globalProfileElement= YoctoSDKUtils.getProfilesFromDefaultStore();
68 YoctoProfileElement profileElement = ProjectPreferenceUtils.getProfiles(project);
69
70 String selectedProfile = profileElement.getSelectedProfile();
71 if (!globalProfileElement.contains(selectedProfile)) {
72 selectedProfile = globalProfileElement.getSelectedProfile();
73 }
74
75 yoctoProfileSetting = new YoctoProfileSetting(
76 new YoctoProfileElement(globalProfileElement.getProfilesAsString(), selectedProfile), this, false);
77 boolean useProjectSpecificSetting = ProjectPreferenceUtils.getUseProjectSpecificOption(project);
78
79 if (useProjectSpecificSetting) {
80 yoctoUISetting = new YoctoUISetting(ProjectPreferenceUtils.getElem(project));
81 } else {
82 yoctoUISetting = new YoctoUISetting(YoctoSDKUtils.getElemFromStore(YoctoSDKPlugin.getProfilePreferenceStore(selectedProfile)));
83 }
84
85 yoctoProjectSpecificSetting = new YoctoProjectSpecificSetting(yoctoProfileSetting, yoctoUISetting, this);
86
87 initializeDialogUnits(parent);
88 final Composite composite = new Composite(parent, SWT.NONE);
89 composite.setLayout(new GridLayout(2, false));
90
91 yoctoProfileSetting.createComposite(composite);
92 yoctoProjectSpecificSetting.createComposite(composite);
93 yoctoUISetting.createComposite(composite);
94
95 if (useProjectSpecificSetting) {
96 yoctoProfileSetting.setUIFormEnabledState(false);
97 yoctoProjectSpecificSetting.setUseProjectSpecificSettings(true);
98 yoctoUISetting.setUIFormEnabledState(true);
99
100 SDKCheckResults result = yoctoUISetting.validateInput(SDKCheckRequestFrom.Preferences, false);
101 if (result != SDKCheckResults.SDK_PASS) {
102 setErrorMessage(result.getMessage());
103 }
104 } else {
105 yoctoProfileSetting.setUIFormEnabledState(true);
106 yoctoProjectSpecificSetting.setUseProjectSpecificSettings(false);
107 yoctoUISetting.setUIFormEnabledState(false);
108 }
109
110 composite.addListener(SWT.Modify, changeListener);
111 composite.addListener(SWT.Selection, changeListener);
112
113 Dialog.applyDialogFont(composite);
114 return composite;
115 }
116
117 private IProject getProject() {
118 if (project != null) {
119 return project;
120 }
121
122 IAdaptable adaptable = getElement();
123 if (adaptable == null) {
124 throw new IllegalStateException("Project can only be retrieved after properties page has been set up.");
125 }
126
127 project = (IProject) adaptable.getAdapter(IProject.class);
128 return project;
129 }
130
131 /*
132 * @see PreferencePage#performDefaults()
133 */
134 @Override
135 protected void performDefaults() {
136 YoctoUIElement defaultElement = YoctoSDKUtils.getDefaultElemFromDefaultStore();
137 yoctoUISetting.setCurrentInput(defaultElement);
138 yoctoProjectSpecificSetting.setUseProjectSpecificSettings(true);
139 super.performDefaults();
140 }
141
142 /*
143 * @see IPreferencePage#performOk()
144 */
145 @Override
146 public boolean performOk() {
147 clearMessages();
148
149 IProject project = getProject();
150
151 if (yoctoProjectSpecificSetting.isUsingProjectSpecificSettings()) {
152 SDKCheckResults result = yoctoUISetting.validateInput(SDKCheckRequestFrom.Preferences, false);
153 if (result != SDKCheckResults.SDK_PASS) {
154 setErrorMessage(result.getMessage());
155 return false;
156 }
157
158 ProjectPreferenceUtils.saveUseProjectSpecificOption(project, true);
159 ProjectPreferenceUtils.saveProfiles(yoctoProfileSetting.getCurrentInput(), project);
160 ProjectPreferenceUtils.saveElem(yoctoUISetting.getCurrentInput(), project);
161 } else {
162 ProjectPreferenceUtils.saveUseProjectSpecificOption(project, false);
163 ProjectPreferenceUtils.saveProfiles(yoctoProfileSetting.getCurrentInput(), project);
164 }
165
166 ProjectPreferenceUtils.saveElemToProjectEnv(yoctoUISetting.getCurrentInput(), getProject());
167
168 return super.performOk();
169 }
170
171 private void clearMessages() {
172 setErrorMessage(null);
173 setMessage(null);
174 setTitle(getTitle());
175 }
176
177 public void switchProfile(String selectedProfile)
178 {
179 YoctoUIElement profileElement = YoctoSDKUtils.getElemFromStore(YoctoSDKPlugin.getProfilePreferenceStore(selectedProfile));
180 yoctoUISetting.setCurrentInput(profileElement);
181 }
182
183 public void switchToProjectSpecificProfile()
184 {
185 YoctoUIElement profileElement = ProjectPreferenceUtils.getElem(getProject());
186 SDKCheckResults result = YoctoSDKChecker.checkYoctoSDK(profileElement);
187
188 if ((result != SDKCheckResults.SDK_PASS)) {
189 /* Project specific profile has not yet been defined,
190 * leave settings from previously selected profile
191 */
192 return;
193 }
194
195 yoctoUISetting.setCurrentInput(profileElement);
196 }
197
198 public void switchToSelectedProfile()
199 {
200 switchProfile(yoctoProfileSetting.getCurrentInput().getSelectedProfile());
201 }
202}