/*
* Copyright 2008-2009 Martin Mainusch
*
* Author: Martin Mainusch donus@gmx.net
*
* 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.mwtgui;
import java.util.Vector;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;
import javax.microedition.midlet.MIDlet;
import mwt.Button;
import mwt.Component;
import org.hecl.ClassCommand;
import org.hecl.ClassCommandInfo;
import org.hecl.HeclException;
import org.hecl.IntThing;
import org.hecl.Interp;
import org.hecl.ListThing;
import org.hecl.ObjectThing;
import org.hecl.StringThing;
import org.hecl.Thing;
//import org.hecl.hecltk.graphics.Drawable;
import org.hecl.misc.HeclUtils;
import org.hecl.mwtgui.ext.HeclWindow;
/**
*
* @author donus
*/
public class MwtManagerCmd implements EventGetWay, ClassCommand, org.hecl.Command {
static protected MIDlet themidlet = null;
private Interp ip;
Thread th;
public Thing method(Interp ip, ClassCommandInfo context, Thing[] argv) throws HeclException {
if (argv.length > 1) {
String subcmd = argv[1].toString().toLowerCase();
Object target = ObjectThing.get(argv[0]);
return handlecmd(ip, target, subcmd, argv, 2);
} else {
throw HeclException.createWrongNumArgsException(argv, 2,
"Object method [arg...]");
}
}
public Thing cmdCode(Interp interp, Thing[] argv) throws HeclException {
ip = interp;
MwtManager htm = MwtManager.getManager();
htm.setSelectionCmd(this);
getDisplay().setCurrent(htm);
return ObjectThing.create(htm);
}
private Display getDisplay() {
return Display.getDisplay(themidlet);
}
private Thing handlecmd(Interp ip, Object target, String subcmd, Thing[] argv, int i) throws HeclException {
MwtManager htm = (MwtManager) target;
if (argv.length < 2) {
throw HeclException.createWrongNumArgsException(argv, 3,
"Object " + subcmd + " [arg...]");
}
if (subcmd.equals("cset")) {
//cset(gp, argv);
} else if (subcmd.equals("main")) {
htm.main = (HeclWindow) ObjectThing.get(argv[2]);
} else if (subcmd.equals("add")) {
htm.main.add((Component) ObjectThing.get(argv[2]));
} else if (subcmd.equals("getmain")) {
return ObjectThing.create(htm.main);
} else if (subcmd.equals("width")) {
return new Thing(Integer.toString(htm.getWidth()));
} else if (subcmd.equals("height")) {
return new Thing(Integer.toString(htm.getHeight()));
} else if (subcmd.equals("run")) {
th = new Thread(htm);
th.start();
} else if (subcmd.equals("dialogopen")) {
htm.main.dialogOpen((HeclWindow) ObjectThing.get(argv[2]));
} else if (subcmd.equals("dialogclose")) {
htm.main.dialogClose();
} else if (subcmd.equals("stop")) {
htm.setExit(HeclUtils.thing2bool(argv[2]));
} else if (subcmd.equals("initfont")) {
return ObjectThing.create(FontCmd.initFont(argv[2].toString()));
} else if (subcmd.equals("initskin")) {
if (4 != argv.length) {
throw HeclException.createWrongNumArgsException(
argv, 4, "initskin <prefix> <size>");
}
return ObjectThing.create(SkinCmd.initSkin(argv[2].toString(), IntThing.get(argv[3])));
} else if (subcmd.equals("initadvancefont")) {
if (5 != argv.length) {
throw HeclException.createWrongNumArgsException(
argv, 5, "initadvancefont <imagename> <charset> <width>");
}
Vector v = ListThing.get(argv[4]);
int[] widths = new int[v.size()];
for (int j = 0; j < v.size(); j++) {
widths[j] = Integer.parseInt(((Thing) v.elementAt(j)).toString());
}
return ObjectThing.create(FontCmd.initFontAdvance(argv[2].toString(),argv[3].toString(), widths));
} else if (subcmd.equals("bgimage")) {
htm.setBgImage((Image) ObjectThing.get(argv[2]));
} else if (subcmd.equals("repaint")) {
htm.repaint();
}
return null;
}
public void execHeclCmd(String sender) throws HeclException {
ip.eval(new Thing(sender));
}
public static void load(Interp ip, MIDlet m) {
themidlet = m;
ip.addCommand(CMDNAME, cmd);
ip.addClassCmd(MwtManager.class, cmd);
}
public static void unload(Interp ip) {
ip.removeCommand(CMDNAME);
ip.removeClassCmd(MwtManager.class);
}
private static MwtManagerCmd cmd = new MwtManagerCmd();
private static final String CMDNAME = "mwt.manager";
public void execHecl(Graphics g) throws HeclException {
// Vector v = new Vector();
// v.addElement(StringThing.create("paint"));
// v.addElement(ObjectThing.create(new Drawable(g, g.getClipWidth(), g.getClipHeight())));
// ip.evalIdle(ListThing.create(v));
}
public void keyPressed(int keyCode) throws HeclException {
ip.eval(new Thing("keypressed " + keyCode));
}
public void keyReleased(int keyCode) throws HeclException {
ip.eval(new Thing("keyreleased " + keyCode));
}
public void execHeclCmd(int arg0, Component arg1, Object[] arg2) {
Vector v = new Vector();
v.addElement(StringThing.create("processevent"));
v.addElement(IntThing.create(arg0));
v.addElement(ObjectThing.create(arg1));
ip.evalIdle(ListThing.create(v));
}
public void execHeclCmd(int arg0, Button arg1, Object[] arg2) {
Vector v = new Vector();
v.addElement(StringThing.create("processevent"));
v.addElement(IntThing.create(arg0));
v.addElement(ObjectThing.create(arg1));
ip.evalIdle(ListThing.create(v));
}
}