public ParserMessagesPopup(final GuidedDecisionTree model) { this.model = checkNotNull("model", model); for (GuidedDecisionTreeParserError error : model.getParserErrors()) { for (ParserMessage msg : error.getMessages()) { errors.add(Pair.newPair(error.getOriginalDrl(), msg)); } } setTitle(GuidedDecisionTreeConstants.INSTANCE.popupTitleParserMessages()); messages = new MessageTableWidget<Pair<String, ParserMessage>>(); messages.setToolBarVisible(false); messages.setHeight("150px"); footer.addButton( GuidedDecisionTreeConstants.INSTANCE.remove(), new Command() { @Override public void execute() { model.getParserErrors().clear(); hide(); } }, IconType.WARNING, ButtonType.DANGER); footer.addButton( GuidedDecisionTreeConstants.INSTANCE.ignore(), new Command() { @Override public void execute() { hide(); } }, ButtonType.PRIMARY); setBody(uiBinder.createAndBindUi(this)); add(footer); messages.addCellPreviewHandler( new CellPreviewEvent.Handler<Pair<String, ParserMessage>>() { @Override public void onCellPreview(final CellPreviewEvent<Pair<String, ParserMessage>> event) { if (Event.getTypeInt(event.getNativeEvent().getType()) == Event.ONCLICK) { drlPreview.setContent(event.getValue().getK1()); } } }); messages.setRowData(errors); messages.addLevelColumn( 10, new MessageTableWidget.ColumnExtractor<Level>() { @Override public Level getValue(final Object row) { return Level.ERROR; } }); messages.addTextColumn( 90, new MessageTableWidget.ColumnExtractor<String>() { @Override public String getValue(final Object row) { return getMessage(((Pair<String, ParserMessage>) row).getK2()); } }); }