/* * Copyright (c) 2017 wetransform GmbH * * All rights reserved. This program and the accompanying materials are made * available under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation, either version 3 of the License, * or (at your option) any later version. * * You should have received a copy of the GNU Lesser General Public License * along with this distribution. If not, see <http://www.gnu.org/licenses/>. * * Contributors: * wetransform GmbH <http://www.wetransform.to> */ package eu.esdihumboldt.hale.ui.io.project; import org.eclipse.core.runtime.content.IContentType; import org.eclipse.jface.dialogs.DialogPage; import org.eclipse.jface.layout.GridDataFactory; import org.eclipse.jface.preference.StringFieldEditor; import org.eclipse.jface.util.IPropertyChangeListener; import org.eclipse.jface.util.PropertyChangeEvent; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Text; import eu.esdihumboldt.hale.common.core.io.IOProvider; import eu.esdihumboldt.hale.common.core.io.extension.IOProviderDescriptor; import eu.esdihumboldt.hale.common.core.io.project.ProjectInfo; import eu.esdihumboldt.hale.common.core.io.project.ProjectWriter; import eu.esdihumboldt.hale.common.core.io.project.model.Project; import eu.esdihumboldt.hale.ui.HaleWizardPage; import eu.esdihumboldt.hale.ui.io.ExportWizard; import eu.esdihumboldt.hale.ui.io.IOWizardListener; import eu.esdihumboldt.hale.ui.io.IOWizardPage; /** * Wizard page that allows changing project name and author. * * @author Simon Templer * @partner 01 / Fraunhofer Institute for Computer Graphics Research */ public abstract class AbstractProjectDetailsPage<P extends ProjectWriter, E extends ExportWizard<P>> extends IOWizardPage<P, E> { private StringFieldEditor name; private StringFieldEditor author; private Text description; /** * Default constructor */ public AbstractProjectDetailsPage(String pageName) { super(pageName); } /** * @see HaleWizardPage#createContent(Composite) */ @Override protected void createContent(Composite page) { page.setLayout(new GridLayout(2, false)); // name name = new StringFieldEditor("name", "Project name:", page); name.setEmptyStringAllowed(false); name.setValidateStrategy(StringFieldEditor.VALIDATE_ON_KEY_STROKE); name.setErrorMessage("The project name must be specified."); name.setPage(this); // author author = new StringFieldEditor("author", "Project author:", page); author.setEmptyStringAllowed(false); author.setValidateStrategy(StringFieldEditor.VALIDATE_ON_KEY_STROKE); author.setPage(this); // description Label descLabel = new Label(page, SWT.NONE); descLabel.setText("Description:"); descLabel.setLayoutData( GridDataFactory.swtDefaults().align(SWT.BEGINNING, SWT.BEGINNING).create()); description = new Text(page, SWT.MULTI | SWT.WRAP | SWT.V_SCROLL | SWT.BORDER); description.setLayoutData( GridDataFactory.fillDefaults().grab(true, true).hint(500, SWT.DEFAULT).create()); // listen for state changes on field editors IPropertyChangeListener stateListener = new IPropertyChangeListener() { @Override public void propertyChange(PropertyChangeEvent event) { if (event.getProperty().equals(StringFieldEditor.IS_VALID)) { updateState(); } } }; name.setPropertyChangeListener(stateListener); author.setPropertyChangeListener(stateListener); // listen for provider changes getWizard().addIOWizardListener(new IOWizardListener<P, E>() { @Override public void providerDescriptorChanged(IOProviderDescriptor providerFactory) { // update fields as the provider will have changed updateFields(); } @Override public void contentTypeChanged(IContentType contentType) { // ignore } }); updateState(); updateFields(); } /** * @see DialogPage#setVisible(boolean) */ @Override public void setVisible(boolean visible) { super.setVisible(visible); name.setFocus(); if (!name.isValid()) { name.showErrorMessage(); } } private void updateFields() { ProjectWriter writer = getWizard().getProvider(); if (writer != null && writer.getProject() != null) { ProjectInfo p = writer.getProject(); name.setStringValue(p.getName()); author.setStringValue(p.getAuthor()); description.setText((p.getDescription() == null) ? ("") : (p.getDescription())); } else { name.setStringValue(""); author.setStringValue(""); description.setText(""); } } private void updateState() { setPageComplete(name.isValid() && author.isValid()); } /** * @see IOWizardPage#updateConfiguration(IOProvider) */ @Override public boolean updateConfiguration(ProjectWriter provider) { Project p = provider.getProject(); if (p != null) { p.setName(name.getStringValue()); p.setAuthor(author.getStringValue()); p.setDescription((description.getText().isEmpty()) ? (null) : (description.getText())); return true; } return false; } }