| /* |
| * Copyright (C) 2012 The Android Open Source Project |
| * |
| * Licensed under the Eclipse Public License, Version 1.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.eclipse.org/org/documents/epl-v10.php |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| package com.android.ide.eclipse.adt.internal.wizards.templates; |
| |
| import org.eclipse.jface.dialogs.IMessageProvider; |
| import org.eclipse.jface.wizard.WizardPage; |
| import org.eclipse.swt.SWT; |
| import org.eclipse.swt.events.ModifyEvent; |
| import org.eclipse.swt.events.ModifyListener; |
| import org.eclipse.swt.events.SelectionEvent; |
| import org.eclipse.swt.events.SelectionListener; |
| 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.DirectoryDialog; |
| import org.eclipse.swt.widgets.Label; |
| import org.eclipse.swt.widgets.Text; |
| |
| import java.io.File; |
| |
| /** For template developers: Test local template directory */ |
| public class TemplateTestPage extends WizardPage |
| implements SelectionListener, ModifyListener { |
| private Text mLocation; |
| private Button mButton; |
| private static String sLocation; // Persist between repeated invocations |
| private Button mProjectToggle; |
| private File mTemplate; |
| |
| TemplateTestPage() { |
| super("testWizardPage"); //$NON-NLS-1$ |
| setTitle("Wizard Tester"); |
| setDescription("Test a new template"); |
| } |
| |
| @SuppressWarnings("unused") // SWT constructors have side effects and aren't unused |
| @Override |
| public void createControl(Composite parent) { |
| Composite container = new Composite(parent, SWT.NULL); |
| setControl(container); |
| container.setLayout(new GridLayout(3, false)); |
| |
| Label label = new Label(container, SWT.NONE); |
| label.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1)); |
| label.setText("Template Location:"); |
| |
| mLocation = new Text(container, SWT.BORDER); |
| GridData gd_mLocation = new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1); |
| gd_mLocation.widthHint = 400; |
| mLocation.setLayoutData(gd_mLocation); |
| if (sLocation != null) { |
| mLocation.setText(sLocation); |
| } |
| mLocation.addModifyListener(this); |
| |
| mButton = new Button(container, SWT.FLAT); |
| mButton.setText("..."); |
| |
| mProjectToggle = new Button(container, SWT.CHECK); |
| mProjectToggle.setEnabled(false); |
| mProjectToggle.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 2, 1)); |
| mProjectToggle.setText("Full project template"); |
| new Label(container, SWT.NONE); |
| mButton.addSelectionListener(this); |
| } |
| |
| @Override |
| public void setVisible(boolean visible) { |
| super.setVisible(visible); |
| validatePage(); |
| } |
| |
| private boolean validatePage() { |
| String error = null; |
| |
| String path = mLocation.getText().trim(); |
| if (path == null || path.length() == 0) { |
| error = "Select a template directory"; |
| mTemplate = null; |
| } else { |
| mTemplate = new File(path); |
| if (!mTemplate.exists()) { |
| error = String.format("%1$s does not exist", path); |
| } else { |
| // Preserve across wizard sessions |
| sLocation = path; |
| |
| if (mTemplate.isDirectory()) { |
| if (!new File(mTemplate, TemplateHandler.TEMPLATE_XML).exists()) { |
| error = String.format("Not a template: missing template.xml file in %1$s ", |
| path); |
| } |
| } else { |
| if (mTemplate.getName().equals(TemplateHandler.TEMPLATE_XML)) { |
| mTemplate = mTemplate.getParentFile(); |
| } else { |
| error = String.format("Select a directory containing a template"); |
| } |
| } |
| } |
| } |
| |
| setPageComplete(error == null); |
| if (error != null) { |
| setMessage(error, IMessageProvider.ERROR); |
| } else { |
| setErrorMessage(null); |
| setMessage(null); |
| } |
| |
| return error == null; |
| } |
| |
| @Override |
| public void modifyText(ModifyEvent e) { |
| validatePage(); |
| } |
| |
| @Override |
| public void widgetSelected(SelectionEvent e) { |
| if (e.getSource() == mButton) { |
| DirectoryDialog dialog = new DirectoryDialog(mButton.getShell(), SWT.OPEN); |
| String path = mLocation.getText().trim(); |
| if (path.length() > 0) { |
| dialog.setFilterPath(path); |
| } |
| String file = dialog.open(); |
| if (file != null) { |
| mLocation.setText(file); |
| } |
| } |
| |
| validatePage(); |
| } |
| |
| File getLocation() { |
| return mTemplate; |
| } |
| |
| boolean isProjectTemplate() { |
| return mProjectToggle.getSelection(); |
| } |
| |
| @Override |
| public void widgetDefaultSelected(SelectionEvent e) { |
| } |
| } |