⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mmitoolkit_timer.c

📁 是一个手机功能的模拟程序
💻 C
📖 第 1 页 / 共 2 页
字号:
{
	if(timer_counter<30)
		timer_counter++;
	else
	{
		Stopplayingdevice();
		timer_flag=FALSE;
		timer_status=TIMER_EDT;
	}
}

void timer_dialog_cb(T_MFW_HND win, USHORT event, UBYTE reason)
{   
	switch(reason)
	{
	case INFO_KCD_F4:
             /* 2004/07/09 sunsj add for forbidden hall off */
		//break;     	  
	default:
		//Stopplayingdevice();  xsf changed 12.31     	  	
		/* 2004/07/12 sunsj fix MI18800000460 if current win is change so we only need to destroy 
		   timer win */
		if(call_data.win_incoming||call_data.win_calling||call_win_flag)
		{
		}
		else
		{
		StopPlayByReasonId(ALARMPLAY);
		}
		timer_flag=FALSE;
		timer_status=TIMER_EDT;
		if(timer_win)
		{
			timerdestroy(timer_win);
		}     	  
		setOuterState(OUTERIDLESTATE_ALERT,0,0);//2004-04-23 Sunny add
		break;
	}
}

/* 2003.10.16 wyj 修改,重写输入检查部分*/
static int timer_kbd_cb (MfwEvt e, MfwKbd *kc)
{
	T_MFW_HND win = mfw_parent(mfw_header());
	T_MFW_WIN     * win_data = ((T_MFW_HDR *)win)->data;
	timer_data* data = (timer_data*)win_data->user; // tida main data
	T_DISPLAY_DATA display_info;
	int flag=1;
	int t;
	
	TRACE_EVENT("timer_kbd_cb");
	
	if(timer_status==TIMER_EDT)
	{
		TRACE_EVENT("timer_status==TIMER_EDT");
		switch(kc->code)
		{
		case KCD_0:
		case KCD_1:
		case KCD_2:
		case KCD_3:
		case KCD_4:
		case KCD_5:
		case KCD_6:
		case KCD_7:
		case KCD_8:
		case KCD_9:
			/* 2003.10.16 wyj 修改,重写输入检查部分*/
			checkTimerNumInput(data, kc->code);
			timer_counter=chartoint((char*)data->timebuffer);
			winShow(win);
			
			break;
			
		case KCD_MNULEFT:
			/* 2003.10.16 wyj 修改,重写输入检查部分*/
			checkTimerLeftInput(data);
			winShow(win);
			break;
			
		case KCD_MNURIGHT:
			/* 2003.10.16 wyj 修改,重写输入检查部分*/
			checkTimerRightInput(data);
			winShow(win);
			break;
		case KCD_LEFT:                               /* select and ok button */
		case KCD_OK:
			TRACE_EVENT("timer:KCD_LEFT");
			if(((((int)data->timebuffer[0]-48)*10+((int)data->timebuffer[1]-48))>=24)||((((int)data->timebuffer[3]-48)*10+((int)data->timebuffer[4]-48))>59)
				||((((int)data->timebuffer[6]-48)*10+((int)data->timebuffer[7]-48))>59))
			{
				memset((char*)data->timebuffer,0,sizeof(data->timebuffer));
				sprintf(data->timebuffer,"00:00:00");
				data->index=0;
				dialog_info_init(&display_info);   		  
				display_info.TextId2     =TxtInputError;          
				display_info.Time       = FOREVER;
				display_info.iconindex = REMIND_NORECORD;
				
				display_info.Callback     = (T_VOID_FUNC)NULL;//timer_memo_dialog_cb;
															  /*
															  * Call Info Screen
				*/
				info_dialog(data->win, &display_info);
				break;	
			}	
			
			data->LeftKey=TRUE;
			strcpy(timer_string,data->timebuffer);
			timer_counter=chartoint((char*)data->timebuffer);
			timer_flag=TRUE;
			timer_status=TIMER_COUNT;
			iconsSetState(iconIdTimer);
			SEND_EVENT(win, timer_status, 0, 0);				
			break;
		case KCD_RIGHT:                                /* back to previous menu */
		case KCD_HUP:
			TRACE_EVENT("KCD_RIGHT");
			//tim_stop(timer_Hnd);
			//iconsDeleteState(iconIdTimer);
			//tim_delete(timer_Hnd);
			//timer_Hnd=NULL;
			timerdestroy(timer_win);
            break;			
		default:
			break;			
		}
		winShow(win);
	}
    else if(timer_status==TIMER_COUNT)
	{
		TRACE_EVENT("timer_status==TIMER_COUNT");
		switch(kc->code)
		{
		case KCD_LEFT: 
		case KCD_OK:
			TRACE_EVENT("KCD_LEFT");
			timer_counter=0;			
			if(timer_flag)
			{
				timer_flag=FALSE;
				tim_stop(timer_Hnd);
				//tim_delete(timer_Hnd);
				timer_start=FALSE;
				//timer_Hnd=NULL;
				iconsDeleteState(iconIdTimer);
			}
			dialog_info_init(&display_info);//gdy add  
			display_info.TextId = TxtTimer;
			display_info.TextId2     =TxtCancelled;
			display_info.TextId      = '\0';
			display_info.Time       = FOREVER;
			display_info.iconindex= REMIND_NORECORD;
			
			display_info.Callback     = (T_VOID_FUNC)NULL;//timer_memo_dialog_cb;
														  /*
														  * Call Info Screen
			*/
			info_dialog(data->win, &display_info);
			
			data->index=0;
			timer_flag=FALSE;
			timer_status=TIMER_EDT;
			SEND_EVENT(data->win, TIMER_EDT, 0, 0);
			//else
			//	{
			//	 timer_flag=TRUE;
			//	}
  		        //winShow(win);  		    
			break;
  		    case KCD_RIGHT:  
			case KCD_HUP:
				TRACE_EVENT("data->LeftKey=TRUE"); 
				//if(!timer_flag)
				//iconsDeleteState(iconIdTimer);
				//timer_status=TIMER_EDT;  		    	
				timerdestroy(timer_win);  			    
				break;
			default:
				break;
		}
		
	}    
    //
    return MFW_EVENT_CONSUMED;    
}


static int chartoint(char* str)
{
    int result=0,number=0;

    TRACE_EVENT("char to int");
    
/* get the number of seconds*/
    number=(int)str[1]-48+((int)str[0]-48)*10;
    result=result+number*3600;
    number=0;
    /*get the number of munites and turn it into seconds*/

     number=(int)str[4]-48+((int)str[3]-48)*10;
    result=result+number*60;
    number=0;
    /*get the number of hours and turn it into seconds*/

    number=(int)str[7]-48+((int)str[6]-48)*10;
    result=result+number;

    return result;
    
}

void timerdestroy (T_MFW_HND own_window)
{
	T_MFW_WIN     * win  = ((T_MFW_HDR *)own_window)->data;
	timer_data* data   = (timer_data*)win->user;
	
	TRACE_EVENT ("timerdestroy()");
	
	timer_win=NULL;
	if (own_window)
	{
    /*
	* Delete WIN Handler
		*/
		
		
		win_delete (own_window);
		/*
		* Free Memory
		*/
		FREE_MEMORY ((void *)data, sizeof (timer_data));
	}
}

/*void trace_timer()
{
  MfwTim *prev, *curr;
  int i=0;

  TRACE_EVENT("trace_timer");

  if (!timRoot)
    {       
       TraceInt(i);
       return;
    }  
  prev = timRoot;
  curr = timRoot->next;
  while (curr)
    {
        i++;
        prev = curr;
        curr = curr->next;
    }
  TraceInt(i);  
}*/


void drawSolidRectangle(int x1,int y1,int x2,int y2,int type,int fillcolor,int color)
{
	game_Line line;
	game_Rectangle rectangle;
	int old_color;
	
	if(type==1)
	{
		dspl_Clear(x1, y1, x2, y2);
		
		rectangle.x1=x1;
		rectangle.y1=y1;
		rectangle.x2=x2;
		rectangle.y2=y2;
		rectangle.fillcolor=fillcolor;
		rectangle.color=fillcolor;
		DrawRectagle(rectangle); 
		
		line.x1=x1;
		line.y1=y1;
		line.x2=x1;
		line.y2=y2;
		line.color=fillcolor;
		DrawLine(line);
		
		line.x1=x1;
		line.y1=y1-1;
		line.x2=x2;
		line.y2=y1-1;
		line.color=color;
		DrawLine(line);
		
		line.x1=x1-1;
		line.y1=y1;
		line.x2=x1-1;
		line.y2=y2;
		line.color=color;
		DrawLine(line);
		
		line.x1=x1;
		line.y1=y2+1;
		line.x2=x2;
		line.y2=y2+1;
		line.color=color;
		DrawLine(line);
		
		line.x1=x2+1;
		line.y1=y1;
		line.x2=x2+1;
		line.y2=y2;
		line.color=color;
		DrawLine(line);      
	}
	else if(type==0)
	{
		old_color=dspl_GetBkgColor();
		dspl_SetBkgColor(fillcolor);
		dspl_Clear(x1, y1, x2+1, y2+1);
		dspl_SetBkgColor(old_color);
		/*rectangle.x1=x1;
		rectangle.x2=x2;
		rectangle.y1=y1;
		rectangle.y2=y2;
		rectangle.color=0x0000ff;  	  
		rectangle.fillcolor=0x0000ff;
		DrawRectagle(rectangle);*/
		line.x1=x1+1;
		line.y1=y2+1;
		line.x2=x2;
		line.y2=y2+1;
		line.color=color;
		DrawLine(line); 
		line.x1=x2+1;
		line.y1=y1+1;
		line.x2=x2+1;
		line.y2=y2;
		line.color=color;
		DrawLine(line); 
	}
	else if(type==2)
	{
		old_color=dspl_GetBkgColor();
		dspl_SetBkgColor(fillcolor);//0x77ECB1
		dspl_Clear(x1, y1, x2+1, y2+1);
		dspl_SetBkgColor(old_color);
		line.x1=x1+1;
		line.y1=y2+1;
		line.x2=x2-1;
		line.y2=y2+1;
		line.color=color;//0x006400
		DrawLine(line); 
		line.x1=x2+1;
		line.y1=y1+1;
		line.x2=x2+1;
		line.y2=y2-1;
		line.color=color;
		DrawLine(line); 
	}
	else if(type==3)
	{
		rectangle.x1=x1;
		rectangle.y1=y1;
		rectangle.x2=x2;
		rectangle.y2=y2;
		rectangle.fillcolor=fillcolor;
		rectangle.color=fillcolor;
		DrawRectagle(rectangle);  
		line.x1=x1;
		line.y1=y1;
		line.x2=x1;
		line.y2=y2;
		line.color=color;
		DrawLine(line);
		line.x1=x1;
		line.y1=y1-1;
		line.x2=x2;
		line.y2=y1-1;
		line.color=color;
		DrawLine(line);
		line.x1=x1-1;
		line.y1=y1;
		line.x2=x1-1;
		line.y2=y2;
		line.color=color;
		DrawLine(line);  
		line.x1=x1;
		line.y1=y2+1;
		line.x2=x2;
		line.y2=y2+1;
		line.color=color;
		DrawLine(line);
		line.x1=x2+1;
		line.y1=y1;
		line.x2=x2+1;
		line.y2=y2;
		line.color=color;
		DrawLine(line);
	}
}
/**********************************************************************************
* Function Name         : checkTimerNumInput
* Function Description  : 改写定时器时间设置的数字键处理函数,使之不接受错误输入
*
* Parameters		    : timer_data *data        	     I/O
*						: U8 keynum						 I
*
* Return	            : void
*
* Author   Name         : Wu Yajun
* Date			        : 2002.10.16
* History:  Date        :
*           Author      :
*           Modify      : 
***********************************************************************************/
static void	checkTimerNumInput(timer_data *data, U8 keynum)
{
	/* 检查输入的数子,保证小时分钟秒钟没有越界 */
	switch(data->index)
	{
	case 0:									//小时十位
		if(keynum > 2)
			return;

		//data->timer_data格式hh:mm:ss
		data->timebuffer[data->index++] = '0' + keynum;
		break;

	case 1:									//小时个位
		if( (data->timebuffer[data->index-1]=='2') && (keynum>3) )
				return;
		
		data->timebuffer[data->index++] = '0' + keynum;
		data->index++;
		break;

	case 3:									//分钟十位
	case 6:									//秒钟十位
		if(keynum > 5)
			return;
		data->timebuffer[data->index++] = '0' + keynum;
		break;

	case 4:									//分钟个位
		data->timebuffer[data->index++] = '0' + keynum;
		data->index++;
		break;								

	case 7:									//秒钟个位
		data->timebuffer[data->index++] = '0' + keynum;
		data->index = 0;
		break;

	default:
		break;
	}
}

/**********************************************************************************
* Function Name         : checkTimerLeftInput
* Function Description  : 改写定时器时间设置的菜单左键处理函数,使之不接受错误输入
*
* Parameters		    : timer_data *data        	     I/O
*
* Return	            : void
*
* Author   Name         : Wu Yajun
* Date			        : 2002.10.16
* History:  Date        :
*           Author      :
*           Modify      : 
***********************************************************************************/
static void	checkTimerLeftInput(timer_data *data)
{
int  h;

	/* 不需要检查,光标左移 */
	switch(data->index)						
	{
	case 1:
	case 4:
	case 7:
		data->index--;
		return;
	}
	
	/* 检查小时 */
	h = (data->timebuffer[0]-48)*10 + (data->timebuffer[1]-48);
	if(h > 23)
		return;

	
	/* 检查分钟 */
	h = (data->timebuffer[3]-48)*10 + (data->timebuffer[4]-48);
	if(h>59)
		return;

	/* 检查秒钟 */
	h = (data->timebuffer[6]-48)*10 + (data->timebuffer[7]-48);
	if(h>59)
		return;


	/* 输入正确,则修改index,光标下移 */
	switch(data->index)
	{
	case 3:
	case 6:
		data->index -= 2;
		break;

	case 0:
		data->index = 7;
		break;

	default:
		break;
	}
}



/**********************************************************************************
* Function Name         : checkTimerRightInput
* Function Description  : 改写时间设置的菜单右键处理函数,使之不接受错误输入
*
* Parameters		    : timer_data *data        	     I/O
*
* Return	            : void
*
* Author   Name         : Wu Yajun
* Date			        : 2002.10.14
* History:  Date        :
*           Author      :
*           Modify      : 
***********************************************************************************/

static void	checkTimerRightInput(timer_data *data)
{
int h;

	/* 不需要检查,光标右移 */
	switch(data->index)	
	{
	case 0:
	case 3:
	case 6:
		data->index++;
		return;
	}
	
	/* 检查小时 */
	h = (data->timebuffer[0]-48)*10+ (data->timebuffer[1]-48);
	if(h > 23)
		return;

	
	/* 检查分钟 */
	h = (data->timebuffer[3]-48)*10 + (data->timebuffer[4]-48);
	if(h>59)
		return;

	/* 检查秒钟 */
	h = (data->timebuffer[6]-48)*10 + (data->timebuffer[7]-48);
	if(h>59)
		return;
	
	/* 输入正确,则修改index,光标下移 */
	switch(data->index)
	{
	case 1:
	case 4:
		data->index += 2;
		break;

	case 7:
		data->index = 0;
		break;

	default:
		break;
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -