package org.objectstyle.wolips.componenteditor.actions;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.IDialogConstants;
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.Combo;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
import org.objectstyle.wolips.bindings.Activator;
import org.objectstyle.wolips.wodclipse.action.ComponentLiveSearch;
/**
* <P>
* This dialogue box is used to get the name of a component that will be
* inserted both into the template as well as the wod file.
* </P>
*/
public class InsertComponentDialogue extends Dialog {
protected Label _componentNameLabel;
protected Combo _componentNameCombo;
protected Label _componentInstanceLabel;
protected Text _componentInstanceNameText;
protected Button _componentInstanceCreateButton;
protected Button _componentInstanceCancelButton;
protected Button _inline;
protected IJavaProject _project;
protected InsertComponentSpecification _insertComponentSpecification;
protected IProgressMonitor _progressMonitor;
public InsertComponentDialogue(Shell parentShell, IJavaProject project, InsertComponentSpecification insertComponentSpecification) {
super(parentShell);
_project = project;
_insertComponentSpecification = insertComponentSpecification;
_progressMonitor = new NullProgressMonitor();
}
@Override
protected void configureShell(Shell newShell) {
super.configureShell(newShell);
String componentName = _insertComponentSpecification.getComponentName();
if (componentName == null) {
newShell.setText("Insert Component");
} else {
newShell.setText("Insert " + componentName);
}
}
protected Control createDialogArea(Composite parent) {
Composite composite = (Composite) super.createDialogArea(parent);
((GridLayout) composite.getLayout()).numColumns = 2;
_inline = new Button(composite, SWT.CHECK);
_inline.setText("Use inline bindings");
GridData inlineData = new GridData(GridData.FILL_HORIZONTAL);
inlineData.horizontalSpan = 2;
_inline.setLayoutData(inlineData);
_inline.setSelection(Activator.getDefault().useInlineBindings(_project.getProject()));
_componentInstanceLabel = new Label(composite, SWT.NONE);
_componentInstanceLabel.setText("WebObject tag name:");
GridData componentInstanceLabelLayout = new GridData(GridData.FILL_HORIZONTAL);
_componentInstanceLabel.setLayoutData(componentInstanceLabelLayout);
_componentInstanceNameText = new Text(composite, SWT.BORDER);
GridData componentInstanceNameLayout = new GridData(GridData.FILL_HORIZONTAL);
componentInstanceNameLayout.widthHint = 200;
_componentInstanceNameText.setLayoutData(componentInstanceNameLayout);
_componentInstanceNameText.addVerifyListener(new ComponentInstanceNameVerifyListener());
_componentInstanceNameText.setFocus();
if (_insertComponentSpecification.getComponentInstanceName() != null) {
_componentInstanceNameText.setText(_insertComponentSpecification.getComponentInstanceName());
}
// else {
// if (_insertComponentSpecification.getComponentInstanceNameSuffix() != null) {
// _componentInstanceNameText.setText(_insertComponentSpecification.getComponentInstanceNameSuffix());
// }
// }
if (_insertComponentSpecification.getComponentName() == null) {
_componentNameLabel = new Label(composite, 0);
_componentNameLabel.setText("Component type:");
GridData componentNameLabelLayout = new GridData(GridData.FILL_HORIZONTAL);
_componentNameLabel.setLayoutData(componentNameLabelLayout);
_componentNameCombo = new Combo(composite, SWT.BORDER);
GridData componentNameTextLayout = new GridData(GridData.FILL_HORIZONTAL);
_componentNameCombo.setLayoutData(componentNameTextLayout);
new ComponentLiveSearch(_project, _progressMonitor).attachTo(_componentNameCombo);
}
_inline.addSelectionListener(new SelectionListener() {
public void widgetDefaultSelected(SelectionEvent e) {
widgetSelected(e);
}
public void widgetSelected(SelectionEvent e) {
inlineSelectionChanged();
validate();
}
});
_componentInstanceNameText.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent e) {
validate();
}
});
if (_componentNameCombo != null) {
_componentNameCombo.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent e) {
validate();
}
});
}
inlineSelectionChanged();
return dialogArea;
}
protected void inlineSelectionChanged() {
_componentInstanceNameText.setEnabled(!_inline.getSelection());
}
@Override
protected void createButtonsForButtonBar(Composite parent) {
super.createButtonsForButtonBar(parent);
validate();
}
// these two methods handle buttons getting pressed.
public void cancelPressed() {
_insertComponentSpecification = null;
super.cancelPressed();
}
public void okPressed() {
if (_componentNameCombo != null) {
_insertComponentSpecification.setComponentName(_componentNameCombo.getText());
}
_insertComponentSpecification.setComponentInstanceName(_componentInstanceNameText.getText());
_insertComponentSpecification.setInline(_inline.getSelection());
Activator.getDefault().setUseInlineBindings(_project.getProject(), _inline.getSelection());
super.okPressed();
}
public InsertComponentSpecification getInsertComponentSpecification() {
return _insertComponentSpecification;
}
protected void validate() {
boolean isValid = false;
if (_componentNameCombo == null || !"".equals(_componentNameCombo.getText())) {
if (_inline.getSelection()) {
isValid = true;
} else if (!"".equals(_componentInstanceNameText.getText())) {
isValid = true;
}
}
Button okButton = getButton(IDialogConstants.OK_ID);
if (okButton == null) {
return;
}
if (isValid) {
if (!okButton.isEnabled()) {
okButton.setEnabled(true);
}
} else if (okButton.isEnabled()) {
okButton.setEnabled(false);
}
}
}