package de.dhbw.humbuch.view.components; import java.io.Serializable; import com.vaadin.event.ShortcutAction.KeyCode; import com.vaadin.shared.ui.label.ContentMode; import com.vaadin.ui.Alignment; import com.vaadin.ui.Button; import com.vaadin.ui.Button.ClickEvent; import com.vaadin.ui.HorizontalLayout; import com.vaadin.ui.Label; import com.vaadin.ui.Panel; import com.vaadin.ui.UI; import com.vaadin.ui.VerticalLayout; import com.vaadin.ui.Window; /** * @author David Vitt * */ public class ConfirmDialog extends Window { private static final long serialVersionUID = 5531902128467189080L; private static final String DEFAULT_WINDOW_CAPTION = "Bestätigen"; private static final String DEFAULT_CONFIRM_CAPTION = "Ok"; private static final String DEFAULT_CANCEL_CAPTION = "Abbrechen"; public interface Listener extends Serializable { void onClose(ConfirmDialog dialog); } private Listener confirmListener = null; private boolean isConfirmed = false; public static void show(String message, Listener listener) { show(DEFAULT_WINDOW_CAPTION, message, listener); } public static void show(String caption, String message, Listener listener) { show(caption, message, DEFAULT_CONFIRM_CAPTION, DEFAULT_CANCEL_CAPTION, listener); } public static void show(String caption, String message, String confirmCaption, String cancelCaption, Listener listener) { new ConfirmDialog(caption, message, confirmCaption, cancelCaption, listener).show(UI.getCurrent()); } private void show(UI parentWindow) { parentWindow.addWindow(this); } private ConfirmDialog(String caption, String message, String confirmCaption, String cancelCaption, Listener listener) { setListener(listener); setCaption(caption); addCloseListener(new Window.CloseListener() { private static final long serialVersionUID = -1251710433868337579L; @Override public void windowClose(CloseEvent e) { if(ConfirmDialog.this.isEnabled()) { ConfirmDialog.this.setEnabled(false); ConfirmDialog.this.setConfirmed(false); if(ConfirmDialog.this.getListener() != null) { ConfirmDialog.this.getListener().onClose(ConfirmDialog.this); } } } }); // Create content VerticalLayout content = new VerticalLayout(); content.setSpacing(true); content.setMargin(true); // Label for message Label text = new Label(); text.setValue(message); text.setContentMode(ContentMode.HTML); // Panel for message Panel messagePanel = new Panel(text); messagePanel.setSizeFull(); content.addComponent(messagePanel); content.setExpandRatio(messagePanel, 1f); // Layout for buttons HorizontalLayout buttons = new HorizontalLayout(); buttons.setSpacing(true); content.addComponent(buttons); content.setComponentAlignment(buttons, Alignment.MIDDLE_RIGHT); // Cancel button final Button cancelBtn = new Button(cancelCaption); cancelBtn.setClickShortcut(KeyCode.ESCAPE, null); cancelBtn.focus(); buttons.addComponent(cancelBtn); // Confirm button final Button confirmBtn = new Button(confirmCaption); confirmBtn.addStyleName("default"); buttons.addComponent(confirmBtn); // ClickListener for buttons Button.ClickListener cl = new Button.ClickListener() { private static final long serialVersionUID = 165308935170840683L; @Override public void buttonClick(ClickEvent event) { if(ConfirmDialog.this.isEnabled()) { ConfirmDialog.this.setEnabled(false); ConfirmDialog.this.setConfirmed(event.getButton() == confirmBtn); ConfirmDialog.this.close(); if (ConfirmDialog.this.getListener() != null) { ConfirmDialog.this.getListener().onClose(ConfirmDialog.this); } } } }; confirmBtn.addClickListener(cl); cancelBtn.addClickListener(cl); setContent(content); setResizable(false); setModal(true); } private void setConfirmed(boolean confirmed) { isConfirmed = confirmed; } private Listener getListener() { return confirmListener; } private void setListener(Listener listener) { confirmListener = listener; } public boolean isConfirmed() { return isConfirmed; } }