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 protected void createFormSheetContent(final FormSheet fs) {
032 fs.getButton(FormSheet.BTNID_OK).setAction(new sale.Action(){
033 public void doAction(SaleProcess p, SalesPoint sp) throws Throwable {
034 fs.cancel();
035 }
036 });
037 }
038 });
039 try {
040 jdd.popUpFormSheet(fs);
041 } catch (InterruptedException e) {
042 System.err.println(e.getMessage());
043 }
044 return jdd;
045 }
046
047 /**
048 * Creates a JDisplayDialog that shows a short message, the JDisplayDialog will pop up
049 * in the center of the given FormSheet.
050 * The SalesPoint of the given FormSheet will be suspended while the message is shown.
051 *
052 * @param parent FormSheet to which the position of the JDisplayDialog is set relative to.
053 * @param message the message to be shown.
054 * @param caption the caption of the MsgForm.
055 */
056 public static JDisplayDialog showMessageDialog(final FormSheet parent, String message, String caption){
057 final SalesPoint sp = parent.getSalesPoint();
058 final MenuSheet ms = sp.getDisplay().getMenuSheet();
059 final JDisplayFrame jdf = (sale.JDisplayFrame)parent.getSalesPoint().getDisplay();
060 final JDisplayDialog jdd = new JDisplayDialog(jdf);
061 final FormSheet fs = new MsgForm(caption, message, false);
062 //WindowListener that causes to give the dialog the focus whenever the appropriate
063 //FormSheet got it.
064 final WindowListener wl = new WindowAdapter() {
065 public void windowActivated(WindowEvent e) {
066 jdd.setLocationRelativeTo(parent.getComponent());
067 jdd.toFront();
068 }
069 };
070 //WindowListener that causes wl to be removed and the process to resume when jdd is closed.
071 jdd.addWindowListener(new WindowAdapter(){
072 public void windowClosed(WindowEvent e) {
073 jdf.removeWindowListener(wl);
074 parent.attach(sp);
075 if (ms != null) {
076 ms.attach(sp);
077 }
078 if (parent.getProcess() != null) {
079 parent.getProcess().resume();
080 }
081 }
082 });
083 fs.addContentCreator(new FormSheetContentCreator(){
084 protected void createFormSheetContent(final FormSheet fs) {
085 fs.getButton(FormSheet.BTNID_OK).setAction(new sale.Action(){
086 public void doAction(SaleProcess p, SalesPoint sp) throws Throwable {
087 fs.cancel();
088 }
089 });
090 }
091 });
092 try {
093 jdd.popUpFormSheet(parent, fs);
094 jdf.addWindowListener(wl);
095 if (parent.getProcess() != null) {
096 parent.getProcess().suspend(); //stop current SaleProcess
097 }
098 if (ms != null) {
099 ms.detachSalesPoint(); //remove MenuSheet
100 }
101 parent.detachSalesPoint(); //remove FormSheet
102 } catch (InterruptedException e) {
103 System.err.println(e.getMessage());
104 }
105 return jdd;
106 }
107 }