package edu.ualberta.med.biobank.dialogs;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Shell;
import edu.ualberta.med.biobank.gui.common.dialogs.BgcBaseDialog;
public abstract class PagedDialog extends BgcBaseDialog {
public PagedDialog(Shell parentShell, NewListener listener, boolean addMode) {
super(parentShell);
this.addMode = addMode;
this.newListener = listener;
}
protected boolean addMode;
protected NewListener newListener;
@Override
protected void createButtonsForButtonBar(Composite parent) {
if (addMode) {
createButton(parent, IDialogConstants.CANCEL_ID,
IDialogConstants.CANCEL_LABEL, false);
createButton(parent, IDialogConstants.FINISH_ID,
IDialogConstants.FINISH_LABEL, false);
createButton(parent, IDialogConstants.NEXT_ID,
IDialogConstants.NEXT_LABEL, true);
} else {
super.createButtonsForButtonBar(parent);
}
}
@Override
protected void setOkButtonEnabled(boolean enabled) {
if (addMode) {
Button nextButton = getButton(IDialogConstants.NEXT_ID);
Button finishButton = getButton(IDialogConstants.FINISH_ID);
if (nextButton != null && !nextButton.isDisposed()
&& finishButton != null && !finishButton.isDisposed()) {
nextButton.setEnabled(enabled);
finishButton.setEnabled(enabled);
} else {
okButtonEnabled = enabled;
}
} else {
super.setOkButtonEnabled(enabled);
}
}
@Override
protected void buttonPressed(int buttonId) {
if (addMode) {
if (IDialogConstants.CANCEL_ID == buttonId)
super.buttonPressed(buttonId);
else if (IDialogConstants.FINISH_ID == buttonId) {
Button nextButton = getButton(IDialogConstants.NEXT_ID);
if (nextButton.isEnabled()) {
addNew();
resetFields();
}
setReturnCode(OK);
close();
} else if (IDialogConstants.NEXT_ID == buttonId) {
addNew();
resetFields();
}
} else {
super.buttonPressed(buttonId);
}
}
protected void addNew() {
Object newObject = getNew();
copy(newObject);
if (newListener != null)
newListener.newAdded(newObject);
}
protected abstract void copy(Object newModelObject);
protected abstract Object getNew();
protected abstract void resetFields();
public void setNewListener(NewListener newListener) {
this.newListener = newListener;
}
public static abstract class NewListener {
public abstract void newAdded(Object ob);
}
}