/******************************************************************************* * Copyright (c) 2012, 2016, 2017 PDT Extension Group and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * PDT Extension Group - initial API and implementation * Kaloyan Raev - [501269] externalize strings *******************************************************************************/ package org.eclipse.php.composer.ui.editor.composer; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import org.eclipse.jface.fieldassist.*; import org.eclipse.osgi.util.NLS; import org.eclipse.php.composer.api.ComposerConstants; import org.eclipse.php.composer.ui.converter.Keywords2StringConverter; import org.eclipse.php.composer.ui.converter.License2StringConverter; import org.eclipse.php.composer.ui.converter.String2KeywordsConverter; import org.eclipse.php.composer.ui.converter.String2LicenseConverter; import org.eclipse.php.composer.ui.editor.*; import org.eclipse.php.composer.ui.parts.ComboFormEntry; import org.eclipse.php.composer.ui.parts.FormEntry; import org.eclipse.php.composer.ui.parts.WeblinkFormEntry; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Composite; import org.eclipse.ui.forms.widgets.FormToolkit; import org.eclipse.ui.forms.widgets.Section; import org.eclipse.ui.forms.widgets.TableWrapData; public class GeneralSection extends ComposerSection { private FormEntry nameEntry; private FormEntry descriptionEntry; private FormEntry typeEntry; private FormEntry keywordsEntry; private FormEntry homepageEntry; private FormEntry licenseEntry; private ComboFormEntry minimumStabilityEntry; public GeneralSection(ComposerFormPage page, Composite parent) { super(page, parent, Section.DESCRIPTION); createClient(getSection(), page.getManagedForm().getToolkit()); } @Override protected void createClient(Section section, FormToolkit toolkit) { section.setText(Messages.GeneralSection_Title); section.setDescription(Messages.GeneralSection_Description); section.setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB)); Composite client = toolkit.createComposite(section); client.setLayout(FormLayoutFactory.createSectionClientTableWrapLayout(false, 2)); section.setClient(client); createNameEntry(client, toolkit); createDescriptionEntry(client, toolkit); createTypeEntry(client, toolkit); createKeywordsEntry(client, toolkit); createHomepageEntry(client, toolkit); createLicenseEntry(client, toolkit); createStabilityEntry(client, toolkit); } @Override public void setEnabled(boolean enabled) { super.setEnabled(enabled); nameEntry.setEnabled(enabled); descriptionEntry.setEnabled(enabled); typeEntry.setEnabled(enabled); keywordsEntry.setEnabled(enabled); homepageEntry.setEnabled(enabled); licenseEntry.setEnabled(enabled); minimumStabilityEntry.setEditable(enabled); } private void createNameEntry(Composite client, FormToolkit toolkit) { nameEntry = new FormEntry(client, toolkit, Messages.GeneralSection_NameLabel, null, false); nameEntry.setValue(composerPackage.getName(), true); nameEntry.addFormEntryListener(new FormEntryAdapter() { public void textValueChanged(FormEntry entry) { composerPackage.set("name", entry.getValue()); //$NON-NLS-1$ } }); composerPackage.addPropertyChangeListener("name", new PropertyChangeListener() { //$NON-NLS-1$ public void propertyChange(PropertyChangeEvent e) { nameEntry.setValue(composerPackage.getName(), true); } }); } private void createDescriptionEntry(Composite client, FormToolkit toolkit) { descriptionEntry = new FormEntry(client, toolkit, Messages.GeneralSection_DescriptionLabel, null, false); descriptionEntry.setValue(composerPackage.getDescription(), true); descriptionEntry.addFormEntryListener(new FormEntryAdapter() { public void textValueChanged(FormEntry entry) { composerPackage.set("description", entry.getValue()); //$NON-NLS-1$ } }); composerPackage.addPropertyChangeListener("description", new PropertyChangeListener() { //$NON-NLS-1$ public void propertyChange(PropertyChangeEvent e) { descriptionEntry.setValue(composerPackage.getDescription(), true); } }); } private void createTypeEntry(Composite client, FormToolkit toolkit) { typeEntry = new FormEntry(client, toolkit, Messages.GeneralSection_TypeLabel, null, false); typeEntry.setValue(composerPackage.getType(), true); ControlDecoration decoration = new ControlDecoration(typeEntry.getText(), SWT.TOP | SWT.LEFT); FieldDecoration indicator = FieldDecorationRegistry.getDefault() .getFieldDecoration(FieldDecorationRegistry.DEC_CONTENT_PROPOSAL); decoration.setImage(indicator.getImage()); decoration.setDescriptionText( NLS.bind(Messages.GeneralSection_ContentAssistDecorationText, indicator.getDescription())); decoration.setShowOnlyOnFocus(true); new AutoCompleteField(typeEntry.getText(), new TextContentAdapter(), ComposerConstants.TYPES); typeEntry.addFormEntryListener(new FormEntryAdapter() { public void textValueChanged(FormEntry entry) { composerPackage.set("type", entry.getValue()); //$NON-NLS-1$ } }); composerPackage.addPropertyChangeListener("type", new PropertyChangeListener() { //$NON-NLS-1$ public void propertyChange(PropertyChangeEvent e) { typeEntry.setValue(composerPackage.getType(), true); } }); } private void createKeywordsEntry(Composite client, FormToolkit toolkit) { keywordsEntry = new FormEntry(client, toolkit, Messages.GeneralSection_KeywordsLabel, null, false); final Keywords2StringConverter converter = new Keywords2StringConverter(); keywordsEntry.setValue(converter.convert(composerPackage.getKeywords()), true); keywordsEntry.addFormEntryListener(new FormEntryAdapter() { String2KeywordsConverter converter; public void focusGained(FormEntry entry) { converter = new String2KeywordsConverter(composerPackage); } public void focusLost(FormEntry entry) { converter.convert(entry.getValue()); } }); composerPackage.addPropertyChangeListener(new PropertyChangeListener() { public void propertyChange(PropertyChangeEvent e) { if (e.getPropertyName().startsWith("keywords")) { //$NON-NLS-1$ keywordsEntry.setValue(converter.convert(composerPackage.getKeywords()), true); } } }); } private void createHomepageEntry(Composite client, FormToolkit toolkit) { homepageEntry = new WeblinkFormEntry(client, toolkit, Messages.GeneralSection_HomepageLabel); homepageEntry.setValue(composerPackage.getHomepage()); homepageEntry.addFormEntryListener(new FormEntryAdapter() { public void textValueChanged(FormEntry entry) { composerPackage.set("homepage", entry.getValue()); //$NON-NLS-1$ } }); composerPackage.addPropertyChangeListener("homepage", new PropertyChangeListener() { //$NON-NLS-1$ public void propertyChange(PropertyChangeEvent e) { homepageEntry.setValue(composerPackage.getHomepage(), true); } }); } private void createLicenseEntry(Composite client, FormToolkit toolkit) { licenseEntry = new FormEntry(client, toolkit, Messages.GeneralSection_LicenseLabel, null, false); ControlDecoration decoration = new ControlDecoration(licenseEntry.getText(), SWT.TOP | SWT.LEFT); FieldDecoration indicator = FieldDecorationRegistry.getDefault() .getFieldDecoration(FieldDecorationRegistry.DEC_CONTENT_PROPOSAL); decoration.setImage(indicator.getImage()); decoration.setDescriptionText( NLS.bind(Messages.GeneralSection_ContentAssistDecorationText, indicator.getDescription())); decoration.setShowOnlyOnFocus(true); new AutoCompleteField(licenseEntry.getText(), new LicenseContentAdapter(), ComposerConstants.LICENSES); final License2StringConverter converter = new License2StringConverter(); licenseEntry.setValue(converter.convert(composerPackage.getLicense()), true); licenseEntry.addFormEntryListener(new FormEntryAdapter() { String2LicenseConverter converter; public void focusGained(FormEntry entry) { converter = new String2LicenseConverter(composerPackage); } public void focusLost(FormEntry entry) { converter.convert(entry.getValue()); } }); composerPackage.addPropertyChangeListener(new PropertyChangeListener() { public void propertyChange(PropertyChangeEvent e) { if (e.getPropertyName().startsWith("license")) { //$NON-NLS-1$ licenseEntry.setValue(converter.convert(composerPackage.getLicense()), true); } } }); } private void createStabilityEntry(Composite client, FormToolkit toolkit) { minimumStabilityEntry = new ComboFormEntry(client, toolkit, Messages.GeneralSection_MinimumStabilityLabel, SWT.FLAT | SWT.READ_ONLY); minimumStabilityEntry.getComboPart().setItems(ComposerConstants.STABILITIES); minimumStabilityEntry.setValue(composerPackage.getMinimumStability(), true); minimumStabilityEntry.addComboFormEntryListener(new ComboFormEntryAdapter() { public void selectionChanged(ComboFormEntry entry) { composerPackage.set("minimum-stability", entry.getValue()); //$NON-NLS-1$ } }); composerPackage.addPropertyChangeListener("minimum-stability", new PropertyChangeListener() { //$NON-NLS-1$ public void propertyChange(PropertyChangeEvent e) { minimumStabilityEntry.setValue(composerPackage.getMinimumStability(), true); } }); } }