X-Git-Url: http://secure.phpeclipse.com diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/externaltools/variable/ResourceComponent.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/externaltools/variable/ResourceComponent.java new file mode 100644 index 0000000..9937f78 --- /dev/null +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/externaltools/variable/ResourceComponent.java @@ -0,0 +1,264 @@ +package net.sourceforge.phpdt.externaltools.variable; + +/********************************************************************** +Copyright (c) 2002 IBM Corp. and others. All rights reserved. +This file is made available under the terms of the Common Public License v1.0 +which accompanies this distribution, and is available at +http://www.eclipse.org/legal/cpl-v10.html + +Contributors: +**********************************************************************/ + +import org.eclipse.core.resources.IResource; +import org.eclipse.core.resources.ResourcesPlugin; +import org.eclipse.jface.dialogs.IMessageProvider; +import org.eclipse.jface.viewers.ISelectionChangedListener; +import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.jface.viewers.SelectionChangedEvent; +import org.eclipse.jface.viewers.StructuredSelection; +import org.eclipse.jface.viewers.TreeViewer; +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.Group; +import org.eclipse.swt.widgets.Tree; +import net.sourceforge.phpdt.externaltools.group.IGroupDialogPage; +import net.sourceforge.phpdt.externaltools.internal.model.ToolMessages; +import net.sourceforge.phpdt.externaltools.model.ToolUtil; +import org.eclipse.ui.model.WorkbenchContentProvider; +import org.eclipse.ui.model.WorkbenchLabelProvider; + +/** + * Visual component to edit the resource type variable + * value. + *
+ * This class is not intended to be extended by clients. + *
+ */ +public class ResourceComponent implements IVariableComponent { + private IGroupDialogPage page; + private boolean isValid = true; + + protected Group mainGroup; + protected Button selectedResourceButton; + protected Button specificResourceButton; + protected TreeViewer resourceList; + private IResource selectedResource; + + /** + * Creates the component + */ + public ResourceComponent() { + super(); + } + + /* (non-Javadoc) + * Method declared on IVariableComponent. + */ + public void createContents(Composite parent, String varTag, IGroupDialogPage page) { + this.page = page; + + // main composite + mainGroup = new Group(parent, SWT.NONE); + GridLayout layout = new GridLayout(); + layout.marginWidth = 0; + layout.marginHeight = 0; + layout.numColumns = 1; + GridData gridData = new GridData(GridData.FILL_BOTH); + mainGroup.setLayout(layout); + mainGroup.setLayoutData(gridData); + mainGroup.setFont(parent.getFont()); + mainGroup.setText(ToolUtil.buildVariableTag(varTag, null)); + + createSelectedResourceOption(); + createSpecificResourceOption(); + createResourceList(); + + updateResourceListEnablement(); + } + + /** + * Creates the list of resources. + */ + protected void createResourceList() { + Tree tree = new Tree(mainGroup, SWT.SINGLE | SWT.BORDER); + GridData data = new GridData(GridData.FILL_BOTH); + data.heightHint = tree.getItemHeight() * getInitialVisibleItemCount(); + tree.setLayoutData(data); + tree.setFont(mainGroup.getFont()); + + resourceList = new TreeViewer(tree); + resourceList.addSelectionChangedListener(new ISelectionChangedListener() { + public void selectionChanged(SelectionChangedEvent event) { + validateResourceListSelection(); + selectedResource= (IResource) ((IStructuredSelection)event.getSelection()).getFirstElement(); + } + }); + resourceList.setContentProvider(new WorkbenchContentProvider()); + resourceList.setLabelProvider(new WorkbenchLabelProvider()); + resourceList.setInput(ResourcesPlugin.getWorkspace().getRoot()); + } + + /** + * Creates the option button for using the selected + * resource. + */ + protected void createSelectedResourceOption() { + selectedResourceButton = new Button(mainGroup, SWT.RADIO); + selectedResourceButton.setText(ToolMessages.getString("ResourceComponent.selectedResLabel")); //$NON-NLS-1$ + GridData data = new GridData(GridData.HORIZONTAL_ALIGN_FILL); + selectedResourceButton.setLayoutData(data); + selectedResourceButton.setFont(mainGroup.getFont()); + selectedResourceButton.setSelection(true); + } + + /** + * Creates the option button for using a specific + * resource. + */ + protected void createSpecificResourceOption() { + specificResourceButton = new Button(mainGroup, SWT.RADIO); + specificResourceButton.setText(ToolMessages.getString("ResourceComponent.specificResLabel")); //$NON-NLS-1$ + GridData data = new GridData(GridData.HORIZONTAL_ALIGN_FILL); + specificResourceButton.setLayoutData(data); + specificResourceButton.setFont(mainGroup.getFont()); + specificResourceButton.setSelection(false); + + specificResourceButton.addSelectionListener(new SelectionAdapter() { + public void widgetSelected(SelectionEvent e) { + updateResourceListEnablement(); + } + }); + } + + /* (non-Javadoc) + * Method declared on IVariableComponent. + */ + public Control getControl() { + return mainGroup; + } + + /** + * Returns the dialog page this component is part of + */ + protected final IGroupDialogPage getPage() { + return page; + } + + /* (non-Javadoc) + * Method declared on IVariableComponent. + */ + public String getVariableValue() { + if (selectedResourceButton != null && selectedResourceButton.getSelection()) + return null; + + if (resourceList != null) { + if (selectedResource != null) + return selectedResource.getFullPath().toString(); + } + + return null; + } + + /** + * Returns the number of items to be visible in the + * resource list. This will determine the initial height. + */ + protected int getInitialVisibleItemCount() { + return 10; + } + + /* (non-Javadoc) + * Method declared on IVariableComponent. + */ + public boolean isValid() { + return isValid; + } + + /** + * Sets whether the component's values are all valid. + * Updates the components's page valid state. No action + * taken if new valid state same as current one. + * + * @param isValidtrue
if all values valid,
+ * false
otherwise
+ */
+ protected final void setIsValid(boolean isValid) {
+ if (this.isValid != isValid) {
+ this.isValid = isValid;
+ this.page.updateValidState();
+ }
+ }
+
+ /**
+ * Updates the enablement of the resource list if needed
+ */
+ protected void updateResourceListEnablement() {
+ if (specificResourceButton != null && resourceList != null)
+ resourceList.getTree().setEnabled(specificResourceButton.getSelection());
+ }
+
+ /* (non-Javadoc)
+ * Method declared on IVariableComponent.
+ */
+ public void setVariableValue(String varValue) {
+ if (varValue == null || varValue.length() == 0) {
+ if (selectedResourceButton != null)
+ selectedResourceButton.setSelection(true);
+ if (specificResourceButton != null)
+ specificResourceButton.setSelection(false);
+ if (resourceList != null)
+ resourceList.getTree().setEnabled(false);
+ } else {
+ if (selectedResourceButton != null)
+ selectedResourceButton.setSelection(false);
+ if (specificResourceButton != null)
+ specificResourceButton.setSelection(true);
+ if (resourceList != null) {
+ resourceList.getTree().setEnabled(true);
+ IResource member = ResourcesPlugin.getWorkspace().getRoot().findMember(varValue);
+ if (member != null)
+ resourceList.setSelection(new StructuredSelection(member), true);
+ else
+ resourceList.setSelection(StructuredSelection.EMPTY);
+ }
+ }
+ }
+
+ /* (non-Javadoc)
+ * Method declared on IVariableComponent.
+ */
+ public void validate() {
+ if (specificResourceButton != null && specificResourceButton.getSelection()) {
+ validateResourceListSelection();
+ }
+
+ getPage().setMessage(null, IMessageProvider.NONE);
+ setIsValid(true);
+ }
+
+ /**
+ * Returns whether that the resource list selection is valid.
+ * If the list was not created, returns true
.
+ *
+ * @return true
to continue validating other
+ * fields, false
to stop.
+ */
+ protected boolean validateResourceListSelection() {
+ if (resourceList == null)
+ return true;
+
+ if (resourceList.getSelection().isEmpty()) {
+ getPage().setMessage(ToolMessages.getString("ResourceComponent.selectionRequired"), IMessageProvider.WARNING); //$NON-NLS-1$
+ setIsValid(false);
+ return false;
+ }
+
+ return true;
+ }
+}