001    /*
002     * Copyright (c) 2005 Einar Pehrson <einar@pehrson.nu>.
003     *
004     * This file is part of
005     * CleanSheets - a spreadsheet application for the Java platform.
006     *
007     * CleanSheets is free software; you can redistribute it and/or modify
008     * it under the terms of the GNU General Public License as published by
009     * the Free Software Foundation; either version 2 of the License, or
010     * (at your option) any later version.
011     *
012     * CleanSheets is distributed in the hope that it will be useful,
013     * but WITHOUT ANY WARRANTY; without even the implied warranty of
014     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
015     * GNU General Public License for more details.
016     *
017     * You should have received a copy of the GNU General Public License
018     * along with CleanSheets; if not, write to the Free Software
019     * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
020     */
021    package csheets.ui;
022    
023    import java.awt.Window;
024    import java.awt.event.ActionEvent;
025    import java.awt.event.WindowAdapter;
026    import java.awt.event.WindowEvent;
027    
028    import javax.swing.Action;
029    
030    /**
031     * A window adapter that invokes an action on window closing.
032     * @author Einar Pehrson
033     */
034    public class WindowClosingHandler extends WindowAdapter {
035    
036            /** The window to listen to */
037            private Window window;
038    
039            /** The action to invoke on window closing */
040            private Action action;
041    
042            /**
043             * Creates a new window closing handler
044             * @param window the window to listen to
045             * @param action the action to invoke on window closing
046             */
047             public WindowClosingHandler(Window window, Action action) {
048                    this.window = window;
049                    this.action = action;
050             }
051    
052            /**
053             * Invokes exit() on the UI controller when a window closing event
054             * is received.
055             * @param e the event that was fied
056             */
057            public void windowClosing(WindowEvent e) {
058                    action.actionPerformed(new ActionEvent(window, ActionEvent.ACTION_PERFORMED,
059                            action.getValue(Action.ACTION_COMMAND_KEY).toString()));
060            }
061    }