1 package net.sourceforge.phpdt.externaltools.variable;
3 /**********************************************************************
4 Copyright (c) 2002 IBM Corp. and others. All rights reserved.
5 This file is made available under the terms of the Common Public License v1.0
6 which accompanies this distribution, and is available at
7 http://www.eclipse.org/legal/cpl-v10.html
10 **********************************************************************/
12 import net.sourceforge.phpdt.externaltools.group.IGroupDialogPage;
13 import net.sourceforge.phpdt.externaltools.internal.model.ExternalToolsModelMessages;
14 import net.sourceforge.phpdt.externaltools.model.ToolUtil;
16 import org.eclipse.core.resources.IResource;
17 import org.eclipse.core.resources.ResourcesPlugin;
18 import org.eclipse.jface.dialogs.IMessageProvider;
19 import org.eclipse.jface.viewers.ISelectionChangedListener;
20 import org.eclipse.jface.viewers.IStructuredSelection;
21 import org.eclipse.jface.viewers.SelectionChangedEvent;
22 import org.eclipse.jface.viewers.StructuredSelection;
23 import org.eclipse.jface.viewers.TreeViewer;
24 import org.eclipse.swt.SWT;
25 import org.eclipse.swt.events.SelectionAdapter;
26 import org.eclipse.swt.events.SelectionEvent;
27 import org.eclipse.swt.layout.GridData;
28 import org.eclipse.swt.layout.GridLayout;
29 import org.eclipse.swt.widgets.Button;
30 import org.eclipse.swt.widgets.Composite;
31 import org.eclipse.swt.widgets.Control;
32 import org.eclipse.swt.widgets.Group;
33 import org.eclipse.swt.widgets.Tree;
34 import org.eclipse.ui.model.WorkbenchContentProvider;
35 import org.eclipse.ui.model.WorkbenchLabelProvider;
38 * Visual component to edit the resource type variable
41 * This class is not intended to be extended by clients.
44 public class ResourceComponent implements IVariableComponent {
45 private IGroupDialogPage page;
46 private boolean isValid = true;
48 protected Group mainGroup;
49 protected Button selectedResourceButton;
50 protected Button specificResourceButton;
51 protected TreeViewer resourceList;
52 private IResource selectedResource;
55 * Creates the component
57 public ResourceComponent() {
62 * Method declared on IVariableComponent.
64 public void createContents(Composite parent, String varTag, IGroupDialogPage page) {
68 mainGroup = new Group(parent, SWT.NONE);
69 GridLayout layout = new GridLayout();
70 layout.marginWidth = 0;
71 layout.marginHeight = 0;
72 layout.numColumns = 1;
73 GridData gridData = new GridData(GridData.FILL_BOTH);
74 mainGroup.setLayout(layout);
75 mainGroup.setLayoutData(gridData);
76 mainGroup.setFont(parent.getFont());
77 mainGroup.setText(ToolUtil.buildVariableTag(varTag, null));
79 createSelectedResourceOption();
80 createSpecificResourceOption();
83 updateResourceListEnablement();
87 * Creates the list of resources.
89 protected void createResourceList() {
90 Tree tree = new Tree(mainGroup, SWT.SINGLE | SWT.BORDER);
91 GridData data = new GridData(GridData.FILL_BOTH);
92 data.heightHint = tree.getItemHeight() * getInitialVisibleItemCount();
93 tree.setLayoutData(data);
94 tree.setFont(mainGroup.getFont());
96 resourceList = new TreeViewer(tree);
97 resourceList.addSelectionChangedListener(new ISelectionChangedListener() {
98 public void selectionChanged(SelectionChangedEvent event) {
99 validateResourceListSelection();
100 selectedResource= (IResource) ((IStructuredSelection)event.getSelection()).getFirstElement();
103 resourceList.setContentProvider(new WorkbenchContentProvider());
104 resourceList.setLabelProvider(new WorkbenchLabelProvider());
105 resourceList.setInput(ResourcesPlugin.getWorkspace().getRoot());
109 * Creates the option button for using the selected
112 protected void createSelectedResourceOption() {
113 selectedResourceButton = new Button(mainGroup, SWT.RADIO);
114 selectedResourceButton.setText(ExternalToolsModelMessages.getString("ResourceComponent.selectedResLabel")); //$NON-NLS-1$
115 GridData data = new GridData(GridData.HORIZONTAL_ALIGN_FILL);
116 selectedResourceButton.setLayoutData(data);
117 selectedResourceButton.setFont(mainGroup.getFont());
118 selectedResourceButton.setSelection(true);
122 * Creates the option button for using a specific
125 protected void createSpecificResourceOption() {
126 specificResourceButton = new Button(mainGroup, SWT.RADIO);
127 specificResourceButton.setText(ExternalToolsModelMessages.getString("ResourceComponent.specificResLabel")); //$NON-NLS-1$
128 GridData data = new GridData(GridData.HORIZONTAL_ALIGN_FILL);
129 specificResourceButton.setLayoutData(data);
130 specificResourceButton.setFont(mainGroup.getFont());
131 specificResourceButton.setSelection(false);
133 specificResourceButton.addSelectionListener(new SelectionAdapter() {
134 public void widgetSelected(SelectionEvent e) {
135 updateResourceListEnablement();
141 * Method declared on IVariableComponent.
143 public Control getControl() {
148 * Returns the dialog page this component is part of
150 protected final IGroupDialogPage getPage() {
155 * Method declared on IVariableComponent.
157 public String getVariableValue() {
158 if (selectedResourceButton != null && selectedResourceButton.getSelection())
161 if (resourceList != null) {
162 if (selectedResource != null)
163 return selectedResource.getFullPath().toString();
170 * Returns the number of items to be visible in the
171 * resource list. This will determine the initial height.
173 protected int getInitialVisibleItemCount() {
178 * Method declared on IVariableComponent.
180 public boolean isValid() {
185 * Sets whether the component's values are all valid.
186 * Updates the components's page valid state. No action
187 * taken if new valid state same as current one.
189 * @param isValid <code>true</code> if all values valid,
190 * <code>false</code> otherwise
192 protected final void setIsValid(boolean isValid) {
193 if (this.isValid != isValid) {
194 this.isValid = isValid;
195 this.page.updateValidState();
200 * Updates the enablement of the resource list if needed
202 protected void updateResourceListEnablement() {
203 if (specificResourceButton != null && resourceList != null)
204 resourceList.getTree().setEnabled(specificResourceButton.getSelection());
208 * Method declared on IVariableComponent.
210 public void setVariableValue(String varValue) {
211 if (varValue == null || varValue.length() == 0) {
212 if (selectedResourceButton != null)
213 selectedResourceButton.setSelection(true);
214 if (specificResourceButton != null)
215 specificResourceButton.setSelection(false);
216 if (resourceList != null)
217 resourceList.getTree().setEnabled(false);
219 if (selectedResourceButton != null)
220 selectedResourceButton.setSelection(false);
221 if (specificResourceButton != null)
222 specificResourceButton.setSelection(true);
223 if (resourceList != null) {
224 resourceList.getTree().setEnabled(true);
225 IResource member = ResourcesPlugin.getWorkspace().getRoot().findMember(varValue);
227 resourceList.setSelection(new StructuredSelection(member), true);
229 resourceList.setSelection(StructuredSelection.EMPTY);
235 * Method declared on IVariableComponent.
237 public void validate() {
238 if (specificResourceButton != null && specificResourceButton.getSelection()) {
239 validateResourceListSelection();
242 getPage().setMessage(null, IMessageProvider.NONE);
247 * Returns whether that the resource list selection is valid.
248 * If the list was not created, returns <code>true</code>.
250 * @return <code>true</code> to continue validating other
251 * fields, <code>false</code> to stop.
253 protected boolean validateResourceListSelection() {
254 if (resourceList == null)
257 if (resourceList.getSelection().isEmpty()) {
258 getPage().setMessage(ExternalToolsModelMessages.getString("ResourceComponent.selectionRequired"), IMessageProvider.WARNING); //$NON-NLS-1$