📄 menu.java
字号:
package xcalc;
import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Graphics;
public final class Menu {
private static Menu current;
private static Menu root;
private final String name;
private final Menu[] items;
private Menu parent;
public static String selected;
private static final String[] shortCut = {
"1",
"2",
"3",
"4",
"5",
"6",
"7",
"8",
"9",
"*",
"0",
"#"
};
private Menu(final String n, final Menu[] i) {
this.name = n;
this.items = i;
}
public static boolean isRoot(){
return current == root;
}
public static void setParent(){
current = current.parent;
}
public static void initialize(){
root = new Menu( "root",
new Menu[]{
new Menu(Solver.C_COMMANDS[Solver.K_1],null),
new Menu(Solver.C_COMMANDS[Solver.K_2],null),
new Menu(Solver.C_COMMANDS[Solver.K_3],null),
new Menu(Solver.C_COMMANDS[Solver.K_4],null),
new Menu(Solver.C_COMMANDS[Solver.K_5],null),
new Menu(Solver.C_COMMANDS[Solver.K_6],null),
new Menu(Solver.C_COMMANDS[Solver.K_7],null),
new Menu(Solver.C_COMMANDS[Solver.K_8],null),
new Menu(Solver.C_COMMANDS[Solver.K_9],null),
new Menu("math",
new Menu[]{
new Menu(Solver.C_COMMANDS[Solver.K_ADD],null),
new Menu(Solver.C_COMMANDS[Solver.K_SUB],null),
new Menu(Solver.C_COMMANDS[Solver.K_BREAKET_OPEN],null),
new Menu(Solver.C_COMMANDS[Solver.K_MUL],null),
new Menu(Solver.C_COMMANDS[Solver.K_DIV],null),
new Menu(Solver.C_COMMANDS[Solver.K_BREAKET_CLOSE],null),
new Menu(Solver.C_COMMANDS[Solver.K_ANS],null),
new Menu(Solver.C_COMMANDS[Solver.K_X],null),
new Menu(Solver.C_COMMANDS[Solver.K_Y],null),
new Menu("pow",
new Menu[] {
new Menu(Solver.C_COMMANDS[Solver.K_POWER],null),
new Menu(Solver.C_COMMANDS[Solver.K_SQRT],null),
new Menu(Solver.C_COMMANDS[Solver.K_LOG10],null),
new Menu(Solver.C_COMMANDS[Solver.K_LOG2],null),
new Menu(Solver.C_COMMANDS[Solver.K_LN],null),
new Menu(Solver.C_COMMANDS[Solver.K_E],null),
new Menu(Solver.C_COMMANDS[Solver.K_ABS],null)
}
),
new Menu("trig",
new Menu[] {
new Menu(Solver.C_COMMANDS[Solver.K_SIN],null),
new Menu(Solver.C_COMMANDS[Solver.K_COS],null),
new Menu(Solver.C_COMMANDS[Solver.K_TAN],null),
new Menu(Solver.C_COMMANDS[Solver.K_ASIN],null),
new Menu(Solver.C_COMMANDS[Solver.K_ACOS],null),
new Menu(Solver.C_COMMANDS[Solver.K_ATAN],null),
new Menu(Solver.C_COMMANDS[Solver.K_PI],null),
new Menu("hyp",
new Menu[] {
new Menu(Solver.C_COMMANDS[Solver.K_SINH],null),
new Menu(Solver.C_COMMANDS[Solver.K_COSH],null),
new Menu(Solver.C_COMMANDS[Solver.K_TANH],null),
new Menu(Solver.C_COMMANDS[Solver.K_ASINH],null),
new Menu(Solver.C_COMMANDS[Solver.K_ACOSH],null),
new Menu(Solver.C_COMMANDS[Solver.K_ATANH],null),
}
)
}
),
new Menu("stat",
new Menu[] {
new Menu(Solver.C_COMMANDS[Solver.K_FAC],null),
new Menu(Solver.C_COMMANDS[Solver.K_PER],null),
new Menu(Solver.C_COMMANDS[Solver.K_COM],null)
}
)
}
),
new Menu(Solver.C_COMMANDS[Solver.K_0],null),
new Menu(Solver.C_COMMANDS[Solver.K_POINT],null)
}
);
current = root;
}
public static void draw(final Graphics g, final int l,
final int t, final int w, final int h){
final int dx = w/3;
final int dy = h/4;
for(int i=0;i<current.items.length;++i){
String s = current.items[i].name;
if((s != null && s.length() > 0)) {
final int x = (i % 3)*dx+l;
final int y = (i / 3)*dy+t;
if(current.items[i].items != null){
g.setColor(0xFFA500);
g.fillRoundRect(x,y,dx-2,dy-2,5,5);
g.setColor(0xFFFFE0);
} else {
g.setColor(0xFFA500);
}
if (!isRoot() || i==9) {
g.drawString(shortCut[i],x+1,y+dy/2,Graphics.BASELINE |Graphics.LEFT);
g.setColor(0x000000);
} else {
g.setColor(0xEEEED0);
}
g.drawRoundRect(x,y,dx-2,dy-2,5,5);
g.drawString(s,x+dx/2,y+dy/2,Graphics.BASELINE |Graphics.HCENTER );
}
}
}
public static boolean changeSelected(final int indx){
selected = null;
if(indx > -1 && indx<current.items.length){
if(current.items[indx].items == null){
selected = current.items[indx].name;
current = root;
} else {
final Menu temp = current;
current = current.items[indx];
current.parent = temp;
}
return true;
}
return false;
}
public static boolean handle(final int x, final int y, final int l,
final int t, final int w, final int h){
final int dx = w/3;
final int dy = h/4;
final int indx = (x-l)/dx+(y-t)/dy*3;
//System.out.println("dx " + (x-l)/dx + " dy " + (y-t)/dy);
//System.out.println("x " + (x-l) + " y " + (y-t));
//System.out.println(" indx " + indx);
return changeSelected(indx);
}
public static boolean handle(final int keyCode){
final int indx;
switch(keyCode){
case Canvas.KEY_NUM1: indx = 0; break;
case Canvas.KEY_NUM2: indx = 1; break;
case Canvas.KEY_NUM3: indx = 2; break;
case Canvas.KEY_NUM4: indx = 3; break;
case Canvas.KEY_NUM5: indx = 4; break;
case Canvas.KEY_NUM6: indx = 5; break;
case Canvas.KEY_NUM7: indx = 6; break;
case Canvas.KEY_NUM8: indx = 7; break;
case Canvas.KEY_NUM9: indx = 8; break;
case Canvas.KEY_STAR: indx = 9; break;
case Canvas.KEY_NUM0: indx = 10; break;
case Canvas.KEY_POUND: indx = 11; break;
default: indx = -1; break;
}
return changeSelected(indx);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -