blob: e461d5597dd2597f32a951d0bf6306ad802e8a59 [file] [log] [blame]
/*
* 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) {
}
}