/* * Copyright 2005-2007 * Wolfgang S. Kechel, data2c GmbH (www.data2c.com) * * Author: Wolfgang S. Kechel - wolfgang.kechel@data2c.com * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.hecl.midp20.lcdui; import javax.microedition.lcdui.TextBox; import javax.microedition.lcdui.TextField; import org.hecl.HeclException; import org.hecl.Interp; import org.hecl.IntThing; import org.hecl.ObjectThing; import org.hecl.Properties; import org.hecl.StringThing; import org.hecl.Thing; import org.hecl.misc.HeclUtils; public class TextBoxCmd extends ScreenCmd { public static void load(Interp ip) { ip.addCommand(CMDNAME,cmd); ip.addClassCmd(TextBox.class,cmd); } public static void unload(Interp ip) { ip.removeCommand(CMDNAME); ip.removeClassCmd(TextBox.class); } public Thing cmdCode(Interp interp,Thing[] argv) throws HeclException { Properties p = WidgetInfo.defaultProps(TextBox.class); p.setProps(argv,1); TextBox w = new TextBox(p.getProp(WidgetInfo.NTITLE).toString(), p.getProp(WidgetInfo.NTEXT).toString(), HeclUtils.thing2len( p.getProp(WidgetInfo.NMAXLEN),1), WidgetInfo.toTextType(p.getProp(WidgetInfo.NTYPE))); p.delProp(WidgetInfo.NTITLE); p.delProp(WidgetInfo.NTEXT); p.delProp(WidgetInfo.NMAXLEN); p.delProp(WidgetInfo.NTYPE); return ObjectThing.create(setInstanceProperties(interp,w,p)); } protected TextBoxCmd() {} public Thing cget(Interp ip,Object target,String optname) throws HeclException { TextBox tb = (TextBox)target; if(optname.equals(WidgetInfo.NTYPE)) return WidgetInfo.fromTextType( tb.getConstraints() & ~TextField.CONSTRAINT_MASK); if(optname.equals(WidgetInfo.NTEXT)) return StringThing.create(tb.getString()); if(optname.equals(WidgetInfo.NMAXLEN)) return IntThing.create(tb.getMaxSize()); if(optname.equals("-password")) return IntThing.create(0 != (tb.getConstraints()&TextField.PASSWORD)); if(optname.equals("-uneditable")) return IntThing.create(0 != (tb.getConstraints()&TextField.UNEDITABLE)); if(optname.equals("-sensitive")) return IntThing.create(0 != (tb.getConstraints()&TextField.SENSITIVE)); if(optname.equals("-non_predictive")) return IntThing.create(0 != (tb.getConstraints()&TextField.NON_PREDICTIVE)); if(optname.equals("-initial_caps_word")) return IntThing.create(0 != (tb.getConstraints()&TextField.INITIAL_CAPS_WORD)); if(optname.equals("-initial_caps_sentence")) return IntThing.create(0 != (tb.getConstraints()&TextField.INITIAL_CAPS_SENTENCE)); if(optname.equals("-caretposition")) return IntThing.create(tb.getCaretPosition()); return super.cget(ip,target,optname); } public void cset(Interp ip,Object target,String optname,Thing optval) throws HeclException { TextBox tb = (TextBox)target; if(optname.equals(WidgetInfo.NTYPE)) { int c = (tb.getConstraints() & TextField.CONSTRAINT_MASK); tb.setConstraints(c | WidgetInfo.toTextType(optval)); return; } if(optname.equals(WidgetInfo.NTRUNCATE)) { int max = tb.getMaxSize(); String newtext = optval.toString(); if (newtext.length() > max) { newtext = newtext.substring(0, max); } tb.setString(newtext); return; } if(optname.equals(WidgetInfo.NGROW)) { int max = tb.getMaxSize(); String newtext = optval.toString(); int textlen = newtext.length(); if (textlen > max) { int newmax = tb.setMaxSize(textlen); if (newmax < textlen) { newtext = newtext.substring(0, newmax); } } tb.setString(newtext); return; } if(optname.equals(WidgetInfo.NTEXT)) { tb.setString(optval.toString()); return; } if(optname.equals(WidgetInfo.NMAXLEN)) { int len = IntThing.get(optval); if(len <1) throw new HeclException("Invalid length specifier."); tb.setMaxSize(len); return; } int c = tb.getConstraints(); if(optname.equals("-password")) { c &= ~TextField.PASSWORD; tb.setConstraints(c | (HeclUtils.thing2bool(optval) ? TextField.PASSWORD : 0)); return; } if(optname.equals("-uneditable")) { c &= ~TextField.UNEDITABLE; tb.setConstraints(c | (HeclUtils.thing2bool(optval) ? TextField.UNEDITABLE : 0)); return; } if(optname.equals("-sensitive")) { c &= ~TextField.SENSITIVE; tb.setConstraints(c | (HeclUtils.thing2bool(optval) ? TextField.SENSITIVE : 0)); return; } if(optname.equals("-non_predictive")) { c &= ~TextField.NON_PREDICTIVE; tb.setConstraints(c | (HeclUtils.thing2bool(optval) ? TextField.NON_PREDICTIVE : 0)); return; } if(optname.equals("-initial_caps_word")) { c &= ~TextField.INITIAL_CAPS_WORD; tb.setConstraints(c | (HeclUtils.thing2bool(optval) ? TextField.INITIAL_CAPS_WORD : 0)); return; } if(optname.equals("-initial_caps_sentence")) { c &= ~TextField.INITIAL_CAPS_SENTENCE; tb.setConstraints(c | (HeclUtils.thing2bool(optval) ? TextField.INITIAL_CAPS_SENTENCE : 0)); return; } super.cset(ip,target,optname,optval); } private static TextBoxCmd cmd = new TextBoxCmd(); private static final String CMDNAME = "lcdui.textbox"; } // Variables: // mode:java // coding:utf-8 // End: