public ItemRemoveModalPanel( String title, String itemsString, final ListModel model, ObjectNameResolver nameResolver, final GridController gridController) { super(panelWidth, panelHeight, title); this.model = model; VLayout inPanel = new VLayout(); inPanel.setHeight100(); inPanel.setWidth100(); Label message = new Label("Are you sure you want to remove the following " + itemsString + "?"); message.setStyleName("removePanelLabel"); message.setAutoHeight(); inPanel.addMember(message); for (Object item : model.getSelectedItems()) { Label l = new Label("- " + nameResolver.getItemName(item)); l.setStyleName("removePanelItems"); l.setAutoHeight(); l.setValign(VerticalAlignment.TOP); inPanel.addMember(l); } model .getPropertyChangedEvent() .addListener( new IEventListener() { @Override public void eventRaised(Event ev, Object sender, EventArgs args) { String propertyName = ((PropertyChangedEventArgs) args).PropertyName; GWT.log("DERBA: " + propertyName); if (propertyName.equals("Window") || propertyName.equals("ConfirmationModel")) { destroy(); model.getPropertyChangedEvent().removeListener(this); if (gridController != null) gridController.gridChangePerformed(); } } }); Button okButton = new Button("OK"); okButton.addClickHandler( new ClickHandler() { @Override public void onClick(ClickEvent event) { model.ExecuteCommand(new UICommand("OnRemove", model)); } }); Button cancelButton = new Button("Cancel"); cancelButton.addClickHandler( new ClickHandler() { @Override public void onClick(ClickEvent event) { onClose(); } }); setFooterButtons(Alignment.RIGHT, okButton, cancelButton); addItem(inPanel); }