001 package market;
002
003 import java.awt.event.WindowAdapter;
004 import java.awt.event.WindowEvent;
005 import java.awt.event.WindowListener;
006
007 import sale.FormSheet;
008 import sale.FormSheetContentCreator;
009 import sale.JDisplayDialog;
010 import sale.JDisplayFrame;
011 import sale.MenuSheet;
012 import sale.SaleProcess;
013 import sale.SalesPoint;
014 import sale.stdforms.MsgForm;
015
016 /**
017 * Provides a {@link JDisplayDialog} that shows a simple {@link MsgForm}.
018 */
019 public class JDDShowMessage {
020
021 /**
022 * Creates a JDisplayDialog that shows a short message.
023 *
024 * @param message the message to be shown.
025 * @param caption the caption of the MsgForm.
026 */
027 public static JDisplayDialog showMessageDialog(String message, String caption) {
028 final JDisplayDialog jdd = new JDisplayDialog(SMarket.getTheMarket().getShopFrame());
029 final FormSheet fs = new MsgForm(caption, message, false);
030 fs.addContentCreator(new FormSheetContentCreator(){
031 private static final long serialVersionUID = 442251504819698301L;
032 protected void createFormSheetContent(final FormSheet fs) {
033 fs.getButton(FormSheet.BTNID_OK).setAction(new sale.Action(){
034 private static final long serialVersionUID = -8951634680505770210L;
035 public void doAction(SaleProcess p, SalesPoint sp) throws Throwable {
036 fs.cancel();
037 }
038 });
039 }
040 });
041 try {
042 jdd.popUpFormSheet(fs);
043 } catch (InterruptedException e) {
044 System.err.println(e.getMessage());
045 }
046 return jdd;
047 }
048
049 /**
050 * Creates a JDisplayDialog that shows a short message, the JDisplayDialog will pop up
051 * in the center of the given FormSheet.
052 * The SalesPoint of the given FormSheet will be suspended while the message is shown.
053 *
054 * @param parent FormSheet to which the position of the JDisplayDialog is set relative to.
055 * @param message the message to be shown.
056 * @param caption the caption of the MsgForm.
057 */
058 public static JDisplayDialog showMessageDialog(final FormSheet parent, String message, String caption){
059 final SalesPoint sp = parent.getSalesPoint();
060 final MenuSheet ms = sp.getDisplay().getMenuSheet();
061 final JDisplayFrame jdf = (sale.JDisplayFrame)parent.getSalesPoint().getDisplay();
062 final JDisplayDialog jdd = new JDisplayDialog(jdf);
063 final FormSheet fs = new MsgForm(caption, message, false);
064 //WindowListener that causes to give the dialog the focus whenever the appropriate
065 //FormSheet got it.
066 final WindowListener wl = new WindowAdapter() {
067 public void windowActivated(WindowEvent e) {
068 jdd.setLocationRelativeTo(parent.getComponent());
069 jdd.toFront();
070 }
071 };
072 //WindowListener that causes wl to be removed and the process to resume when jdd is closed.
073 jdd.addWindowListener(new WindowAdapter(){
074 public void windowClosed(WindowEvent e) {
075 jdf.removeWindowListener(wl);
076 parent.attach(sp);
077 if (ms != null) {
078 ms.attach(sp);
079 }
080 if (parent.getProcess() != null) {
081 parent.getProcess().resume();
082 }
083 }
084 });
085 fs.addContentCreator(new FormSheetContentCreator(){
086 private static final long serialVersionUID = -2496346947105424566L;
087 protected void createFormSheetContent(final FormSheet fs) {
088 fs.getButton(FormSheet.BTNID_OK).setAction(new sale.Action(){
089 private static final long serialVersionUID = 5005873514686820350L;
090 public void doAction(SaleProcess p, SalesPoint sp) throws Throwable {
091 fs.cancel();
092 }
093 });
094 }
095 });
096 try {
097 jdd.popUpFormSheet(parent, fs);
098 jdf.addWindowListener(wl);
099 if (parent.getProcess() != null) {
100 parent.getProcess().suspend(); //stop current SaleProcess
101 }
102 if (ms != null) {
103 ms.detachSalesPoint(); //remove MenuSheet
104 }
105 parent.detachSalesPoint(); //remove FormSheet
106 } catch (InterruptedException e) {
107 System.err.println(e.getMessage());
108 }
109 return jdd;
110 }
111 }