⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 assigment.java

📁 类似于Windows上的Excel
💻 JAVA
字号:
/*
 * MC2 -- j2me spreadsheet
 *
 * Copyright (c) 2004-2006 Michael Zemljanukha (mixaz@mail.ru)
 *
 * This program is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public License as published by the Free
 * Software Foundation; either version 2 of the License, or (at your option)
 * any later version.
 *
 * This program 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 for
 * more details.
 *
 * You should have received a copy of the GNU General Public License along
 * with this program; if not, write to the Free Software Foundation, Inc.,
 * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
 */

package com.wapindustrial.calc;

import javax.microedition.lcdui.Choice;
import javax.microedition.lcdui.ChoiceGroup;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Form;
import javax.microedition.lcdui.List;
import javax.microedition.lcdui.TextBox;
import javax.microedition.lcdui.TextField;

import java.util.Vector;

class InputForm {
    private static final int PROMPT_TYPE_TEXT = 0;
    private static final int PROMPT_TYPE_INTEGER = 1;
    private static final int PROMPT_TYPE_FLOAT = 2;
    private static final int PROMPT_TYPE_DATE = 3;
    private static final int PROMPT_TYPE_TIME = 4;
    private static final int PROMPT_TYPE_DATETIME = 5;
    private static final int PROMPT_TYPE_LIST = 100;
    
    final LispObject formtitle;           // if null it's not iteractive call (no user input)
    final LispObject code;                // functor this assigment is mapped to
    
    FunctorList fields[];
    LispObject values[];
    
    Displayable screen;
    
    InputForm( LispObject formtitle, LispObject code) {
        this.formtitle = formtitle;
        this.code = code;
    }

    private void collectFields(Vector fields, LispObject code) {
        int type = code.typeNumber();
        if(type==LispObject.TYPE_FUNCTORLIST) {
            FunctorList fl = (FunctorList)code;
            if(fl.functor==ScreenLite.SCREENLITE.table[ScreenLite.INDEX_PROMPT]) {
                fields.addElement(fl);
            }
            // don't go into nested (input-form)
            else if(fl.functor!=ScreenLite.SCREENLITE.table[ScreenLite.INDEX_INPUT_FORM]) {
                int size = fl.listSize();
                for(int i=1;i<size;i++) {
                    collectFields(fields,fl.getArgumentN(i));
                }
            }
            return;
        }
        if(type==LispObject.TYPE_QUOTEDLIST) {
            QuotedList fl = (QuotedList)code;
            for(int i=0;i<fl.value.length;i++) {
                collectFields(fields,fl.value[i]);
            }
        }
    }

    LispObject buildCode() throws EvaluateException {
        extractFromForm(screen);
        return buildCode(code);
    }
    
    LispObject buildCode(LispObject code) {
        int type = code.typeNumber();
        if(type==LispObject.TYPE_FUNCTORLIST) {
            FunctorList fl = (FunctorList)code;
            if(fl.functor==ScreenLite.SCREENLITE.table[ScreenLite.INDEX_PROMPT]) {
                for(int i=0;i<fields.length;i++) {
                    if(fl==fields[i])
                        return values[i];
                }
                throw new IllegalStateException();
            }
            // don't go into nested (input-form)
            else if(fl.functor!=ScreenLite.SCREENLITE.table[ScreenLite.INDEX_INPUT_FORM]) {
                int size = fl.listSize();
                boolean replace = false;
                LispObject args[] = new LispObject[size];
                args[0]=fl.functor;
                for(int i=1;i<size;i++) {
                    LispObject oldarg = fl.getArgumentN(i);
                    LispObject newarg = buildCode(oldarg);
                    args[i] = newarg;
                    if(oldarg!=newarg)
                        replace = true;
                }
                if(replace)
                    return LispObject.createFunctorList(args);
            }
        }
        if(type==LispObject.TYPE_QUOTEDLIST) {
            QuotedList fl = (QuotedList)code;
            boolean replace = false;
            LispObject args[] = new LispObject[fl.value.length];
            for(int i=0;i<fl.value.length;i++) {
                LispObject oldarg = fl.value[i];
                LispObject newarg = buildCode(oldarg);
                args[i] = newarg;
                if(oldarg!=newarg)
                    replace = true;
            }
            if(replace)
                return new QuotedList(args);
        }
        return code;
    }
    
    void initialize() {
        Vector ff = new Vector(10);
        collectFields(ff,code);
        int size = ff.size();
        fields = new FunctorList[size];
        values = new LispObject[size];
        for(int i=0;i<size;i++) {
            fields[i]=(FunctorList)ff.elementAt(i);
        }
    }
    
    Displayable createForm() throws EvaluateException {

        if(fields.length>1) {
            Form form = new Form(formtitle.evaluateSExp().toValueString(0));
            for(int ii=0; ii<fields.length; ii++) {
                FunctorList fl = fields[ii];
                int type = fl.getShort(1);
                String label = fl.evaluateArg2().toValueString(0);      // string w/o ""
                LispObject value = fl.evaluateArg3();
                switch(type) {
                    case PROMPT_TYPE_LIST:
                    {
                        ChoiceGroup cg = new ChoiceGroup( label, Choice.EXCLUSIVE );
                        LispObject items[] = ((QuotedList)value).value;
                        for( int i=0; i<items.length; i++ )
                            cg.append( items[i].toValueString(0), null );
                        form.append( cg );
                        break;
                    }
                    case PROMPT_TYPE_TEXT:
                        form.append( new TextField( label, value.toValueString(0), 256, TextField.ANY ) );
                        break;
                    case PROMPT_TYPE_INTEGER:
                        form.append( new TextField( label, value.toValueString(0), 256, TextField.NUMERIC ) );
                        break;
                    case PROMPT_TYPE_FLOAT:
                        form.append( new TextField( label, value.toValueString(0), 256, TextField.ANY ) );
                        break;
                }
            }
            screen = form;
            return form;
        }
        
        // Screen (fields.length=1)
        Displayable screen = null;
        FunctorList fl = fields[0];
        int type = fl.getShort(1);
        String label = formtitle.evaluateSExp().toValueString(0);       // string w/o ""
        LispObject value = fl.evaluateArg3();
        switch(fields[0].getShort(1)) {
            case PROMPT_TYPE_LIST:
            {
                List list = new List( label, Choice.EXCLUSIVE );
                LispObject items[] = ((QuotedList)value).value;
                for( int i=0; i<items.length; i++ )
                    list.append( items[i].toValueString(0), null );
                screen = list;
                break;
            }
            case PROMPT_TYPE_TEXT:
                screen = new TextBox( label, value.toValueString(0), 256, TextField.ANY );
                break;
            case PROMPT_TYPE_INTEGER:
                screen = new TextBox( label, value.toValueString( 0 ), 256, TextField.NUMERIC );
                break;
            case PROMPT_TYPE_FLOAT:
                screen = new TextBox( label, value.toValueString( 0 ), 256, TextField.ANY );
                break;
        }
        this.screen = screen;
        return screen;
    }
    
    void extractFromForm(Displayable disp) throws EvaluateException {
        if(fields.length>1) {
            Form form = (Form) disp;
            for(int ii=0; ii<fields.length; ii++) {
                int type = fields[ii].getShort(1);
                LispObject rez = LispObject.NIL;
                switch(type) {
                    case PROMPT_TYPE_LIST:
                    {
                        ChoiceGroup cg = (ChoiceGroup) form.get( ii );
                        int indx = cg.getSelectedIndex();
                        if( indx != -1 )
                            rez = new StringAtom( cg.getString( indx ) );
                        break;
                    }
                    case PROMPT_TYPE_TEXT:
                        rez = new StringAtom( ((TextField)form.get( ii )).getString() );
                        break;
                    case PROMPT_TYPE_INTEGER:
                        rez = ShortAtom.createShortAtom( Short.parseShort( ((TextField)form.get( ii )).getString() ) );
                        break;
                    case PROMPT_TYPE_FLOAT:
                        rez = new FloatAtom( ((TextField)form.get( ii )).getString() );
                        break;
                }
                values[ii] = rez;
            }
            return;
        }
        
        // screen
        int type = fields[0].getShort(1);
        LispObject rez = LispObject.NIL;
        switch(type) {
            case PROMPT_TYPE_LIST:
            {
                List list = (List) disp;
                int indx = list.getSelectedIndex();
                if( indx != -1 )
                    rez = new StringAtom( list.getString( indx ) );
                break;
            }
            case PROMPT_TYPE_TEXT:
                rez = new StringAtom( ((TextBox)disp).getString() );
                break;
            case PROMPT_TYPE_INTEGER:
                rez = ShortAtom.createShortAtom( Short.parseShort( ((TextBox)disp).getString() ) );
                break;
            case PROMPT_TYPE_FLOAT:
                rez = new FloatAtom( ((TextBox)disp).getString() );
                break;
        }
        values[0] = rez;
    }
    

}

// UI item (assigments Lisp functions to menu & keypad)
public class Assigment {
    
    short screenmode;               // screen mode for keycodes (see CanvasHandler1.screenmode
    short keycode;                  // keycode to press
    short gameaction;               // gameaction to press. Either gameaction or keycode is used. Gamecode is higher priority
    Command command;                // if not null it's a command binding
    QuotedList goldkeys;            // gold keys sequence
    String menupath;                // position in menu, if not null it's menu binding
                                    // if both command and menupath = null it's keybinding
    LispObject code;
//    InputForm inputForm;
    
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -