All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.valkyriercp.dialog.TitledPageApplicationDialog Maven / Gradle / Ivy

There is a newer version: 1.3
Show newest version
package org.valkyriercp.dialog;

import org.springframework.util.Assert;
import org.springframework.util.StringUtils;
import org.valkyriercp.core.DefaultMessage;
import org.valkyriercp.core.Messagable;
import org.valkyriercp.core.Message;
import org.valkyriercp.form.Form;

import javax.swing.*;
import java.awt.*;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;

/**
 * A TitledApplicationDialog that delegates to a single DialogPage for its
 * title, content and messages.
 *
 * @author oliverh
 */
public abstract class TitledPageApplicationDialog extends TitledApplicationDialog {

	private DialogPage dialogPage;

	private PropertyChangeListener dialogPagePropertyChangeHandler = new PropertyChangeListener() {
		public void propertyChange(PropertyChangeEvent evt) {
			if (Messagable.MESSAGE_PROPERTY.equals(evt.getPropertyName())) {
				update();
			}
			else if (DialogPage.PAGE_COMPLETE_PROPERTY.equals(evt.getPropertyName())) {
				setEnabled(dialogPage.isPageComplete());
			}
			else {
				update();
			}
		}
	};

	private Image titlePaneImage;

	private String titlePaneTitle;

	/**
	 * Default constructor. Make sure to call {@link #setDialogPage(DialogPage)}
	 * prior to using this dialog.
	 */
	public TitledPageApplicationDialog() {
		super();
	}

	public TitledPageApplicationDialog(DialogPage dialogPage) {
		super();
		setDialogPage(dialogPage);
	}

	public TitledPageApplicationDialog(Form form, Window parent) {
		this(new FormBackedDialogPage(form), parent);
	}

	public TitledPageApplicationDialog(DialogPage dialogPage, Window parent) {
		super(dialogPage.getTitle(), parent);
		setDialogPage(dialogPage);
	}

	public TitledPageApplicationDialog(DialogPage dialogPage, Window parent, CloseAction closeAction) {
		super(dialogPage.getTitle(), parent, closeAction);
		setDialogPage(dialogPage);
	}

	protected void setDialogPage(DialogPage dialogPage) {
		Assert.notNull(dialogPage, "The single dialog page to display is required");
		this.dialogPage = dialogPage;
	}

	protected DialogPage getDialogPage() {
		return dialogPage;
	}

	protected JComponent createTitledDialogContentPane() {
		dialogPage.addPropertyChangeListener(dialogPagePropertyChangeHandler);
		update();
		return dialogPage.getControl();
	}

	protected Message getDescription() {
		return new DefaultMessage(dialogPage.getDescription());
	}

	protected void update() {
		if (!StringUtils.hasText(getTitle())) {
			setTitle(dialogPage.getTitle());
		}
		updateTitlePane();
		updateMessagePane();
	}

	protected void updateTitlePane() {
		super.setTitlePaneTitle(titlePaneTitle != null ? titlePaneTitle : dialogPage.getTitle());
		super.setTitlePaneImage(titlePaneImage != null ? titlePaneImage : dialogPage.getImage());
		setDescription(dialogPage.getDescription());
	}

	protected void updateMessagePane() {
		setMessage(dialogPage.getMessage());
	}

	/**
	 * Sets the image to use in the title pane. Normally the image is provided
	 * by the current dialog page, but this method allows for overriding this.
	 * 

* If the image passed is null, the image of the dialog page will be used. * @param image the image * @see TitledApplicationDialog#setTitlePaneImage(Image) */ public void setTitlePaneImage(Image image) { titlePaneImage = image; super.setTitlePaneImage(image); } /** * Sets the title to use in the title pane. Normally the title is provided * by the current dialog page, but this method allows for overriding this. *

* If the title passed is null, the title of the dialog page will be used. * @param title the title * @see TitledApplicationDialog#setTitlePaneTitle(String) */ public void setTitlePaneTitle(String title) { titlePaneTitle = title; super.setTitlePaneTitle(title); } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy