| /******************************************************************************* |
| * Copyright (c) 2006, 2007 IBM Corporation 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: |
| * IBM Corporation - initial API and implementation |
| * |
| *******************************************************************************/ |
| package org.eclipse.wst.dtd.ui.internal.properties.section; |
| |
| import org.eclipse.core.resources.IFile; |
| import org.eclipse.jface.viewers.IStructuredSelection; |
| import org.eclipse.jface.viewers.ViewerFilter; |
| import org.eclipse.jface.window.Window; |
| import org.eclipse.jface.wizard.WizardDialog; |
| import org.eclipse.swt.SWT; |
| import org.eclipse.swt.custom.CCombo; |
| import org.eclipse.swt.custom.CLabel; |
| import org.eclipse.swt.events.SelectionEvent; |
| import org.eclipse.swt.graphics.Point; |
| import org.eclipse.swt.layout.FormAttachment; |
| import org.eclipse.swt.layout.FormData; |
| import org.eclipse.swt.widgets.Button; |
| import org.eclipse.swt.widgets.Composite; |
| import org.eclipse.swt.widgets.Display; |
| import org.eclipse.swt.widgets.Event; |
| import org.eclipse.swt.widgets.Shell; |
| import org.eclipse.swt.widgets.Text; |
| import org.eclipse.ui.IFileEditorInput; |
| import org.eclipse.ui.part.PageBook; |
| import org.eclipse.ui.plugin.AbstractUIPlugin; |
| import org.eclipse.ui.views.properties.tabbed.ITabbedPropertyConstants; |
| import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory; |
| import org.eclipse.wst.common.ui.internal.viewers.ResourceFilter; |
| import org.eclipse.wst.common.uriresolver.internal.util.URIHelper; |
| import org.eclipse.wst.dtd.core.internal.Entity; |
| import org.eclipse.wst.dtd.ui.internal.DTDPropertiesMessages; |
| import org.eclipse.wst.dtd.ui.internal.DTDUIPlugin; |
| |
| public class NewEntitySection extends AbstractSection { |
| private final String NAME = DTDPropertiesMessages._UI_LABEL_NAME; |
| private final String ENTITY_TYPE = DTDPropertiesMessages._UI_LABEL_ENTITY_TYPE; |
| private final String EXTERNAL_ENTITY = DTDPropertiesMessages._UI_LABEL_EXTERNAL_ENTITY; |
| private final String PARAMETER = DTDPropertiesMessages._UI_LABEL_PARAMETER_ENTITY; |
| private final String GENERAL = DTDPropertiesMessages._UI_LABEL_GENERAL_ENTITY; |
| private final String VALUE = DTDPropertiesMessages._UI_LABEL_ENTITY_VALUE; |
| private final String PUBLIC_ID = DTDPropertiesMessages._UI_LABEL_PUBLIC_ID; |
| private final String SYSTEM_ID = DTDPropertiesMessages._UI_LABEL_SYSTEM_ID; |
| |
| private Text systemIdText; |
| private Text publicIdText; |
| private Text nameText; |
| private Button wizardButton; |
| |
| private Text entityValueText; |
| private Button checkBox; |
| |
| private CCombo typeCombo; |
| private String[] typeComboValues = {PARAMETER, GENERAL}; |
| private PageBook pageBook; |
| |
| /** |
| * @see org.eclipse.wst.common.ui.properties.internal.provisional.ITabbedPropertySection#createControls(org.eclipse.swt.widgets.Composite, |
| * org.eclipse.wst.common.ui.properties.internal.provisional.TabbedPropertySheetWidgetFactory) |
| */ |
| public void createControls(Composite parent, TabbedPropertySheetWidgetFactory factory) { |
| super.createControls(parent, factory); |
| Composite composite = getWidgetFactory().createFlatFormComposite(parent); |
| |
| createEntityCommonComposite(composite); |
| |
| pageBook = new PageBook(composite, SWT.FLAT); |
| FormData data = new FormData(); |
| data.left = new FormAttachment(0, 0); |
| data.right = new FormAttachment(100, 0); |
| data.top = new FormAttachment(entityCommonComposite, 0); |
| data.bottom = new FormAttachment(100, 0); |
| pageBook.setLayoutData(data); |
| |
| createExternalEntityComposite(pageBook); |
| createInternalEntityComposite(pageBook); |
| |
| pageBook.showPage(externalEntityComposite); |
| } |
| |
| private Composite entityCommonComposite; |
| |
| private Composite createEntityCommonComposite(Composite parent) { |
| entityCommonComposite = getWidgetFactory().createFlatFormComposite(parent); |
| FormData data = new FormData(); |
| data.left = new FormAttachment(0, 0); |
| data.right = new FormAttachment(100, 0); |
| data.top = new FormAttachment(0, 0); |
| entityCommonComposite.setLayoutData(data); |
| |
| // Create label first then attach other control to it |
| CLabel nameLabel = getWidgetFactory().createCLabel(entityCommonComposite, NAME); //$NON-NLS-1$ |
| |
| // https://bugs.eclipse.org/bugs/show_bug.cgi?id=141106 |
| Point p = nameLabel.computeSize(SWT.DEFAULT, SWT.DEFAULT, false); |
| int labelWidth = Math.max(p.x, 98); |
| data = new FormData(labelWidth, SWT.DEFAULT); |
| data.left = new FormAttachment(0, 0); |
| data.top = new FormAttachment(0, 0); |
| nameLabel.setLayoutData(data); |
| |
| nameText = getWidgetFactory().createText(entityCommonComposite, "", SWT.NONE); //$NON-NLS-1$ |
| data = new FormData(); |
| data.left = new FormAttachment(nameLabel, -ITabbedPropertyConstants.HSPACE); |
| data.right = new FormAttachment(100, 0); |
| data.top = new FormAttachment(nameLabel, 0, SWT.CENTER); |
| nameText.setLayoutData(data); |
| nameText.addListener(SWT.Modify, this); |
| |
| // Create label first then attach other control to it |
| CLabel cLabel = getWidgetFactory().createCLabel(entityCommonComposite, ENTITY_TYPE); |
| |
| // https://bugs.eclipse.org/bugs/show_bug.cgi?id=141106 |
| p = cLabel.computeSize(SWT.DEFAULT, SWT.DEFAULT, false); |
| labelWidth = Math.max(p.x, 98); |
| data = new FormData(labelWidth, SWT.DEFAULT); |
| data.left = new FormAttachment(0, 0); |
| data.top = new FormAttachment(nameLabel, +ITabbedPropertyConstants.VSPACE); |
| cLabel.setLayoutData(data); |
| |
| // Create Checkbox |
| checkBox = getWidgetFactory().createButton(entityCommonComposite, EXTERNAL_ENTITY, SWT.CHECK); //$NON-NLS-1$ |
| data = new FormData(); |
| data.right = new FormAttachment(100, 0); |
| data.top = new FormAttachment(cLabel, 0, SWT.CENTER); |
| checkBox.setLayoutData(data); |
| checkBox.addSelectionListener(this); |
| |
| // Create CCombo |
| typeCombo = getWidgetFactory().createCCombo(entityCommonComposite, SWT.FLAT | SWT.READ_ONLY); |
| data = new FormData(); |
| data.left = new FormAttachment(cLabel, -ITabbedPropertyConstants.HSPACE - 2); |
| data.right = new FormAttachment(checkBox, -ITabbedPropertyConstants.HSPACE); |
| data.top = new FormAttachment(cLabel, 0, SWT.CENTER); |
| typeCombo.setLayoutData(data); |
| typeCombo.addSelectionListener(this); |
| typeCombo.setItems(typeComboValues); |
| typeCombo.setText(PARAMETER); |
| |
| return entityCommonComposite; |
| } |
| |
| private Composite internalEntityComposite; |
| |
| private Composite createInternalEntityComposite(Composite parent) { |
| internalEntityComposite = getWidgetFactory().createFlatFormComposite(parent); |
| FormData data = new FormData(); |
| data.left = new FormAttachment(0, 0); |
| data.right = new FormAttachment(100, 0); |
| data.top = new FormAttachment(entityCommonComposite, -ITabbedPropertyConstants.VSPACE); |
| internalEntityComposite.setLayoutData(data); |
| |
| // Create label first then attach other control to it |
| CLabel entityValueLabel = getWidgetFactory().createCLabel(internalEntityComposite, VALUE); //$NON-NLS-1$ |
| |
| // https://bugs.eclipse.org/bugs/show_bug.cgi?id=141106 |
| Point p = entityValueLabel.computeSize(SWT.DEFAULT, SWT.DEFAULT, false); |
| int labelWidth = Math.max(p.x, 98); |
| data = new FormData(labelWidth, SWT.DEFAULT); |
| data.left = new FormAttachment(0, 0); |
| data.top = new FormAttachment(0, 0); |
| entityValueLabel.setLayoutData(data); |
| |
| entityValueText = getWidgetFactory().createText(internalEntityComposite, "", SWT.NONE); //$NON-NLS-1$ |
| data = new FormData(); |
| data.left = new FormAttachment(entityValueLabel, -ITabbedPropertyConstants.HSPACE); |
| data.right = new FormAttachment(100, 0); |
| data.top = new FormAttachment(entityValueLabel, 0, SWT.CENTER); |
| entityValueText.setLayoutData(data); |
| entityValueText.setEditable(true); |
| entityValueText.addListener(SWT.Modify, this); |
| |
| return internalEntityComposite; |
| } |
| |
| private Composite externalEntityComposite; |
| |
| private Composite createExternalEntityComposite(Composite parent) { |
| externalEntityComposite = getWidgetFactory().createFlatFormComposite(parent); |
| FormData data = new FormData(); |
| data.left = new FormAttachment(0, 0); |
| data.right = new FormAttachment(100, 0); |
| data.top = new FormAttachment(entityCommonComposite, -ITabbedPropertyConstants.VSPACE); |
| externalEntityComposite.setLayoutData(data); |
| |
| // Create label first then attach other control to it |
| CLabel publicIdLabel = getWidgetFactory().createCLabel(externalEntityComposite, PUBLIC_ID); //$NON-NLS-1$ |
| |
| // https://bugs.eclipse.org/bugs/show_bug.cgi?id=141106 |
| Point p = publicIdLabel.computeSize(SWT.DEFAULT, SWT.DEFAULT, false); |
| int labelWidth = Math.max(p.x, 98); |
| data = new FormData(labelWidth, SWT.DEFAULT); |
| data.left = new FormAttachment(0, 0); |
| data.top = new FormAttachment(0, 0); |
| publicIdLabel.setLayoutData(data); |
| |
| publicIdText = getWidgetFactory().createText(externalEntityComposite, "", SWT.NONE); //$NON-NLS-1$ |
| publicIdText.setEditable(true); |
| data = new FormData(); |
| data.left = new FormAttachment(publicIdLabel, -ITabbedPropertyConstants.HSPACE); |
| data.right = new FormAttachment(100, 0); |
| data.top = new FormAttachment(publicIdLabel, 0, SWT.CENTER); |
| publicIdText.setLayoutData(data); |
| publicIdText.addListener(SWT.Modify, this); |
| |
| // Create label first then attach other control to it |
| // Create System ID Label |
| CLabel systemIdLabel = getWidgetFactory().createCLabel(externalEntityComposite, SYSTEM_ID); //$NON-NLS-1$ |
| |
| // https://bugs.eclipse.org/bugs/show_bug.cgi?id=141106 |
| p = systemIdLabel.computeSize(SWT.DEFAULT, SWT.DEFAULT, false); |
| labelWidth = Math.max(p.x, 98); |
| data = new FormData(labelWidth, SWT.DEFAULT); |
| data.left = new FormAttachment(0, 0); |
| data.top = new FormAttachment(publicIdLabel, +ITabbedPropertyConstants.VSPACE); |
| systemIdLabel.setLayoutData(data); |
| |
| // Create Wizard Button |
| wizardButton = getWidgetFactory().createButton(externalEntityComposite, "", SWT.NONE); //$NON-NLS-1$ |
| wizardButton.setImage(AbstractUIPlugin.imageDescriptorFromPlugin(DTDUIPlugin.getDefault().getBundle().getSymbolicName(), "icons/browsebutton.gif").createImage()); //$NON-NLS-1$ |
| data = new FormData(); |
| data.right = new FormAttachment(100, 0); |
| data.top = new FormAttachment(systemIdLabel, 0, SWT.CENTER); |
| wizardButton.setLayoutData(data); |
| wizardButton.addSelectionListener(this); |
| |
| // Create System ID Text |
| systemIdText = getWidgetFactory().createText(externalEntityComposite, "", SWT.NONE); //$NON-NLS-1$ |
| // systemIdText.setEditable(false); |
| data = new FormData(); |
| data.left = new FormAttachment(systemIdLabel, -ITabbedPropertyConstants.HSPACE); |
| data.right = new FormAttachment(wizardButton, -ITabbedPropertyConstants.HSPACE); |
| data.top = new FormAttachment(systemIdLabel, 0, SWT.CENTER); |
| systemIdText.setLayoutData(data); |
| systemIdText.addListener(SWT.Modify, this); |
| |
| return externalEntityComposite; |
| } |
| |
| public void widgetSelected(SelectionEvent e) { |
| if (e.widget == typeCombo) { |
| Object input = getInput(); |
| if (input instanceof Entity) { |
| Entity node = (Entity) input; |
| String selected = typeCombo.getText(); |
| if (PARAMETER.equals(selected)) |
| node.setParameterEntity(true); |
| else |
| node.setParameterEntity(false); |
| } |
| } |
| else if (e.widget == checkBox) { |
| Object input = getInput(); |
| if (input instanceof Entity) { |
| Entity node = (Entity) input; |
| boolean selected = checkBox.getSelection(); |
| if (selected) { |
| node.setExternalEntity(true); |
| pageBook.showPage(externalEntityComposite); |
| } |
| else { |
| node.setExternalEntity(false); |
| pageBook.showPage(internalEntityComposite); |
| } |
| } |
| } |
| else if (e.widget == wizardButton) { |
| Shell shell = Display.getCurrent().getActiveShell(); |
| IFile currentIFile = ((IFileEditorInput) getActiveEditor().getEditorInput()).getFile(); |
| ViewerFilter filter = new ResourceFilter(new String[]{".dtd"}, new IFile[]{currentIFile}, null); //$NON-NLS-1$ |
| |
| DTDSelectIncludeFileWizard fileSelectWizard = new DTDSelectIncludeFileWizard(DTDPropertiesMessages._UI_FILEDIALOG_SELECT_DTD, DTDPropertiesMessages._UI_FILEDIALOG_SELECT_DTD_DESC, filter, (IStructuredSelection) fSelection); |
| |
| WizardDialog wizardDialog = new WizardDialog(shell, fileSelectWizard); |
| wizardDialog.create(); |
| wizardDialog.setBlockOnOpen(true); |
| int result = wizardDialog.open(); |
| if (result == Window.OK) { |
| String value = systemIdText.getText(); |
| IFile selectedIFile = fileSelectWizard.getResultFile(); |
| String dtdFileString = value; |
| if (selectedIFile != null) { |
| dtdFileString = URIHelper.getRelativeURI(selectedIFile.getFullPath(), currentIFile.getFullPath()); |
| } |
| systemIdText.setText(dtdFileString); |
| } |
| } |
| |
| } |
| |
| /** |
| * @see org.eclipse.wst.common.ui.properties.internal.provisional.view.ITabbedPropertySection#refresh() |
| */ |
| public void refresh() { |
| setListenerEnabled(false); |
| Object input = getInput(); |
| nameText.setText(""); //$NON-NLS-1$ |
| if (input != null) { |
| if (input instanceof Entity) { |
| Entity entity = (Entity) input; |
| nameText.setText(entity.getName()); |
| |
| if (entity.isParameterEntity()) |
| typeCombo.setText(PARAMETER); |
| else |
| typeCombo.setText(GENERAL); |
| |
| if (entity.isExternalEntity()) { |
| checkBox.setSelection(true); |
| pageBook.showPage(externalEntityComposite); |
| publicIdText.setText(entity.getPublicID()); |
| systemIdText.setText(entity.getSystemID()); |
| } |
| else { |
| checkBox.setSelection(false); |
| pageBook.showPage(internalEntityComposite); |
| entityValueText.setText(entity.getValue()); |
| } |
| } |
| } |
| setListenerEnabled(true); |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.eclipse.wst.common.ui.properties.internal.provisional.ISection#shouldUseExtraSpace() |
| */ |
| public boolean shouldUseExtraSpace() { |
| return true; |
| } |
| |
| public void doHandleEvent(Event event) { |
| if (event.widget == nameText) { |
| Object input = getInput(); |
| String newValue = nameText.getText(); |
| if (newValue.length() > 0 && input instanceof Entity) { |
| Entity entity = (Entity) input; |
| entity.setName(newValue); |
| } |
| } |
| else if (event.widget == entityValueText) { |
| Object input = getInput(); |
| String newValue = entityValueText.getText(); |
| if (input instanceof Entity) { |
| Entity entity = (Entity) input; |
| entity.setValue(newValue); |
| } |
| } |
| else if (event.widget == publicIdText) { |
| Object input = getInput(); |
| String newValue = publicIdText.getText(); |
| if (input instanceof Entity) { |
| Entity entity = (Entity) input; |
| entity.setPublicID(newValue); |
| } |
| } |
| else if (event.widget == systemIdText) { |
| Object input = getInput(); |
| String newValue = systemIdText.getText(); |
| if (input instanceof Entity) { |
| Entity entity = (Entity) input; |
| entity.setSystemID(newValue); |
| } |
| } |
| |
| } |
| } |