/* * Copyright 2008 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Sun designates this * particular file as subject to the "Classpath" exception as provided * by Sun in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, * CA 95054 USA or visit www.sun.com if you need additional information or * have any questions. */ package com.sun.lwuit.impl.midp; import com.sun.lwuit.Font; import com.sun.lwuit.Form; import com.sun.lwuit.TextField; import com.sun.lwuit.events.ActionEvent; import com.sun.lwuit.events.ActionListener; import com.sun.lwuit.plaf.Border; import com.sun.lwuit.plaf.Style; import com.sun.lwuit.plaf.UIManager; import java.util.Hashtable; /** * An implementation of LWUIT that features a Light Weight Virtual Keyboard. * * @author Chen Fishbein */ public class VKBImplementation extends GameCanvasImplementation{ private static Class vkbClass = VirtualKeyboard.class; private VirtualKeyboard vkb; public void init(Object m) { super.init(m); //installs a listener on the UIManager that updates the default styles //for the Virtual Keyboard UIManager.getInstance().addThemeRefreshListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { Hashtable themeProps = new Hashtable(); themeProps.put("VKB.bgColor", "666666"); themeProps.put("VKB.padding", "3,6,3,3"); themeProps.put("VKBtooltip.padding", "8,8,8,8"); themeProps.put("VKBtooltip.font", Font.createSystemFont(Font.FACE_SYSTEM, Font.STYLE_BOLD, Font.SIZE_LARGE)); themeProps.put("VKBtooltip.bgColor", "FFFFFF"); themeProps.put("VKBtooltip.fgColor", "0"); themeProps.put("VKBtooltip.border", Border.createRoundBorder(8, 8)); themeProps.put("VKBButton.fgColor", "FFFFFF"); themeProps.put("VKBButton.bgColor", "0"); themeProps.put("VKBButton.sel#fgColor", "FFFFFF"); themeProps.put("VKBButton.sel#bgColor", "0"); themeProps.put("VKBButton.press#fgColor", "FFFFFF"); themeProps.put("VKBButton.press#bgColor", "0"); themeProps.put("VKBButton.border", Border.createRoundBorder(8, 8)); themeProps.put("VKBButton.sel#border", Border.createRoundBorder(8, 8)); themeProps.put("VKBButton.press#border", Border.createRoundBorder(8, 8)); // themeProps.put("VKBButton.bgType", new Byte(Style.BACKGROUND_GRADIENT_LINEAR_VERTICAL)); themeProps.put("VKBButton.sel#bgType", new Byte(Style.BACKGROUND_GRADIENT_LINEAR_VERTICAL)); themeProps.put("VKBButton.press#bgType", new Byte(Style.BACKGROUND_GRADIENT_LINEAR_VERTICAL)); // themeProps.put("VKBButton.bgGradient", new Object[]{new Integer(0x666666), // new Integer(0), new Float(0), new Float(0), new Float(0) // }); themeProps.put("VKBButton.sel#bgGradient", new Object[]{new Integer(0x666666), new Integer(0), new Float(0), new Float(0), new Float(0) }); themeProps.put("VKBButton.press#bgGradient", new Object[]{new Integer(0), new Integer(0x666666), new Float(0), new Float(0), new Float(0) }); themeProps.put("VKBButton.margin", "2,2,1,1"); themeProps.put("VKBButton.sel#margin", "2,2,1,1"); themeProps.put("VKBButton.press#margin", "2,2,1,1"); themeProps.put("VKBButton.padding", "8,8,4,4"); themeProps.put("VKBButton.sel#padding", "8,8,4,4"); themeProps.put("VKBButton.press#padding", "8,8,4,4"); themeProps.put("VKBButton.font", Font.createSystemFont(Font.FACE_SYSTEM, Font.STYLE_BOLD, Font.SIZE_MEDIUM)); themeProps.put("VKBButton.sel#font", Font.createSystemFont(Font.FACE_SYSTEM, Font.STYLE_BOLD, Font.SIZE_MEDIUM)); themeProps.put("VKBButton.press#font", Font.createSystemFont(Font.FACE_SYSTEM, Font.STYLE_BOLD, Font.SIZE_MEDIUM)); themeProps.put("VKBSpecialButton.fgColor", "FFFFFF"); themeProps.put("VKBSpecialButton.bgColor", "0"); themeProps.put("VKBSpecialButton.sel#fgColor", "FFFFFF"); themeProps.put("VKBSpecialButton.sel#bgColor", "0"); themeProps.put("VKBSpecialButton.press#fgColor", "FFFFFF"); themeProps.put("VKBSpecialButton.press#bgColor", "0"); themeProps.put("VKBSpecialButton.border", Border.createRoundBorder(8, 8)); themeProps.put("VKBSpecialButton.sel#border", Border.createRoundBorder(8, 8)); themeProps.put("VKBSpecialButton.press#border", Border.createRoundBorder(8, 8)); themeProps.put("VKBSpecialButton.bgType", new Byte(Style.BACKGROUND_GRADIENT_LINEAR_VERTICAL)); themeProps.put("VKBSpecialButton.sel#bgType", new Byte(Style.BACKGROUND_GRADIENT_LINEAR_VERTICAL)); themeProps.put("VKBSpecialButton.press#bgType", new Byte(Style.BACKGROUND_GRADIENT_LINEAR_VERTICAL)); themeProps.put("VKBSpecialButton.bgGradient", new Object[]{new Integer(0xcccccc), new Integer(0x666666), new Float(0), new Float(0), new Float(0) }); themeProps.put("VKBSpecialButton.sel#bgGradient", new Object[]{new Integer(0xcccccc), new Integer(0x666666), new Float(0), new Float(0), new Float(0) }); themeProps.put("VKBSpecialButton.press#bgGradient", new Object[]{new Integer(0x666666), new Integer(0xcccccc), new Float(0), new Float(0), new Float(0) }); themeProps.put("VKBSpecialButton.margin", "2,2,1,1"); themeProps.put("VKBSpecialButton.sel#margin", "2,2,1,1"); themeProps.put("VKBSpecialButton.press#margin", "2,2,1,1"); themeProps.put("VKBSpecialButton.padding", "6,6,4,4"); themeProps.put("VKBSpecialButton.sel#padding", "6,6,4,4"); themeProps.put("VKBSpecialButton.press#padding", "6,6,4,4"); themeProps.put("VKBSpecialButton.font", Font.createSystemFont(Font.FACE_SYSTEM, Font.STYLE_BOLD, Font.SIZE_MEDIUM)); themeProps.put("VKBSpecialButton.sel#font", Font.createSystemFont(Font.FACE_SYSTEM, Font.STYLE_BOLD, Font.SIZE_MEDIUM)); themeProps.put("VKBSpecialButton.press#font", Font.createSystemFont(Font.FACE_SYSTEM, Font.STYLE_BOLD, Font.SIZE_MEDIUM)); themeProps.put("VKBTextInput.sel#fgColor", "FFFFFF"); themeProps.put("VKBTextInput.sel#bgColor", "0"); themeProps.put("VKBTextInput.sel#font", Font.createSystemFont(Font.FACE_SYSTEM, Font.STYLE_BOLD, Font.SIZE_MEDIUM)); themeProps.put("VKBTextInput.sel#border", Border.getDefaultBorder()); UIManager.getInstance().addThemeProps(themeProps); } }); } /** * @inheritDoc */ public boolean isVirtualKeyboardShowing() { return vkb != null && vkb.isVisible(); } /** * @inheritDoc */ public boolean isVirtualKeyboardShowingSupported() { return true; } /** * @inheritDoc */ public void setShowVirtualKeyboard(boolean show) { if (show) { Form f = getCurrentForm(); TextField txtCmp = (TextField) f.getFocused(); if (txtCmp != null) { vkb = VirtualKeyboard.getVirtualKeyboard(txtCmp); if(vkb == null){ vkb = createVirtualKeyboard(); } vkb.setTextField(txtCmp); int oldTint = f.getTintColor(); f.setTintColor(VirtualKeyboard.getVKBTint(txtCmp)); boolean third = com.sun.lwuit.Display.getInstance().isThirdSoftButton(); com.sun.lwuit.Display.getInstance().setThirdSoftButton(false); boolean qwerty = txtCmp.isQwertyInput(); txtCmp.setQwertyInput(true); vkb.showDialog(); txtCmp.setQwertyInput(qwerty); com.sun.lwuit.Display.getInstance().setThirdSoftButton(third); f.setTintColor(oldTint); } } } /** * Sets the virtual keyboard class. * * @param vkbClazz this class must extend VirtualKeyboard. */ static void setVirtualKeyboardClass(Class vkbClazz){ vkbClass = vkbClazz; } private VirtualKeyboard createVirtualKeyboard() { try { return (VirtualKeyboard) vkbClass.newInstance(); } catch (Exception ex) { ex.printStackTrace(); return new VirtualKeyboard(); } } }