package org.jboss.tools.switchyard.reddeer.widget;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Widget;
import org.hamcrest.Matcher;
import org.jboss.reddeer.swt.api.Text;
import org.jboss.reddeer.swt.impl.text.AbstractText;
import org.jboss.reddeer.common.matcher.RegexMatcher;
import org.jboss.reddeer.core.matcher.WithLabelMatcher;
import org.jboss.reddeer.core.util.Display;
import org.jboss.reddeer.common.wait.AbstractWait;
import org.jboss.reddeer.common.wait.TimePeriod;
/**
*
* Extended LabeledText by focusOut() method. This method is needed in binding pages so that SWTValueUpdater is called
* (without this some changed values are not stored).
*
* @author apodhrad
*
*/
public class LabeledText extends AbstractText implements Text {
/**
* Default text with a label
*
* @param label
*/
public LabeledText(String label) {
this(new RegexMatcher(label + "\\**"));
}
public LabeledText(Matcher<String> matcher) {
super(null, 0, new WithLabelMatcher(matcher));
}
public void setFocusOut() {
Display.asyncExec(new Runnable() {
@Override
public void run() {
Listener[] listeners = swtWidget.getListeners(SWT.FocusOut);
for (Listener listener : listeners) {
listener.handleEvent(createEvent(swtWidget, SWT.FocusOut));
listener.handleEvent(createEvent(swtWidget, SWT.FocusOut));
}
}
});
Display.syncExec(new Runnable() {
@Override
public void run() {
}
});
AbstractWait.sleep(TimePeriod.SHORT);
}
private Event createEvent(Widget widget, int eventType) {
Event event = new Event();
event.time = (int) System.currentTimeMillis();
event.widget = widget;
event.display = Display.getDisplay();
event.type = eventType;
return event;
}
}