package com.ui.menu;
import java.util.Vector;
import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Graphics;
import com.CONST;
public class Menu {
public static int itemWidth=80;
public static int itemHeigth=20;
public boolean isShow= false;
private Canvas canvas;
private Vector vector;
private int selectedIndex;
private ParentItem pItem=null;
public Menu(Canvas canvas){
vector= new Vector();
this.canvas=canvas;
}
public void addItem(Item i){
this.vector.addElement(i);
this.setSelectedIndex();
}
/* 菜单的绘制事件
* */
public void paint(Graphics g,int x,int y){
this.init(g);
if (this.isShow){
((Item)vector.elementAt(this.selectedIndex)).setIsActivity(true);
int oldC = g.getColor();
g.setColor(0xffffff);
g.fillRect(0, canvas.getHeight()-Menu.itemHeigth, Menu.itemWidth, Menu.itemHeigth);
g.setColor(oldC);
paintItems(g,x,y);
}
}
private void init(Graphics g){
g.setColor(CONST.DEFAULTFONTCOLOR);
g.drawLine(0,canvas.getHeight()-20, canvas.getWidth(),canvas.getHeight()-20 );
g.drawRect(0,canvas.getHeight()-20, 80, 20);
}
/* 绘制菜单选项items的函数
* @g 画笔*/
private void paintItems(Graphics g,int x ,int y) {
g.setColor(CONST.BACKCOLOR);
g.fillRect(0,canvas.getHeight()-Menu.itemHeigth, Menu.itemWidth,Menu.itemHeigth);
g.setColor(CONST.DEFAULTFONTCOLOR);
g.drawRect(0,canvas.getHeight()-Menu.itemHeigth, Menu.itemWidth,Menu.itemHeigth);
g.drawString("选择",
Menu.itemWidth/2,canvas.getHeight()-20,
Graphics.TOP|Graphics.HCENTER);
int itemX,itemY;
for (int i=0;i< vector.size();i++){
itemX=x;
itemY=y-Menu.itemHeigth*(i+1);
((Item) vector.elementAt(i)).paint(g,itemX,itemY);
}
}
/* 获得item的方法
* */
public Item getItem(int selected){
return ((Item)(vector.elementAt(selected)));
}
//菜单响应按键事件
public void action(int key,int action){
if(pItem!=null&&pItem.getSubMenu().isShow){ // 如果子菜单是存在的,则把事件向下传递
pItem.getSubMenu().action(key, action);
}
else if(action==Canvas.LEFT){
if (this.isShow){
this.close();
}
}
else if(action==Canvas.RIGHT){//选中的项有二级菜单,点击右导航键
this.rightKeyAction();
}
else if(action == Canvas.UP){
this.upKeyAction();
}
else if(action==Canvas.DOWN){
this.downKeyAction();
}
else if(action==Canvas.FIRE){
this.fireKeyAction(key,action);
}
else if (key==CONST.RIGHTSOFTKEY){
this.isShow=true;
for (int i=0;i<vector.size();i++){
((Item)vector.elementAt(i)).setIsActivity(false);
}
((Item)vector.elementAt(this.selectedIndex)).setIsActivity(true);
}
else if (key==CONST.LEFTSOFTKEY){
this.isShow=false;
for (int i=0;i<vector.size();i++){
((Item)vector.elementAt(i)).setIsActivity(false);
}
this.close();
}
canvas.repaint();
}
/* 点击向上的按键响应的事件
* */
private void upKeyAction(){
/* 把前一个选项设置为没有选中
* 把后一个选项设置为选中状态
* */
if(this.isShow){
((Item)vector.elementAt(this.selectedIndex)).setIsActivity(false);
this.selectedIndex++;
if (this.selectedIndex==vector.size())
this.selectedIndex=0;
((Item)vector.elementAt(this.selectedIndex)).setIsActivity(true);
}
}
/* 点击向下的按键响应的事件
* */
private void downKeyAction(){
/* 把前一个选项设置为没有选中
* 把后一个选项设置为选中状态
* */
if(this.isShow){
((Item)vector.elementAt(this.selectedIndex)).setIsActivity(false);
this.selectedIndex--;
if (this.selectedIndex<0)
this.selectedIndex=vector.size()-1;
((Item)vector.elementAt(this.selectedIndex)).setIsActivity(true);
}
}
/* 点击向右的按键响应的事件
* */
private void rightKeyAction(){
if(this.isShow){
if (((Item)vector.elementAt(this.selectedIndex))instanceof ParentItem&&
this.isShow){
// 若当前选中的项为parentItem类型的
pItem=((ParentItem)vector.elementAt(this.selectedIndex));
pItem.getSubMenu().setIsShow(true);
}
}
}
/* 点击确认按键响应的事件
* */
private void fireKeyAction(int key,int action){
//((Item)vector.elementAt(this.selectedIndex)).onAction(key, action);
if (this.isShow){
if (pItem!= null && pItem.getSubMenu().isShow){
pItem.getSubMenu().action(key, action);
}
else{
((Item)vector.elementAt(this.selectedIndex)).onAction(key, action);
}
}
}
public void setIsShow(boolean isShow) {
this.isShow=isShow;
}
private void setSelectedIndex() {
((Item)vector.elementAt(this.selectedIndex)).setIsActivity(false);
this.selectedIndex = vector.size()-1;
}
protected void close(){
this.isShow=false;
this.setSelectedIndex();
}
}