summaryrefslogtreecommitdiffstats
path: root/plugins/org.yocto.sdk.ide/src/org/yocto/sdk/ide/preferences/YoctoSDKPreferencePage.java
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/org.yocto.sdk.ide/src/org/yocto/sdk/ide/preferences/YoctoSDKPreferencePage.java')
-rw-r--r--plugins/org.yocto.sdk.ide/src/org/yocto/sdk/ide/preferences/YoctoSDKPreferencePage.java307
1 files changed, 307 insertions, 0 deletions
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 @@
1/*******************************************************************************
2 * Copyright (c) 2010 Intel Corporation.
3 * All rights reserved. This program and the accompanying materials
4 * are made available under the terms of the Eclipse Public License v1.0
5 * which accompanies this distribution, and is available at
6 * http://www.eclipse.org/legal/epl-v10.html
7 *
8 * Contributors:
9 * Intel - initial API and implementation
10 *******************************************************************************/
11package org.yocto.sdk.ide.preferences;
12
13import java.util.HashSet;
14
15import org.eclipse.core.resources.IProject;
16import org.eclipse.core.resources.ResourcesPlugin;
17import org.eclipse.core.runtime.CoreException;
18import org.eclipse.jface.dialogs.Dialog;
19import org.eclipse.jface.dialogs.IDialogConstants;
20import org.eclipse.jface.dialogs.InputDialog;
21import org.eclipse.jface.dialogs.MessageDialog;
22import org.eclipse.jface.preference.IPreferenceStore;
23import org.eclipse.jface.preference.PreferencePage;
24import org.eclipse.swt.SWT;
25import org.eclipse.swt.layout.GridLayout;
26import org.eclipse.swt.widgets.Composite;
27import org.eclipse.swt.widgets.Control;
28import org.eclipse.swt.widgets.Event;
29import org.eclipse.swt.widgets.Listener;
30import org.eclipse.ui.IWorkbench;
31import org.eclipse.ui.IWorkbenchPreferencePage;
32import org.yocto.sdk.ide.YoctoProfileElement;
33import org.yocto.sdk.ide.YoctoProfileSetting;
34import org.yocto.sdk.ide.YoctoSDKChecker.SDKCheckRequestFrom;
35import org.yocto.sdk.ide.YoctoSDKChecker.SDKCheckResults;
36import org.yocto.sdk.ide.natures.YoctoSDKProjectNature;
37import org.yocto.sdk.ide.utils.ProjectPreferenceUtils;
38import org.yocto.sdk.ide.utils.YoctoSDKUtils;
39import org.yocto.sdk.ide.YoctoSDKMessages;
40import org.yocto.sdk.ide.YoctoSDKPlugin;
41import org.yocto.sdk.ide.YoctoUIElement;
42import org.yocto.sdk.ide.YoctoUISetting;
43
44public class YoctoSDKPreferencePage extends PreferencePage implements IWorkbenchPreferencePage {
45
46 private static final String NEW_DIALOG_TITLE = "Preferences.Profile.New.Dialog.Title";
47 private static final String NEW_DIALOG_MESSAGE = "Preferences.Profile.New.Dialog.Message";
48 private static final String UPDATE_DIALOG_TITLE = "Preferences.Profile.Update.Dialog.Title";
49 private static final String UPDATE_DIALOG_MESSAGE = "Preferences.Profile.Update.Dialog.Message";
50 private static final String REVALIDATION_MESSAGE = "Poky.SDK.Revalidation.Message";
51
52 private YoctoProfileSetting yoctoProfileSetting;
53 private YoctoUISetting yoctoUISetting;
54
55 private Listener changeListener;
56
57 public YoctoSDKPreferencePage() {
58 //super(GRID);
59 IPreferenceStore defaultStore = YoctoSDKPlugin.getDefault().getPreferenceStore();
60 String profiles = defaultStore.getString(PreferenceConstants.PROFILES);
61 String selectedProfile = defaultStore.getString(PreferenceConstants.SELECTED_PROFILE);
62
63 if (profiles.isEmpty()) {
64 profiles = defaultStore.getDefaultString(PreferenceConstants.PROFILES);
65 selectedProfile = defaultStore.getDefaultString(PreferenceConstants.SELECTED_PROFILE);
66 }
67
68 setPreferenceStore(YoctoSDKPlugin.getProfilePreferenceStore(selectedProfile));
69 //setDescription(YoctoSDKMessages.getString(PREFERENCES_Yocto_CONFIG));
70 YoctoUIElement elem = YoctoSDKUtils.getElemFromStore(getPreferenceStore());
71 this.yoctoUISetting = new YoctoUISetting(elem);
72
73 YoctoProfileElement profileElement = new YoctoProfileElement(profiles, selectedProfile);
74 this.yoctoProfileSetting = new YoctoProfileSetting(profileElement, this, true);
75
76 changeListener = new Listener() {
77 @Override
78 public void handleEvent(Event event) {
79 setErrorMessage(null);
80 setMessage(YoctoSDKMessages.getString(REVALIDATION_MESSAGE), INFORMATION);
81 }
82 };
83 }
84
85 /*
86 * @see IWorkbenchPreferencePage#init(IWorkbench)
87 */
88 public void init(IWorkbench workbench) {
89 }
90
91 protected Control createContents(Composite parent) {
92 initializeDialogUnits(parent);
93 final Composite composite= new Composite(parent, SWT.NONE);
94 composite.setLayout(new GridLayout(2, false));
95
96 yoctoProfileSetting.createComposite(composite);
97 yoctoUISetting.createComposite(composite);
98
99 composite.addListener(SWT.Modify, changeListener);
100 composite.addListener(SWT.Selection, changeListener);
101
102 SDKCheckResults result = yoctoUISetting.validateInput(SDKCheckRequestFrom.Preferences, false);
103 if (result != SDKCheckResults.SDK_PASS) {
104 }
105
106 Dialog.applyDialogFont(composite);
107 return composite;
108 }
109
110 /*
111 * @see IPreferencePage#performOk()
112 */
113 public boolean performOk() {
114 clearMessages();
115
116 SDKCheckResults result = yoctoUISetting.validateInput(SDKCheckRequestFrom.Preferences, false);
117 if (result != SDKCheckResults.SDK_PASS) {
118 setErrorMessage(result.getMessage());
119 return false;
120 }
121
122 YoctoUIElement savedElement = YoctoSDKUtils.getElemFromStore(getPreferenceStore());
123 YoctoUIElement modifiedElement = yoctoUISetting.getCurrentInput();
124
125 YoctoProfileElement savedProfileElement = YoctoSDKUtils.getProfilesFromDefaultStore();
126 YoctoProfileElement profileElement = yoctoProfileSetting.getCurrentInput();
127
128 if (savedElement.equals(modifiedElement) &&
129 profileElement.getSelectedProfile().equals(savedProfileElement.getSelectedProfile())) {
130 return true;
131 }
132
133 HashSet<IProject> yoctoProjects = getAffectedProjects(profileElement.getSelectedProfile());
134
135 if (!yoctoProjects.isEmpty()) {
136 boolean deleteConfirmed =
137 MessageDialog.openConfirm(null, YoctoSDKMessages.getString(UPDATE_DIALOG_TITLE),
138 YoctoSDKMessages.getFormattedString(UPDATE_DIALOG_MESSAGE, profileElement.getSelectedProfile()));
139
140 if (!deleteConfirmed) {
141 return false;
142 }
143 }
144
145 saveElemToStore(modifiedElement, getPreferenceStore());
146 YoctoSDKUtils.saveProfilesToDefaultStore(profileElement);
147
148 updateProjects(yoctoProjects, modifiedElement);
149
150 return super.performOk();
151 }
152
153 private void clearMessages() {
154 setErrorMessage(null);
155 setMessage(null);
156 setTitle(getTitle());
157 }
158
159 /*
160 * @see PreferencePage#performDefaults()
161 */
162 protected void performDefaults() {
163 YoctoUIElement defaultElement = YoctoSDKUtils.getDefaultElemFromDefaultStore();
164 yoctoUISetting.setCurrentInput(defaultElement);
165 super.performDefaults();
166 }
167
168 public void performSaveAs() {
169 YoctoProfileElement profileElement = yoctoProfileSetting.getCurrentInput();
170 YoctoUIElement uiElement = yoctoUISetting.getCurrentInput();
171
172 SDKCheckResults result = yoctoUISetting.validateInput(SDKCheckRequestFrom.Preferences, true);
173 if (result != SDKCheckResults.SDK_PASS) {
174 setErrorMessage(result.getMessage());
175 return;
176 }
177
178 InputDialog profileNameDialog =
179 new InputDialog(null,
180 YoctoSDKMessages.getString(NEW_DIALOG_TITLE),
181 YoctoSDKMessages.getString(NEW_DIALOG_MESSAGE),
182 null,
183 new ProfileNameInputValidator(profileElement));
184
185 int returnCode = profileNameDialog.open();
186 if (returnCode == IDialogConstants.CANCEL_ID) {
187 return;
188 }
189
190 profileElement.addProfile(profileNameDialog.getValue());
191 yoctoProfileSetting.addProfile(profileNameDialog.getValue());
192
193 yoctoUISetting.setCurrentInput(uiElement);
194 performOk();
195 }
196
197 public void switchProfile(String selectedProfile) {
198 setPreferenceStore(YoctoSDKPlugin.getProfilePreferenceStore(selectedProfile));
199 YoctoUIElement profileElement = YoctoSDKUtils.getElemFromStore(getPreferenceStore());
200 yoctoUISetting.setCurrentInput(profileElement);
201 }
202
203 public void renameProfile(String oldProfileName, String newProfileName) {
204 YoctoUIElement oldProfileElement = YoctoSDKUtils.getElemFromStore(YoctoSDKPlugin.getProfilePreferenceStore(oldProfileName));
205 saveElemToStore(oldProfileElement, YoctoSDKPlugin.getProfilePreferenceStore(newProfileName));
206
207 renameProfileInAffectedProjects(oldProfileName, newProfileName);
208 }
209
210 public void deleteProfile(String selectedProfile)
211 {
212 resetProfileInAffectedProjects(selectedProfile);
213 }
214
215 /* Save IDE wide POKY Preference settings to a specific preference store */
216 private void saveElemToStore(YoctoUIElement elem, IPreferenceStore store) {
217 store.setValue(PreferenceConstants.TARGET_ARCH_INDEX, elem.getIntTargetIndex());
218
219 if (elem.getEnumPokyMode() == YoctoUIElement.PokyMode.POKY_SDK_MODE) {
220 store.setValue(PreferenceConstants.SDK_MODE, IPreferenceStore.TRUE);
221 } else {
222 store.setValue(PreferenceConstants.SDK_MODE, IPreferenceStore.FALSE);
223 }
224 store.setValue(PreferenceConstants.QEMU_KERNEL, elem.getStrQemuKernelLoc());
225 store.setValue(PreferenceConstants.QEMU_OPTION, elem.getStrQemuOption());
226 store.setValue(PreferenceConstants.SYSROOT, elem.getStrSysrootLoc());
227 if (elem.getEnumDeviceMode() == YoctoUIElement.DeviceMode.QEMU_MODE) {
228 store.setValue(PreferenceConstants.TARGET_MODE, IPreferenceStore.TRUE);
229 } else {
230 store.setValue(PreferenceConstants.TARGET_MODE, IPreferenceStore.FALSE);
231 }
232 store.setValue(PreferenceConstants.TOOLCHAIN_ROOT, elem.getStrToolChainRoot());
233 store.setValue(PreferenceConstants.TOOLCHAIN_TRIPLET, elem.getStrTarget());
234 }
235
236 private void resetProfileInAffectedProjects(String usedProfile)
237 {
238 HashSet<IProject> yoctoProjects = getAffectedProjects(usedProfile);
239 YoctoProfileElement profileElement = YoctoSDKUtils.getProfilesFromDefaultStore();
240 profileElement.setSelectedProfile(PreferenceConstants.STANDARD_PROFILE_NAME);
241
242 for (IProject project : yoctoProjects)
243 {
244 ProjectPreferenceUtils.saveProfiles(profileElement, project);
245 YoctoUIElement elem = YoctoSDKUtils.getElemFromStore(
246 YoctoSDKPlugin.getProfilePreferenceStore(PreferenceConstants.STANDARD_PROFILE_NAME));
247 ProjectPreferenceUtils.saveElemToProjectEnv(elem, project);
248 }
249 }
250
251 private void renameProfileInAffectedProjects(String oldProfileName, String newProfileName) {
252 HashSet<IProject> yoctoProjects = getAffectedProjects(oldProfileName);
253 YoctoProfileElement profileElement = YoctoSDKUtils.getProfilesFromDefaultStore();
254 profileElement.setSelectedProfile(newProfileName);
255
256 for (IProject project : yoctoProjects)
257 {
258 ProjectPreferenceUtils.saveProfiles(profileElement, project);
259 }
260 }
261
262 private void updateProjects(HashSet<IProject> yoctoProjects, YoctoUIElement elem) {
263 for (IProject project : yoctoProjects)
264 {
265 ProjectPreferenceUtils.saveElemToProjectEnv(elem, project);
266 }
267 }
268
269 private HashSet<IProject> getAffectedProjects(String usedProfile)
270 {
271 HashSet<IProject> yoctoProjects = new HashSet<IProject>();
272
273 IProject[] projects = ResourcesPlugin.getWorkspace().getRoot().getProjects();
274
275 for (IProject project : projects)
276 {
277 try
278 {
279 if (!project.hasNature(YoctoSDKProjectNature.YoctoSDK_NATURE_ID)) {
280 continue;
281 }
282 } catch (CoreException e)
283 {
284 // project is closed or does not exist so don't update
285 continue;
286 }
287
288 if (!projectUsesProfile(project, usedProfile)) {
289 continue;
290 }
291
292 yoctoProjects.add(project);
293 }
294 return yoctoProjects;
295 }
296
297 private boolean projectUsesProfile(IProject project, String profile)
298 {
299 YoctoProfileElement profileElement = ProjectPreferenceUtils.getProfiles(project);
300
301 if (!profileElement.getSelectedProfile().equals(profile)) {
302 return false;
303 }
304
305 return true;
306 }
307}