⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 propertyandpreferencepage.java

📁 eclipseme的最新版本的source,欢迎j2me程序员使用
💻 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 + -