/*
* JBoss, Home of Professional Open Source.
*
* See the LEGAL.txt file distributed with this work for information regarding copyright ownership and licensing.
*
* See the AUTHORS.txt file distributed with this work for a full listing of individual contributors.
*/
package org.teiid.designer.xsd.ui.editor;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.forms.widgets.FormToolkit;
import org.eclipse.ui.forms.widgets.TableWrapData;
import org.teiid.designer.ui.forms.ComponentSetEvent;
import org.teiid.designer.ui.forms.ComponentSetMonitor;
import org.teiid.designer.ui.forms.DialogProvider;
import org.teiid.designer.ui.forms.FormUtil;
/**
* @since 8.0
*/
public class TextFacetSet extends AbstractFacetSet {
private final int myStyle;
final DialogProvider provider;
Text text;
private MyModifyListener modList;
public TextFacetSet( String id,
String labelName,
int style,
DialogProvider dialogProvider,
boolean needsDescription ) {
super(id, labelName, true, needsDescription);
myStyle = style;
provider = dialogProvider;
}
@Override
protected void addMainControl( Composite parent,
FormToolkit ftk,
ComponentSetMonitor mon ) {
// init:
modList = new MyModifyListener();
// set up text:
text = ftk.createText(parent, null, myStyle);
TableWrapData twd = new TableWrapData(TableWrapData.FILL_GRAB, TableWrapData.FILL_GRAB);
text.setLayoutData(twd);
if ((myStyle & SWT.MULTI) != 0) {
// was multi, make height taller:
twd.heightHint = 50;
} // endif
text.addModifyListener(modList);
// set up launch button:
Button b = ftk.createButton(parent, provider.getLaunchButtonText(), SWT.NONE);
b.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected( SelectionEvent e ) {
provider.showDialog(text.getShell(), text.getText());
if (!provider.wasCancelled()) {
setMainValue(provider.getValue());
} // endif
}
});
twd = new TableWrapData(TableWrapData.LEFT, TableWrapData.TOP);
b.setLayoutData(twd);
// wire up listeners:
modList.mon = mon;
}
@Override
protected void setMainValue( Object value ) {
if (value != null) {
text.setText((String)value);
} else {
text.setText(""); //$NON-NLS-1$
} // endif
}
/** We override super here to add another control */
@Override
public int getControlCount() {
return super.getControlCount() + 1;
}
class MyModifyListener implements ModifyListener {
public ComponentSetMonitor mon;
private String lastVal;
@Override
public void modifyText( ModifyEvent e ) {
if (mon != null) {
String newVal = text.getText();
if (!FormUtil.safeEquals(newVal, lastVal)) {
mon.update(new ComponentSetEvent(TextFacetSet.this, false, newVal));
lastVal = newVal;
} // endif
} // endif
}
}
}