summaryrefslogtreecommitdiffstats
path: root/org.rtems.cdt.toolchain2/org/rtems/cdt/properties/PropertyPage.java
blob: 11b50183c8f77fa0e4e36be759b2dad0d57e6b0a (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
/*
 * Copyright (c) 2008
 * Embedded Brains GmbH
 * Obere Lagerstr. 30
 * D-82178 Puchheim
 * Germany
 * rtems@embedded-brains.de
 *
 * The license and distribution terms for this file may be found in the file
 * LICENSE in this distribution or at http://www.rtems.com/license/LICENSE.
 */

package org.rtems.cdt.properties;

import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.jface.preference.DirectoryFieldEditor;
import org.eclipse.jface.preference.FieldEditorPreferencePage;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.ui.IWorkbenchPropertyPage;
import org.eclipse.cdt.core.model.ICElement;
import org.rtems.cdt.Activator;
import org.rtems.cdt.Constants;
import org.rtems.cdt.Storage;
import org.rtems.cdt.VolatilePreferenceStore;

public class PropertyPage extends FieldEditorPreferencePage implements IWorkbenchPropertyPage {
	private IAdaptable mElement;
	
	private IPreferenceStore mStore;
	
	private IProject mProject;
	
	public PropertyPage() {
		super( GRID);

		// Store properties in a volatile preference store
		mStore = new VolatilePreferenceStore();
		setPreferenceStore( mStore);
		
		setDescription( "You can change the RTEMS base installation path and the board support package (BSP) installation path.  This affects only the current project.");
	}
	
	private void setupStoreValue( IPreferenceStore defaultStore, String key) {
		mStore.setDefault( key, defaultStore.getString( key));
		mStore.setValue( key, Storage.getProperty( mProject, key));
	}
	
	protected void createFieldEditors() {
		// Get current project
		mProject = ((IResource) getElement().getAdapter( IResource.class)).getProject();
		if (mProject == null) {
			mProject = ((ICElement) getElement().getAdapter( ICElement.class)).getCProject().getProject();
		}
		
		// Get the default values from the current workbench preferences
		IPreferenceStore store = Activator.getDefault().getPreferenceStore();
		
		// Setup store values
		setupStoreValue( store, Constants.BASE_PATH_KEY);
		setupStoreValue( store, Constants.BSP_PATH_KEY);

		// Add field editors
		addField(
			new DirectoryFieldEditor(
				Constants.BASE_PATH_KEY,
				"Base path:",
				getFieldEditorParent()
			)
		);
		addField(
			new DirectoryFieldEditor(
				Constants.BSP_PATH_KEY,
				"BSP path:",
				getFieldEditorParent()
			)
		);
	}
	
	private void setProperty( String key) {
		Storage.setProperty( mProject, key, mStore.getString( key));
	}
	
	public boolean performOk() {
		super.performOk();
		
		// Set the new properties
		setProperty( Constants.BASE_PATH_KEY);
		setProperty( Constants.BSP_PATH_KEY);
		
		// Update tools
		Storage.updateTools( mProject);

		return true;
	}

	public IAdaptable getElement() {
		return mElement;
	}

	public void setElement( IAdaptable element) {
		this.mElement = element;
	}
}