package NET.worlds.console; import NET.worlds.scape.Action; import NET.worlds.scape.RunningActionHandler; import NET.worlds.scape.WObject; import java.util.Enumeration; import java.util.Hashtable; public class RightMenu implements MainCallback { private static RightMenu _current = null; private WObject _obj; private Enumeration _acts; private Hashtable _inttobuttons = new Hashtable(); private int _edit = 0; private int _pm = 0; private int _lastID = 0; public RightMenu(WObject obj, Enumeration acts) { this._obj = obj; this._acts = acts; Main.register(this); } private int add(String label) { if (this._lastID == 0) { this._lastID = 100; } int id = this._lastID++; assert this._lastID < 200; nativeAdd(label, id, this._pm); return id; } private static native int create(); private static native void nativeAdd(String var0, int var1, int var2); private static native void addSeparator(int var0); private static native void show(int var0, int var1); private static native void discard(int var0); private static native int checkPressed(); private void build(Enumeration acts) { if (_current != null) { _current.close(); } _current = this; int rows = 0; Hashtable buttons = new Hashtable(); while (acts.hasMoreElements()) { Action act = acts.nextElement(); String label = act.rightMenuLabel; if (label != null && label != "") { buttons.put(label, act); rows++; } } if (rows <= 0 && Gamma.getShaper() == null) { this.close(); } else { this._pm = create(); if (Gamma.getShaper() != null) { this._edit = this.add("Edit Properties..."); if (rows > 0) { addSeparator(this._pm); } } Enumeration en = buttons.keys(); while (en.hasMoreElements()) { String label = en.nextElement(); this._inttobuttons.put(new Integer(this.add(label)), buttons.get(label)); } show(Window.getHWnd(), this._pm); } } private void close() { discard(this._pm); this._pm = 0; Main.unregister(this); _current = null; } private void checkButton() { int pressed = checkPressed(); if (pressed != 0) { if (pressed == this._edit) { Console.getFrame().getEditTile().viewProperties(this._obj); } else { Action action = this._inttobuttons.get(new Integer(pressed)); RunningActionHandler.trigger(action, this._obj.getWorld(), null); } this.close(); } } @Override public void mainCallback() { if (this._acts != null) { this.build(this._acts); this._acts = null; } else { this.checkButton(); } } }