001    package market.stdform;
002    
003    import market.SMarket;
004    import sale.GateChangeTransition;
005    import sale.MenuSheet;
006    import sale.MenuSheetItem;
007    import sale.SaleProcess;
008    import sale.SalesPoint;
009    import sale.Transition;
010    import sale.UIGate;
011    
012    /**
013     * This MenuSheet class provides a simple log-off MenuSheet.
014     */
015    public class MSLogOff extends MenuSheet{
016    
017        /**
018         * Creates a MenuSheet with one MenuSheetItem, which`s action closes the SalesPoint related to the MenuSheet.
019         *
020         * @param trans Transition that gets set in the MenuSheetItem`s action to the current Gate of a SaleProcess,
021         * if someone runs on the SalesPoint related to this MenuSheet.
022         */
023        public MSLogOff(final Transition trans) {
024            super("System", null, 'S');
025            this.add(new MenuSheetItem("Abmelden", "exit", new sale.Action() {
026                public void doAction(SaleProcess p, SalesPoint sp) throws Throwable {
027                    if(p!=null){
028                        ((UIGate)p.getCurrentGate()).setNextTransition(trans);
029                    }
030                    if (sp != null) {//sp is only null if a JDDShowMessage is active
031                        if(sp.getCurrentProcess()!=null) sp.processFinished(p);
032                        SMarket.getTheMarket().removeSalesPoint(sp);
033                        sp.quit();
034                    }
035                }
036            }, 'A'));
037        }
038    
039        /**
040         * Overloads constructor with GateChangeTransition.CHANGE_TO_STOP_GATE as argument.
041         */
042        public MSLogOff() {
043            this(GateChangeTransition.CHANGE_TO_STOP_GATE);
044        }
045    }