// Actual drop-down private Widget getDropDown() { String selected = ""; String selectedText = ""; box = new ListBox(); box.setEnabled(!isReadOnly); box.addItem(HumanReadableConstants.INSTANCE.noCEPWindow(), ""); for (int i = 0; i < operators.size(); i++) { String op = operators.get(i); box.addItem(HumanReadable.getOperatorDisplayName(op), op); if (op.equals(hcw.getWindow().getOperator())) { selected = op; selectedText = HumanReadable.getOperatorDisplayName(op); box.setSelectedIndex(i + 1); } } selectItem(hcw.getWindow().getOperator()); // Fire event to ensure parent Widgets correct their state depending on selection final HasValueChangeHandlers<OperatorSelection> source = this; final OperatorSelection selection = new OperatorSelection(selected, selectedText); Scheduler.get() .scheduleFinally( new Command() { public void execute() { operatorChanged(selection); ValueChangeEvent.fire(source, selection); } }); // Signal parent Widget whenever a change happens box.addChangeHandler( new ChangeHandler() { public void onChange(ChangeEvent event) { String selected = box.getValue(box.getSelectedIndex()); String selectedText = box.getItemText(box.getSelectedIndex()); OperatorSelection selection = new OperatorSelection(selected, selectedText); operatorChanged(selection); ValueChangeEvent.fire(source, selection); } }); return box; }