001    /*
002     * Created on Nov 16, 2009
003     *
004     * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
005     * in compliance with the License. You may obtain a copy of the License at
006     *
007     * http://www.apache.org/licenses/LICENSE-2.0
008     *
009     * Unless required by applicable law or agreed to in writing, software distributed under the License
010     * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
011     * or implied. See the License for the specific language governing permissions and limitations under
012     * the License.
013     *
014     * Copyright @2009-2010 the original author or authors.
015     */
016    package org.fest.swing.keystroke;
017    
018    import static java.awt.event.InputEvent.SHIFT_MASK;
019    import static java.awt.event.KeyEvent.*;
020    import static java.util.Collections.unmodifiableList;
021    import static org.fest.swing.keystroke.KeyStrokeMapping.mapping;
022    
023    
024    import java.util.*;
025    
026    import javax.swing.KeyStroke;
027    
028    /**
029     * Understands mapping characters to <code>{@link KeyStroke}</code>s for locale
030     * <code>{@link java.util.Locale#FRENCH FRENCH}</code>.
031     *
032     * @author Florian SIMON
033     * @author Alex Ruiz
034     */
035    public class KeyStrokeMappingProvider_fr implements KeyStrokeMappingProvider {
036    
037      /**
038       * Returns the mapping between characters and <code>{@link KeyStroke}</code>s for locale
039       * <code>{@link java.util.Locale#FRENCH FRENCH}</code>.
040       * @return the mapping between characters and <code>KeyStroke</code>s for locale <code>FRENCH</code>.
041       */
042      public Collection<KeyStrokeMapping> keyStrokeMappings() {
043        return SingletonHolder.instance;
044      }
045    
046      // Thread-safe, lazy-loading singleton.
047      private static class SingletonHolder {
048        static List<KeyStrokeMapping> instance = createMappings();
049      }
050    
051      private static List<KeyStrokeMapping> createMappings() {
052        List<KeyStrokeMapping> mappings = new ArrayList<KeyStrokeMapping>();
053        mappings.add(mapping('\b', VK_BACK_SPACE, NO_MASK));
054        mappings.add(mapping('', VK_DELETE, NO_MASK));
055        mappings.add(mapping('', VK_ESCAPE, NO_MASK));
056        mappings.add(mapping('\n', VK_ENTER, NO_MASK));
057        mappings.add(mapping('\r', VK_ENTER, NO_MASK));
058        mappings.add(mapping('&', VK_1, NO_MASK));
059        mappings.add(mapping('1', VK_1, SHIFT_MASK));
060        mappings.add(mapping('?', VK_2, NO_MASK));
061        mappings.add(mapping('2', VK_2, SHIFT_MASK));
062        mappings.add(mapping('"', VK_3, NO_MASK));
063        mappings.add(mapping('3', VK_3, SHIFT_MASK));
064        mappings.add(mapping('\'', VK_4, NO_MASK));
065        mappings.add(mapping('4', VK_4, SHIFT_MASK));
066        mappings.add(mapping('(', VK_5, NO_MASK));
067        mappings.add(mapping('5', VK_5, SHIFT_MASK));
068        mappings.add(mapping('-', VK_6, NO_MASK));
069        mappings.add(mapping('6', VK_6, SHIFT_MASK));
070        mappings.add(mapping('?', VK_7, NO_MASK));
071        mappings.add(mapping('7', VK_7, SHIFT_MASK));
072        mappings.add(mapping('_', VK_8, NO_MASK));
073        mappings.add(mapping('8', VK_8, SHIFT_MASK));
074        mappings.add(mapping('?', VK_9, NO_MASK));
075        mappings.add(mapping('9', VK_9, SHIFT_MASK));
076        mappings.add(mapping('?', VK_0, NO_MASK));
077        mappings.add(mapping('0', VK_0, SHIFT_MASK));
078        mappings.add(mapping('=', VK_EQUALS, NO_MASK));
079        mappings.add(mapping('+', VK_EQUALS, SHIFT_MASK));
080        mappings.add(mapping('a', VK_A, NO_MASK));
081        mappings.add(mapping('A', VK_A, SHIFT_MASK));
082        mappings.add(mapping('b', VK_B, NO_MASK));
083        mappings.add(mapping('B', VK_B, SHIFT_MASK));
084        mappings.add(mapping('c', VK_C, NO_MASK));
085        mappings.add(mapping('C', VK_C, SHIFT_MASK));
086        mappings.add(mapping('d', VK_D, NO_MASK));
087        mappings.add(mapping('D', VK_D, SHIFT_MASK));
088        mappings.add(mapping('e', VK_E, NO_MASK));
089        mappings.add(mapping('E', VK_E, SHIFT_MASK));
090        mappings.add(mapping('f', VK_F, NO_MASK));
091        mappings.add(mapping('F', VK_F, SHIFT_MASK));
092        mappings.add(mapping('g', VK_G, NO_MASK));
093        mappings.add(mapping('G', VK_G, SHIFT_MASK));
094        mappings.add(mapping('h', VK_H, NO_MASK));
095        mappings.add(mapping('H', VK_H, SHIFT_MASK));
096        mappings.add(mapping('i', VK_I, NO_MASK));
097        mappings.add(mapping('I', VK_I, SHIFT_MASK));
098        mappings.add(mapping('j', VK_J, NO_MASK));
099        mappings.add(mapping('J', VK_J, SHIFT_MASK));
100        mappings.add(mapping('k', VK_K, NO_MASK));
101        mappings.add(mapping('K', VK_K, SHIFT_MASK));
102        mappings.add(mapping('l', VK_L, NO_MASK));
103        mappings.add(mapping('L', VK_L, SHIFT_MASK));
104        mappings.add(mapping('m', VK_M, NO_MASK));
105        mappings.add(mapping('M', VK_M, SHIFT_MASK));
106        mappings.add(mapping('n', VK_N, NO_MASK));
107        mappings.add(mapping('N', VK_N, SHIFT_MASK));
108        mappings.add(mapping('o', VK_O, NO_MASK));
109        mappings.add(mapping('O', VK_O, SHIFT_MASK));
110        mappings.add(mapping('p', VK_P, NO_MASK));
111        mappings.add(mapping('P', VK_P, SHIFT_MASK));
112        mappings.add(mapping('q', VK_Q, NO_MASK));
113        mappings.add(mapping('Q', VK_Q, SHIFT_MASK));
114        mappings.add(mapping('r', VK_R, NO_MASK));
115        mappings.add(mapping('R', VK_R, SHIFT_MASK));
116        mappings.add(mapping('s', VK_S, NO_MASK));
117        mappings.add(mapping('S', VK_S, SHIFT_MASK));
118        mappings.add(mapping('t', VK_T, NO_MASK));
119        mappings.add(mapping('T', VK_T, SHIFT_MASK));
120        mappings.add(mapping('u', VK_U, NO_MASK));
121        mappings.add(mapping('U', VK_U, SHIFT_MASK));
122        mappings.add(mapping('v', VK_V, NO_MASK));
123        mappings.add(mapping('V', VK_V, SHIFT_MASK));
124        mappings.add(mapping('w', VK_W, NO_MASK));
125        mappings.add(mapping('W', VK_W, SHIFT_MASK));
126        mappings.add(mapping('x', VK_X, NO_MASK));
127        mappings.add(mapping('X', VK_X, SHIFT_MASK));
128        mappings.add(mapping('y', VK_Y, NO_MASK));
129        mappings.add(mapping('Y', VK_Y, SHIFT_MASK));
130        mappings.add(mapping('z', VK_Z, NO_MASK));
131        mappings.add(mapping('Z', VK_Z, SHIFT_MASK));
132        return unmodifiableList(mappings);
133      }
134    }