📄 sweekscreen.c
字号:
/**
* File Name : SweekScreen.c
* Created : 07/04/12
* Author : ZhongNingLin@neusoft.com
* Model : 05YOP
* Description : [[CN]] 此文件的职责是: [[CN]]
**/
#include "sweekscreen.h"
/**************************************************************************
* Function Name : CWeekWin_New
* Description : This function constructs weekly window.
* Input Parameters : Schedule*
* Output Parameters: None
* Return Value : IWindow *
* Date : 2007/04/11
* Author : ZhongNingLin@neusoft.com
***************************************************************************/
IWindow * CWeekWin_New(Schedule * pOwner)
{
CWeekWin * pMe;
VTBL(IWindow) vtbl;
IDateCtl *dateCtl = NULL;
SH_IWINDOW_SETVTBL(&vtbl, CWeekWin_Enable, CWeekWin_Redraw, CWeekWin_HandleEvent, CWeekWin_Delete);
pMe = (CWeekWin *)CWindow_New(sizeof(CWeekWin), pOwner, &vtbl);
if(NULL == pMe)
{
return FALSE;
}
/*初始化日期*/
if( (ISHELL_CreateInstance (pMe->m_pIShell,AEECLSID_DATECTL,(void * *)&dateCtl)) == SUCCESS )
{
IDATECTL_SetDate(dateCtl,pMe->m_pOwner->m_year,pMe->m_pOwner->m_month,pMe->m_pOwner->m_day);
/*得到日期的星期值*/
pMe->dayOfweek = IDATECTL_GetDayOfWeek(dateCtl);
/*释放资源*/
ReleaseObj( (void **)&dateCtl);
}
/*初始化菜单*/
if((ISHELL_CreateInstance
(
pOwner->a.m_pIShell,
AEECLSID_MENUCTL,
(void**)(&pMe->m_pMenuCtl)
) != SUCCESS)
)
return FALSE;
/*初始化目录矩形变量*/
SETAEERECT( &pMe->rectMenu, 0, 35, pOwner->m_width,pOwner->m_height-50 );
/*初始化星期目录*/
SWeekInitMenu(pMe);
pMe->m_year = pMe->m_pOwner->m_year;
pMe->m_month = pMe->m_pOwner->m_month;
pMe->m_day = pMe->m_pOwner->m_day;
/*当前月的天数*/
pMe->m_days = ScheWeek_getMonthDays(pMe->m_pOwner->m_year ,pMe->m_month);
/*返回窗体接口*/
return (IWindow *)pMe;
}
/**************************************************************************
* Function Name : CWeekWin_Delete
* Description : 释放资源
* Input Parameters : IWindow*
* Output Parameters: None
* Return Value : None
* Date : 2007/04/12
* Author : ZhongNingLin@neusoft.com
***************************************************************************/
void SWeekInitMenu(CWeekWin* pme)
{
/*设置菜单外观属性*/
SH_SetMenuAttr(
pme->m_pMenuCtl,
AEECLSID_MENUCTL,
MAKE_RGB(255,0,0),
&pme->rectMenu,
MP_MAXSOFTKEYITEMS
);
/*向菜单中添加目录*/
ScheWeek_addItemToMenu(pme ,(uint8)(pme->dayOfweek +1));
/*设置菜单的属性*/
IMENUCTL_SetProperties(pme->m_pMenuCtl,MP_WRAPSCROLL);
}
/**************************************************************************
* Function Name : CWeekWin_Delete
* Description : 释放资源
* Input Parameters : IWindow*
* Output Parameters: None
* Return Value : None
* Date : 2007/04/12
* Author : ZhongNingLin@neusoft.com
***************************************************************************/
void CWeekWin_Delete(IWindow * po)
{
CWeekWin * pme = (CWeekWin *)po;
/*reset the date of main*/
{
pme->m_pOwner->m_year = pme->m_year;
pme->m_pOwner->m_month = pme->m_month;
pme->m_pOwner->m_day = pme->m_day;
}
/*free menuCtl*/
ReleaseObj( (void **)&pme->m_pMenuCtl);
FREEIF(pme);
}
/**************************************************************************
* Function Name : CWeekWin_Enable
* Description : enable current window
* Input Parameters : IWindow * po, boolean bEnable
* Output Parameters: None
* Return Value : None
* Date : 2007/04/12
* Author : ZhongNingLin@neusoft.com
***************************************************************************/
void CWeekWin_Enable(IWindow * po, boolean bEnable)
{
CWeekWin * pme = (CWeekWin *)po;
if (!CWindow_ProcessEnable(po, bEnable))
return;
/*判断当前窗口是否为激活状态*/
if (!pme->m_bActive)
{
return;
}
}
/**************************************************************************
* Function Name : CWeekWin_Redraw
* Description : This function redraws the menu window.
* Input Parameters : IWindow*
* Output Parameters: None
* Return Value : None
* Date : 2007/04/12
* Author : ZhongNingLin@neusoft.com
***************************************************************************/
void CWeekWin_Redraw(IWindow * po)
{
CWeekWin * pme = (CWeekWin *)po;
if (!pme->m_bActive)
return;
IDISPLAY_ClearScreen(pme->m_pIDisplay);
IMENUCTL_SetActive(pme->m_pMenuCtl,TRUE);
IMENUCTL_Redraw(pme->m_pMenuCtl);
/*绘制日期*/
ScheWeek_DrawDate(pme);
/*绘制头图象*/
SH_DRAWHEADER(pme);
/*draw the button on bottom of screen*/
ScheWeek_drawButton(pme);
IDISPLAY_Update(pme->m_pIDisplay);
}
/**************************************************************************
* Function Name : CWeekWin_HandleEvent
* Description : handle current window events
* Input Parameters : IWindow * , AEEEvent , uint16 , uint32
* Output Parameters: None
* Return Value : boolean
* Date : 2007/04/12
* Author : ZhongNingLin@neusoft.com
***************************************************************************/
boolean CWeekWin_HandleEvent(IWindow * po, AEEEvent eCode, uint16 wParam, uint32 dwParam)
{
CWeekWin * pme = (CWeekWin *)po;
IMENUCTL_HandleEvent(pme->m_pMenuCtl, eCode, wParam, dwParam);
/*process the clr_key events*/
if (SH_ISCLR(eCode) )
{
/*back to main window*/
Schedule_SetWindow(pme->m_pOwner, APP_MAIN_WIN, 0);
return TRUE;
}
/*process the key events*/
if (SH_ISEVTKEY(eCode))
{
switch(eCode)
{
case EVT_KEY:
switch(wParam)
{
case AVK_UP:
ScheWeek_updateScreen(pme ,UP);
break;
case AVK_DOWN:
ScheWeek_updateScreen(pme ,DOWN);
break;
case AVK_SOFT1:
//APP_STATE_MENUDISP date select /event view /event creat
Schedule_SetWindow(pme->m_pOwner, APP_STATE_MENUDISP, 0);
return TRUE;
case AVK_SOFT2:
/*back to main window*/
Schedule_SetWindow(pme->m_pOwner, APP_MAIN_WIN, 0);
return TRUE;
case AVK_SELECT:
/*back to oneday event window*/
Schedule_SetWindow(pme->m_pOwner, APP_STATE_ONEDAYDISP, 0);
return TRUE;
default:
break;
}//end of switch( wParam )
default:
return FALSE;
}//end of switch( eCode )
}// end of if SH_ISEVTKEY(eCode)
return FALSE;
}
/**************************************************************************
* Function Name : ScheWeek_updateScreen
* Description : update the weekly screen
* Input Parameters : CWeekWin* ,uint8
* Output Parameters: None
* Return Value : boolean
* Date : 2007/04/12
* Author : ZhongNingLin@neusoft.com
***************************************************************************/
void ScheWeek_updateScreen(CWeekWin* pme ,uint8 direction)
{
uint8 day = pme->m_day;
uint8 month = pme->m_month;
uint8 days = ScheWeek_getMonthDays(pme->m_pOwner->m_year,pme->m_month);
uint16 year = pme->m_year;
switch(direction)
{
case UP:
if( (day - 1) < 1)/*判断是否是这个月的第一天*/
{
if( (month - 1) < 1)/*判断是否是这一年的第一个月*/
{
pme->m_month = 12;
pme->m_day = 31;
pme->m_year -= 1;
}
else
{
pme->m_month -= 1;
/*这个月的天数*/
pme->m_day = ScheWeek_getMonthDays(pme->m_pOwner->m_year,pme->m_month);
}
}
else
pme->m_day -= 1;
break;
case DOWN:
if( (day + 1) > days)
{
if( (month + 1) > 12)
{
pme->m_month = 1;
pme->m_day = 1;
pme->m_year += 1;
}
else
{
pme->m_month += 1;
pme->m_day = 1;
}
}
else
pme->m_day += 1;
break;
}
ScheWeek_DrawDate(pme);
}
/**************************************************************************
* Function Name : ScheWeek_addItemToMenu(CWeekWin* pme ,uint8 week)
* Description : handle current window events
* Input Parameters : IWindow * , AEEEvent , uint16 , uint32
* Output Parameters: None
* Return Value : boolean
* Date : 2007/04/12
* Author : ZhongNingLin@neusoft.com
***************************************************************************/
void ScheWeek_addItemToMenu(CWeekWin* pme ,uint8 week)
{
uint8 weekDay = 1;
uint8 weekDayT = 1;
for(weekDay = week; weekDay <= 7; weekDay++)
{
SH_AddMenuItem(pme->m_pMenuCtl, weekDay, NULL, weekDay, weekDay,0);
}
for(weekDayT = 1; weekDayT < week; weekDayT++)
{
SH_AddMenuItem(pme->m_pMenuCtl, weekDayT, NULL, weekDayT, weekDayT,0);
}
}
/**************************************************************************
* Function Name : ScheWeek_drawButton
* Description : draw the button on bottom of screen
* Input Parameters : CWeekWin* pMe
* Output Parameters: None
* Return Value : boolean
* Date : 2007/04/12
* Author : ZhongNingLin@neusoft.com
***************************************************************************/
void ScheWeek_drawButton(CWeekWin* pMe)
{
AEERect rect;
const AECHAR switchT[] = { 0x6d4f, 0x89c8, 0 }; //浏览
const AECHAR option[] = { 0x64cd, 0x4f5c, 0 }; //操作
/*字符宽度*/
int fontWi = 0;
int fontHe = 0;
fontWi = IDISPLAY_MeasureText( pMe->m_pIDisplay, AEE_FONT_NORMAL, switchT );
/*文字的高度*/
fontHe = IDISPLAY_GetFontMetrics( pMe->m_pIDisplay,AEE_FONT_NORMAL,NULL,NULL );
SETAEERECT( &rect, 0, pMe->m_pOwner->DeviceInfo.cyScreen - fontHe, pMe->m_pOwner->DeviceInfo.cxScreen,fontHe);
/*填充矩形的颜色*/
IDISPLAY_FillRect(pMe->m_pIDisplay,&rect,RECT_BACKGROUND);
IDISPLAY_DrawText(pMe->m_pIDisplay,AEE_FONT_NORMAL,option,-1,0,
pMe->m_pOwner->DeviceInfo.cyScreen-15,NULL,IDF_TEXT_TRANSPARENT);
IDISPLAY_DrawText(pMe->m_pIDisplay,AEE_FONT_NORMAL,switchT,-1,
pMe->m_pOwner->DeviceInfo.cxScreen-fontWi,
pMe->m_pOwner->DeviceInfo.cyScreen-15,NULL,IDF_TEXT_TRANSPARENT);
}
/**************************************************************************
* Function Name : ScheWeekDateDisp_DrawCusor
* Description : handle current window events
* Input Parameters : CWeekWin *
* Output Parameters: None
* Return Value : boolean
* Date : 2007/04/12
* Author : ZhongNingLin@neusoft.com
***************************************************************************/
void ScheWeek_DrawDate(CWeekWin* pMe)
{
AECHAR space[4]={' ','\0'};
AECHAR sYear[10]={' ','\0'};
AECHAR sMonth[10]={' ','\0'};
AECHAR sDay[10]={' ','\0'};
AECHAR sDate[30] = {' ','\0'};
AEERect rect;
int fontHe = 0;
int fontWi = 0;
WWRITELONG(sYear, pMe->m_year);
STRTOWSTR("-",space,4);
WWRITELONG(sMonth, pMe->m_month);
WWRITELONG(sDay,pMe->m_day);
WSTRCAT(sDate,sYear);
WSTRCAT(sDate,space);
WSTRCAT(sDate,sMonth);
WSTRCAT(sDate,space);
WSTRCAT(sDate,sDay);
/*字体的高度*/
fontHe = IDISPLAY_GetFontMetrics( pMe->m_pIDisplay,AEE_FONT_NORMAL,NULL,NULL );
fontWi = IDISPLAY_MeasureText( pMe->m_pIDisplay, AEE_FONT_NORMAL, sDate );
rect.x = 0;
rect.y = 20;
rect.dx = pMe->m_pOwner->DeviceInfo.cxScreen;
rect.dy = fontHe;
/*填充矩形的颜色*/
IDISPLAY_FillRect(pMe->m_pIDisplay,&rect,RECT_BACKGROUND);
//AEE_FONT_BOLD+1
IDISPLAY_DrawText(pMe->m_pIDisplay,AEE_FONT_NORMAL,sDate,-1,rect.dx/2 - fontWi/2,20,NULL,IDF_TEXT_TRANSPARENT);
}
/**************************************************************************
* Function Name : ReleaseObj
* Description : 释放资源
* Input Parameters : void ***
* Output Parameters: None
* Return Value : None
* Date : 2007/04/11
* Author : ZhongNingLin@neusoft.com
***************************************************************************/
void ReleaseObj(void ** ppObj)
{
if ( ppObj && *ppObj )
{
(void)IBASE_Release(((IBase *)*ppObj));
*ppObj = NULL;
}
}
/**************************************************************************
* Function Name : ScheWeek_getMonthDays
* Description : 计算指定的月有几天
* Input Parameters : uint8
* Output Parameters: None
* Return Value : uint8
* Date : 2007/04/11
* Author : ZhongNingLin@neusoft.com
***************************************************************************/
uint8 ScheWeek_getMonthDays(uint16 year,uint8 month)
{
uint8 monthDays = 0;
if(month < 1 || month > 12)
return monthDays;
if(month == 2)
{
/*判断闰年*/
if( year % 4 == 0 && year % 100 != 0 || year % 400 == 0 )
monthDays = 29;
else
monthDays = 28;
return monthDays;
}
else if(month % 2 != 0)
monthDays = 31;
else monthDays = 30;
return monthDays;
}
//------------------end of file---------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -