📄 ebook.c
字号:
OSTimeDly(1);
if(EBookTaskVars->ChildWin[1])
{
SCROLLBAR_SetNumItems(EBookTaskVars->ChildWin[1],EBookTaskVars->maxsel);
SCROLLBAR_SetValue(EBookTaskVars->ChildWin[1],EBookTaskVars->sel);
}
}
bool EBook_IsBookEnd(book_vars *EBookTaskVars)
{
if( (EBookTaskVars->page +1 ) > ( api_GetFileLength(EBookTaskVars->infomation.FifoCntNo) / 512 ) )
return TRUE;
return FALSE;
}
void EBook_ShowCurPage(book_vars *EBookTaskVars)
{
EBook_ReadCurPage(EBookTaskVars);
EBook_ResetBookWin(EBookTaskVars);
}
void EBook_ReadCurPage(book_vars *EBookTaskVars)
{
int data;
if(api_SeekFile(EBookTaskVars->infomation.FifoCntNo, SEEK_SET, EBookTaskVars->page * 512) >= 0)
{
data = api_ReadFile(EBookTaskVars->infomation.FifoCntNo, &EBookTaskVars->bookbuffer[EBookTaskVars->bufferstart], 512);
EBookTaskVars->bookbuffer[EBookTaskVars->bufferstart + data] = 0;
}
}
void EBook_ReadNextPage(book_vars *EBookTaskVars)
{
int i;
int length;
if(EBook_IsBookEnd(EBookTaskVars))
return;
EBookTaskVars->page++;
length = strlen(&EBookTaskVars->bookbuffer[EBookTaskVars->bufferstart + EBookTaskVars->bufferstart_save]);
for(i=0;i<length;i++)
{
EBookTaskVars->bookbuffer[254-i] = EBookTaskVars->bookbuffer[EBookTaskVars->bufferstart + EBookTaskVars->bufferstart_save+length-i-1];
}
EBookTaskVars->bufferstart = 255;
EBook_ReadCurPage(EBookTaskVars);
EBookTaskVars->bufferstart = 255 - length;
}
void EBook_ReadPrevPage(book_vars *EBookTaskVars)
{
if(EBookTaskVars->page == 0)
return;
EBookTaskVars->page--;
if(EBookTaskVars->page - 1 >=0)
{
EBookTaskVars->bufferstart_save = EBookTaskVars->bufferstart - 512;
EBookTaskVars->bufferstart = 255;
EBook_ReadCurPage(EBookTaskVars);
memcpy(&EBookTaskVars->bookbuffer[0],&EBookTaskVars->bookbuffer[514],254);
}
EBookTaskVars->bufferstart = 255;
EBook_ReadCurPage(EBookTaskVars);
EBookTaskVars->bufferstart = 255;
}
void cbCallBack_EBookReadWindow(WM_MESSAGE* pMsg)
{
GUI_RECT rClient;
book_vars *EBookTaskVars = (book_vars *)OSGetTaskOwnPtr(EBOOK_FACE_ID);
msg_t msg;
switch (pMsg->MsgId)
{
case WM_PAINT:
if(EBookTaskVars->getmaxselflag)
{
EBookTaskVars->getmaxselflag = FALSE;
EBookTaskVars->maxsel = GetMaxSelForTask(&EBookTaskVars->bookbuffer[EBookTaskVars->bufferstart],80);
EBook_ShowBookUnlock();
break;
}
GUI_SetBkColor(GUI_BLUE);
GUI_Clear();
GUI_GetClientRect(&rClient);
EBookTaskVars->bufferstart_save = GetDisplayStringForGui(&EBookTaskVars->bookbuffer[EBookTaskVars->bufferstart],EBookTaskVars->bookshow,EBookTaskVars->sel,80);
if(EBookTaskVars->maxsel ==0)
EBookTaskVars->maxsel = GetMaxSelForTask(&EBookTaskVars->bookbuffer[EBookTaskVars->bufferstart],80);
EBook_ShowBookUnlock();
GUI_DispStringInRect(EBookTaskVars->bookshow, &rClient, GUI_TA_LEFT | GUI_TA_TOP);
break;
case WM_KEY:
cbCallBack_KeyResolve(pMsg);
break;
}
WM_DefaultProc(pMsg);
}
void cbCallBack_EBookLISTWindow(WM_MESSAGE* pMsg)
{
switch (pMsg->MsgId)
{
case WM_KEY:
cbCallBack_KeyResolve(pMsg);
break;
}
}
void cbCallBack_KeyResolve(WM_MESSAGE* pMsg)
{
msg_t msg;
switch(((WM_KEY_INFO*)(pMsg->Data.p))->PressedCnt)
{
case 0:
msg.type = MSG_KEY;
msg.msg.data[0] = ((WM_KEY_INFO*)(pMsg->Data.p))->Key | GUI_Key_Up;
MYOSQPost(GUIToEBookWindow,&msg);
return;
case 1:
msg.type = MSG_KEY;
msg.msg.data[0] = ((WM_KEY_INFO*)(pMsg->Data.p))->Key | GUI_Key_Down;
MYOSQPost(GUIToEBookWindow,&msg);
return;
case 2:
msg.type = MSG_KEY;
msg.msg.data[0] = ((WM_KEY_INFO*)(pMsg->Data.p))->Key | GUI_Key_Long;
MYOSQPost(GUIToEBookWindow,&msg);
break;
case 3:
msg.type = MSG_KEY;
msg.msg.data[0] = ((WM_KEY_INFO*)(pMsg->Data.p))->Key | GUI_Key_Hold;
MYOSQPost(GUIToEBookWindow,&msg);
return;
case 4:
System_DealMessage(pMsg);
return;
}
}
void EBook_CreateFrameWindow(book_vars *EBookTaskVars)
{
EBookTaskVars->FrameWin = FRAMEWIN_Create((char*)EBookTaskVars->point[1], 0, WM_CF_SHOW, 0, 0, 96, 64);
FRAMEWIN_SetFont(EBookTaskVars->FrameWin, &GUI_Font16B_ASCII);
FRAMEWIN_SetTextColor(EBookTaskVars->FrameWin, GUI_RED);
FRAMEWIN_SetBarColor(EBookTaskVars->FrameWin, 0, GUI_GREEN);
FRAMEWIN_SetTextAlign(EBookTaskVars->FrameWin, GUI_TA_HCENTER);
FRAMEWIN_SetActive(EBookTaskVars->FrameWin, 0);
}
void EBook_CreateBookWindow(book_vars *EBookTaskVars)
{
int result;
EBookTaskVars->page = 0;
EBookTaskVars->sel = 0;
EBookTaskVars->maxsel = 0;
EBookTaskVars->getmaxselflag = 0;
EBookTaskVars->bufferstart_save = 0;
EBookTaskVars->bufferstart=255;
api_GetFileNameByNo(EBookTaskVars->infomation.FifoCntNo, EBookTaskVars->infomation.FileLongName, EBookTaskVars->infomation.fileno);
result = api_OpenFileByNo(EBookTaskVars->infomation.FifoCntNo, EBookTaskVars->infomation.fileno);
if( result < 0)
{
return;
}
EBookTaskVars->infomation.fileflag = TRUE;
EBook_ReadCurPage(EBookTaskVars);
GetBookFilePartName(EBookTaskVars);
FRAMEWIN_SetText(EBookTaskVars->FrameWin, EBookTaskVars->infomation.FileLongName);
EBookTaskVars->ChildWin[0] = WM_CreateWindowAsChild(0,0,81,45,EBookTaskVars->FrameWin,WM_CF_SHOW,&cbCallBack_EBookReadWindow,0);
for(;EBookTaskVars->maxsel == 0;)
OSTimeDly(1);
EBookTaskVars->ChildWin[1] = SCROLLBAR_Create(81,0,8,45,EBookTaskVars->FrameWin,0,WM_CF_SHOW,SCROLLBAR_CF_VERTICAL | SCROLLBAR_CF_FOCUSSABLE);
SCROLLBAR_SetNumItems(EBookTaskVars->ChildWin[1],EBookTaskVars->maxsel);
SCROLLBAR_SetPageSize(EBookTaskVars->ChildWin[1],1);
EBookTaskVars->CurWinSel = 0;
WM_SetFocus(EBookTaskVars->ChildWin[0]);
}
void EBook_DeleteBookWindow(book_vars *EBookTaskVars)
{
if(EBookTaskVars->ChildWin[0] != 0)
{
EBookTaskVars->CurWinSel = 2;
WM_SetFocus(EBookTaskVars->ChildWin[2]);
if(EBookTaskVars->infomation.fileflag == TRUE)
{
api_CloseFile(EBookTaskVars->infomation.FifoCntNo);
EBookTaskVars->infomation.fileflag == FALSE;
}
WM_DeleteWindow(EBookTaskVars->ChildWin[0]);
WM_DeleteWindow(EBookTaskVars->ChildWin[1]);
EBookTaskVars->ChildWin[0] = 0;
}
}
void EBook_CreateListWindow(book_vars *EBookTaskVars)
{
EBook_CreateFrameWindow(EBookTaskVars);
EBookTaskVars->ChildWin[2] = LISTBOX_CreateAsChild((GUI_ConstString *)EBookTaskVars->point[0], EBookTaskVars->FrameWin, 0,0,90,45,cbCallBack_EBookLISTWindow, WM_CF_SHOW);
LISTBOX_SetBackColor(EBookTaskVars->ChildWin[2], 0, GUI_BLUE);
LISTBOX_SetBackColor(EBookTaskVars->ChildWin[2], 1, GUI_LIGHTBLUE);
LISTBOX_SetTextColor(EBookTaskVars->ChildWin[2], 0, GUI_WHITE);
LISTBOX_SetTextColor(EBookTaskVars->ChildWin[2], 1, GUI_BLACK);
LISTBOX_SetFont(EBookTaskVars->ChildWin[2], &GUI_Font13B_1);
EBookTaskVars->CurWinSel = 2;
WM_SetFocus(EBookTaskVars->ChildWin[2]);
}
void EBook_DeleteListWindow(book_vars *EBookTaskVars)
{
WM_DeleteWindow(EBookTaskVars->ChildWin[2]);
}
int GetMaxSelForTask(const char * src,int xlength)
{
int i,j,k =0,m,n=0;
for(i=j=m=0; src[m] != 0; j++,m++)
{
if(src[m]==0x0D && src[m+1]==0x0A)
{
m++;
j--;
continue;
}
if(src[m] == ' ')
k = j;
i += GUI_GetCharDistX(src[m]);
if(i>xlength)
{
if(k==0)
{
m -= 3;
j--;
}
else
{
m -= j - k;
j = k;
}
n++;
k=0;
i=0;
}
}
return n;
}
int GetDisplayStringForGui(const char * src,char *dst,int sel,int xlength)
{
int i=0,j=0,k=0,m=0,n=0,c=0;
for(; src[m] != 0 && j < MAXCHARNUM; j++,m++)
{
if(src[m]==0x0D && src[m+1]==0x0A)
{
m++;
j--;
continue;
}
dst[j]= src[m];
if(src[m] == ' ')
k = j;
i += GUI_GetCharDistX(src[m]);
if(i>xlength)
{
if(k==0)
{
m -= 3;
j--;
dst[j-1]='-';
dst[j] ='\n';
}
else
{
dst[k]='\n';
m -= j - k;
j = k;
}
if(n++ < sel)
{
j = -1;
}
else if(c == 0)
{
c=m+1;
}
k=0;
i=0;
}
}
if(j == MAXCHARNUM)
dst[MAXCHARNUM - 1] = 0;
else
dst[j]= src[m];
return c;
}
void EBookTaskCreate()
{
//IF MUSICTASK IS NOT EXIST THEN
if(!EBookTaskDetect())
{
OS_ENTER_CRITICAL();
#ifdef WIN32
CREATE_TASK(&aTCB[1], "EBookMenu", EBook_Task, 5, Stack_1);
#else
OSTaskCreate((void(*)(void *))(long)EBook_Task, (void *)0x0000,
(void *)EBOOK_FACE_SPACE, EBOOK_FACE_PRIO, EBOOK_FACE_ID);
#endif
OS_EXIT_CRITICAL();
}
//ELSE THEN DO NOTHING
else
{
msg_t msg;
msg.type = MSG_REBUILDWIN;
MYOSQPost(GUIToEBookWindow,&msg);
}
}
void EBookTaskDelete()
{
#ifndef WIN32
EBook_SemExit();
OSTaskDel(OS_PRIO_SELF);
#endif
}
bool EBookTaskDetect()
{
#ifndef WIN32
OS_ENTER_CRITICAL();
if(OSTCBPrioTbl[EBOOK_FACE_PRIO] != (OS_TCB *)0)
{
OS_EXIT_CRITICAL();
return TRUE;
}
OS_EXIT_CRITICAL();
return FALSE;
#else
if(!EBookTaskExistFlag)
{
EBookTaskExistFlag = TRUE;
return FALSE;
}
return TRUE;
#endif
}
void GetBookFilePartName(book_vars *EBookTaskVars)
{
EBookTaskVars->infomation.FileLongName[12] = EBookTaskVars->page/100 +'0';
EBookTaskVars->infomation.FileLongName[12 + (EBookTaskVars->page/100 > 0)] = EBookTaskVars->page%100/10 +'0';
EBookTaskVars->infomation.FileLongName[12 + (EBookTaskVars->page/10 > 0)+(EBookTaskVars->page/100 > 0)] = EBookTaskVars->page%10 +'0';
EBookTaskVars->infomation.FileLongName[12 + (EBookTaskVars->page/10 > 0)+(EBookTaskVars->page/100 > 0) +1] = 0;
}
void EBook_SemInit(msg_t *msg_list)
{
if(ShowBookSem == 0)
{
ShowBookSem = OSSemCreate(1);
}
GUIToEBookWindow = (OS_EVENT*)MYOSQCreate(msg_list,10);
}
void EBook_ShowBookUnlock()
{
OSSemPost(ShowBookSem);
}
void EBook_ShowBookLock()
{
INT8U err;
OSSemPend(ShowBookSem, 0, &err);
}
void EBook_SemExit()
{
INT8U err;
GUIToEBookWindow = MYOSQDel(GUIToEBookWindow, OS_DEL_ALWAYS, &err);
ShowBookSem = OSSemDel (ShowBookSem, OS_DEL_ALWAYS, &err);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -