/* * 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.ui.forms; 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; /** * @since 8.0 */ public class TextComponentSet extends SimpleComponentSet { private final int mystyle; Text text; private String lastSetValue; private MyModifyListener modList; final DialogProvider provider; public TextComponentSet( String id, String labelName, int style ) { this(id, labelName, style, null); } public TextComponentSet( String id, String labelName, int style, DialogProvider provider ) { super(id, labelName); mystyle = style; this.provider = provider; } @Override protected void addControls( Composite parent, FormToolkit ftk ) { // init: init(); // Set up controls: 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); if (provider != null) { // add a popup button: Button b = ftk.createButton(parent, provider.getLaunchButtonText(), SWT.NONE); b.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected( SelectionEvent e ) { provider.showDialog(text.getShell(), getValue()); if (!provider.wasCancelled()) { setValue(provider.getValue()); } // endif } }); twd = new TableWrapData(TableWrapData.LEFT, TableWrapData.TOP); b.setLayoutData(twd); } // endif } private void init() { if (modList == null) { modList = new MyModifyListener(); } // endif } @Override public int getControlCount() { if (provider != null) { return 3; } // endif return 2; } @Override public void setEditible( boolean enabled ) { super.setEditible(enabled); if (text != null) { text.setEnabled(true); // to allow scrolling text.setEditable(enabled); } // endif } @Override public void reset() { setValue(lastSetValue); } @Override public boolean isUserSet() { // TODO this needs to be able to deal with nulls and ""s return !(getValue().equals(lastSetValue)); } @Override protected void addMonitor( ComponentSetMonitor monitor ) { init(); modList.mon = monitor; } @Override protected void removeMonitor( ComponentSetMonitor monitor ) { // TODO should I remove the listener here? I could re-add it above... init(); modList.mon = null; } @Override public void setValue( Object o ) { if (o instanceof String) { lastSetValue = (String)o; } else { lastSetValue = ""; //$NON-NLS-1$ } // endif text.setText(lastSetValue); } public String getValue() { return text.getText(); } class MyModifyListener implements ModifyListener { public ComponentSetMonitor mon; private String lastVal; @Override public void modifyText( ModifyEvent e ) { if (mon != null) { String newVal = getValue(); if (!FormUtil.safeEquals(newVal, lastVal)) { mon.update(new ComponentSetEvent(TextComponentSet.this, false, newVal)); lastVal = newVal; } // endif } // endif } } }