package org.geogebra.keyboard.base; import org.geogebra.keyboard.base.impl.KeyboardImpl; import org.geogebra.keyboard.base.model.KeyModifier; import org.geogebra.keyboard.base.model.KeyboardModel; import org.geogebra.keyboard.base.model.impl.AccentModifier; import org.geogebra.keyboard.base.model.impl.CapsLockModifier; import org.geogebra.keyboard.base.model.impl.factory.ButtonFactory; import org.geogebra.keyboard.base.model.impl.factory.KeyboardModelFactory; /** * Creates {@link Keyboard} classes. */ public class KeyboardFactory { private KeyboardModelFactory keyboardModelFactory = new KeyboardModelFactory(); private ButtonFactory defaultButtonFactory = new ButtonFactory(null); /** * Creates a math keyboard with numbers and operators. * * @return math keyboard */ public Keyboard createMathKeyboard() { KeyboardModel model = keyboardModelFactory.createMathKeyboard(defaultButtonFactory); return new KeyboardImpl(model, null, null); } /** * Creates a function keyboard with the function buttons. * * @return function keyboard */ public Keyboard createFunctionsKeyboard() { KeyboardModel model = keyboardModelFactory.createFunctionKeyboard(defaultButtonFactory); return new KeyboardImpl(model, null, null); } /** * Creates a greek keyboard with the greek letters and control buttons. * * @return greek keyboard */ public Keyboard createGreekKeyboard() { AccentModifier accentModifier = new AccentModifier(); CapsLockModifier capsLockModifier = new CapsLockModifier(); ButtonFactory buttonFactory = new ButtonFactory(new KeyModifier[] {accentModifier, capsLockModifier}); KeyboardModel model = keyboardModelFactory.createGreekKeyboard(buttonFactory); return new KeyboardImpl(model, capsLockModifier, accentModifier); } /** * Creates a letter (or ABC) keyboard with letters on it. There is a restriction on the * row definitions that are passed as a String, namely * he bottom row has to be shorter than the top or middle row. * If the restrictions are not met, a {@link RuntimeException} is thrown. * * @param topRow a list of characters that will be the buttons of the top row * @param middleRow a list of characters that will the buttons of the middle row * @param bottomRow a list of characters that will be the buttons of the last row * @return letter keyboard */ public Keyboard createLettersKeyboard(String topRow, String middleRow, String bottomRow) { AccentModifier accentModifier = new AccentModifier(); CapsLockModifier capsLockModifier = new CapsLockModifier(); ButtonFactory buttonFactory = new ButtonFactory(new KeyModifier[] {accentModifier, capsLockModifier}); KeyboardModel model = keyboardModelFactory.createLetterKeyboard(buttonFactory, topRow, middleRow, bottomRow); return new KeyboardImpl(model, capsLockModifier, accentModifier); } /** * Creates a special symbols keyboard with symbols control buttons, * and a button to switch to the letters keyboard. * * @return special symbols keyboard */ public Keyboard createSpecialSymbolsKeyboard() { KeyboardModel model = keyboardModelFactory.createSpecialSymbolsKeyboard(defaultButtonFactory); return new KeyboardImpl(model, null, null); } }