001    /* JAPI - (Yet another (hopefully) useful) Java API
002     *
003     * Copyright (C) 2004-2006 Christian Hujer
004     *
005     * This program is free software; you can redistribute it and/or
006     * modify it under the terms of the GNU General Public License as
007     * published by the Free Software Foundation; either version 2 of the
008     * License, or (at your option) any later version.
009     *
010     * This program is distributed in the hope that it will be useful, but
011     * WITHOUT ANY WARRANTY; without even the implied warranty of
012     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
013     * General Public License for more details.
014     *
015     * You should have received a copy of the GNU General Public License
016     * along with this program; if not, write to the Free Software
017     * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
018     * 02111-1307, USA.
019     */
020    
021    package net.sf.japi.swing.prefs.keys;
022    
023    import java.awt.BorderLayout;
024    import static java.util.Arrays.asList;
025    import java.util.List;
026    import javax.swing.JScrollPane;
027    import javax.swing.event.ListSelectionEvent;
028    import javax.swing.event.ListSelectionListener;
029    import net.sf.japi.swing.ActionFactory;
030    import net.sf.japi.swing.prefs.AbstractPrefs;
031    import net.sf.japi.swing.treetable.JTreeTable;
032    
033    /** Prefs implementation for configuring keystrokes of one or more {@link ActionFactory ActionFactories}.
034     * TODO
035     * @author <a href="mailto:chris@riedquat.de">Christian Hujer</a>
036     */
037    public class KeyStrokePrefs extends AbstractPrefs implements ListSelectionListener {
038    
039        /** Action Factory. */
040        private static final ActionFactory ACTION_FACOTRY = ActionFactory.getFactory("net.sf.japi.swing.prefs.keys");
041    
042        /** The ActionKeyDisplay. */
043        private final ActionKeyDisplay actionKeyDisplay;
044    
045        /** The table. */
046        private final JTreeTable<KeyStrokeRootNode, AbstractSimpleNode<AbstractSimpleNode>> table;
047    
048        /** Create KeyStrokePrefs for a list of ActionFactories.
049         * @param actionFactories ActionFactories
050         */
051        public KeyStrokePrefs(final ActionFactory... actionFactories) {
052            setListLabelText(ACTION_FACOTRY.getString("prefs.listLabelText"));
053            setLabelText(ACTION_FACOTRY.getString("prefs.labelText"));
054            final List<ActionFactory> factories = asList(actionFactories);
055            setLayout(new BorderLayout());
056            table = new JTreeTable<KeyStrokeRootNode, AbstractSimpleNode<AbstractSimpleNode>>(new KeyStrokeTreeTableModel(factories));
057            add(new JScrollPane(table));
058            table.getSelectionModel().addListSelectionListener(this);
059            actionKeyDisplay = new ActionKeyDisplay();
060            add(actionKeyDisplay, BorderLayout.SOUTH);
061        }
062    
063        /** Create KeyStrokePrefs for a list of named ActionFactories.
064         * @param factoryNames names of ActionFactories
065         */
066        public KeyStrokePrefs(final String... factoryNames) {
067            this(getFactoriesForNames(factoryNames));
068        }
069    
070        private static ActionFactory[] getFactoriesForNames(final String[] factoryNames) {
071            final ActionFactory[] factories = new ActionFactory[factoryNames.length];
072            for (int i = 0; i < factoryNames.length; i++) {
073                factories[i] = ActionFactory.getFactory(factoryNames[i]);
074            }
075            return factories;
076        }
077    
078        /** {@inheritDoc} */
079        public boolean isChanged() {
080            return false;  //TODO
081        }
082    
083        /** {@inheritDoc} */
084        public void defaults() {
085            //TODO
086        }
087    
088        /** {@inheritDoc} */
089        public void revert() {
090            //TODO
091        }
092    
093        /** {@inheritDoc} */
094        public void apply() {
095            //TODO
096        }
097    
098        /** {@inheritDoc} */
099        public void valueChanged(final ListSelectionEvent e) {
100            if (table.getSelectedRow() == -1) {
101                actionKeyDisplay.setAction(null);
102            } else {
103                System.err.println(table.getTreeTableModel().getValueAt(null, table.getSelectedRow()));
104            }
105        }
106    
107    } // class KeyStrokePrefs