📄 propertyandpreferencepage.java
字号:
/*
* Copyright (c) 2003-2005 Craig Setera
* All Rights Reserved.
* Licensed under the Eclipse Public License - v 1.0
* For more information see http://www.eclipse.org/legal/epl-v10.html
* Signature support added 2004 by Kevin Hunter
*/
package eclipseme.ui.internal.properties;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.preference.PreferencePage;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
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.Control;
import org.eclipse.swt.widgets.Label;
import org.eclipse.ui.IWorkbenchPropertyPage;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.dialogs.PropertyPage;
import eclipseme.core.IEclipseMECoreConstants;
import eclipseme.core.internal.EclipseMECorePlugin;
import eclipseme.ui.internal.EclipseMEUIPlugin;
import eclipseme.ui.internal.IEmbeddableWorkbenchPreferencePage;
/**
* Property page implementation that allows a preference page to be embedded
* within the property page. Provides access to a project-specific preference
* store that can be used by the preference page for storing project-specific
* preferences.
* <p />
* Copyright (c) 2003-2005 Craig Setera<br>
* All Rights Reserved.<br>
* Licensed under the Eclipse Public License - v 1.0<p/>
* <br>
* $Revision: 1.3 $
* <br>
* $Date: 2006/11/12 01:10:48 $
* <br>
* @author Craig Setera
* @see PropertyPage
*/
public abstract class PropertyAndPreferencePage
extends PropertyPage
implements IWorkbenchPropertyPage
{
protected PreferencePage preferencePage;
protected Button projectSpecificSettings;
/**
* Default constructor.
*/
public PropertyAndPreferencePage()
{
}
/**
* @see org.eclipse.jface.preference.PreferencePage#createContents(org.eclipse.swt.widgets.Composite)
*/
protected Control createContents(Composite parent)
{
PlatformUI.getWorkbench().getHelpSystem().setHelp(parent, "eclipseme.ui.help_J2MEProjectPropertiesPage");
Composite composite = new Composite(parent, SWT.NONE);
composite.setLayout(new GridLayout());
createProjectSpecificControls(composite);
embedPreferencePage(composite);
initializeState();
return composite;
}
/**
* Returns <code>true</code> if the page data is currently valid.
* @see org.eclipse.jface.preference.IPreferencePage#isValid()
*/
public boolean isValid() {
boolean isValid = true;
if (projectSpecificSettings.getSelection()) {
isValid = preferencePage.isValid();
}
return isValid;
}
/**
* @see org.eclipse.jface.preference.PreferencePage#performApply()
*/
protected void performApply() {
storeProjectSpecificSettingsValue();
((IEmbeddableWorkbenchPreferencePage) preferencePage).performApply();
}
/**
* @see org.eclipse.jface.preference.PreferencePage#performCancel()
*/
public boolean performCancel() {
return preferencePage.performCancel() && super.performCancel();
}
/**
* @see org.eclipse.jface.preference.PreferencePage#performDefaults()
*/
protected void performDefaults() {
boolean defaultValue = false;
((IEmbeddableWorkbenchPreferencePage) preferencePage).performDefaults();
projectSpecificSettings.setSelection(defaultValue);
updateEmbeddedEnablement(defaultValue);
}
/**
* @see org.eclipse.jface.preference.IPreferencePage#performOk()
*/
public boolean performOk() {
storeProjectSpecificSettingsValue();
return preferencePage.performOk() && super.performOk();
}
/**
* @see org.eclipse.jface.preference.PreferencePage#doGetPreferenceStore()
*/
protected IPreferenceStore doGetPreferenceStore() {
return EclipseMEUIPlugin.getCoreProjectPreferenceStore(getProject());
}
/**
* Embed a preference page into the parent composite, setting things
* up correctly as we go along.
*
* @param composite
*/
protected abstract void embedPreferencePage(Composite composite);
/**
* Return a boolean indicating whether or not there are project-specific
* properties.
*
* @return
*/
protected boolean hasProjectSpecificProperties()
{
String key = getProjectSpecificSettingsKey();
IPreferenceStore store = getPreferenceStore();
return store.getBoolean(key);
}
/**
* Initialize the state of the various controls.
*/
protected void initializeState() {
boolean readOnly = isReadOnly();
boolean useProjectSettings = hasProjectSpecificProperties();
projectSpecificSettings.setSelection(useProjectSettings);
projectSpecificSettings.setEnabled(!readOnly);
updateEmbeddedEnablement(!readOnly && useProjectSettings);
}
/**
* Return a boolean indicating whether the project being edited
* is preprocessed output.
*
* @return
*/
protected boolean isPreprocessedOutputProject() {
boolean preprocessed = false;
try {
preprocessed = getProject().hasNature(IEclipseMECoreConstants.J2ME_PREPROCESSED_NATURE_ID);
} catch (CoreException e) {
EclipseMECorePlugin.log(IStatus.WARNING, e);
}
return preprocessed;
}
/**
* Return a boolean indicating whether this page should be read-only.
*
* @return
*/
protected abstract boolean isReadOnly();
/**
* Get the selected project or <code>null</code>
* if a project is not selected.
*
* @return
*/
protected IProject getProject() {
IProject project = null;
IAdaptable adaptable = getElement();
if (adaptable instanceof IProject) {
project = (IProject) adaptable;
} else if (adaptable instanceof IJavaProject) {
project = ((IJavaProject) adaptable).getProject();
}
return project;
}
/**
* Return the key under which the project specific settings boolean
* is stored in the properties/preferences.
*
* @return
*/
protected abstract String getProjectSpecificSettingsKey();
/**
* Recursively enable the specified control.
*
* @param control
* @param enabled
*/
private void recursivelySetEnablement(Control control, boolean enabled) {
if (control instanceof Composite) {
Control[] children = ((Composite) control).getChildren();
for (int i = 0; i < children.length; i++) {
recursivelySetEnablement(children[i], enabled);
}
}
control.setEnabled(enabled);
}
/**
* Store the current value of the project specific settings into the
* preference store.
*/
private void storeProjectSpecificSettingsValue() {
getPreferenceStore().setValue(
getProjectSpecificSettingsKey(),
projectSpecificSettings.getSelection());
}
/**
* Update the enablement of the embedded componentry.
*
* @param enabled
*/
protected void updateEmbeddedEnablement(boolean enabled) {
recursivelySetEnablement(preferencePage.getControl(), enabled);
}
/**
* Create the controls for project specific setting enablement and disablement.
*
* @param composite
*/
protected void createProjectSpecificControls(Composite composite) {
projectSpecificSettings = new Button(composite, SWT.CHECK);
projectSpecificSettings.setText("Enable project specific settings");
projectSpecificSettings.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
boolean useProjectSpecificSettings = projectSpecificSettings.getSelection();
if (!useProjectSpecificSettings) {
((IEmbeddableWorkbenchPreferencePage) preferencePage).performDefaults();
}
updateEmbeddedEnablement(useProjectSpecificSettings);
}
});
Label horizontalLine = new Label(composite, SWT.SEPARATOR | SWT.HORIZONTAL);
horizontalLine.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -