/*
UI��������ڴ��ļ���ʵ��
*/
#include "includes.h"
/********************************UI״̬����¼��������*************************/
UI_STACKDEF uiStack;
UI_STACKDEF *getStackStruct(void){return &uiStack;}

static void uiStackInit(void){
	memset((unsigned char *)&uiStack, 0, sizeof(uiStack));
	uiStack.ok_back=0;
	uiStack.top=-1;//-1
	uiStack.FastUiChange=0;
	uiStack.ESCflag=0;
}
short uiPushStack(unsigned char data){
	if(uiStack.top==4) return 1;
	//MSG_INFO(1,"push queque ----data==%d----\r\n",data);
	uiStack.top ++;
	uiStack.sta[uiStack.top]=data;
	return 0;
}
short uiPullStack(void){
	unsigned char tmp;

	if(uiStack.top<0) return -1;
	else{
		tmp=uiStack.sta[uiStack.top];
		uiStack.top--;
	//MSG_INFO(1,"pull queque ----tmp==%d----\r\n",tmp);
		return tmp;
	}
}


/********************************UI״̬�л�����*********************************/
UI_STATUSDEF sutUIstatus;
void uISetNextStatus(unsigned char status){
	sutUIstatus.LastStatus=sutUIstatus.NextStatus;
	sutUIstatus.NextStatus=status;
}
void uiDataInit(void){
	memset((unsigned char *)&sutUIstatus, 0, sizeof(UI_STATUSDEF));
	uISetNextStatus(UIS_STANDBY);
}
void uiLoop(unsigned int exeInterval){
	char StatusUpdate=0;
	if(sutUIstatus.Status!=sutUIstatus.NextStatus){
		sutUIstatus.LastStatus=sutUIstatus.Status;
		sutUIstatus.Status=sutUIstatus.NextStatus;
		sutUIstatus.ItemRefresh=1;
		StatusUpdate=1;
	}
	if(sutApp.forceUiFlash!=0){
		StatusUpdate=1;
		sutApp.forceUiFlash=0;
	}
	uiShowStatusBar(StatusUpdate,exeInterval);
	switch(sutUIstatus.Status){
		/***********0��:����������ʾ���*************/
		case UIS_STANDBY:
			uiStackInit();
			uiShowMainInterface(StatusUpdate,exeInterval);
			break;
		/***********1��:���˵�������ʾ���*************/
		case UIS_MENU_MAIN:
			uiShowMenuMain(StatusUpdate);
			break;
		/***********1.1��:Ⱥ��ѡ�������ʾ���*************/
	    case UIS_MENU_GROUP_SEL:
			uiShowGUSel(StatusUpdate,exeInterval,0);
			break;
		/***********1.2��:��Աѡ�������ʾ���*************/
		case UIS_MENU_USER_SEL:
			uiShowGUSel(StatusUpdate,exeInterval,1);
			break;
		/***********1.3��:�ı���Ϣ������ʾ���*************/
		case UIS_MENU_MAIL_SEL:
			uiShowMailBox(StatusUpdate);
			break;
		/***********1.4��:ϵͳ���ý�����ʾ���*************/
		case UIS_MENU_SYS_SEL:
			uiShowMenuSysSetup(StatusUpdate);
			break;
		/***********1.5��:��λ���ý�����ʾ���*************/
		case UIS_MENU_LOCATION_SEL:
			uiShowMenuLocationSel(StatusUpdate);
			break;
		/***********1.6��:�ն���Ϣ������ʾ���*************/
	    case UIS_MENU_INFO_SEL:
			uiShowInformation(StatusUpdate);
			break;
		
		/****************1.3.1�ı���Ϣ�˵�-��Ϣ��������ʾ���*/
		case UIS_MENU_MAIL_READ:
			MessageReadShow(StatusUpdate);
			break;
		/****************1.3.2�ı���Ϣ�˵�-��Ϣѡ�������ʾ���*/
		case UIS_MENU_MAIL_OPTION:
			MessageOptionShow(StatusUpdate);
			break;
		/****************1.3.2.1�ı���Ϣ�˵�-��Ϣɾ��������ʾ���*/
		case UIS_MENU_MAIL_DEL:
			MessageDeletShow(StatusUpdate);
			break;
		/****************1.3.2.2�ı���Ϣ�˵�-��Ϣ��ʽ��������ʾ���*/
		case UIS_MENU_MAIL_FORMAT:
			MessageFormatShow(StatusUpdate);
			break;
			
		/***********1.4.1��:ϵͳ����-LCD���ý�����ʾ���*************/
		case UIS_MENU_SYS_LCD:
			uiShowLcdSel(StatusUpdate);
			break;
		/***********1.4.2��:ϵͳ����-�������ý�����ʾ���*************/
		case UIS_MENU_SYS_NET:
			uiShowNetSel(StatusUpdate);
			break;
		/***********1.4.3��:ϵͳ����-�����ý�����ʾ���*************/
		case UIS_MENU_SYS_SIM:
			uiShowSimSel(StatusUpdate);
			break;
		/***********1.4.4��:ϵͳ����-�������ý�����ʾ���*************/
		case UIS_MENU_SYS_PWR:
			uiShowPwrSel(StatusUpdate);
			break;
		/***********1.4.5.1��:ϵͳ����-�������������ý�����ʾ���*************/
		case UIS_MENU_SYS_SERVERPASS:
			uiShowServerPassSel(StatusUpdate);
			break;
		/***********1.4.5.2��:ϵͳ����-���������ý�����ʾ���*************/
		case UIS_MENU_SYS_SERVER:
			uiShowServerSel(StatusUpdate);
			break;
		/***********1.4.6��:ϵͳ����-�汾���ý�����ʾ���*************/
		case UIS_MENU_SYS_VERSION:
			uiShowVersionSel(StatusUpdate);
			break;
		/***********1.4.7��:ϵͳ����-��ʾ�����ý�����ʾ���*****************/
		case UIS_MENU_SYS_NOTE:
			uiShowNoteSel(StatusUpdate);
			break;
		case UIS_MENU_SYS_MICCU:
			uiShowMiccugainUISel(StatusUpdate);
			break;
		case UIS_MENU_SYS_MICXI:
			uiShowMiccugainUISel(StatusUpdate);
			break;
		case UIS_MENU_SYS_PLAT:
			uiShowPingTaiSel(StatusUpdate);
			break;
		case UIS_MENU_SYS_VOICEQC:
			uiShowVoiceSel(StatusUpdate);
			break;

	}
}
/********************************UI��Ӧ����********************************/
void uiResponse(unsigned int exeInterval){
	unsigned short key;
	if(0 != sutApp.gtTMode) return;
    if(!isKeyPress()) return;
	switch(sutUIstatus.Status){
		/****************0��:����������Ӧ******************/
		case UIS_STANDBY:
			switch(getKeyValue()){
				case MKEY_VALUE_MENU:		
					uISetNextStatus(UIS_MENU_MAIN);
					break;
				case MKEY_VALUE_ESC:
					if(sutPocStatus.danHuStatus!=0) msgAtSend("AT+POC=0A000000000000\r\n");
					break;
			}	
			break;
		/****************1��:���˵�������Ӧ***************/
		case UIS_MENU_MAIN:
			MenuMainResponse();
			break;
		/****************1.1��:Ⱥ��ѡ�������Ӧ*************/
       	case UIS_MENU_GROUP_SEL:
			GroupSelResponse();
			break;
		/****************1.2��:��Աѡ�������Ӧ*************/
		case UIS_MENU_USER_SEL:
			UserSelResponse();
			break;
		/****************1.3��:�ı���Ϣ������Ӧ*************/
		case UIS_MENU_MAIL_SEL:
			MessageResponse();
			break;
		/****************1.4��:ϵͳ���ý�����Ӧ*/
		case UIS_MENU_SYS_SEL:
			sysTemSetResponse();
			break;
		/****************1.5��:��λ���ý�����Ӧ*/
		case UIS_MENU_LOCATION_SEL:
			loationSetResponse();
			break;
		/****************1.6��:�ն���Ϣ������Ӧ*/
		case UIS_MENU_INFO_SEL:
			uiShowInformationResponse();
			break;
	
		/****************1.3.1�ı���Ϣ�˵�-��Ϣ����Ӧ*/
		case UIS_MENU_MAIL_READ:
			MessageReadResponse();
			break;
		/****************1.3.2�ı���Ϣ�˵�-��Ϣѡ����Ӧ*/
		case UIS_MENU_MAIL_OPTION:
			MessageOptionResponse();
			break;
		/****************1.3.2.1�ı���Ϣ�˵�-��Ϣɾ����Ӧ*/
		case UIS_MENU_MAIL_DEL:
			MessageDeletResponse();
			break;
		/****************1.3.2.2�ı���Ϣ�˵�-��Ϣ��ʽ����Ӧ*/
		case UIS_MENU_MAIL_FORMAT:
			MessageFormatResponse();
			break;
		
		/****************1.4.1ϵͳ�����Ӳ˵�-LCD������Ӧ*/
		case UIS_MENU_SYS_LCD:
			uiShowLcdSelResponse();
			break;
		/****************1.4.2ϵͳ�����Ӳ˵�-����������Ӧ*/
		case UIS_MENU_SYS_NET:
			uiShowNetSelResponse();
			break;
		/****************1.4.3ϵͳ�����Ӳ˵�-��������Ӧ*/
		case UIS_MENU_SYS_SIM:
			uiShowSimSelResponse();
			break;
		/****************1.4.4ϵͳ�����Ӳ˵�-����������Ӧ*/
		case UIS_MENU_SYS_PWR:
			uiShowPwrSelResponse();
			break;
		/****************1.4.5.1ϵͳ�����Ӳ˵�-����������������Ӧ*/
		case UIS_MENU_SYS_SERVERPASS:
			uiShowServerSelPassResponse();
			break;
		/****************1.4.5.2ϵͳ�����Ӳ˵�-������������Ӧ*/
		case UIS_MENU_SYS_SERVER:
			uiShowServerSelResponse();
			break;
		/****************1.4.6ϵͳ�����Ӳ˵�-�汾������Ӧ*/
		case UIS_MENU_SYS_VERSION:
			uiShowVersionSelResponse();
			break;
		/****************1.4.7ϵͳ�����Ӳ˵�-��ʾ��������Ӧ*/
		case UIS_MENU_SYS_NOTE:
			uiShowNoteSelResponse();
			break;
		case UIS_MENU_SYS_MICCU:
			uiShowMicCuSelResponse();
		    break;
		case UIS_MENU_SYS_MICXI:
			uiShowMicCuSelResponse();
			break;
		case UIS_MENU_SYS_PLAT:
			uiShowPingTaiSelResponse();
			break;
		case UIS_MENU_SYS_VOICEQC:
			uiShowVoiceSelResponse();
			break;
			
	}
		if(getKeyValue()==MKEY_VALUE_ESC)uiStack.ESCflag=1;
		else uiStack.ESCflag=0;
}

/**********************����ͨ�ýӿ�***********************************/
void uiMenuShowBottomLine(void){
	guiDrawHLine(0,GLCD_WIDTH-1,UI_BOTTOM_LINE_Y,1,COLOR_STATUS_BAR);
}

void uiMenuShowBottomIndacitor(const char *infoLF, const char *infoRI){
	short x,y;
	unsigned short len;
	
	y=UI_NOTE_LOCATION_Y;
	
	guiClearRect(0,y, GLCD_WIDTH-1, GLCD_HEIGHT-1,guiGetBackColor());
	if(NULL != infoLF){
		x=2;
		guiShowStr(x, y,infoLF, FONT_MODE_12X12, REVERSED_NO,COLOR_STATUS_BAR,guiGetBackColor());
	}
	if(NULL != infoRI){
		len=strlen(infoRI)*8;
		x=GLCD_WIDTH-1-len;
		guiShowStr(x, y,infoRI, FONT_MODE_12X12, REVERSED_NO,COLOR_STATUS_BAR,guiGetBackColor());
	}
}